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. 这款拓展让你的jupyter lab更高效

    有一段时间没有分享过有关jupyter lab的内容了,今天给大家介绍一款实用的jupyter lab插件,可以帮助我们打造更灵活易用的jupyter lab. 图1 这款拓展的名称叫做jlab-en ...

  2. 八、Nginx的TCP/UDP调度器

    nginx 1.9后才可以调用其他应用 1.9前只能调用web 部署nginx服务器----配置----起服务.验证 部署nginx服务器: [root@proxy ~]# yum –y instal ...

  3. PHPList 安装

    邮件发送开源软件 PHPList 安装介绍 1:安装基本信息 官网地址 地址:https://www.phplist.com/ 其他:https://www.d-ip.jp/phplist/ 官网手册 ...

  4. 【VBA】查找字符串

    老婆饼里有老婆吗 Sub test() aaa = "老婆饼里有老婆吗" If InStr(aaa, "老婆") <> 0 Then Debug.p ...

  5. 【NX二次开发】基准特征

    创建基准特征UF_MODL_create_fixed_daxis 创建一个固定的基准轴特征,方向由点1指向点2UF_MODL_create_fixed_dplane 创建一个固定的基准面特征,输入点和 ...

  6. JavaScript中基本数据类型和引用数据类型的区别(栈——堆)

    JavaScript中基本数据类型和引用数据类型的区别 1.基本数据类型和引用数据类型 ECMAScript包括两个不同类型的值:基本数据类型和引用数据类型. 基本数据类型指的是简单的数据段,引用数据 ...

  7. Android Gradle插件

    目录 什么是Gradle 编写方法 buildSrc 基础概念 Extension 自定义Task Plugin Transformer Gradle用处 好文章 常见问题 Gradle插件练习地址: ...

  8. 树的计数(prufer序列 或 purfer序列)

    题解 首先我们要知道一条性质,prufer序列中的某个点出现次数为该点在树中度数-1 感性理解一下,其实按照prufer序列求法自己推一下就出来了 设题目里给的度为$d[]$ 先将所有的d-- 然后按 ...

  9. MySQL 到 ES 数据实时同步技术架构

    MySQL 到 ES 数据实时同步技术架构 我们已经讨论了数据去规范化的几种实现方式.MySQL 到 ES 数据同步本质上是数据去规范化多种实现方式中的一种,即通过"数据迁移同步" ...

  10. redis优化小建议

    1.优化的一些小建议 1.尽量使用短的key 当然在精简的同时,不要为了key的"见名知意".对于value有些也可精简,比如性别使用0.1. 2.每个redis设置合理内存 每个 ...