腾讯云 Service Mesh 实践:利用Istio+K8s进行后台环境管理

在过去的两年中,Service Mesh 迅速在业界走红,从概念期进入到了应用期。为了帮助大家解决Service Mesh在落地过程中可能遇到的问题,我们采访了多家互联网企业的应用实践,例如美团点评同程艺龙以及瓜子二手车等,本文我们采访了腾讯高级专项测试工程师黄俊,请他和大家分享腾讯的Service Mesh 实践。今年10月,他将在QCon全球软件开发大会(上海站)2019分享题为《腾讯云上基于 Service Mesh 的后台环境管理实践》的演讲。

为什么需要 Service Mesh?

想要回答“为什么需要Service Mesh”这个问题,首先得弄明白Service Mesh是什么。关于Service Mesh的定义,业界似乎已经达成了共识:Service Mesh是云原生服务通信的基础设施。在黄俊看来,Service Mesh最关键的部分是将服务通信管理能力从业务应用中剥离下沉至基础设施的思想与实现。

其次,Service Mesh主要是解决什么问题?“透明无侵入是 Service Mesh 的最大特性。”黄俊表示,“Service Mesh可以提供服务间一致可见性和网络流量控制,无需修改业务程序代码,即可获得管控服务通信流量与层级观测的能力。”

Service Mesh 主要解决的是传统意义上的“服务治理”,覆盖服务间流量、容错、安全控制和全面遥测。传统的主流解决方法是使用SDK类库的方式显式地对业务应用程序进行改造,但是这种方式在提供能力的同时,也带来了相应的维护和使用成本,从而间接影响业务开发迭代的效率,例如,开发团队需要感知并掌握治理框架、需要持续改造应用程序、对开发语言、对主被调服务接入SDK版本有依赖等等。而Service Mesh的出现,从网络层面自下而上地提出了更好的解决方案与实现,基于服务通信基础设施的定位和无侵入的特性,Service Mesh可对业务开发透明地提供“服务治理”能力。

在企业技术部门中,黄俊认为开发与基础运维团队应该要格外关注Service Mesh,并且关注的侧重点还有所不同:

  • 因为无侵入的特性,开发团队是感知不到 Service Mesh 的存在,因此在开发业务过程中,开发团队几乎不需要作任何适配,只需在服务部署上线后,直接下发指令与配置,对通信进行管控和查看观测数据。简而言之更偏向于“用”,Service Mesh提供的能力作为工具为开发团队服务。
  • 对于基础运维团队而言,Service Mesh 已经成为PaaS基础设施的一部分,在“用”的基础上,还要做好“维护”工作,保证 Service Mesh 控制面与数据面的稳定性与可靠性会是重点工作。除此之外,部分大型企业还要为业务团队打造定制化Service Mesh工具,包括集成企业自身发布系统、Devops流程、环境治理平台、微服务治理平台等等。

腾讯 Service Mesh 实践

早期,腾讯自研业务在内部做服务化拆分与部署时就已经在尝试应用 Service Mesh相关技术来解决服务通信间的路由、容错、限流与监控。当时,腾讯内部多个业务线都有同类工具类落地,不过,都还停留在业务框架层面。近年,随着容器化技术的广泛应用,腾讯自研业务中也逐渐落地了K8s,Service Mesh才在腾讯的部分业务中有了真正意义上的落地,例如游戏、社交、工具平台等业务。

为了更清楚的阐述腾讯Service Mesh实践,我们将重点介绍一下其是如何利用Service Mesh进行后台环境管理。

技术选型:Istio+K8s

腾讯后台环境具有多租户、多分支、多环境的业务特点,需要高精度自定义通信流量管控,可实现动态配置不同租户(用户)请求依赖任意指定环境中的指定分支版本,同时支持在流量层面隔离租户依赖环境。

在技术选型方面,腾讯采用了 Istio+K8s 来实现后台环境的管理。Service Mesh也有很多实现方式,为什么会选定Istio + K8s呢?黄俊解释主要是出于两方面考虑:

  • K8s已经成为容器编排平台的事实标准,是CNCF与业界公认的云原生生态中枢。从广义上讲,Service Mesh不依赖K8s,Service Mesh 也不关心服务所运行的计算平台,但是与K8s结合能更完整地发挥Service Mesh的优势,K8s的服务(负载)生产到Mesh的服务发现与通信接管可以是个自动化的过程。另外,业务容器化也是云原生的必选项。
  • 选择Istio的主要原因是社区大势,Istio与K8s原生集成,源自同一个团队。Istio是对K8s服务通信管控能力的建设与完善,更像是K8s的下一个迭代。Google Cloud的CTO还曾经预估过,未来两年内会有90%的K8s用户使用Istio。在Istio已经定义了Service Mesh的事实标准,XDS v2已经成为了Service Mesh通信的标准数据模型和协议的情况下,选择Istio不仅可以服务更多客户,而且可以完善基于K8s的容器服务平台。

后台环境管理的实践过程

据黄俊介绍,腾讯基于Service Mesh的后台环境管理实践可以分成3个阶段:

第一阶段:解决研发过程中开发调试与测试的冲突,开发测试环境与测试环境分离。这一阶段只要一次性把几套固定的环境搭建出来即可,但是一套环境中经常会出现相互冲突,例如测试同学之间的环境冲突。

第二阶段:一键自动化建立全新的测试环境,保证每个人在需要时,都有自己的开发测试环境。这一阶段,主要做了两部分工作:一是把环境进行容器化以便更好地做服务编排,K8s能够让每个后台服务的搭建变得容易简单;二是对后台请求做精细化的路由管理,我们对Istio Envoy中的源码做了很多改造工作来支持更多的私有RPC协议。

第三阶段:结合DevOps、CI/CD以及自动化测试,在这一阶段,后台环境的持续部署能力将提升整体研发效能。

利用Istio+ K8s实现的后台环境管理,不仅降低了多种后台异构带来的环境成本,而且提升了研发测试过程的效率,根据黄俊的介绍整个实践过程的难点主要集中在以下三点:

支持私有RPC协议:Istio不支持私有RPC协议的流量管理,而测试开发环境管理的核心就是需要Istio支持私有RPC协议流量的管理,同时,我们希望复用Istio原生的能力,而不是重复造轮子。

解决方案:利用Istio支持的HTTP/gRPC作为私有协议数据的传输隧道,同时将需要作为流量管理的信息暴露到HTTP/gRPC header(例如:染色信息)。

支持私有名字服务:私有协议改造后,下发的HTTP/gRPC路由规则不生效,host匹配失败,即私有名字服务解析到的POD IP无法匹配ServiceName、ServiceIP以及域名。

解决方案:在Istio-proxy的服务发现逻辑中记录Service和POD IP的映射关系,具体流量解析时,再通过POD IP反查该POD所属的ServiceName,将反查值作为host字段。

支持流量转发给本地POD IP:Istio-proxy流量拦截后,透传给相同POD下的业务服务时,目标地址为127.0.0.1,而业务监听的socket基本为POD IP,链路不通。

解决方案:将下发的终点socket_address由127.0.0.1改为当前POD的ip地址,不过代价是舍弃Istio对POD调用自己流量的管控能力。

Service Mesh未来发展

目前,国内的Service Mesh应用和开发基本都源自Istio,无论是直接优化应用还是重构部分模块,主要投入者还是公有云云计算服务商,作为容器平台能力的补充。 另外,传统的微服务框架开始集成Service Mesh的一部分能力作为服务接入的拓展方式,主要面向私有云与传统行业转型。

在落地方面,整个市场还处于早期阶段,但比较乐观的是,随着K8s的推广和普及,相比于之前的迟疑,大家对于Service Mesh的认可度提高了,各个行业已经逐步有客户在主动尝试并生产应用Service Mesh。

黄俊表示:“作为技术,Service Mesh还处于发展期,即使是最火的Istio项目也才推出了1.2版本,尚未达到K8s那样的成熟度。”他认为Service Mesh目前存在的问题主要集中在以下两点:

  1. 性能损耗与拓展性:sidecar主动劫持流量经过两次额外的TCP/IP堆栈穿越,与内核上下文切换,开源的版本平均每次调用将产生5-8ms延迟,这对敏感型业务来说,是比较难接受的。另外就是对服务通信私有协议的支持需要拓展。
  2. 维护成本:以Istio为例,整个微服务化的Service Mesh控制面与业务成正比数量的sidecar,部署、升级、伸缩都需要投入相当大的精力与成本。

至于未来发展,黄俊认为Service Mesh的发展还是会围绕云原生服务通信基础设施的方向,作为基础PaaS平台的核心组成支撑上层的业务应用平台。另外,各大云服务商也需要在Service Mesh 产品服务化上持续发力,解决和优化核心技术问题,打造成熟的解决方案和最佳实践,帮助客户迁移和应用Service Mesh与容器相关技术。

嘉宾介绍:

黄俊,腾讯高级专项测试工程师,现负责腾讯文档、手 Q 增值服务等质量团队。2014 年加入腾讯,经历了移动 APP/AI 测试的发展历程,目前主要聚焦在如何结合 DevOps 理念来助力团队研发效能提升。

在QCon上海2019的演讲中,他将重点阐述在腾讯云上如何利用云原生的解决方案 Istio+K8s 来对自研业务后台进行环境管理,过程中涉及到了如何来适配 RPC 私有协议、名字服务等技术细节。以及这套环境治理方案实际对业务在研发过程效率的提升效果,点此了解

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/iB08w0ycffiDFFprvyv6

扫码关注云+社区

领取腾讯云代金券