其他分享
首页 > 其他分享> > 腾讯云TSF微服务平台及ServiceMesh技术实践

腾讯云TSF微服务平台及ServiceMesh技术实践

作者:互联网

接下来我们重点讲讲ServiceMesh的实现。
TSF服务框架的ServiceMesh主要是有2类实现。
第一类ServiceMesh实现是无独立控制面的全功能Sidecar,主要适用于有一定的研发能力,且对定制化要求较高的企业客户。TSF主要是基于Spring Cloud Sidecar能力来实现全功能Sidecar。Spring Cloud Sidecar的灵感来源于Netflix的Prana,这个也是Spring Cloud与ServiceMesh融合的重要手段。其主要工作流程如下图所示:

图片


每个服务节点上会部署一个Sidecar进程,Sidecar根据配置将自身监听地址以及服务名注册到Consul Server。当收到外部请求时,会直接到达Zuul Servlet,此时首先判断请求是否来源于自身节点服务,假如来源于自身节点服务,则直接走本地路由。否则,就走Ribbon流程进行服务路由及转发。Sidecar在运行过程中,会定期调用所代理的服务的健康检查接口,获取服务健康状态并上报Consul Server。这种Sidecar代理+服务的方式,所表现出来的行为,与直接嵌入Spring Cloud SDK模式所表现的行为是一致的。Spring Cloud Sidecar模式的缺点在于对服务的URL有要求(来源于Zuul的约束,必须带有服务名),同时原生的Zuul + Ribbon转发模式的性能较差,缺少独立控制面使得运维成本较高。
第二类实现是带独立控制面的Sidecar,主要适用于对定制化要求不高,但是对性能比较敏感,业务代码改造工作量大,希望低成本运维的企业客户。带独立控制面的Sidecar也是ServiceMesh的业界通用实现。但是开发团队应该如何去实现这种ServiceMesh呢?
实现微服务框架的关键在于开源选型。TSF在Mesh构建初期,业界已经有不少优秀的开源数据面Sidecar产品,如Envoy、Linkrd、nginMesh、Conduit等,而且各有各的亮点和最佳适用场景。但最终数据面选定Envoy的原因在于:
  1. Envoy社区成熟度较高,商用稳定版本面世时间较长。如nginMesh以及Conduit至今仍未有商用版本。

  2. Envoy底层基于C++,性能上优于使用Scala的Linkrd,同时C++与腾讯系的语言体系较吻合。

  3. Envoy在腾讯内部使用相对广泛,稳定性相当高,对于运行态代理,稳定性直接影响交付质量。


而对于数据面的开源选型,则可选范围相对较少,当前控制面集大成者是Istio,业界几乎所有的开源数据平面产品(Conduit除外),都支持对接Istio,但是Istio存在2个问题使得当时在选型上挣扎了一下:
  1. 原生的Istio大部分能力与Kubernetes是强关联的。而TSF则是与P层平台解耦的,框架在设计上需要能够对接多P层平台。

  2. Istio至今未有商用稳定版本,当前最新版本是0.7.1。


最终控制平台仍然选型Istio,原因如下:
  1. Istio拥有极高的社区影响力,开发团队来源于Google和IBM。所基于的xDS(LDS、RDS、CDS、EDS)控制接口规范几乎成为控制面的实际规范。

  2. Istio版本速度较快,今年内极有可能会推出1.0版本。


  3. image.png
  4. 通过调研Istio代码,发现通过一定程度的定制及扩展,可以使得Istio与Kubernetes成功解耦。经过选型后,我们Mesh产品架构如下:

  5. image.png


Mesh涉及的部件所提供的功能如下:

标签:服务,TSF,Envoy,Istio,服务平台,ServiceMesh,节点,Sidecar
来源: https://blog.51cto.com/u_15127630/2774533