范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

4000字教你如何创建一个基于Redis构建微服务的反应式架构

  如何使用 Redis 的特性来生成反应式数据流?
  Redis 是我遇到的最强大、最通用的技术之一。可悲的是,大多数人只知道它是因为它是一个很好的缓存解决方案。我们需要解决这个问题。
  特别是,我想向您展示您可以创建一个以 Redis 作为主要组件的反应式架构。这是一个巨大的优势,特别是如果您由于其他要求(即好的 ol"cache)已经将它作为基础架构的一部分。
  您使用 Redis 与我将在此处描述的功能进行交互的方式取决于您,老实说,此时任何选项都与下一个选项一样有效。我倾向于使用 Node.js,但这就是我,你可以自由使用最适合你的东西。
  构建反应式架构
  这里首先要了解什么是反应式架构,为什么我们要构建一个而不是采用更传统的方法?
  简而言之,反应式架构是在满足所有前提条件的那一刻开始执行每一位逻辑的架构——我想我应该在"简单"这个词周围加上引号。
  让我换一种说法:当您需要在特定事件发生后触发逻辑时,您有两种选择:定期检查某种标志,直到它打开,这意味着事件发生了。坐等,直到其他东西通知您的服务该事件已触发。
  第二部分是面向对象编程中观察者模式的关键。观察到的对象让对其内部状态感兴趣的每个人都知道,它实际上已更新。
  我们在这里尝试做的是将相同的 OOP 模式外推到架构级设计中。因此,与其在我们的程序中加入一些逻辑,我说的是一旦正确的事件发生,就会触发服务的功能。
  这是分发和扩展平台的最有效方式,因为:
  您不必浪费时间和网络流量轮询特定标志的数据源(或您认为应该轮询的任何内容)。此外,如果您使用的是按使用付费的基础架构,则不需要的轮询可能会导致额外费用,在目标服务上进行不必要的工作,并且如果在您的代码等待轮询期间发生多个事件,您可能最终不得不聚合事件.您可以通过添加新服务、并行工作和尽可能快地捕获事件来扩展服务的处理能力。平台更稳定。通过被动工作,您可以确保您的服务以最佳速度运行,而不必担心由于来自客户端的数据过载而崩溃。
  反应式平台本质上是异步的,因此任何尝试使用它们的客户端应用程序也需要适应相同的范例。外部 API 可能是通过 HTTP 实现的 REST,但这并不意味着您将获得作为响应的答案,相反,您将获得一个200 OK响应,这意味着您的请求已被接收。为了让您的应用程序获得实际结果,它必须订阅将包含此类响应的特定事件。
  请记住这一点,否则,您将花费很长时间来调试为什么没有得到您想要的响应。
  那我们需要什么?
  撇开这一点,我们需要什么才能使我们的平台/架构成为反应式平台/架构?它不是 ReactJS,这是肯定的。我们需要一个消息代理,它可以集中多个服务之间的消息分发。
  有了可以充当代理的东西,我们需要确保我们的代码的编写方式可以通过让代理知道它在哪里以及它需要的事件类型来订阅某些事件。
  之后,将向我们的服务发送通知,并触发我们的逻辑。
  听起来很简单吧?那是因为它就是!
  那么 Redis 是如何考虑的呢?
  Redis 不仅仅是一个键值内存存储,事实上,它有 3 个我喜欢它的特性,允许我根据不同的预期行为创建反应式架构。
  这3个特点是:发布/订阅。Redis 内部有一个消息队列,它允许我们发送消息并将它们分发给每个订阅的进程。这是一种即发即弃的合约,这意味着如果没有监听器处于活动状态,那么消息就会丢失。所以在使用这个频道时要考虑到这一点。键空间(KeySpace)通知。可能是我最喜欢的 Redis 功能。这些坏男孩是由 Redis 本身创建的事件,并分发给决定订阅它们的每个进程。它们与键空间的变化有关,这意味着您存储在其中的数据发生的任何事情。例如,当您删除或更新密钥时,或者当其 TTL 计数器达到 0 时自动删除。这允许您生成定时事件。在"某事"发生 3 天后,您是否必须触发一些逻辑?这是如何。Redis 流。这是 Redis 数据类型的混合体,混合了键空间通知和发布/订阅,所有这些组合在一起并且运行良好。Streams 尝试模拟tail -f命令在您的终端上的行为。如果您从未见过该命令,那么这是一个 *nix 命令,它显示文件的最后一行,并持续监听文件的更改,以便在您添加新行时,它会立即列出。流也会发生同样的情况。考虑到正确的用例,它们非常强大且非常有用。您可以在此处阅读有关它们的更多信息。
  所有这些功能都允许您以一种或另一种方式与您的流程进行通信,并且根据您所追求的行为类型,您可能想要解决其中一个或全部。
  让我们快速浏览一些示例,让您了解使用什么以及何时使用。
  经典的基于事件的消息传递
  最简单的例子是每个微服务都在等待某事发生。要触发的事件,该事件可能来自外部,即系统的用户或客户端。
  看上图,把中央的红管看成是Redis的Pub/Sub或者Blocking list,这是一个更可靠的Pub/Sub的自定义实现。
  流程从 #1 开始,由"客户端应用程序"提交请求,并在 9 点结束,"客户端应用程序"收到有关响应的通知。其余的部分?我不在乎,客户端应用程序也不应该在乎。
  这是这种范式的优点之一,该架构成为客户端的黑匣子。单个请求可以触发数百个事件或仅触发一个,行为将是相同的:一旦响应准备就绪,它将被传递给客户端。而不是客户端知道需要多长时间或多久需要检查它是否准备好。这些都不重要。
  请记住以下注意事项:消息由其订阅者发布到"通道"中。如果您想发布不同类型的主题,建议您拥有不同的频道。此外,如果您需要额外的粒度来区分哪个消费者必须负责处理一条特定的消息,则详细信息将需要成为消息的一部分。这是因为一个频道的所有订阅者都将获得相同的消息,因此如果您有多个进程侦听并获得相同的消息,您最终可能会重新执行相同的操作。可以在 Redis 中使用消息的 ID 实现一个标志(例如),以确保创建它的第一个进程是负责处理事件的进程,而其余进程可以忽略它。这是一种可靠的方法,因为在 Redis 中设置密钥是一个原子过程,如果没有订阅者收听某个特定频道,则发布的消息将丢失。如果您使用 Pub/Sub 模式就是这种情况,因为它在"即发即忘"机制下工作。如果您想确保您的邮件在处理之前一直保留在那里,您可以使用"阻止列表"方法。该解决方案包括直接在 Redis 的键空间上创建一个列表(即一个普通的值列表),并让进程订阅以获取有关该键的键空间通知。这样他们就可以决定如何处理插入的数据(即如果他们想忽略它,处理它并删除它等)。如果您要发送复杂的消息,例如 JSON,则需要对其进行序列化。这是因为对于阻止列表和 Pub/Sub,您唯一可以发送的是字符串。话虽如此,如果您需要在没有序列化的情况下通过线路发送复杂类型,您可以考虑使用 Redis Streams,这是它 们允许的。当然,这里的限制是唯一允许的类型是 Redis,而不是您用来编写解决方案的语言的类型。
  现在让我们看看如果您的事件触发取决于某些时间会发生什么。
  基于时间的触发
  反应式架构的另一个常见行为是能够在预定义的时间过去后触发某些事件。例如:在发现数据问题 10 分钟后触发警报。或者等待 30 分钟,然后触发 IoT 设备已停止发送数据的警报。
  这些通常是与现实世界的限制相关的行为,需要一些时间来解决,或者甚至可以通过"稍等片刻"并重新开始倒计时来解决自己的问题(例如连接不可靠的物联网设备) )。
  对于这种情况,架构保持不变,唯一的区别是中央通信集线器肯定使用来自 Redis的键空间通知。
  您会看到,您需要了解有关 Redis 的两个主要功能才能实现这一目标:设置键值对时,您可以选择以秒为单位定义 TTL(生存时间)。这就变成了倒计时,一旦达到 0,密钥将自动销毁。当您订阅一个键空间时(这也适用于 pub/sub,但我们在这里没有使用它),您可以使用模式进行订阅。换句话说,您可以订阅"last_connection_time_of_device*",而不是订阅键"last_connection_time_of_device100002"的事件。然后,一旦发生某些事情,创建的每个与该模式匹配的密钥都会通知您。
  考虑到这两点,您可以创建订阅这些特定键的服务,并在它们被删除后(即事件被触发时)做出反应。同时,您让生产者不断更新密钥,这也会重置 TTL 计时器。
  因此,如果您正在跟踪设备上次发送其心跳的时间,则可以像我上面显示的那样为每个设备设置一个密钥,并在每次获得新的心跳时更新该密钥。一旦 TTL 结束,这意味着您在配置的时间内没有收到新的心跳。您订阅的进程将只接收密钥名称,因此如果您只需要设备的 ID,您可以像我展示的那样构造您的密钥,并解析名称以捕获所需的信息。
  影键技术
  另一方面,如果您在该键中保存了一个复杂的结构并且需要它,则必须稍微更改此方法。这是因为当 TTL 到期时,密钥将被删除,从而删除其中的数据,因此您无法真正检索它。这时,您可以使用一种称为"阴影键"的技术。
  影子键本质上是用于触发事件的键,但这实际上是在隐藏包含您需要的数据的实际键。回到我们的例子,假设生产者每次收到心跳都会更新 2 个键:"last_connection_time_of_device100002"带有最后从设备接收到的有效负载的unix时间戳。"device_data_id100002"带有来自设备的额外信息。
  在这两个键中,只有第一个也有 TTL,第二个没有。
  因此,当您收到过期通知时,您将从过期密钥 (last_connection_time_of_device100002) 中获取 ID 并使用它来读取第二个密钥的内容。
  然后,如果需要,您也可以继续删除其他密钥,或者将其保留在那里,无论对您的用例是否有效。
  这里需要考虑的唯一警告是,如果您在集群模式下配置了 Redis,则密钥空间通知不会在整个集群中传播。
  这意味着您必须确保您的消费者连接到每个节点。其中一些通知会丢失,否则没有人会收到它们。这是这种技术的唯一缺点,但在您花几天时间调试异步逻辑之前了解它很重要(去过那里,做过)。
  如您所见,两种情况下的复杂性都降低到只需确保您订阅正确的事件或分发渠道。
  例如,如果您要尝试使用普通 SQL 数据库执行此操作,则必须围绕代码创建大量逻辑,以有效确定何时输入新数据或何时删除一条信息。
  相反,这里的所有复杂性都由 Redis 抽象出来,您需要担心的只是编写业务逻辑。那对我来说就是黄金。
  原文:https://www.jdon.com/57489

人生四个阶段,岁月无痕,有诗为证头条创作挑战赛时间如梭,白驹过隙,人生四个阶段,如诗如歌。光阴在荏苒中,如行驶的列车,不等待,不停留。童年时期童年呵!是梦中的真,是真中的梦,是回忆时含泪的微笑。冰心童年时期,对时散文天冷了,想起酒的故事作者面天凉得多了,尤其是一早一晚,太阳不能顾及的地方,不能普照的时候,冷寒明显占了上风头。走得累了,找个台阶猫腰坐一会儿,吸腚的凉,冷气直往上拧,没一根烟的功夫,肚子便哗啦哗啦响了人的惰性是如何养成的?人的惰性带表着无欲无求?还是对现实的一种妥协,甚或是没有了生活目标?这两天本来计划要完成一份手头上的资料,但因为好像不急,就又往后推了。呆在酒店里,处理完琐碎的事情,看到柔软的床铺磨难是一种财宝主题说磨难是一种财宝下面我们一起去看看名人名言黄怒波为我们分享咱们都有一个自己的曩昔,并且咱们这代人的曩昔跟你们不相同,你们没有吃过苦,不会了解今日站在这儿这个人这么矫情,可是由于青未了平平淡淡才是真平平淡淡才是真姜宝兵有一首歌里唱道曾经在幽幽暗暗反反复复中追问,才知道平平淡淡从从容容才是真。歌词虽通俗,道理却深刻。每一年,每一天,我们都会有一个新的开始。每一个新的开始,都始于92班之前的青训小伙,弗格森第一批曼联弟子今何在?尽管弗格森的92班球员在曼联有着辉煌的职业生涯,但他们并不是他的第一批学生。1986年,在接替罗恩阿特金森执教曼联后,弗格森对年轻球员充满着信心,这是他在老特拉福德执教期间一直坚持为什么维金斯的合同比普尔的合同小?库里是关键因素上个赛季,维金斯和普尔用出色的表现帮助勇士队夺冠,庆祝的时候普尔对维金斯说你要赚大钱了。维金斯回复他是我们要赚大钱了。休赛期,他们都得到上亿的续约合同,不过合同的大小却引起不小的争马哈VS大帝?奥马利争冠?预测UFC280之后可能发生的比赛年度最豪华战卡之一的UFC280硝烟散尽,对于观众来说有惊喜也有争议,而对参赛选手来说则是几家欢喜几家愁。在头条主赛中,31岁的马哈切夫在第2回合使用手臂三角绞降服了查尔斯奥利维拉恭喜马尚!合同正式转正,广东宏远大手笔,朱芳雨赌对了马尚布鲁克斯的合同已经转为全额保障CBA新赛季不少球队都在更换外援,比如上海队就裁掉了比斯利,天津队裁掉了汉兰,福建队裁掉了泰瑞斯麦基,现在CBA各大俱乐部为了方便管理外援,合同一72,梅西2球2助踢疯了!7场6球4助,连超C罗,贝利登顶双第一本轮欧冠比赛中大巴黎对阵海法马卡比的比赛也几乎是一场没有悬念的比赛。梅西在比赛第19分钟,就在禁区内冷静地完成了一记抽射打入了比赛的第一球。本场比赛也朝着惨案的方向发展开来了。随后国乒适应场地训练!邱贻可帮孙颖莎捡球,樊振东首日轮空无需登场2022年新乡WTT世界杯决赛将在10月27日拉开大幕,在首个比赛日中,樊振东因为首轮轮空,将无需登场,国乒其余3男5女都将出战。今天上午,全体参赛的国乒队员来到比赛场地进行适应场警惕!直播带货开出百万罚单作者丨诸未静冯心怡编辑丨吴立洋图源丨图虫双十一火热之际,直播电商领域又开出一张大额罚单。近日,上海市徐汇区市场监督管理局对上海清争落网鱼文化传媒有限公司做出行政处罚决定,后者在直播一句话描述今年亏损有多严重网上汇总了各个网友对于今年亏损的金句。jxlzqq不敢大声和老婆说话了。james55120以前觉得基金公司很贴心,每天发基金净值通知现在觉得这公司怎么这么不懂事呢!kevinfe双十一预售开启今年有这些新变化今年双十一,无论是预售付定金阶段还是售卖阶段,都告别了零点,电商平台纷纷改从晚上8点开始,让消费者不用再熬夜。由此,不少网友自嘲自从有了双十一,自己有了很多称呼,从剁手人到吃土人,10月广深车牌竞价出炉,粤A粤B个人牌双降广州方面,10月个人车牌成交最低价为10000元,比上月的17000元低7000元。个人平均价17636元,比上月的18616元低980元。单位车牌方面,粤A牌最低成交价为1860新东方新一季营收跌43,东方甄选拿下22亿GMV,曾奖励董宇辉50万10月26日晚,新东方发布了2023财年第一季度(2022年68月)未经审计的财务业绩。数据显示,该季度,新东方营收7。4亿美元,同比减少了43,显然,双减后K9业务的停止对公司造中央点名发展桂林!国家为何要重点发展桂林?桂林山水甲天下,桂林除了风景秀丽的美景,近些年的发展也可谓突飞猛进。国家为何要大力重点发展桂林?桂林作为国家战略,千亿产业转移不是说说而已的。2020之后桂林进入大国文化复兴潮流,从跨城到入圈买临深楼盘,和14号线距离才是关键有人说,买对一套房,胜过十年忙,买错一套房,十年又白忙。在房地产上扬的普涨年代,买错房子,普涨的周期只要还在,就能补回来,但在当下房地产下行年代,挑错房子,基本上等于弄了一个垃圾股2022最新借条模版来了民间借贷相较于银行贷款,具有流程简单手续简便低门槛周转快随需随借灵活性强等优势,因此很多人选择通过民间借贷的方式进行资金融通。但是民间借贷相比银行贷款,存在利息高风险大等劣势,因此广西首本产业类出口指引发布扩大螺蛳粉海外朋友圈图为发布会现场。刘俊聪摄中新网柳州10月27日电(刘俊聪)这是广西首本产业类的出口指引手册,以帮助柳州螺蛳粉企业了解海外食品市场进口和准入的相关规定,扩大柳州螺蛳粉的海外朋友圈。中十大成功的顶级餐饮老板张勇海底捞创始人从干麻辣烫在四川揭阳起家,因为注重卫生和服务,在当地小有名头。手上有了一些积蓄开始与合伙人走出四川,第一站来到了陕西西安,在大雁塔附近开了第一家海底捞,因为口味不错秋色满城醉美白银不知不觉间铜城的秋色愈发浓郁明艳热烈浪漫多情的景色将人们带入最美的时光漫步在十大公园里湖面映衬着宁静的天空一片落叶一抹阳光一步一景间都流淌着诗意金岭公园的秋色更是色彩丰富层次分明彩
神又封神继当年一步罚球线飞翔扣篮封神之后,乔丹在NBA历史75大又一次封神,历目当年观瞻当下,老小子的永远都是聚光灯下的焦点。左拥右抱,有知道的朋友是哪位女神吗我想静静时久代远,依然都是彼黑钱洗白,白钱洗黑洗钱,洗钱是指将犯罪或其他非法违法行为所获得的违法收入,通过各种手段掩饰隐瞒转化,使其在形式上合法化的行为。这只是狭义上的洗钱,广义上洗钱还包括把合法资金洗黑用于非法用途,即白钱洗晚间悦读丨2022,极简生活的五条法则听过一个很有意思的三七法则一部手机,70的功能都是没有用的一间房子,70的空间都是闲置的。你有没有发现,很多时候我们过得不快乐,是因为我们总在为无关紧要的70疲于奔命,却错过了享受人民日报金句摘录292有志者事竟成,破釜沉舟百二秦关终属楚1。生命只有一次,别光听故事。2。有志者事竟成,破釜沉舟百二秦关终属楚。苦心人天不负,卧薪尝胆三千越甲可吞吴。蒲松龄适用主题心怀志向拼搏奋斗3。也许,不负光阴就是最好的努力,而努力征服里周国权帮吴天省了十三万,为什么后来要两万会被拒绝征服里周国权这个人物,既没有刘华强的狠辣,又没有吴天的精明。但此人圆滑世故,说话办事颇有一套,是个典型的江湖老滑头。他也自以为能在黑白两道之间游刃有余,但在吴天面前,却实实在在的吃25部古装待播剧推荐,来看看有没有你想看的吧第一部玉骨遥。玉骨遥主演是肖战任敏韩栋王楚然等,腾讯视频电视剧,古装剧。简单介绍一下这部剧的故事背景。男主时影人设变化是空桑皇长子九嶷山大神官皇太子摄政王女主朱颜的人设是赤族郡主,四大技术驱动未来农业蓬勃发展联合国17个可持续发展目标中的第二个目标是结束饥饿实现粮食安全改善营养并促进可持续农业的发展,联合国希望2030年实现这一目标。IBM全球农业企业行业领袖萨钦古普塔表示,要实现这一三星发布新款USBC闪存盘最高256GB,可达400MBsIT之家2月22日消息,据Sammobile消息,三星发布了新款USBC接口的闪存盘,可以连接到智能手机平板电脑笔记本电脑和台式电脑,用于数据存储和转移。IT之家了解到,三星新款U微信会成为什么?编辑导语现如今人们使用次数最多的APP当属微信了,微信成为我们生活中最离不开的APP之一,我们基本每天都会用到微信进行社交,它的日活跃用户已经超过10亿了。从微信问世到现在,它的功国库券最新行情国库券(TreasurySecurities)是指国家财政当局为弥补国库收支不平衡而发行的一种政府债券。国库券是1877年由英国经济学家和作家沃尔特巴佐特发明,并首次在英国发行。1当过李佳琦老板的胡海泉,资本之路翻车了?(文观察者网朱琳)曾经横跨歌手创业者投资人三重身份,在三个领域混的风生水起的胡海泉,现在也要从投资行业撤退了。据天眼查App显示,2月10日,海泉基金关联公司北京海纳百泉投资基金管