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. 智能驾驶L2发展策略

    智能驾驶L2发展策略 智能驾驶L2,以们通俗的定义是,以高级辅助驾驶的产品为主的各种巡航产品,包括定速巡航,自适应巡航ACC,预见性巡航,智能巡航等等. 车辆驾驶是集注意力高度集中,手把控方向盘和换挡 ...

  2. CVPR2020:点云分析中三维图形卷积网络中可变形核的学习

    CVPR2020:点云分析中三维图形卷积网络中可变形核的学习 Convolution in the Cloud: Learning Deformable Kernels in 3D Graph Con ...

  3. VB 老旧版本维护系列---尴尬的webapi访问返回json对象

    尴尬的webapi访问返回json对象 首先Imports Newtonsoft.Json Imports MSXML2(Interop.MSXML2.dll) Dim URLEncode As Sy ...

  4. C++标准模板库(STL)——queue常见用法详解

    queue的定义 queue<typename> name; queue容器内元素的访问 由于队列本身就是一种先进先出的限制性数据结构,因此在STL中只能通过front()来访问队首元素, ...

  5. Appium 工作原理及 Desired Capabilities

    一.Appium工作原理 脚本请求 --> 4723端口appium server --> 解析参数给PC端4724端口 --> 发送给设备4724端口 --> 通过设备472 ...

  6. MySQL笔记03(黑马)

    今日内容 DQL:查询语句 排序查询 聚合函数 分组查询 分页查询 约束 多表之间的关系 范式 数据库的备份和还原 DQL:查询语句 排序查询 语法:order by 子句 order by 排序字段 ...

  7. 【NX二次开发】Block UI 指定点

    属性说明 属性   类型   描述   常规           BlockID    String    控件ID    Enable    Logical    是否可操作    Group    ...

  8. JDK并发包二

    JDK并发包二 线程复用--线程池 在线程池中,总有那么几个活跃的线程,当程序需要线程时可以从池子中随便拿一个控线程,当程序执行完毕,线程不关闭,而是将这个线程退会到池子,等待使用. JDK提供了一套 ...

  9. JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇

    JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇 作为一个使用Java语言开发的程序员,我们都知道,要想运行Java程序至少需要安装JRE(安装JDK也没问题).我们也知道我们Java程序 ...

  10. 如何利用Python计算景观指数AI

    可使用工具包 pylandstats 此工具包基本是根据fragstats形成的,大部分fragstats里面的景观指数,这里都可以计算.但是,还是有一小部分指数这里没有涉及. LS_METRICS ...