服务网格是一种软件架构模式,用于管理和连接微服务架构中的服务。它提供了一种方法,使得微服务之间的通信变得更加可靠、安全和灵活。服务网格通常由一组轻量级的代理程序组成,这些代理程序负责处理服务之间的通信,管理流量、安全性、监控和其他相关的任务。它们还可以提供诸如负载均衡、故障转移和自动伸缩等功能,从而帮助确保整个微服务架构的可靠性和可伸缩性。Istio 和 Linkerd 是两个常见的服务网格实现。
图片
通过接收控制面发送的路由与控制信息来定向转发或处理数据。
当谈到服务网格时,这些特点是其核心功能之一,它们通过数据面和控制面的配合来实现。
服务网格的控制面是指服务网格架构中负责管理和配置数据面的部分。它通常由一组组件组成,这些组件负责实现服务发现、流量管理、安全控制、监控、故障处理等功能。控制面的主要任务是为数据面提供所需的配置信息,以确保服务网格能够按照预期的方式运行,并满足各种业务需求和运维要求。
图片
管理和维护服务注册表,跟踪服务实例的可用性和位置,以便数据面能够将流量正确地路由到目标服务。
配置负载均衡、路由规则、限流策略等,以确保流量能够按照预期的方式在服务之间进行传输,并保证服务的可用性和性能。
实施安全策略,例如认证、授权、加密解密等,以保护服务之间的通信安全,并防止未经授权的访问和数据泄露。
收集和分析服务之间的通信数据、性能指标和错误信息,以便进行故障诊断、性能优化和资源规划。
实施故障检测、熔断、重试等机制,以确保在服务发生故障或不可用时能够及时地进行处理,保障整个系统的稳定性和可靠性。
常见的服务网格控制面包括 Istio、Linkerd 控制平面等。这些控制面组件通常以集群部署方式运行,与数据面组件(如 Envoy、HAProxy 等)协同工作,共同构建出高度可靠和高度可扩展的服务网格架构。
服务网格实现了微服务业务逻辑与底层服务控制的解耦。微服务只需专注于实现自己的业务逻辑,而不必在代码中繁琐配置与服务通信相关的依赖库和配置项。这种解耦使得微服务开发更加简洁和高效。
服务网格将微服务中常见的共性需求(如流量统计、trace埋点、限流控制等)抽象出来,作为统一的实现层。这些功能由基础架构团队负责实现,并通过服务网格的统一部署方式,为所有微服务提供支持。这样一来,不同微服务间不再需要重复编码这些通用功能,极大地提高了开发效率和代码复用性。
有了服务网格,业务开发者不再需要分心关注微服务的共性需求和底层服务控制,可以更专注地投入到业务逻辑的实现上。这使得开发人员能够更快速、高效地迭代业务功能,加速产品上线和迭代。
服务网格的统一实现层由基础架构团队负责升级和维护,业务开发者无需担心底层服务控制的变化和更新。这降低了微服务的维护成本,同时保证了整个微服务架构的稳定性和可靠性。
通过将共性需求抽象为服务网格的统一实现层,并由基础架构团队统一维护,服务网格提高了组织的整体效率。业务开发者能够更专注于业务功能的实现,基础架构团队则负责提供稳定可靠的底层服务控制,使得整个组织能够更快速、高效地实现业务目标。
服务网格的技术栈通常包括以下几个方面的技术和工具
Envoy
HAProxy
NGINX
Istio
Linkerd
Consul
Prometheus
Grafana
Zipkin
Jaeger
JWT(JSON Web Token)
OAuth2
SPIFFE(Secure Production Identity Framework for Everyone)
Consul
etcd
ZooKeeper
Kong
Traefik
Ambassador
Hystrix
Istio Circuit Breaker
我们来总结一下,服务网格的技术栈涵盖了代理和数据面、控制面、监控和指标收集、安全性和鉴权、服务发现、流量管理以及熔断和故障处理等方面的技术和工具。
我们可以使用plantuml画出对应的用例图
@startumlleft to right directionactor 用户 as Userpackage "服务网格技术栈" { usecase "代理和数据面" as Proxy usecase "控制面" as ControlPlane usecase "监控和指标收集" as Monitoring usecase "安全性和鉴权" as Security usecase "服务发现" as ServiceDiscovery usecase "流量管理" as TrafficManagement usecase "熔断和故障处理" as CircuitBreaker User --> Proxy : 发送请求 User --> ControlPlane : 配置服务规则 User --> Monitoring : 查看监控数据 User --> Security : 进行认证和授权 User --> ServiceDiscovery : 发现可用服务 User --> TrafficManagement : 配置负载均衡 User --> CircuitBreaker : 设置故障处理策略 ControlPlane --> Proxy : 下发配置 ControlPlane --> Monitoring : 收集指标 ControlPlane --> Security : 实施安全策略 ControlPlane --> ServiceDiscovery : 更新服务列表 ControlPlane --> TrafficManagement : 配置路由规则 ControlPlane --> CircuitBreaker : 触发熔断 Proxy --> ControlPlane : 上报状态 Proxy --> Monitoring : 发送监控数据 Proxy --> Security : 执行安全操作 Proxy --> ServiceDiscovery : 查询服务列表 Proxy --> TrafficManagement : 处理流量策略 Proxy --> CircuitBreaker : 进行故障检测 Monitoring --> ControlPlane : 提供监控数据 Monitoring --> Proxy : 收集代理状态 Monitoring --> Security : 记录安全事件 Monitoring --> ServiceDiscovery : 分析服务拓扑 Monitoring --> TrafficManagement : 分析流量分布 Monitoring --> CircuitBreaker : 监控故障情况}@enduml
图片
这个用例图描述了服务网格技术栈中各个组件之间的交互关系以及用户如何使用这些技术来实现不同的功能。
表示使用服务网格的终端用户或系统用户,他们通过与不同的技术组件进行交互,来达到他们的目标。
代表了处理服务之间通信流量的组件。它们与用户交互,处理用户发送的请求,并向控制面报告状态。同时,它们也与控制面、监控和指标收集、安全性和鉴权、服务发现、流量管理以及熔断和故障处理等组件进行交互,以执行相应的功能。
负责管理和配置数据面,实现服务发现、流量管理、安全控制、监控等功能。它接收来自用户的配置请求,并将配置信息下发到数据面,同时收集来自数据面的状态和监控信息,以便进行相应的调整和优化。
负责收集和分析服务之间的通信数据、性能指标和错误信息。它与用户交互,提供监控数据给用户查看,并与控制面、代理和数据面等组件进行交互,以实现监控和诊断功能。
实施对服务之间通信的加密、认证和授权。它与用户进行交互,执行安全操作,并与控制面、代理和数据面等组件进行交互,以保护服务之间的通信安全。
负责发现和注册微服务实例,以便其他服务能够动态地找到并与它们进行通信。它与用户交互,提供服务发现功能,并与控制面、代理和数据面等组件进行交互,以更新服务列表和服务拓扑。
负责配置负载均衡、路由规则、限流策略等,以确保流量能够按照预期的方式在服务之间进行传输。它与用户进行交互,提供流量管理功能,并与控制面、代理和数据面等组件进行交互,以配置和调整流量策略。
负责实施故障检测、熔断、重试等机制,以确保在服务出现故障或不可用时能够进行适当的处理。它与用户进行交互,提供熔断和故障处理功能,并与控制面、代理和数据面等组件进行交互,以监控和处理故障情况。
本文链接:http://www.28at.com/showinfo-26-87680-0.html一篇聊透云原生中的服务网格
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com
下一篇: 基于原生的跨模块资源访问