在我们 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. TensorFlow+TVM优化NMT神经机器翻译

    TensorFlow+TVM优化NMT神经机器翻译 背景 神经机器翻译(NMT)是一种自动化的端到端方法,具有克服传统基于短语的翻译系统中的弱点的潜力.本文为全球电子商务部署NMT服务. 目前,将Tr ...

  2. 标准自编码器(TensorFlow实现)

    由 Hinton 提出的标准自动编码机(标准自编码器)只有一个隐藏层,隐藏层中神经元的数量少于输入(和输出)层中神经元的数量,这会压缩网络中的信息,因此可以将隐藏层看作是一个压缩层,限定保留的信息. ...

  3. 5, java数据结构和算法: 栈 , 入栈, 出栈, 正序遍历,,逆序遍历

    直接上代码: class ArrayStack{ //用数组模拟栈 int maxSize; int[] stack; int top = -1;//表示栈顶 public ArrayStack(in ...

  4. 【渗透实战】sqlmap_修改tamper脚本_绕过WAF_第三期

    /文章作者:Kali_MG1937 CSDN博客号:ALDYS4 QQ:3496925334/ 今天google找注入点的时候发现某企业一个挺有意思的waf 常规操作绕过去后决定写一篇博客 信息收集 ...

  5. 【NX二次开发】NX内部函数,libugui.dll文件中的内部函数

    本文分为两部分:"带参数的函数"和 "带修饰的函数". 浏览这篇博客前请先阅读: [NX二次开发]NX内部函数,查找内部函数的方法 带参数的函数: bool A ...

  6. 【题解】codeforces 8c Looking for Order 状压dp

    题目描述 Lena喜欢秩序井然的生活.一天,她要去上大学了.突然,她发现整个房间乱糟糟的--她的手提包里的物品都散落在了地上.她想把所有的物品都放回她的手提包.但是,这里有一点问题:她一次最多只能拿两 ...

  7. 前端 JavaScript 复制粘贴的奥义——Clipboard 对象概述

    前言 作为一名资深搬砖工,你要问我用得最熟练的技能是什么,那我敢肯定且自豪的告诉你:是 Ctrl+C !是 Ctrl+V! 不信?你来看看我键盘上的 Ctrl.C 和 V 键,那油光发亮的包浆程度,不 ...

  8. 01-ubuntu18.04安装docker脚本[含自动配置apt]

    01-ubuntu18.04安装docker脚本[含自动配置apt] 脚本一键安装docker,并配置阿里云的docker镜像加速. #!/bin/bash #更新apt源为清华源 echo &quo ...

  9. 8、oracle密码过期设置

    8.1.登录到oracle实例: [oracle@slave-node2 ~]$ echo $ORACLE_SID orcl [oracle@slave-node2 ~]$ sqlplus sys/1 ...

  10. 八皇后O(1)算法题解

    题目描述 在国际象棋棋盘上(8*8)放置八个皇后,使得任意两个皇后之间不能在同一行,同一列,也不能位于同于对角线上.问共有多少种不同的方法,并且按字典序从小到大指出各种不同的放法. 题解 见证奇迹的时 ...