Istio + MOSN 在 Dubbo 场景下的探索之路
容错和限流 特点 • 独立部署 • 强化模块边界 • 技术多样性5/23 Service Mesh 优点 • 统一的服务治理 • 服务治理和业务逻辑解藕 缺点 • 增加运维复杂度 • 延时 • 需要更多技术栈6/23 探索 Istio 技术点 /02 了解 Istio 技术点7/23 MCP MCP(Mesh Configuration Protocol)提供了一套用于订阅、推送的 Istio+Envoy • 通过创建 EnvoyFilter 资源来给 xDS 资源打 patch • Envoy 解析 Dubbo 协议中的 Serivce 和 Method • 根据路由策略配置把流量转发到对应的 Provider • 通过WASM扩展 华为云:https://support.huaweicloud.com/bestpractice-istio/istio_bestpractice_30050 码力 | 25 页 | 3.71 MB | 5 月前3分布式NewSQL数据库TiDB
10000000 10000000 10000000 延时latency min(ms) 1.15 2.11 32.86 0.91 1.16 延时latency avg(ms) 7.07 14.67 155.32 3.51 20.53 延时latency max(ms) 3536.90 1464.20 1977.64 359.59 3173.37 延时latency 95th percentile(ms) percentile(ms) 22.28 29.19 200.47 8.74 38.25 延时latency sum(ms) 70703222.04 146665415.95 1553214351.69 35054605.48 205329856.41 线程公平性(events (avg/stddev)) 19531.2500/486.76 19531.2500/1208.70 19531.2500/1484.87 19531 10000000 10000000 10000000 延时latency min(ms) 1.10 2.23 39.18 0.95 1.18 延时latency avg(ms) 8.20 18.09 172.39 3.55 21.93 延时latency max(ms) 3103.19 1124.73 1276.10 79.71 3179.78 延时latency 95th percentile(ms)0 码力 | 120 页 | 7.42 MB | 5 月前3Rust 程序设计语言 简体中文版 1.85.0
例如,这里有多个存放了不同类型和属性文本的结构体:结构体 NewsArticle 用于存放发生于 世界各地的新闻故事,而结构体 SocialPost 最多只能存放 280 个字符的内容,以及指示该帖 子是新发布的、转发的还是对另一条帖子的回复的元数据。 我们想要创建一个名为 aggregator 的多媒体聚合库用来显示可能储存在 NewsArticle 或 SocialPost 实例中的数据摘要。为了实现功能 Message: 'j' 不过,我们可以使用常规的 Receiver API 甚至是 Iterator API 来做到这些,所以让我们增加 一个需要流的功能:增加一个适用于流中所有项的超时,和一个发送项的延时,如示例 17-34 所示。 文件名:src/main.rs use std::{pin::pin, time::Duration}; use trpl::{ReceiverStream, Stream match 其结果要么在成功接收时打印消息要么打印一个超 时的提示。最后,请注意我们在加上超时之后 pin 住了这些消息,因为超时辅助函数产生了一 个需要 pin 住才能轮询的流。 然后,因为消息之间没有延时,超时并不会改变程序的行为。让我们为发送的消息增加一个延 时变量,如示例 17-35 所示。 文件名:src/main.rs fn get_messages() -> impl Stream0 码力 | 562 页 | 3.23 MB | 9 天前3Apache Pulsar,云原生时代的消息平台 - 翟佳
streamnative.io Apache Pulsar 是什么 streamnative.io Apache Pulsar 要解决的问题 • 企业需求和数据规模 • 多租户 - 百万Topics - 低延时 - 持久化 - 跨地域复制 • 解除存储计算耦合 • 运维痛点:替换机器、服务扩容、数据 rebalance • 减少⽂件系统依赖 • 性能难保障: 持久化(fsync)、⼀致性(ack: all)、多Topic Apache Pulsar 简介 • Pulsar 的云原⽣架构 • 企业级流存储: BookKeeper Apache BookKeeper: 企业级流存储层 分布式⽇志/流存储 • 低延时、⾼吞吐、持久化 • 强⼀致 (repeatable read consistency) • ⾼可⽤ • 单节点可以存储很多⽇志 • I/O隔离 Apache BookKeeper: 诞⽣场景0 码力 | 39 页 | 12.71 MB | 5 月前0.03蚂蚁金服ServiceMesh数据平面 SOFAMosn深层揭秘
Ø定义可扩展的插件机制 Ø对于满足请求Stream池化的需求 Ø需处理上层传入的状态事件PROXY 7 Ø基于Stream抽象提供多协议转发能力 Ø执行Stream扩展Filters Ø提供可扩展的路由寻址能力 Ø提供可扩展的后端管理,负载均衡,健康检查能力 Ø维护上/下游核心指标转发流程 8 IO Read Codec Stream Route / LB Codec Stream IO write ü大量读/写会增加系统时间消耗, runtime 调度成本IO Bad Case 5调度均衡 6 Ø池化:避免 runtime.morestack 连续栈扩容性能损耗 Ø单核:避免G饥饿 Ø多核:避免P饥饿单核TCP转发 7 Ø环境 ü独占CPU容器 üCPU: Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz X 1 üOS: 3.10.0-327.ali2008.alios7 715ms 5.068ms RT(P99) 16ms 7ms RT(P98) 13ms 7ms RT(P95) 11ms 6ms MEM 56m 24m CPU 100% 95%单核SOFARPC转发 10 Ø环境 ü独占CPU容器 üCPU: Intel(R) Xeon(R) CPU E5620 @ 2.40GHz X 16 X 1 üOS: 2.6.32-431.17.1.el6.FASTSOCKET0 码力 | 44 页 | 4.51 MB | 5 月前3蚂蚁金服Service Mesh渐进式迁移方案
• 得到Cluster IP (10.254.162.44) 5. kube-proxy拦截到10.254.162.44的请求 • 修改目标地址为Pod IP=192.168.1.* 6. 请求转发给pod kubernetes Pod IP=192.168.1.101 Pod IP=192.168.1.102 Pod IP=192.168.1.103 client Node podIstio 得到Cluster IP (10.254.162.44) 5. iptables拦截到10.254.162.44的请求 • 转发到localhost,打到Sidecar • 在TCP options将ClusterIP保存为original dest 7. 请求转发给对端sidecar kubernetes Pod IP=192.168.1.101 Pod IP=192.168.1.102 6. Sidecar收到请求 • 从TCP options中的 original dest 获取ClusterIP • 根据ClusterIP从 VirtualHost 中匹配Rule规则,得到转发目标地址SOFAMesh 的DNS寻址 interface1 pod DNS interface2 interface3 1. 服务部署 • ServiceType=ClusterIP0 码力 | 40 页 | 11.13 MB | 5 月前313 Istio 流量管理原理与协议扩展 赵化冰
socket 或者 Unix domain socket),可以被 下游客户端连接。在 Envoy 中,Listener 可以绑定到端口上直接对外服务,也可以不绑 定到端口上,而是接收其他 listener 转发的请求。 • Cluster:集群是指 Envoy 连接的一组上游主机,集群中的主机是对等的,对外提供相 同的服务,组成了一个可以提供负载均衡和高可用的服务集群。Envoy 通过负载均衡 策略决定将请求路由到哪个集群成员。 15001 端口上监听的 VirtualOutbound listener 收到了该请求。 4. 请求被 VirtualOutbound listener 根据原目标 IP(通配)和端口(9080)转发到 0.0.0.0_9080 这个 outbound listener。 5. 根据 0.0.0.0_9080 listener 的 http_connection_manager filter 配置,该请求采用 default.svc.cluster.local cluster 配置为通过EDS获取对应的Endpoint,通过 EDS 查询得到该 cluster 中有3个 endpoint。 8. 请求被 Envoy 转发到其中一个 endpoint 10.40.0.15,即 reviews-v1 所在的 pod。 9. 然后该请求被 reviews-v1 pod 的 iptables 入向流量规则拦截,处理后重定向到本地的0 码力 | 20 页 | 11.31 MB | 5 月前3大规模微服务架构下的Service Mesh探索之路
的Adapter Report的AdapterMixer反省之一:对性能的影响 ü 按照Istio的设计,每次请求Envoy都 要执行对Mixer的两次远程调用: • 转发前执行Check(包含Quota) • 转发后执行Report ü 我们的观点: • 需要请求同步阻塞等待的功能都应该在 Sidecar中完成 • 远程调用带来的性能开销代价太高 • 其他尽量优化为异步或者批量Istio的解决方案:添加Mixer Sidecar Local Sidecar Service-A 调用服务Service-b 8.8.8.1 8.8.8.2 8.8.8.3 服务注册中心 同步注册信息 Cluster-1 3.转发请求到edge sidecar, 标注Destination为Service-B 1. 通过注册信息交换同步到其他服务 注册中心,包括服务和Edge sidecar 2. 通过注册中心可以得知 edge-sidecar : 8.8.8.2@cluster2 edge-sidecar : 8.8.8.3@cluster2 Service-B@zone2 4. Edge sidecar执行服务发现并 转发请求给Service-B的实例7月底北京,第二次Service Mesher线下Meetup 下回分解:增强版Pilot和Edge Sidecar开源策略 Open Source 3蚂蚁金服,开源开放0 码力 | 37 页 | 7.99 MB | 5 月前3蚂蚁金服网络代理演进之路
app2 app1 app2 IDC1 IDC2 1 首次请求app1 2 随机分流 3 uid转发目标zone 4 响应请求 5 写入cookie 6 再次请求app1 7 跨机房转发 50% 50% • 机房内zone随机路由 • Cookie zone转发 • 蓝绿发布 • 容灾 ØZone内容灾 Ø机房级别 Ø城市级别 • 弹性调度 • 压测 • 灰度蚂蚁金服SSL/TLS实践0 码力 | 46 页 | 19.93 MB | 5 月前3陌陌Service Mesh架构实践
关键收益均由数据平面产生 非完善的控制平面功能 技术体系内不引入Go语言 最成熟的服务端语言为Java 使用Java开发 数据平面Agent14/24 整体架构 数据平面 • 现有协议的流量转发 • Agent平滑升级机制 控制平面 • 轻量的Pilot Proxy • 向Istio的标准协议靠拢 重点目标 长期规划15/24 数据平面实践细节 • 部署方式 • 升级方式 • 减少decode请求体开销 • ProtoBuf替换JSON • 复用连接并适当设置连接数 Agent内部 • 对象池化:减少资源消耗与GC压力 • 响应等待机制:非阻塞等待 两次请求转发小于0.2ms Agent外部 • 提升服务器性能(缩减耗时绝对值) API层接口耗时增长小于6%21/24 数据平面资源占用 与业务容器共享CPU、内存资源配额 为Agent JVM分配256M内存资源0 码力 | 25 页 | 1.25 MB | 5 月前3
共 21 条
- 1
- 2
- 3