Kafka是如何解决常见的微服务通信问题的

微服务自成立以来就以不同的方式相互沟通。有些人更喜欢使用HTTP REST API,但这些API有自己的排队问题,而有些则更喜欢较旧的消息队列,比如RabbitMQ,它们带有扩展和操作方面的问题。

以Kafka为中心的架构旨在解决这两个问题。

在本文中,我将解释Apache Kafka如何改进微服务中使用的历史HTTP REST API /消息队列体系结构以及它如何进一步扩展其功能。

两个阵营的故事

我们故事中的第一个阵营是通过直接调用其他服务来处理通信,通常通过HTTP REST API或其他形式的远程过程调用(RPC)。

第二个阵营在借用面向服务的体系结构(SOA)的企业服务总线概念时,使用负责与其他服务进行通信并作为消息队列运行的中介。

这个角色通常是通过使用像RabbitMQ这样的消息代理来完成的。这种通信方式以额外的网络跳跃为代价消除了来自各个服务的大部分通信负担。

微服务使用HTTP REST API

HTTP REST API是在服务之间执行RPC的常用方法。它的主要好处是在开始时简化设置和发送消息的相对效率。

但是,此模型要求其实现者考虑排队以及如果传入请求的数量超过节点容量时该怎么做。例如,如果您假设在超出其容量的服务之前有一长串服务,那么链中的所有前述服务都需要具有相同类型的背压处理来应对该问题。

此外,此模型要求所有单独的HTTP REST API服务都需要高度可用。在由微服务构成的长处理管道中,没有一个微服务能够丢失所有组件部分,只有当来自任何给定组的至少一个进程仍然正常运行时,这才起作用。

这通常需要将负载平衡器放在这些微服务的前面。此外,服务发现通常是必须的,因为不同的微服务需要找出调用的位置以便彼此通信。

这种模式的一个优点是它提供了潜在的优秀延迟,因为在给定的请求路径中很少有中间人,并且这些组件(如Web服务器和负载平衡器)具有高性能且经过彻底的战斗测试。

不同RPC微服务之间的一般依赖性处理通常很快变得更加复杂,并最终开始减缓开发工作。为了解决这些问题,还引入了提供服务网格的Envoy代理等新方法。

虽然这些解决了模型的许多负载平衡和服务发现问题,但它们需要通过简单,直接的RPC调用来提高系统的整体复杂性。

许多公司开始时只有少数微服务相互交谈,但最终他们的系统变得越来越复杂,在彼此之间产生了意义上的联系。

消息队列

构建微服务通信的另一种方式是围绕消息总线或消息排队系统的使用。老式的面向服务的体系结构称为这些企业服务总线(ESB)。通常,他们一直是像RabbitMQ或ActiveMQ这样的消息代理。

消息代理充当集中式消息服务,通过该服务,所有有问题的微服务相互通信,消息服务处理诸如排队和高可用性之类的事情,以确保服务之间的可靠通信。

通过支持消息队列,可以将消息接收到队列中以供稍后处理,而不是在峰值需求期间处理容量最大化时丢弃它们。

但是,许多消息代理已经证明了可扩展性的限制以及它们如何在集群环境中处理消息持久性和交付的警告。

围绕消息队列的另一个大型对话主题是它们在错误情况下的行为,例如,消息传递是否保证至少发生一次,最多一次,等等。

选择的语义取决于消息队列实现,这意味着您必须熟悉其消息传递语义。

此外,向体系结构添加消息队列会添加要操作和维护的新组件,并且通过为发送的消息添加一个额外的网络跃点也会增加网络延迟,这会产生额外的延迟。

通过可以与消息排队系统一起使用的访问控制列表(ACL)的集中性,可以在此模型中略微简化安全问题,从而可以集中控制谁可以读取和写入哪些消息。

集中化还带来了一些安全方面的好处。例如,您不必允许所有服务相互连接,而是只允许连接到消息队列服务,并防止其他服务相互远离,从而减少攻击面。

以Kafka为中心的新时代的优势

Apache Kafka是一个由LinkedIn创建和开源的事件流媒体平台。使它与旧的消息排队系统完全不同的是它能够在发送者不知道谁将接收消息的意义上将发送者与接收者完全分离。

在许多其他消息代理系统中,需要预知谁将阅读消息; 这阻碍了传统排队系统中新用例的采用。

使用Apache Kafka时,消息被写入称为主题的日志样式流,并且写入主题的发件人完全忘记了从那里实际读取消息的人或者什么。因此,为了一个新的目的,提出一个新的用例来处理Kafka主题内容是一切照旧的。

Kafka完全不知道已发送消息的有效负载,允许以任意方式序列化消息,尽管大多数人仍然使用JSON,AVRO或Protobufs作为其序列化格式。

您还可以轻松设置ACL,以限制哪些生产者和消费者可以写入和读取系统中的哪些主题,从而为您提供对所有消息传递的集中安全控制。

通常看到Kafka被用作消防风格数据管道的接收器,其数据量可能很大。例如,Netflix报告说他们每天使用Kafka处理超过两万亿条消息。

消费者拥有的一个重要特性是,当消息负载增加且Kafka消费者的数量因故障或容量增加而发生变化时,Kafka将自动重新平衡消费者之间的处理负载。这使得需要从微服务中明确地处理高可用性到Apache Kafka服务本身。

处理流数据的能力将Kafka的功能扩展到作为消息传递系统运行到流数据平台之外。

最重要的是,Apache Kafka在将其用作微服务通信总线时提供相当低的延迟,即使它为所有请求引入了额外的网络跃点。

这种低延迟,自动扩展,集中管理和经过验证的高可用性的强大组合使Apache Kafka能够将其范围从微服务通信扩展到您尚未想象的许多流实时分析用例。

欢迎工作一到五年的Java工程师朋友们加入Java程序员开发: 854393687

群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容