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

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

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

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

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

我们有这三个问题的单一解决方案: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,我们决定在 IstioConsulLinkerd2 之间使用 Linkerd2。 我必须说,servicemesh.es 帮助我们获得了有关服务网格的知识并比较了它们之间的功能。

除了我们正在寻求的功能之外,与 IstioConsul 相比,我们选择 Linkerd23 个原因。(L7 LBmTLStraffic 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(灭霸) 一样,像弹指一样保护了微服务之间的内部通信。 Linkerd224 小时自动轮换一次证书。您也可以使用 cert-manager 来轮换颁发者证书和私钥。

问题 3:流量监控

Linkerd2PrometheusGrafana 捆绑在一起,但您可以自带实例并通过官方文档对其进行配置。 我们遵循文档并开始使用我们现有的实例。现在我们从每个网格化的 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. LCD: 2D-3D匹配算法

    LCD: 2D-3D匹配算法 标题:LCD:Learned Cross-Domain Descriptors for 2D-3D Matching 作者:Quang-Hieu Pham, Mikael ...

  2. C语言代码区错误以及编译过程

    C语言代码区错误 欲想了解C语言代码段会有如何错误,我们必须首先了解编译器是如何把C语言文本信息编译成为可以执行的机器码的. 背景介绍 测试使用的C语言代码 导入标准库,定义宏变量,定义结构体,重命名 ...

  3. windows 下安装Charles,破解,安装证书,设置可抓取https包

    参考地址: https://www.zzzmode.com/mytools/charles/ 一.下载后进行安装  二.安装后进行破解 按照参考中的链接破解即可 三.Charles在windows证书 ...

  4. NOIP模拟测试19「count·dinner·chess」

    反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍 ...

  5. 【Python报错】ValueError: If using all scalar values, you must pass an index

    问题: 1.ValueError: If using all scalar values, you must pass an index.意思是:如果使用所有标量值,则必须传递索引 2.再看错误发生代 ...

  6. DOS命令行(5)——Windows系统的配置与管理(下)

    whoami --查看当前有效用户 这个工具可以用来获取本地系统上当前用户(访问令牌)的用户名和组信息,以及相应的安全标识符(SID).声明.本地系统上当前用户的权限.登录标识符(登录 ID).例如, ...

  7. element的日期选择使用value-format之后表单验证报错

    在表单验证的时候报错 添加一个日期控件,但是发现在表单验证中遇到了冲突如下: Error in event handler for "el.form.change": " ...

  8. Linkerd 2.10(Step by Step)—设置服务配置文件

    Linkerd 2.10 系列 快速上手 Linkerd v2.10 Service Mesh 腾讯云 K8S 集群实战 Service Mesh-Linkerd2 & Traefik2 部署 ...

  9. js笔记17

    BOM浏览器对象模型 1.window.open(url,ways) url 是打开的网页地址 ways 打开的方式  _self 2.window.close() 3.浏览器用户的信息 window ...

  10. Maven——基础篇

    Maven--基础篇 Maven出现前的问题 一个项目就是一个工程,而工程内一般是通过package包来分模块,比较用户模块,订单模块等,如果项目过于庞大,通过包模块来划分就不太合适,而应该拆分为模块 ...