云原生服务网格与示例架构解析
1. 服务网格概述
在云原生环境中,每个服务独立构建和部署,且可能与其他微服务进行通信。随着解决方案的扩展,微服务数量增多,服务间的通信变得更加复杂。为了确保服务具备弹性,能够应对网络问题,需要实现请求重试、定义超时时间、使用断路器等功能。
传统做法是使用具有特定通信功能的库,但如果服务使用不同的编程语言实现,管理这些库会成为噩梦。因为需要确保每个语言特定的库实现都保持最新,对一个版本的库进行的任何更改都需要应用到所有不同版本。
服务网格的理念是将通用功能从每个服务中移出,放入服务网格,从而提高开发人员的生产力,实现服务特性与服务网格通用功能的分离。
2. 服务网格的核心组件 - 代理
服务网格的主要构建块是代理,它与每个服务实例相邻运行。在Kubernetes中,代理以边车(Sidecar)的形式与服务运行在同一个Pod中,共享相同的网络。代理的任务是拦截进入或离开服务的所有请求,每个代理都有自己的配置,用于定义如何处理传入或传出的流量。此外,代理还会发出指标,这些指标可以由服务网格控制平面收集。
除了边车代理,也可以为每个主机运行一个代理,在Kubernetes中可以使用DaemonSet来实现。
使用边车代理简单且配置较少,但会增加额外的资源成本,因为每个Pod中都运行了一个额外的容器。如果运行大量服务实例,这可能会成为问题。通过为每个主机运行一个代理可以降低成本,但与边车代理相比,设置配置可能不那么直接。
在决定使用边车方法还是每主机方法时,需要考虑以下因素:
- 服务和边车代理的数量:资源消耗随着服务副本数量的增加而增长。如果每
超级会员免费看
订阅专栏 解锁全文
868

被折叠的 条评论
为什么被折叠?



