这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战
Service mesh 简介
服务网格从各个服务中提取服务间通信,作为每个服务的代理proxy,并将其抽象为一个基础架构层。
服务网格会以 网络代理阵列的形式 内置到应用中。
在服务网格中,请求将通过所在基础架构层中的代理在微服务之间路由。
构成服务网格的各个代理有时也被称为“sidecar”(挎斗),这是因为它们与每个服务并行运行,而非在内部运行。
服务网格还会以性能指标的形式,捕获服务间通信的一切信息。随着时间推移,服务网格获取的数据逐渐累积,可用来改善服务间通信的规则,从而生成更有效、更可靠的服务请求。
Istio 简介
服务网格越大,对服务的管理越复杂,包含服务发现,负载均衡,故障恢复,指标度量,监控等等。istio 便是对服务网格进行管理。
istio 分为 控制面 和 数据面。
控制面
控制面是服务网格的大脑,为数据面中的 Envoy 代理提供发现,配置和证书管理。
包括诸如用于服务发现的Pilot,用于配置的Galley,用于证书生成的Citadel以及用于可扩展性的Mixer之类的组件。由于复杂性,这些单独的组件被合并为一个称为istiod的单个组件。
数据面
服务网格使用 Envoy代理 来拦截所有网络流量,允许基于 用户设置的一组广泛的应用程序 感知功能。
Envoy的核心是在OSI模型的L3和L4层运行的网络代理。它通过使用可插入网络过滤器链来执行连接处理。
此外,Envoy支持用于基于HTTP的流量的附加L7层过滤器。而且,Envoy 对 HTTP/2 和 gRPC 传输具有一流的支持。
istio 的功能特性
流量管理
单个集群内和跨集群的路由流量会影响性能并实现更好的部署策略。Istio 的流量路由规则 可以让我们轻松控制服务之间的流量和 API 调用。
Istio 简化了断路器、超时和重试等服务级别属性的配置,并可以轻松设置重要任务,例如 A/B 测试、金丝雀部署和基于百分比的流量拆分的分阶段部署。
k8s 集群安装 istio 后,会自动检测集群的服务和端点,添加到服务注册中心。Enovy 代理会将流量定向到相关服务。
Enovy 代理使用循环模型在每个服务的负载平衡池中分配流量(大多数基于微服务的应用程序都有每个服务工作负载的多个实例来处理服务流量,有时也称为负载平衡池),其中请求以此发送到每个池成员,一旦每个服务实例收到请求,就返回到池的顶部。
可观察
Istio 为服务网格内所有通信生成详细的遥测数据,使操作员能够对应用程序进行故障排查,维护和优化。
Sidecar 模式
Sidecar 模式是 Service Mesh 中习惯采用的模式,是容器设计模式的一种。
将应用程序的功能划分为单独的进程 即 Sidecar 模式。Sidecar 模式允许在应用程序旁边添加更多功能,而无需额外第三方组建配置或修改应用程序代码。
Sidecar 应用与主应用程序松耦合,可以屏蔽不同编程语言的差异,统一实现微服务的可观察性、监控、日志记录、配置、断路器等功能。