使用Apache Kafka,Kubernetes和Envoy,Istio,Linkerd的服务网格和云原生微服务

微服务架构不是免费的午餐 ! 微服务需要解耦,灵活,操作透明,数据感知和弹性。 过去几年的大多数材料仅讨论具有紧密耦合且不可扩展的技术(如REST / HTTP)的点对点体系结构。 这篇博客文章介绍了Apache Kafka,Kubernetes,Envoy,Linkerd和Istio等前沿技术,以实现云原生服务网格来解决这些挑战,并将微服务提升到规模,速度和效率的新水平

以下是构建可伸缩,可靠,健壮和可观察的微服务体系结构的关键要求:

使用Apache Kafka,Kubernetes和Envoy,Istio,Linkerd的服务网格和云原生微服务_第1张图片

在进一步详细介绍之前,让我们先看一下关键要点:

  • Apache Kafka解耦服务 ,包括事件流和 请求-响应
  • Kubernetes Kafka生态系统提供云原生基础架构
  • Service Mesh在生态系统/组织范围内帮助提高 安全性和可观察性
  • 特使和 伊斯托(Istio) 位于 卡夫卡(Kafka)之上,与卡夫卡(Kafka)所实现的目标正交

以下各节涵盖了有关此问题的更多想法。 博客文章的末尾包含幻灯片和录像带,以获取更多详细说明。

微服务,服务网格和Apache Kafka

Apache Kafka成为事实上的微服务架构标准 它远远超出了可靠且可扩展的大容量消息传递。 分布式存储允许独立的微服务之间实现高可用性和真正的解耦。 此外,您可以利用Kafka Connect进行集成,并利用Kafka Streams API在自治团队中构建轻量级流处理微服务。

服务网格对体系结构进行了补充 它描述了组成此类应用程序的微服务网络及其之间的交互。 它的要求可以包括发现,负载平衡,故障恢复,指标和监视。 服务网格通常还具有更复杂的操作要求,例如A / B测试,金丝雀推出,速率限制,访问控制和端到端身份验证。

我将探讨分布式微服务通信的问题,以及Apache Kafka和Service Mesh解决方案如何解决该问题。 这篇博客文章介绍了将两种方法结合在一起以构建具有可解耦和安全的微服务的可靠且可扩展的微服务体系结构的方法。

使用Apache Kafka,Kubernetes和Envoy,Istio,Linkerd的服务网格和云原生微服务_第2张图片

讨论和体系结构包括各种开源技术,例如Apache Kafka,Kafka Connect,Kubernetes,HAProxy,Envoy,LinkerD和Istio。

在此有关“微服务,Apache Kafka和域驱动设计(DDD) ”的相关博文中,了解有关使用Kafka解耦微服务的更多信息。

使用Kubernetes的Cloud-Native Kafka

云原生基础架构是可扩展的,灵活的,敏捷的,弹性的和自动化的。 Kubernetes获得了出厂标准。 无状态服务的部署非常简单明了。 但是,部署有状态的分布式应用程序(例如Apache Kafka)要困难得多。 需要大量的人工操作。 Kubernetes不会自动解决Kafka特定的挑战,例如滚动升级,安全性配置或代理之间的数据平衡。 在K8s自定义资源定义(CRD)中实现的Kafka运算符可以在这里提供帮助!

Kubernetes运营商模式旨在捕捉正在管理一项服务或一组服务的人类运营商的主要目标。 负责特定应用程序和服务的人工操作员对系统应该如何运行,如何部署以及在出现问题时如何做出反应具有深入的了解。

在Kubernetes上运行工作负载的人们通常喜欢使用自动化来处理可重复的任务。 Operator模式捕获了如何编写代码以自动化Kubernetes本身提供的功能以外的任务

存在用于Kubernetes的Kafka运营商的不同实现方式: 融合运营商 , IBM / Red Hat的Strimzi , Banzai Cloud 。 在这里,我不会详细介绍K8s Kafka操作员的特性和优势。 我已经在另一篇博客文章中对此进行了详细说明(下面的视频还将讨论该主题):

使用Apache Kafka,Kubernetes和Envoy,Istio,Linkerd的服务网格和云原生微服务_第3张图片

使用Envoy,Linkerd或Istio等基于Kubernetes的技术进行服务网格

服务网格是一种微服务模式,用于将可见性,可靠性和安全性原语用于服务到服务的通信移至基础结构层,而不是应用程序层。

可以在此处找到有关设计模式“服务网格”的详细说明,包括下图,该图显示了控制平面与带有代理人小车的微服务之间的关系:

使用Apache Kafka,Kubernetes和Envoy,Istio,Linkerd的服务网格和云原生微服务_第4张图片

您可以从Envoy或Linkerd之类的框架的创建者那里找到有关服务网格概念及其实现的更多精彩内容。 请查看这两个链接,或者只是使用Google来获得有关竞争替代品及其权衡的更多信息。

Apache Kafka和Service Mesh的(潜在)功能

诸如Apache Kafka之类的事件流平台和Kubernetes之上的服务网格是云原生的,正交的和互补的 他们共同解决了构建可扩展,可靠,健壮和可观察的微服务体系结构的关键要求:

使用Apache Kafka,Kubernetes和Envoy,Istio,Linkerd的服务网格和云原生微服务_第5张图片

如今,公司已经将Kafka与诸如Envoy,Linkerd或Istio之类的服务网格实现一起使用 您可以轻松地将它们组合在一起以增加安全性,实施速率限制或实施其他相关用例。 Banzai Cloud发布了最有趣的架构之一:他们使用Istio通过使用Envoy的代理为Kafka Brokers和ZooKeeper添加安全性 。

但是,与此同时,支持变得更好: Envoy中对Kafka支持的拉取请求于2019年5月合并。 这意味着您现在在Envoy中具有本机Kafka协议支持 关于其挑战和实现Kafka协议过滤器的潜在功能的非常有趣的讨论也值得一读。

借助本机Kafka协议支持,您可以执行除L4 TCP过滤之外的更多有趣的事情。 以下是一些想法(部分来自于Github讨论),关于在Service Mesh中使用L7 Kafka协议支持可以做什么:

  • 点击功能以转储到Kafka流
  • 协议解析以实现可观察性(使用HTTP RPC进行统计,日志记录和跟踪链接)
  • 对Kafka流的影子请求,而不是HTTP / gRPC影子
  • 与Kafka Connect及其连接器的整个生态系统集成

  • 动态路由
  • L4连接和L7消息级别的速率限制
  • 过滤,添加压缩,…
  • 自动主题名称转换(例如,用于金丝雀发布或蓝色/绿色部署)

  • 请求日志和统计信息
  • 数据沿袭/审核日志
  • 通过获取请求日志并用用户信息丰富它们来审核日志。
  • 客户特定指标(每个客户ID /每个客户组的字节速率,客户库的版本,整个数据中心的客户滞后监控)

  • SSL终止
  • 相互TLS(mTLS)
  • 授权书

  • 序列化格式(JSON,Avro,Protobuf等)
  • 讯息模式
  • 标头,属性等

太棒了,不是吗?

微服务,Kafka和服务网格–幻灯片和视频录制

让我们看一下我的幻灯片和视频记录,以更详细地了解使用Apache Kafka,其生态系统,Kubernetes和Service Mesh技术构建Service Mesh的需求,挑战和机遇…

这是幻灯片平台:

来自KaiWähner的 Apache Kafka,Kubernetes,Envoy,Istio和Linkerd的Service Mesh

来自KaiWähner的 Apache Kafka,Kubernetes,Envoy,Istio和Linkerd的Service Mesh

录像带您浏览幻灯片:

有任何想法或反馈吗? 请通过评论或推文让我知道,或者在LinkedIn上建立联系。

<>

翻译自: https://www.javacodegeeks.com/2019/09/service-mesh-cloud-native-microservices-apache-kafka-kubernetes-envoy.html

你可能感兴趣的:(使用Apache Kafka,Kubernetes和Envoy,Istio,Linkerd的服务网格和云原生微服务)