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

系列

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

问题 1:Apache ZooKeeper Leader 的选举

Intenseye,我们使用 Apache Pulsar 代替传统的 Apache Kafka 队列系统。

Apache Pulsar 是一个云原生(cloud-native)、多租户(multi-tenant)、高性能分布式消息传递和streaming 平台,最初由 Yahoo 创建!

Apache Pulsar 使用 Apache Zookeeper 进行元数据存储、集群配置和协调。在我们将 ZookeeperLinkerd2 啮合后,K8S 一一重启了 pod,但它们卡在了 “CrashloopBackOff” 中。

我们检查了日志,发现 ZooKeeper 无法与其他集群成员进行通信。我们进一步挖掘,发现 Zookeeper 节点由于网格的原因无法选出一个 leaderZooKeeper 服务器监听三个端口: 2181 用于客户端连接,2888 用于 follower 连接——如果它们是 leader, 3888 用于 leader 选举阶段的其他服务器连接。

然后,我们查看了文档,找到了 Linkerd2 sidecar“skip-inbound-ports”“skip-outbound-ports” 参数。一旦我们添加 28883888 端口以跳过入站/出站,那么建立仲裁就起作用了。 由于这些端口用于内部 Zookeeper pod 通信,因此可以跳过网格。

如果您使用具有 leader 选举的应用程序,这是所有服务网格的常见问题,例如;PulsarKafka 等,这是解决方法。

问题 2:Fail-Fast 日志

我们已经开始对我们的应用程序进行一一网格化。一切都很好,直到对其中一个 AI 服务进行网格划分,我们将其称为 application-a。我们有另一个应用程序作为 500 多个轻量级 Pod 运行,我们称之为 application-b,它使用 gRPCapplication-a 发出请求。

在成功 mesh 12 分钟后,我们看到数百个 Failed to proxy request: HTTP Logical service in fail-fast errorsapplication-b 中。我们检查了 linkerd-proxy 仓库的源代码,我们找到了打印这个日志的地方,但无法理解错误信息。我的意思是,什么是 HTTP Logical service

所以我们通过 GitHubLinkerd2 提出了一个 issue。 他们对这个问题非常感兴趣,并试图帮助我们解决它,甚至发布了专门的包来调试这个问题。

经过所有讨论,结果证明在 application-a 上设置的 “max_concurrent_streams” 值为 10,不足以处理请求。 Linkerd2 使它可见。我们已将该值从 10 增加到 100。不再出现快速失败的错误。

问题 3:Sidecar 初始化前的出站连接

我们在应用程序启动期间进行 HTTP 调用的应用程序很少。

它需要在服务请求之前获取一些信息。

所以应用程序试图在 Linkerd2 sidecar 初始化之前建立出站连接,因此它失败了。 K8S 正在重新启动应用程序容器(不是 sidecar 容器),在此期间 sidecar 已准备就绪。所以它在 1 个应用程序容器重启后运行良好。

同样,这是所有服务网格的另一个常见问题。对此没有优雅的解决方案。 非常简单的解决方案是在启动期间 “sleep”。 GitHub 上有一个未解决的 issueLinkerd2 人员提供了一个解决方案,我认为这比 “sleep” 需要更多的工作。

我们保持原样。 1 自动应用程序容器重启已经解决了问题。

问题 4: Prometheus

Prometheus是一个用于监控和警报的开源云原生应用程序。它在时间序列数据库中记录实时指标,具有灵活的查询和实时警报。

Linkerd2 有精美的文档教程,可让您携带自己的 Prometheus 实例。 我们遵循它并且一切正常,直到我们将一个应用程序网格化,该应用程序使用 Prometheus“PushGateway” 将我们自己的内部指标推送到 Linkerd2 生成的指标之外。

PushGateway 是一种中介服务,它允许您从无法抓取/拉取的作业中推送指标。

在网格之后,500 多个轻量级 Pod 开始通过 sidecar 代理推送指标。我们开始在 PushGateway 端遇到内存问题,我们从 500 多个 pod 中跳过了 9091(PushGateway 端口)的网格。

结论

当艾莉亚杀死夜王时,并非一切都那么容易。 在正在运行的系统中进行更改一直很困难。 我们知道在与 Linkerd2 集成时会遇到一些障碍,但我们一一解决了我们的问题。

References:

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

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

    在 Intenseye,我们 follow(跟随) trends(趋势) & hype(最被炒作) 的技术,并在使用时应用最佳实践. 我们在用 Scala.Go.Python 等编写的 Kub ...

  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. 从“信息化”到“智慧化”,GVS视声将如何赋能智慧医院?

    4月23日-25日,2021年中华医院信息网络大会(CHINC)盛大举办,今年首次携手中国医院建筑与装备创新发展大会,同期同地亮相杭州国际博览中心,塑造了全新的"双引擎"品牌盛会. ...

  2. .NET平台系列26:在 Windows 上安装 .NET Core/.NET5/.NET6

    系列目录     [已更新最新开发文章,点击查看详细] 本文介绍如何在 Windows 上安装 .NET. .NET 由运行时和 SDK 组成. 运行时用于运行 .NET 应用,应用可能包含也可能不包 ...

  3. Spring Security 快速上手

    Spring Security 框架简介 Spring Security 说明 Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案 关于安全方面的两 ...

  4. 【逆向&编程实战】Metasploit中的安卓载荷凭什么吊打SpyNote成为安卓端最强远控

    文章作者:MG1937 QQ:3496925334 CNBLOG:ALDYS4 未经许可,禁止转载 前言 说起SpyNote大家自然不陌生,这款恶意远控软件被利用在各种攻击场景中 甚至是最近也捕获到了 ...

  5. 基于Android平台的图书管理系统的制作(4)

    讲解完学生.职员.书籍这些基础层之后,我们可以来了解一些应用层的活动. 新书上架.借阅排行.黑名单.图书馆介绍.图书馆新闻. 新书上架是查询数据库里的Book表,将最近注册的五本书的基本信息(若图书馆 ...

  6. python学习笔记03-变量和字符串

    变量 变量:把一个值赋值给一个名字时,它会储存在内存中,称之为变量(virable):但在python中并不会储存在变量里,仅仅是类似于给值加了标签 变量的使用规则: 1.使用变量,首先需要给变量赋值 ...

  7. 学习响应式编程 Reactor (2) - 初识 reactor

    Reactor Reactor 是用于 Java 的异步非阻塞响应式编程框架,同时具备背压控制的能力.它与 Java 8 函数式 Api 直接集成,比如 分为CompletableFuture.Str ...

  8. 10个有趣又能编译为JavaScript的语言,你用过哪些?

    现代应用相比普通的网页有不同的要求.但是浏览器是一个有着一套(大部分)固定可用的技术的平台,JavaScript依然是web应用的核心语言:任何需要在浏览器上跑的应用都需要使用这种语言. 我们都知道J ...

  9. 【dog与lxy】8.25题解-necklace

    necklace 题目描述 可怜的dog最终还是难逃厄运,被迫于lxy签下城下之约.这时候lxy开始刁难dog. Lxy首先向dog炫耀起了自己的财富,他拿出了一段很长的项链.这个项链由n个珠子按顺序 ...

  10. codeforeces 845B

    题解 codefores 845B 原题 Luba has a ticket consisting of 6 digits. In one move she can choose digit in a ...