天天看点

服务网格GRPC协议多种编程语言实践-序言

目的

服务网格(ServiceMesh)最有吸引力的地方是什么呢?可以通过简单的配置即时实现流量管理(包括路由、灰度、切流等功能)。然而,由于缺乏足够的文档和实践分享,导致很多同学很快就从入门到放弃了。尤其是基于GRPC协议的实践。

对于HTTP协议的服务而言, 接入服务网格还相对容易。一方面是因为大家对HTTP比较熟悉,另一方面是基于HTTP实践的ServiceMesh文档比较全面。相比而言,GRPC协议的服务网格实践相对困难。一方面是GRPC协议的ServiceMesh文档和实践分享比较稀缺,另一方面是大家对GRPC的熟悉程度远没有HTTP那么高。

为此,我花了3段时间准备这个系列,分别对多种编程语言的GRPC服务开发、容器化、网格化进行了实践和梳理,旨在普及基于GRPC协议ServiceMesh实践的基础知识,以指南的形式让走近服务网格的同学能一葫芦画瓢先跑起来,然后再根据自身业务进行升华,从而降低学习和使用的门槛。

价值

第一,这个系列分享出来会让我有的放矢。

虽然阿里云服务网格(ASM)是基于ACK的一种基础设施,但由于ServiceMesh相对Kubernetes更接近业务而不是基础设施,我们一定会遇到指定编程语言和框架下不可用的问题,也会遇到指定GRPC通信类型、数据类型的问题。

因此,在未来的技术交流和答疑的时候,这个系列中覆盖的4种编程语言和框架(Java/Go/NodeJs/Python)、4种通信模型(Unary RPC/Client streaming RPC/Server streaming RPC/Bidirectional streaming RPC)可以作为沟通的基础。如果能直接解决问题最好,大家都节省时间提高效率;如果没能覆盖或者存在疏漏,我可以持续完善和补充。

第二,声明ASM充分支持标准化。

时下的GRPC协议已经是服务间通信的事实标准,是云原生和微服务生态中的"英语"和"普通话"。因此,我们需要充分展示阿里云服务网格对GRPC协议的支持。分享出来的意义不止是让大家有据可循,也是用事实说明ASM对GRPC协议的支持层度。

结构

我准备的过程是按设计、编码、构建、镜像制作、容器部署、网格配置的步骤进行的。

protobuf和grpc接口方法是基础的基础,所以独立一篇。

对应的编码实现独立一篇。这个过程中对我来说比较困难的一个点是如何使用4种编程语言实现行为一致的代码,另一个困难点是如何实现4种编程语言程序的构建和分发,使得在容器部署后,它们看起来是一个服务的不同deployment。这是本篇的主题。

然后是一篇kube实践和一篇mesh实践。kube实践的过程包括了容器的部署和验证。mesh的实践包括网格配置和验证。

  1. GRPC协议示例的设计
  2. GRPC协议示例的实现
  3. GRPC协议示例的容器实践
  4. GRPC协议示例的网格实践
  5. GRPC协议Headers网格实践

本系列的示例代码:

https://github.com/feuyeux/hello-servicemesh-grpc

,欢迎交流。