在 Intenseye,我们 follow(跟随) trends(趋势) & hype(最被炒作) 的技术,并在使用时应用最佳实践。 我们在用 Scala、Go、Python 等编写的 Kubernetes 上运行了数百个 pod,其中大多数使用 gRPC。

gRPC 是一种现代开源高性能远程过程调用 (RPC) 框架,它使用 HTTP/2 进行传输。HTTP/2 支持通过单个 TCP 连接发出多个请求以减少往返次数。这就是问题出现的地方;负载均衡。建立连接后,所有请求都将固定到单个目标 Pod。 因此,我们不会有平衡的负载。 我们需要一个 L7 感知负载均衡器,而不是 L4。稍后您可以从这里阅读问题的详细信息。

我们正在为另一个问题寻求解决方案;微服务之间的安全传输。我们有数十个组件,总共运行数百个 Pod。 在它们之间一一配置 TLS 令人生畏,而且会很耗时。

我们还需要一个监控系统和来自所有这些组件和微服务的流量指标(traffic metrics)。

我们想观察成功/失败(success/failure)率、Pod 的 RPS、谁与谁交谈的频率等。

我们有这三个问题的单一解决方案:Service Mesh

什么是 Service Mesh?

服务网格是一种工具,通过在平台层而不是应用程序层插入这些功能,为应用程序添加可观察性(observability)、安全性(security)和可靠性(reliability)功能。(servicemesh.es)

服务网格通常作为与应用程序代码一起部署的一组可扩展的网络代理来实现;一种称为边车的模式。这些代理处理微服务之间的通信,并允许控制流量并获得整个系统的洞察力。Service Mesh 提供了很棒的功能,例如流量指标(traffic metrics)、熔断(circuit breaking)、mTLS、流量拆分(traffic split)、重试和超时(retry & timeout)、A/B 路由(routing)等。



source: servicemesh.es

我们开始挖掘服务网格的细节并评估对我们很重要的功能,我们如何从中受益等。由于服务网格会影响延迟和资源消耗,因此也必须衡量这些缺点。由于我们有 500 多个 Pod,因此资源成本将是 500 x sidecar。另外,我们在与时间赛跑,所以延迟应该是最小的。

经过一些研究和 PoC,我们决定在 Istio、Consul 和 Linkerd2 之间使用 Linkerd2。 我必须说,servicemesh.es 帮助我们获得了有关服务网格的知识并比较了它们之间的功能。

除了我们正在寻求的功能之外,与 Istio 和 Consul 相比,我们选择 Linkerd2 有 3 个原因。(L7 LB、mTLS、traffic metrics 等):

  • 轻量级(低 CPU 和内存消耗)
  • 低延迟
  • 延迟感知 LB

Istio 有很多不错的功能(感谢 Envoy 代理),但我们并不需要所有这些功能。与 Linkerd2 相比,它的 sidecar 代理 CPU 和内存消耗也很高。Consul 使用相同的 sidecar 代理,因此我们也将其删除。这里详细解释了为什么 Linkerd2 使用它自己的代理而不是 Envoy。另外,Linkerd2 非常好用。Istio 的文档实在太多了。

Linkerd和“Cardi B”押韵。
“d”要分开发音,如“Linker-DEE”。(源)

解决方案

问题 1:gRPC 负载平衡

without mesh / with mesh

正如您在图中所见,有些 pods 像替罪羊,有些像树懒。网格后,一切都很好。

问题 2:mTLS

感谢 Linkerd2 的 mTLS 功能,我们像 Thanos(灭霸) 一样,像弹指一样保护了微服务之间的内部通信。 Linkerd2 每 24 小时自动轮换一次证书。您也可以使用 cert-manager 来轮换颁发者证书和私钥。

问题 3:流量监控

Linkerd2 与 Prometheus 和 Grafana 捆绑在一起,但您可以自带实例并通过官方文档对其进行配置。 我们遵循文档并开始使用我们现有的实例。现在我们从每个网格化的 pod 中获得了很好的指标,并且我们对集群有了更好的可观察性。

结论

感谢 Linkerd2,我们解决了我们的问题,从此过上了幸福的生活。 文档非常清晰,入门页面很容易理解(+ 他们有演示应用程序。)当然,并非一切都是光明的。 我们在网格划分 pod 时或网格后遇到的问题很少,但我们也解决了这些问题。 甚至我们在 GitHub 上打开了一个问题并得到了帮助。

所以这篇文章是我们服务网格之旅的第一部分,它是关于“什么是服务网格以及我们为什么选择 Linkerd2?” 在第二部分,我们将讨论我们面临的问题以及我们如何解决这些问题。

References

我是为少。
微信:uuhells123。
公众号:黑客下午茶。

在 Intenseye,为什么我们选择 Linkerd2 作为 Service Mesh 工具(Part.1)的更多相关文章

  1. 在 Intenseye,为什么我们选择 Linkerd2 作为 Service Mesh 工具(Part.2)

    在我们 service mesh 之旅的第一部分中,我们讨论了"什么是服务网格以及我们为什么选择 Linkerd2?".在第二部分,我们将讨论我们面临的问题以及我们如何解决这些问题 ...

  2. 蚂蚁金服缘何自研Service Mesh?

    2018年,微服务方兴未艾,Service Mesh(服务网格)又快速崛起.有观点认为,2018年可被称之为“Service Mesh元年”,在未来两年中,Service Mesh将迎来爆发式增长,成 ...

  3. Service Mesh 介绍

    传统单体应用的局限性说明 传统单体应用代码体量庞大繁杂,不利于理解,也不利于团队合作开发,更不利于频繁更新和部署,增加服务宕机的风险. 耦合性高,功能代码块之前很容易造成强依赖,只要其中任何一个代码逻 ...

  4. Service Mesh架构的持续演进 单体模块化 SOA 微服务 Service Mesh

    架构不止-严选Service Mesh架构的持续演进 网易严选 王育松 严选技术团队 2019-11-25 前言同严选的业务一样,在下层承载它的IT系统架构一样要生存.呼吸.增长和发展,否则过时的.僵 ...

  5. Istio在Rainbond Service Mesh体系下的落地实践

    两年前Service Mesh(服务网格)一出来就受到追捧,很多人认为它是微服务架构的最终形态,因为它可以让业务代码和微服务架构解耦,也就是说业务代码不需要修改就能实现微服务架构,但解耦还不够彻底,使 ...

  6. 腾讯云 K8S 集群实战 Service Mesh—Linkerd2 & Traefik2 部署 emojivoto 应用

    Linkerd 是 Kubernetes 的服务网格. 它通过为您提供运行时调试(runtime debugging).可观察性(observability).可靠性(reliability)和安全性 ...

  7. 蚂蚁金服 Service Mesh 实践探索

    SOFAMesh是蚂蚁金服在ServiceMesh方向上的探索,下面是它高级技术专家敖小剑在QCon上海2018上的演讲. Service Mesh 是一个 基础设施层,用于处理服务间通讯.现代云原生 ...

  8. 详细了解 Linkerd 2.10 基础功能,一起步入 Service Mesh 微服务架构时代

    Linkerd 提供了许多功能,如:自动 mTLS.自动代理注入.分布式追踪.故障注入.高可用性.HTTP/2 和 gRPC 代理.负载均衡.多集群通信.重试和超时.遥测和监控.流量拆分(金丝雀.蓝/ ...

  9. Emoji.voto,Linkerd 服务网格(service mesh)的示例应用程序

    一个微服务应用程序,允许用户为他们最喜欢的表情符号(emoji)投票,并跟踪排行榜上收到的投票.愿最好的 emoji 获胜. 该应用程序由以下 3 个服务组成: emojivoto-web:Web 前 ...

随机推荐

  1. NVIDIA Turing Architecture架构设计(上)

    NVIDIA Turing Architecture架构设计(上) 在游戏市场持续增长和对更好的 3D 图形的永不满足的需求的推动下, NVIDIA 已经将 GPU 发展成为许多计算密集型应用的世界领 ...

  2. ARMed解决方案对DSP的战争

    ARMed解决方案对DSP的战争 ARM体系结构简化了数字信号处理 ARM与数字信号处理(DSP)有什么关系? ARM似乎在处理领域处于领先地位.该处理器已将其视为其最大的细分市场之一,这主要是由于该 ...

  3. JVM_ 动态链接

    虚拟机栈: -> 栈帧---对应每个方法----> 包含: 局部变量表, 本地方法栈, 动态链接, 方法出口, 动态链接: 每个栈帧都保存了 一个 可以指向当前方法所在类的 运行时常量池, ...

  4. springboot——发送put、delete请求

    在springmvc中我们要发送put和delete请求,需要先配置一个过滤器HiddenHttpMethodFilter,而springboot中,已经帮我们自动配置了,所以我们可以不用配置这个过滤 ...

  5. Jenkins 进阶篇 - 数据备份

    随着我们的长期使用,Jenkins 系统中的内容会越来越多,特别是一些配置相关的东西,不能有任何丢失.这个时候我们就需要定期备份我们的 Jenkins 系统,避免一些误操作不小心删除了某些重要文件,J ...

  6. Zookeeper 面试题(持续更新、吐血推荐)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  7. 数据泵导出报错ORA-31693 ORA-02354 ORA-01466

    1.Oracle数据泵导出schema时有报错: Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - P ...

  8. Linux分区,格式化概念理解

    一.分区概念: 逻辑上分成不同的存储空间. 分区类型: 主分区:最多只能有4个 扩展分区:最多只能有1个. 主分区加扩展分区最多有4个. 布恩那个写入数据,只能包含逻辑分区 逻辑分区: 主分区为什么只 ...

  9. 学习JDK源码(二):Integer

    最近没有好好保持学习的好习惯,该打. 天天忙,感觉都不知道在干嘛.真的厌倦了普通的Java代码,还是想学点新技术. 用了这么久的Java,最常用的数据类型肯定是Int了,而他的包装类Integer用的 ...

  10. Python常用数据结构(列表)

    Python中常用的数据结构有序列(如列表,元组,字符串),映射(如字典)以及集合(set),是主要的三类容器 内容 序列的基本概念 列表的概念和用法 元组的概念和用法 字典的概念和用法 各类型之间的 ...