API网关(APIGateway)API网关位于应用程序前端,旨在解决认证授权、限速、提供公共访问等业务问题外部消费者积分。相比之下,服务网格侧重于在应用程序组件之间提供操作(而不是业务)逻辑。集群在云原生环境中,集群是一组物理机或虚拟机,它们形成一个硬件池,Kubernetes等容器编排器可以在其上运行。集群中的每台机器通常称为节点,集群的节点通常是统一的、可互换的、相互连接的。容器(container)容器是应用程序及其依赖项的轻量级包装器,旨在由主机操作系统(OS)隔离运行,对资源消耗和对操作系统的访问有严格限制。从这个意义上说,容器是一个原子可执行“单元”,可以由操作系统运行而无需特定于应用程序的设置或配置。在服务网格环境中,容器被Docker提升为虚拟机(VM)的轻量级替代品,它们具有相似的特性但更重。反过来,容器的兴起催生了Kubernetes等容器编排器,它允许应用程序在打包为容器时自动跨机器池(称为集群)进行调度。Kubernetes的兴起催生了sidecar部署模型,它允许像Linkerd这样的服务网格以一种与应用程序分离的方式提供其功能,并且不会给操作员带来严重的运营成本。ControlPlane(控制平面)ServiceMesh的控制平面提供数据平面运行所需的命令和控制信号。控制平面控制数据平面,并提供操作员用来配置、监控和操作网格的UI和API。数据平面服务网格的数据平面包括其部署的sidecar代理,这些代理拦截网格内的应用程序流量。数据平面负责收集指标、观察流量和应用策略。分布式追踪(distributedtracing)在基于微服务的系统中,来自客户端的单个请求通常会触发一系列跨多个服务的请求。分布式跟踪是在请求通过分布式系统移动时跟踪请求的做法,用于性能监控或调试。它通常通过修改服务以发出跟踪或“跨度”并将它们聚合到中央存储中来实现。出口在Kubernetes集群的上下文中,出口是离开集群的流量。与入口流量不同,没有明确的Kubernetes出口资源,默认情况下出口流量只是退出集群。当需要控制和监控Kubernetes出口流量时,通常在网络/CNI层实现,或者通过添加显式出口代理来实现。企业服务总线(ESBEnterpriseServiceBus)ESB是一种工具和架构模式,在很大程度上早于现代微服务架构。ESB用于管理面向服务的体系结构(SOA)中的通信,处理应用程序间通信、数据转换、消息路由和消息队列功能等所有内容。在现代微服务应用程序中,像Linkerd这样的服务网格取代了对ESB的大部分需求,并提供了改进的关注点分离和减少的SPOF。黄金指标黄金指标或黄金信号是应用程序运行状况的核心指标。黄金指标集通常定义为延迟、流量、错误率和饱和度。Linkerd的黄金指标忽略了饱和度。IngressIngress是在Kubernetes集群中运行并处理从集群外部源进入集群的流量的特定应用程序。此流量称为入口(或有时称为“北/南”流量)。与通常由服务网格调解的集群内流量相比,入口流量有一组特定的问题,因为它通常源自客户、第三方或其他非应用程序来源。API网关通常用作入口。InitContainer(初始化容器)InitContainer是在pod生命周期开始时运行的容器,在应用容器启动之前。初始化容器的典型用例包括重写网络规则;为应用程序收集秘密;并从网络位置复制文件。例如,Linkerd的init容器更新网络规则以通过Linkerd代理容器引导pod的所有TCP流量。init容器在应用程序容器启动之前终止。延迟(延迟)延迟是指应用程序执行某些操作(例如,处理请求、填充数据等)所花费的时间。在服务网格术语中,这是在响应级别衡量的,通过计算应用程序响应请求所花费的时间。延迟通常以分布的几个百分比为特征,通常包括p50(或中位数)、p95(或第95个百分位数)、p99(或第99个百分位数)等。LinkerdLinkerd是第一个服务网格项目,它自己定义了术语“服务网格”。Linkerd于2016年首次发布,旨在成为Kubernetes生态系统中最快、最轻的服务网格。Linkerd是云原生计算基金会(CNCF)的研究生项目。负载平衡(loadbalancing)负载平衡是在多个等效端点之间分配工作的行为。与许多系统一样,Kubernetes在连接级别提供负载平衡。像Linkerd这样的服务网格通过在请求级别执行负载平衡来改进这一点,这允许它考虑诸如各个端点的性能等因素。请求级负载均衡还允许Linkerd有效地对使用gRPC(和更普遍的HTTP/2)的系统的请求进行负载均衡,该系统在单个连接上多路复用请求——Kubernetes本身无法有效负载均衡的系统,因为通常只有一个连接曾经成立。负载平衡算法决定哪个端点将为给定请求提供服务。最常见的是“循环法”,它简单地遍历所有端点。更高级的平衡算法包括“最小负载”,它根据每个端点的未完成请求数分配负载。Linkerd本身使用称为EWMA(指数加权移动平均值)的复杂延迟感知负载平衡算法,根据端点延迟分配负载,同时响应各个端点延迟配置文件的快速变化。mTLS(MutualTLS)相互TLS(mTLS)是一种对两个端点之间的连接进行身份验证和加密的方法。相互TLS只是标准的传输层安全(TLS)协议,附加的限制是连接的双方都必须经过身份验证。(例如,在网络浏览器中使用TLS通常只验证服务器,而不是客户端。)https://linkerd.io/2/features/automatic-mtls/在服务网格的上下文中,mTLS是基本的在一端识别服务并保持通信机密的机制。此身份验证是策略实施的基础。多集群在Kubernetes的上下文中,多集群通常是指“跨”多个Kubernetes集群运行应用程序。Linkerd的多集群支持提供跨集群的无缝和安全通信,即使在公共Internet上也是安全的,并且对应用程序本身完全透明。可观察性(observability)可观察性是指从系统产生的数据中了解系统健康和性能的能力。在服务网格的上下文中,可观察性通常是指服务网格可以报告的有关系统的数据。这包括“黄金指标”、依赖关系的服务拓扑图、流量采样等。可靠性(reliability)可靠性是衡量系统对故障的反应的系统属性。系统越可靠,它就越能更好地处理单个组件的故障或性能下降。对于多服务或微服务应用程序,服务网格可以通过对跨服务调用应用重试和超时、智能负载平衡、发生错误时转移流量等技术来提高可靠性。https://linkerd.io/2/features/retries-and-timeoutshttps://linkerd.io/2/features/load-balancinghttps://linkerd.io/2/features/traffic-splitService网格(服务Mesh)服务网格是一种通过在平台层而不是应用程序层插入这些功能来为应用程序添加可观察性、安全性和可靠性功能的工具。服务网格是通过添加拦截应用程序之间所有流量的边车代理来实现的。生成的代理集构成服务网格数据平面,并由服务网格控制平面管理。代理聚合了服务之间的所有通信,是引入服务网格功能的工具。SidecarProxy(边车代理)SidecarProxy是在mesh中随应用部署的代理。(在Kubernetes中,作为应用程序Pod中的容器。)sidecar代理拦截进出应用程序的网络调用,并负责实施任何控制平面逻辑或规则。Sidecar代理共同构成了服务网格的数据平面。Linkerd使用名为Linkerd2-proxy的基于Rust的微代理,它专为服务网格用例而设计。Linkerd2-proxy比Envoy或NGINX等常见代理更轻巧且更易于操作。成功率(successrate)成功率是指我们的应用程序成功响应请求的百分比。例如,对于HTTP流量,这是按2xx或4xx响应与总响应的比率来衡量的。(请注意,在这种情况下,4xx响应被认为是成功的响应——应用程序完成了它的工作——而5xx响应被认为是不成功的响应——应用程序未能响应请求)。成功率高表明应用程序运行正常。
