consul的service mesh功能初体验

|作者简介

consul之前一直被当成一个服务发现、分布式KV服务、服务健康检查服务等,但此前发布的1.2版本,宣称其实现了Service Mesh方案。而今年被称为Service Mesh的关键之年,就在这里跟大家分享一下自己的研究结果。

|试用consul的service mesh

升级consul至1.2版本

macOS下升级consul很简单,简单用brew命令就好

为了方便后面修改consul的配置文件,添加一个参数

这个配置文件中,我添加了以下两行:

写两个模拟的微服务

用golang写两个小程序,用以模拟两个微服务。

这里模拟微服务调用。

在consul里配置两个服务

在consul的配置文件目录下新建两个json文件,用来配置上述两个服务。

:

:

然后执行命令重新加载consul的配置

修改service1中引用service2的代码:

跑起来啦

将service1、service2跑起来,然后用curl命令访问service1

|其它玩法

除了Service Mesh的玩法,consul 1.2还提供了SDK的用法。简单来说就是Go语言开发的微服务按照它的规范修改服务提供方、服务消费方的代码,服务间的调用将会自动使用底层的connect隧道。这个使用方法不太符合service mesh的初衷,做过微服务框架sdk的我不是太喜欢,这里就不详细讲了,可以参考官方给出的文档。

Connect Native原理

Connect Native Go语言项目改造指引

|consul的service mesh原理分析

其实consul的文档本身说的比较明白,这里结合consul-ui及代码大概分析一下。

当给consul的服务配置里添加了后,consul将会为每个服务实例创建一个专门的隧道代理,如下图所示:

隧道代理的作用是当以connect模式连入时,会自动建立一条到原服务实例的tcp隧道,后面tcp层以上的应用协议数据流将在这条tcp隧道上传输,具体代码在

而涉及服务间调用时,在consul服务配置里添加服务声明,服务消费方访问服务时需使用的地址。实际上是一个反向代理,当访问它时,它会以connect模式连接对应的服务实例,具体代码在

结合上述两条规则,整个数据链路就通了。

这里有一个问题,为啥一定要connect模式的隧道代理呢?反向代理服务不能直接连接原来的目标服务地址吗?

看了大概知道原因了。因为connect模式的隧道代理是使用TLS加密的,这样物理服务器节点之间的网络流量就走TLS安全连接了,再加上intentions机制,服务间的调用安全性上有了很大保障。还有一个原因,如果采用Connect-Native的方式集成consul的service mesh功能,底层连接是TLS,上层就可以很方便地走HTTP/2.0协议了。

|consul的service mesh优缺点分析

优点:

1.直接使用tcp隧道,因此直接支持各类基于tcp的协议代理,如HTTP/1.1、HTTP/2.0、GRPC。

2. 实现原理简单,下的关键文件不超过20个,逻辑很容易就看清了。

3. 直接结合consul做服务注册与服务发现,集成度高。

缺点:

1.目前的负载均衡算法还很简单,就是随机,见下面:

2. 一些微服务框架的基本功能还不具备,如超时、重试、熔断、流量分配等,可以从这里开始扩展。

3. 需要手动修改consul的服务配置;服务消费方要根据consul里的服务配置,修改调用其它服务的地址(这里跟service mesh的初衷有些不符)。

|总结

目前来看consul的service mesh方案还比较简单,功能很基本,但具备进一步扩展的空间,可以好好研究学习它的代码。

|参考

https://www.hashicorp.com/blog/consul-1-2-service-mesh

https://www.consul.io/intro/getting-started/connect.html

https://www.consul.io/docs/agent/options.html

https://www.consul.io/docs/connect/intentions.html

https://www.consul.io/docs/connect/native.html

https://www.consul.io/docs/connect/native/go.html

https://www.consul.io/docs/connect/configuration.html

https://www.consul.io/docs/connect/proxies.html

https://www.consul.io/docs/connect/dev.html

https://www.consul.io/docs/connect/ca/consul.html

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181011B1KWHK00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券