service mesh

68 阅读1分钟

背景

传统微服务架构的缺点:基础设施层与业务代码耦合、第三方SDK语言相关性

通信治理难题:服务发现、负载均衡、协议转换、熔断降级、安全

关键词

Istio、Envoy、iptables、pod、sidecar、微服务通信与治理

解决痛点

1. 服务通信下沉到基础设施层,对微服务屏蔽掉服务通信的复杂度

2. 以一种更加通用和标准的方式提供通信和治理能力,屏蔽不同语言、平台的差异性

3. 服务治理标准化,减少服务治理标准不一致带来的转换成本,提升服务治理效率。

通信、安全、可观测性、流量控制

代价

改造成本、基础设施层引入新的运维复杂性、通信开销、集成难度、学习曲线陡峭

istio

DestinationRule定义服务子集,负载均衡,熔断降级策略等

trafficPolicy.loadBanlancer配置负载均衡

trafficPolicy.outlierDetection配置熔断策略

VirtualService定义路由规则,权重分配。

类别

参数

生产建议值

作用

负载均衡

simple: ROUND_ROBIN

默认

轮询(均匀分布)

simple: LEAST_CONN

高并发服务

选当前连接最少的实例

consistentHash

有状态服务

按 Header/Cookie 哈希保持会话

连接池熔断

tcp.maxConnections

100~500

防客户端压垮单实例

http.maxRequestsPerConnection

10(HTTP/1.1)

防连接复用不足

异常剔除

consecutive5xxErrors

3~10

错误阈值(根据业务容忍度)

maxEjectionPercent

≤50

避免全实例剔除导致服务不可用

baseEjectionTime

30s~5m

剔除时长(错误越多剔除越久)

http headers匹配请求头,fault delay和abort配置请求延迟和拒绝服务,routers配置路由指向的服务子集。

mirror 流量镜像

eBPF、Proxyless性能优化

k8s

pod: 若干个联系紧密的容器的集合,它们共享网络和文件系统,是k8s调度的最小单位。

services: 是对一组提供相同功能的pod的抽象,借助services,实现服务发现和负载均衡。

node:是pod运行的物理机或者虚拟机。