应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

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

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

马蓉花费1500万移民澳洲开启新生活!来看马蓉和王宝强的全过头条创作挑战赛昨天说到网传宋喆已经出狱后回农村养猪,马蓉却花费巨额人民币移民澳洲,整容得年轻靓丽,在澳洲过着衣食无忧的生活。这两人,有罪有应得,也有无地自容。(前情……好奇宝宝来报到!又见熊孩子被卡,这次竟是来源:中国消防小孩天性好奇,体型又小且往往无法察觉身边潜伏的危险被卡事件时有发生中山消防近日就接到了小孩卡手的警情好奇宝宝手指被卡父母着急求……扎实做好青年稳就业工作扶青每年的3月、4月素有金三银四之称,在全国各地,春季的人才招聘高峰期已然到来,青年人就业成为社会各界关注的热点。不久前,一条讨论外卖小哥本科率的网络消息引起热议,……试管婴儿为什么我取到十几颗卵子,却只配成几个胚胎?对试管的姐妹们来说,最不愿意听到的就是,辛辛苦苦促排取到的卵子,经过实验室培养,却只剩下三两个胚胎。这种过大的损耗带来的后果,可能是周期以失败告终。那么,为什么会出现这种情况呢……足协公布第二批完成债务清欠俱乐部陕西长安竞技在列西部网讯(记者贺桐)今天(3月20日)傍晚,中国足协公布第二批完成债务清欠俱乐部,陕西长安竞技在列。经过三天公示期后,西北狼将有望获得新赛季职业联赛的准入资格。此前,陕西……数据传输检错技术CRCCRC简介数据在传输过程中可能会因为传输介质故障或外界的干扰而产生比特差错(使原来的0变为1,原来的1变为0),从而导致接收方接收到错误的数据。为尽量提高接收方收到数据的……怀孕2个月胎儿有多大,孕妈有哪些反应?怀孕2个月是怀孕的第58周,此时胎儿在母体内的大小约为胎芽(即胚胎)的大小。在怀孕的前4周,胚胎在宫腔内分裂成各种器官,这个阶段被称为胚胎期。从第5周开始,胚胎进入胚胎晚期,身……西湖科创杯研究生大赛总决赛在西湖圆满举办AI如何赋能城市未来发展?2023年3月18日19日,西湖科创杯第八届中国研究生智慧城市技术与创意设计大赛在杭州西湖圆满举行。大赛围绕智慧城市主题,回答了这一问题。本次大……曲靖马龙区金点子破题一区两地今年春节假期,马龙区旅游接待游客135589人次,旅游综合收入9071。35万元,较去年春节假日分别增长102。65和13。01,旅游发展再激新活力,休闲康旅目的地发展定位初显……人类在什么时候褪去全身毛发?又为什么在一些特殊部位保留?地球上有数百万个物种,人类算是其中的佼佼者,我们在各方面都体现得与众不同,按照目前的主流观点,地球上37亿年的生命演化史,只有人类发展出智慧文明,仅仅靠着聪明的大脑壳用了几十万……广州夫妇一次买超70万元黄金金价猛涨!创一年新高3月17日国际金价显著上涨,截至上周收盘,纽约金主连涨至2009。8美元盎司,创一年新高。这轮黄金上涨的动力主要源自硅谷等银行出现的危机和地缘政治继续紧张,共同导致市场避险情绪……乘坐火车高铁忘记带身份证怎么办?教你一招,打开手机一分钟搞定首先需要我们在手机上下载一款软件:铁路12306这款软件是官方提供的,大家可以放心使用。下图中红色圆框内的图标就是下载完成后,桌面显示的图标,点击打开安装完成后,打开这个……
斯卡洛尼希望继续执教阿根廷目标是为阿根廷赢得更多荣誉近日,斯卡洛尼荣膺IFFHS2022年度世界最佳国家队教练奖。在接受《科贝电台》采访时斯卡洛尼表示:我还想继续执教国家队,为阿根廷赢得更多荣誉是我追求的目标。参与该……2022年全国重点城市全年房价走势,一线城市和三四线城市差别财经新势力新春季从整体来看,一线城市二手房价整体高于新房,这是由于二手房主要集中在核心城区,新房一般新建在边缘城区;三四线城市二手房与新房价差较小,部分旅游城市新房价格会……梅县区入选2022中国最美县域榜单梅县区人民广场。南方日报记者何森垚摄在日前举行的第十八届中国(深圳)国际文化产业博览交易会上,发布了2022中国最美县域榜单,全国共有102个县(市、区)入选。其中,梅县……关于时间的谚语(1)1、今日事,今日毕。2、瞎子走路,不分日夜。3、清晨不起早,误一天的事;幼年不勤学,误一生的事。4、时间就是生命,时间就是速度,时间就是力量。5、时间检……我们只知道了宇宙中5或4的能量谢尔顿ampampamp王贻芳1月5日,顶科论坛抖音合作节目《硬核知识局》第二期《平行宇宙真的存在吗?》在世界顶尖科学家论坛抖音官方账号上线。90岁的诺奖得主谢尔顿李格拉肖(SheldonLeeGlasho……国家统计局2021年婴儿出生人口1062万人2016年以来中国新生儿出生率连续下跌。国家统计局发布2021年中国经济数据,全年出生人口1062万人。2016年的新生儿出生率为13。57,直到2021年新生儿出生率为7。5……就在今晚,三连降!根据国家发改委消息,新一轮成品油调价窗口将于今天(12月19日)24时开启。据国家发改委价格监测中心监测,本轮成品油调价周期内(12月5日12月16日)国际油价继续大幅下降。平……860元一颗的安宫牛黄丸,真的是急救神药?3类人要慎用提起安宫牛黄丸,很多人一定不会陌生。坊间传言,安宫牛黄丸是急救神药,一颗就能起死回生。就在前不久还有读者在后台咨询我说,到了冬季家里老人有心脑血管疾病,想买点安宫牛黄丸,……何超莲与内地男友被传已经分手网民凭一举动推测二人热情减却何超莲现时31岁。何超莲是已故赌王的三房千金何超莲样子甜美,是不少男士心目中的女神。何超莲不时就会在个人社交网分享靓相。何超莲不时就会在个人社交网分享靓……中概股退市警报解除?官方回应审计底稿之争对特定数据进行了专门21世纪经济报道记者王俊北京报道当地时间12月15日上午,美国公众公司会计监督委员会(PCAOB)发布报告,确认2022年度可以对中国内地和香港会计师事务所完成检查和调查……人到中年,有些亲戚就不要来往了苏岑说:不必把太多人请进生命里。若他们走进不了你内心,就只会把你的生命搅扰得拥挤不堪。或许,生活中,我们总是特别注重情谊,特别是亲情,更让我们难以割舍。在我们……埃弗拉谈梅罗之争争论永远存在,有人认为欧洲杯比世界杯更难直播吧12月18日讯梅西率领的阿根廷和法国的世界杯决赛即将上演,曼联名宿埃弗拉谈到梅西和梅罗之争。埃弗拉:我不认为梅西得赢得世界杯才能成为最伟大的球员。争论将永远存在。看……
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网