 Service Mesh Meetup #3 深圳站the code!• 当使用一个客户端实例和多个后端实例进行部署时,所有的调用仅 路由到单个后端实例。当部署第二个客户端时,它可能被路由到另 一个后端实例。这不是所需的那种负载均衡,因为它不允许独立地 扩展客户端和服务器。当客户端实例比服务器实例少时,一些服务 器实例将处于空闲状态,所以 Kubernetes Service 不太适合 gRPC 负 载均衡。—摘自:http://www.k8smeetup • 想要让服务支持 Istio,只需要在您的环境中部署一个特殊的 sidecar 代理,使用 Istio 控制平面功能配置和管理代理,拦截微服务之间的 所有网络通信。Istio 的特点 • HTTP、gRPC、WebSocket 和 TCP 流量的自动负载均衡。 • 通过丰富的路由规则、重试、故障转移和故障注入,可以对流量行 为进行细粒度控制。 • 可插入的策略层和配置 API,支持访问控制、速率限制和配额。 默认是开启全局安全和防止跨站点请求伪造(这个在测试时你可能需要关闭) • Kubernetes(Minikube) • —bootstrapper=localkube • Istio • GreatWall(http://blog.samemoment.com/articles/kubernetes/) • 应该是给我造成最多最大的问题 • SSCNCF(Cloud Native Computin Foundation)0 码力 | 45 页 | 18.62 MB | 6 月前3 Service Mesh Meetup #3 深圳站the code!• 当使用一个客户端实例和多个后端实例进行部署时,所有的调用仅 路由到单个后端实例。当部署第二个客户端时,它可能被路由到另 一个后端实例。这不是所需的那种负载均衡,因为它不允许独立地 扩展客户端和服务器。当客户端实例比服务器实例少时,一些服务 器实例将处于空闲状态,所以 Kubernetes Service 不太适合 gRPC 负 载均衡。—摘自:http://www.k8smeetup • 想要让服务支持 Istio,只需要在您的环境中部署一个特殊的 sidecar 代理,使用 Istio 控制平面功能配置和管理代理,拦截微服务之间的 所有网络通信。Istio 的特点 • HTTP、gRPC、WebSocket 和 TCP 流量的自动负载均衡。 • 通过丰富的路由规则、重试、故障转移和故障注入,可以对流量行 为进行细粒度控制。 • 可插入的策略层和配置 API,支持访问控制、速率限制和配额。 默认是开启全局安全和防止跨站点请求伪造(这个在测试时你可能需要关闭) • Kubernetes(Minikube) • —bootstrapper=localkube • Istio • GreatWall(http://blog.samemoment.com/articles/kubernetes/) • 应该是给我造成最多最大的问题 • SSCNCF(Cloud Native Computin Foundation)0 码力 | 45 页 | 18.62 MB | 6 月前3
 蚂蚁金服Service Mesh渐进式迁移方案都没有改造,直连 服务器端有改造,单跳 客户端有改造,单跳Service Mesh时代的客户端和寻址方式 服务发现 加密 负载均衡 请求路由 目标服务 的标识 序列化 链路追踪 故障注入 日志 监控 Metrics 熔断 限流 服务降级 前置条件检查 身份认证 密钥管理 访问控制 …… 下沉到 Service Mesh 轻量级客户端 传统 侵入式 客户端 客户端应该尽可能的轻薄通用: 简化原有SDK (短期需求) • 同时引入域名和DNS,实现通用寻址 (长期目标) 引入DNS寻址方式(基于域名和DNS的Naming Service)Pod: 192.168.1.103 客户端通过域名来对服务进行访问 SOFA Mosn Service A PORT 12220 PORT 15001 Pod: 192.168.1.104 SOFA Mosn Service B PORT Discovery services renew RPC services Watch services renew RPC DNS b.svc -> 10.0.3.100 1. 在客户端代码中, 请求发送给”b.svc” 2.DNS解析”b.svc”到 clusterIP 10.0.3.100 3. 流量劫持到 sidecar1 Service Mesh演进路线 3 20 码力 | 40 页 | 11.13 MB | 6 月前3 蚂蚁金服Service Mesh渐进式迁移方案都没有改造,直连 服务器端有改造,单跳 客户端有改造,单跳Service Mesh时代的客户端和寻址方式 服务发现 加密 负载均衡 请求路由 目标服务 的标识 序列化 链路追踪 故障注入 日志 监控 Metrics 熔断 限流 服务降级 前置条件检查 身份认证 密钥管理 访问控制 …… 下沉到 Service Mesh 轻量级客户端 传统 侵入式 客户端 客户端应该尽可能的轻薄通用: 简化原有SDK (短期需求) • 同时引入域名和DNS,实现通用寻址 (长期目标) 引入DNS寻址方式(基于域名和DNS的Naming Service)Pod: 192.168.1.103 客户端通过域名来对服务进行访问 SOFA Mosn Service A PORT 12220 PORT 15001 Pod: 192.168.1.104 SOFA Mosn Service B PORT Discovery services renew RPC services Watch services renew RPC DNS b.svc -> 10.0.3.100 1. 在客户端代码中, 请求发送给”b.svc” 2.DNS解析”b.svc”到 clusterIP 10.0.3.100 3. 流量劫持到 sidecar1 Service Mesh演进路线 3 20 码力 | 40 页 | 11.13 MB | 6 月前3
 陌陌Service Mesh架构实践Redis作为底层存储 • 跨语言地址发现服务Lookup • 中心化存活检测 多语言支持 • Java、PHP、Python、Go、NodeJs • Redis传输协议 / 复用Redis客户端 • 服务发布Proxy / 并行调用Proxy 服务治理 • 服务治理平台、配置中心 • 监控、日志、分布式跟踪 • 异步调用、压测7/24 流量代理机制 PHP服务发布入流量代理 PHP并行调用出流量代理 响应等待机制:非阻塞等待 两次请求转发小于0.2ms Agent外部 • 提升服务器性能(缩减耗时绝对值) API层接口耗时增长小于6%21/24 数据平面资源占用 与业务容器共享CPU、内存资源配额 为Agent JVM分配256M内存资源 服务器消耗增加约10% 分配方式 内存资源 服务器资源 维持现有内存使用率与 服务器配置的最坏情况 实际需预留 600M内存22/24 数据平面兼容原有架构0 码力 | 25 页 | 1.25 MB | 6 月前3 陌陌Service Mesh架构实践Redis作为底层存储 • 跨语言地址发现服务Lookup • 中心化存活检测 多语言支持 • Java、PHP、Python、Go、NodeJs • Redis传输协议 / 复用Redis客户端 • 服务发布Proxy / 并行调用Proxy 服务治理 • 服务治理平台、配置中心 • 监控、日志、分布式跟踪 • 异步调用、压测7/24 流量代理机制 PHP服务发布入流量代理 PHP并行调用出流量代理 响应等待机制:非阻塞等待 两次请求转发小于0.2ms Agent外部 • 提升服务器性能(缩减耗时绝对值) API层接口耗时增长小于6%21/24 数据平面资源占用 与业务容器共享CPU、内存资源配额 为Agent JVM分配256M内存资源 服务器消耗增加约10% 分配方式 内存资源 服务器资源 维持现有内存使用率与 服务器配置的最坏情况 实际需预留 600M内存22/24 数据平面兼容原有架构0 码力 | 25 页 | 1.25 MB | 6 月前3
 Service Mesh的实践分享基于Java语法的DSL • Zookeeper • 胖客户端 • 基本服务治理功能 App OSP Server Service Registry Service Config Center 服务发现 服务注册 服务元数据下发 OSP client 服务路由 网络传输 服务元数据上报缺点 • 语言单一 • 升级困难 • 复杂代码嵌入对客户端进程影响大服务化体系2.0 - Service Service Mesh雏形 • 物理机、sidecar • Local & Remote,主与备 • 轻量级客户端、本地调用 • Local Proxy负责服务治理与 远程通信 • Remote Proxy负责备份和非 主流流量 JavaApp Local Proxy OSP Server Service Registry Service Config Center Remote Proxy Proxy Cluster API Gateway 备用链路 服务发现 服务注册 配置下发 服务路由 网络传输 OSP client多语言客户端接入 • HTTP & TCP • Local & Remote • 根据接入对象的不同,制定 不同的接入策略,达到 • 接入简单 • 保证性能 • 节省资源 Java App Local Proxy OSP Server Remote0 码力 | 30 页 | 4.80 MB | 6 月前3 Service Mesh的实践分享基于Java语法的DSL • Zookeeper • 胖客户端 • 基本服务治理功能 App OSP Server Service Registry Service Config Center 服务发现 服务注册 服务元数据下发 OSP client 服务路由 网络传输 服务元数据上报缺点 • 语言单一 • 升级困难 • 复杂代码嵌入对客户端进程影响大服务化体系2.0 - Service Service Mesh雏形 • 物理机、sidecar • Local & Remote,主与备 • 轻量级客户端、本地调用 • Local Proxy负责服务治理与 远程通信 • Remote Proxy负责备份和非 主流流量 JavaApp Local Proxy OSP Server Service Registry Service Config Center Remote Proxy Proxy Cluster API Gateway 备用链路 服务发现 服务注册 配置下发 服务路由 网络传输 OSP client多语言客户端接入 • HTTP & TCP • Local & Remote • 根据接入对象的不同,制定 不同的接入策略,达到 • 接入简单 • 保证性能 • 节省资源 Java App Local Proxy OSP Server Remote0 码力 | 30 页 | 4.80 MB | 6 月前3
 蚂蚁金服双十一 Service Mesh 超大规模落地揭秘Proxy HTTP gRPC Pilot/Gallery/Citadel/Mixer App A MOSN App B MOSN HTTP SOFARPC Dubbo RPC WebService 数据面 控制面 社区产品 蚂蚁产品6 二、为什么我们要 Service Mesh 为什么要 Service Mesh为什么要 Service Mesh-现状 5.客户端中间件版本的统一 Mesh-结论9 为什么要 ServiceMesh-结论-方案 应用A 应用 应用B 应用C 应用D 应用E SOA 解耦了不同的业务团队之前的耦合 服务注册中心客户端 限流熔断客户端 动态配置客户端 故障注入客户端 Service Mesh 解耦了业务开发与基础团队之前的耦合 应用代码 业务应用开发 基础设施开发 Mesh 化10 三、方案落地 方案落地11 最终选型:自研数据面+轻量 More Sidecar More Sidecar Pilot MQ Kubernetes Sidecar Operator 产品层 运维能力 监控能力 流量调控 安全能力 扩展能力 HTTP/RPC13 方案落地-拷问 现有框架升级 容器如何替换 MOSN 如何升级 需要业务改代码吗 能回滚吗? 没资源给你做 buffer 能不能快一点 升级过程不要影响我业务 其他你随便0 码力 | 26 页 | 2.71 MB | 6 月前3 蚂蚁金服双十一 Service Mesh 超大规模落地揭秘Proxy HTTP gRPC Pilot/Gallery/Citadel/Mixer App A MOSN App B MOSN HTTP SOFARPC Dubbo RPC WebService 数据面 控制面 社区产品 蚂蚁产品6 二、为什么我们要 Service Mesh 为什么要 Service Mesh为什么要 Service Mesh-现状 5.客户端中间件版本的统一 Mesh-结论9 为什么要 ServiceMesh-结论-方案 应用A 应用 应用B 应用C 应用D 应用E SOA 解耦了不同的业务团队之前的耦合 服务注册中心客户端 限流熔断客户端 动态配置客户端 故障注入客户端 Service Mesh 解耦了业务开发与基础团队之前的耦合 应用代码 业务应用开发 基础设施开发 Mesh 化10 三、方案落地 方案落地11 最终选型:自研数据面+轻量 More Sidecar More Sidecar Pilot MQ Kubernetes Sidecar Operator 产品层 运维能力 监控能力 流量调控 安全能力 扩展能力 HTTP/RPC13 方案落地-拷问 现有框架升级 容器如何替换 MOSN 如何升级 需要业务改代码吗 能回滚吗? 没资源给你做 buffer 能不能快一点 升级过程不要影响我业务 其他你随便0 码力 | 26 页 | 2.71 MB | 6 月前3
 SOFAMesh的通用协议扩展透明地路由所有网络流量 • 服务治理规则,服务,实例和配置都是 Kubernetes 资源 • 使用 Controller Pattern 通过 CRD 扩展新的能力 • …MESH 落地碰到的问题 • 客户端服务发现与负载均衡无法与 ISTIO 一起工作 • ENVOY 不支持微服务使用的通信协议 • RPC 服务使用的接口,方法,参数语义无法匹配 ISTIO 的路由模 型 • 一个应用上部署了多个 作为 DNS 来寻址服务 • 开发一个通用协议处理框架 • 避免为不同的微服务框架修改 PILOT 代码 • 通过插件的方式按需支持新的协议 • 对应用代码无侵入性 • 为微服务框架提供轻量化客户端落地一个微服务框架需要的工作 • 部署 ZK 集群作为 RPC 框架的注册中心 • 开发 ZK Platform Adapter for DUBBO • 开发 DUBBO 服务的 XDS 配置下发 多路复用是基本能力,其他能力需要在多路复用能 力上构建 协议装换能力允许使用 HTTP2 作为 SOFA-MOSN 之 间的通讯协议基于能力分层的插件化扩展框架 性能 接入成本 能力 Open Box Multiplexing, Traffic Splitting Context Based RoutingSOFA MESH • http://github.com/alipay/sofa-mesh •0 码力 | 28 页 | 4.73 MB | 6 月前3 SOFAMesh的通用协议扩展透明地路由所有网络流量 • 服务治理规则,服务,实例和配置都是 Kubernetes 资源 • 使用 Controller Pattern 通过 CRD 扩展新的能力 • …MESH 落地碰到的问题 • 客户端服务发现与负载均衡无法与 ISTIO 一起工作 • ENVOY 不支持微服务使用的通信协议 • RPC 服务使用的接口,方法,参数语义无法匹配 ISTIO 的路由模 型 • 一个应用上部署了多个 作为 DNS 来寻址服务 • 开发一个通用协议处理框架 • 避免为不同的微服务框架修改 PILOT 代码 • 通过插件的方式按需支持新的协议 • 对应用代码无侵入性 • 为微服务框架提供轻量化客户端落地一个微服务框架需要的工作 • 部署 ZK 集群作为 RPC 框架的注册中心 • 开发 ZK Platform Adapter for DUBBO • 开发 DUBBO 服务的 XDS 配置下发 多路复用是基本能力,其他能力需要在多路复用能 力上构建 协议装换能力允许使用 HTTP2 作为 SOFA-MOSN 之 间的通讯协议基于能力分层的插件化扩展框架 性能 接入成本 能力 Open Box Multiplexing, Traffic Splitting Context Based RoutingSOFA MESH • http://github.com/alipay/sofa-mesh •0 码力 | 28 页 | 4.73 MB | 6 月前3
 Service Mesh的延伸 — 论道Database Mesh影子表弹性伸缩:数据迁移 迁移监听 在线双写 离线迁移 数据源切换 冗余数据清 理治理监控 配置动态化 负载均衡 熔断 & 禁用 安全 & 权限 & 脱敏 APM现有实现方案对比 客户端 • 支持任意数据库 • 数据库连接数占用高 • 仅支持单一开发语言 • 性能损耗低 • 无中心化 代理端 • 仅支持单一数据库 • 数据库连接数占用低 • 支持任意开发语言 • e:官网 http://shardingsphere.io/Sharding-Sphere:官档 http://shardingsphere.io/document/current/Sharding-Sphere:Github https://github.com/sharding-sphere/sharding-sphereSharding-Sphere:社区建设 http://shardingsphere http://shardingsphere.io/community/Sharding-Sphere:使用案例 http://shardingsphere.io/community/cn/company/欢迎加入我们0 码力 | 35 页 | 4.56 MB | 6 月前3 Service Mesh的延伸 — 论道Database Mesh影子表弹性伸缩:数据迁移 迁移监听 在线双写 离线迁移 数据源切换 冗余数据清 理治理监控 配置动态化 负载均衡 熔断 & 禁用 安全 & 权限 & 脱敏 APM现有实现方案对比 客户端 • 支持任意数据库 • 数据库连接数占用高 • 仅支持单一开发语言 • 性能损耗低 • 无中心化 代理端 • 仅支持单一数据库 • 数据库连接数占用低 • 支持任意开发语言 • e:官网 http://shardingsphere.io/Sharding-Sphere:官档 http://shardingsphere.io/document/current/Sharding-Sphere:Github https://github.com/sharding-sphere/sharding-sphereSharding-Sphere:社区建设 http://shardingsphere http://shardingsphere.io/community/Sharding-Sphere:使用案例 http://shardingsphere.io/community/cn/company/欢迎加入我们0 码力 | 35 页 | 4.56 MB | 6 月前3
 Service Mesh是下一代SDN吗:从通信角度看Service Mesh的发展rvice Mesh是下一代的SDN吗? Network Layer Look at Solution Layer 7+ Message Body Service Mesh Layer 7 HTTP Header Service Mesh Layer 4 TCP Port SDN/Service Mesh? Layer 3 IP Address/Protocol SDN Layer 2 成本 Ø Istio不理解TCP上的应用层协议,其对TCP Service的缺省处理会影响应用层逻 辑 -例子:Envoy的LB算法不能处理应用后端集群的Sharding Ø Istio中和HTTP Service 端口冲突会的TCP Service请求会被Envoy直接丢弃 - 要求对应用进行改造,避免端口冲突 建议 Ø 将TCP纳入Service Mesh管控还不成熟,成本远大于收益 TCP流量 通过IP段或者端口范围区分HTTP和其他TCP流量 - 需要对应用进行改造 l 方案二:在Envoy中 bypass TCP 流量 -不需要对应用进行改造,但Envoy要具备区分TCP和 HTTP流量的能力,需对Envoy进行改造 改造方案: Ø Envoy侧:通过一个自定义的envoy listener filter区分HTTP 和非HTTP的TCP流量 Ø Pilot侧:修0 码力 | 27 页 | 11.99 MB | 6 月前3 Service Mesh是下一代SDN吗:从通信角度看Service Mesh的发展rvice Mesh是下一代的SDN吗? Network Layer Look at Solution Layer 7+ Message Body Service Mesh Layer 7 HTTP Header Service Mesh Layer 4 TCP Port SDN/Service Mesh? Layer 3 IP Address/Protocol SDN Layer 2 成本 Ø Istio不理解TCP上的应用层协议,其对TCP Service的缺省处理会影响应用层逻 辑 -例子:Envoy的LB算法不能处理应用后端集群的Sharding Ø Istio中和HTTP Service 端口冲突会的TCP Service请求会被Envoy直接丢弃 - 要求对应用进行改造,避免端口冲突 建议 Ø 将TCP纳入Service Mesh管控还不成熟,成本远大于收益 TCP流量 通过IP段或者端口范围区分HTTP和其他TCP流量 - 需要对应用进行改造 l 方案二:在Envoy中 bypass TCP 流量 -不需要对应用进行改造,但Envoy要具备区分TCP和 HTTP流量的能力,需对Envoy进行改造 改造方案: Ø Envoy侧:通过一个自定义的envoy listener filter区分HTTP 和非HTTP的TCP流量 Ø Pilot侧:修0 码力 | 27 页 | 11.99 MB | 6 月前3
 蚂蚁金服网络代理演进之路Spanner LVS(四层负载) DNS 网络控制面 LDC1 Spanner Spanner APP APP APP APP Keycenter HTTP1 TLS1.2 MMTP Mtls MQTT HTTP2 TLS1.3 QUIC 国密 硬件加速 安全合规 Spanner LVS(四层负载) DNS LDC2 Spanner Spanner APP APP Zstd通信协议&架构持续升级 多终端&协议接入 架构升级 云原生生态融合 § MQTT协议的IOT设备接入 § 就近就优海外接入,智能调度 § 蚂蚁全球加速节点,全协议支持 § 支持UDPA § QUIC/HTTP3 § 接入层容器化,混部 § 支持QUIC协议的LB建设 § Web Assembly模块扩展东西流量的服务发现与路由 F5(ipvs) APP APP APP APP 配置中心 APP 负载均衡 熔断限流 服务路由 …… Service 业务逻辑 轻量级SDK 协议编解码 Sidecar (MOSN) 服务发现 负载均衡 熔断限流 服务路由 …… 将SDK客户端 的功能剥离 Sidecar专注服务间通讯 混合在一个进程内, 应用既有业务逻辑, 也有各种功能 业务进程专注于业务逻辑Service Mesh 为什么蚂蚁需要Service Mesh •0 码力 | 46 页 | 19.93 MB | 6 月前3 蚂蚁金服网络代理演进之路Spanner LVS(四层负载) DNS 网络控制面 LDC1 Spanner Spanner APP APP APP APP Keycenter HTTP1 TLS1.2 MMTP Mtls MQTT HTTP2 TLS1.3 QUIC 国密 硬件加速 安全合规 Spanner LVS(四层负载) DNS LDC2 Spanner Spanner APP APP Zstd通信协议&架构持续升级 多终端&协议接入 架构升级 云原生生态融合 § MQTT协议的IOT设备接入 § 就近就优海外接入,智能调度 § 蚂蚁全球加速节点,全协议支持 § 支持UDPA § QUIC/HTTP3 § 接入层容器化,混部 § 支持QUIC协议的LB建设 § Web Assembly模块扩展东西流量的服务发现与路由 F5(ipvs) APP APP APP APP 配置中心 APP 负载均衡 熔断限流 服务路由 …… Service 业务逻辑 轻量级SDK 协议编解码 Sidecar (MOSN) 服务发现 负载均衡 熔断限流 服务路由 …… 将SDK客户端 的功能剥离 Sidecar专注服务间通讯 混合在一个进程内, 应用既有业务逻辑, 也有各种功能 业务进程专注于业务逻辑Service Mesh 为什么蚂蚁需要Service Mesh •0 码力 | 46 页 | 19.93 MB | 6 月前3
 严选 ServiceMesh 实践基于严选第一代ServiceMesh(cNginx) 类型 功能 能力提供方 服务调用方(Client) 服务提供方(Server) 服务注册与发现 注册发现:基于 Consul √ 调用控制 协议支持:HTTP 1.X/2.X,可扩展至 TCP √ 路由控制:提供简单的路由能力 √ 负载均衡:支持 RR、权重、一致性 Hash 等 √ 流量复制:不提供 × 故障转移:继承 Nginx 的 Failover 类型 功能 能力提供方 服务调用方(Client) 服务提供方(Server) 服务注册与发现 注册发现:云外基于 Consul,云内基于 K8s 默认的 ETCD √ 调用控制 协议支持:HTTP 1.X/2.X,GRPC,WebSocket,Dubbo, Thrift √ 路由控制:静态路由、动态路由、流量染色、分流控制等 √ 负载均衡:支持 RR、权重、一致性 Hash 等 √ 流量复制:Envoy 业务回归验证20/24 一些坑 • Envoy 目前编译版本存在 Bug • 在 Istio pilot 升级到加入 accesslog 相关配置下发功能版本后,Envoy 在一定压力访问或 有客户端主动断开请求时,会进入一段存在问题的断言(assert)逻辑,导致 envoy crash, 此时请求方体现为 502 异常 • 社区目前给出的优化建议是在 envoy 编译选项使用 -opt(默认为0 码力 | 25 页 | 2.07 MB | 6 月前3 严选 ServiceMesh 实践基于严选第一代ServiceMesh(cNginx) 类型 功能 能力提供方 服务调用方(Client) 服务提供方(Server) 服务注册与发现 注册发现:基于 Consul √ 调用控制 协议支持:HTTP 1.X/2.X,可扩展至 TCP √ 路由控制:提供简单的路由能力 √ 负载均衡:支持 RR、权重、一致性 Hash 等 √ 流量复制:不提供 × 故障转移:继承 Nginx 的 Failover 类型 功能 能力提供方 服务调用方(Client) 服务提供方(Server) 服务注册与发现 注册发现:云外基于 Consul,云内基于 K8s 默认的 ETCD √ 调用控制 协议支持:HTTP 1.X/2.X,GRPC,WebSocket,Dubbo, Thrift √ 路由控制:静态路由、动态路由、流量染色、分流控制等 √ 负载均衡:支持 RR、权重、一致性 Hash 等 √ 流量复制:Envoy 业务回归验证20/24 一些坑 • Envoy 目前编译版本存在 Bug • 在 Istio pilot 升级到加入 accesslog 相关配置下发功能版本后,Envoy 在一定压力访问或 有客户端主动断开请求时,会进入一段存在问题的断言(assert)逻辑,导致 envoy crash, 此时请求方体现为 502 异常 • 社区目前给出的优化建议是在 envoy 编译选项使用 -opt(默认为0 码力 | 25 页 | 2.07 MB | 6 月前3
共 28 条
- 1
- 2
- 3













