微服务环境下的系统治理与容错
微服务是大型系统的唯一选择。 解耦合 独立开发部署 架构、组织、流程 微服务架构定义“三步法” 微服务拆分方法 微服务拆分-指导原则 拆服务-单体重构的节奏 服务分解的四大障碍 1、网络延迟 2、同步通信降低了可用性 3、跨服务的数据一致性 4、上帝类 微服务的忠告 n 第一,要记住微服务不是解决所有问题的万能 “银弹”。 n 第二,编写整洁的代码和使用自动化测试至关重要,因为这是现代软件开发的基础。 。 n 第五,也是最重要的,不能只是在技术上采用微服务架构。拥抱DevOps的原则和实践,在组织结构上实现跨 职能的自治团队,这必不可少。 还必须记住:实现微服务架构并不是你的目标。你的目标是加速大型复杂应用程序的开发。 --Chris Richardson 容错 故障和问题 线上故障“画像“ 系统稳定性指标 可监控设计 同步调用下-无线程池隔离 同步调用下-线程池隔离实现方法0 码力 | 45 页 | 16.09 MB | 1 年前3Service Mesh在华为公 有云的实践
DevOps,APM有深⼊入的研究和实践经验。⽅方案⽀支撑近千台VM中应⽤用部署管理监 控 2016年加⼊入华为担任架构师,负责微服务的Go语⾔言开发框架及Service Mesh设计 和落地,Go语⾔言微服务框架被华为5G核⼼心⺴⽹网络采⽤用,Service Mesh服务商⽤用上 线公有云 • 简介 • 实现⼀一个Service Mesh • 使⽤用Service Mesh快速构建微服务 • ⽣生态与扩展 • Service Service Mesh • ⼀一种基础设施层,服务间的通信通过 Service Mesh进⾏行 • 可靠地传输复杂⺴⽹网络拓扑中服务的请 求,将服务变成现代的云原⽣生服务 • ⼀一种⺴⽹网络代理的实现,通常与业务服 务部署在⼀一起,业务服务不感知 • ⼀一种TCP/IP之上的⺴⽹网络模型 Application Service Mesh Transport Network Physical 2013年,微服务开发平台中的组 件,公司内部某电信业务 • 400多个微服务,800左右实例, 200多个数据中⼼心 Sidecar模式 • 基于容器的分布式系统设计模式 • 容器可以共享存储与⺴⽹网络的能⼒力 应⽤用程序容器 ⽇日志同步⼯工具容器 存储卷 Sidecar优势 • 以容器作为基础打包单元,可以分给不同的团队进⾏行开发测试 • 可重⽤用 • 以容器作为错误边界,使服务能够正确推出0 码力 | 52 页 | 4.37 MB | 1 年前3Service Mesh的思考及在华为云的实践
微服务架构引入的问题 6/30/2018 什么是Service Mesh • 一种基础设施层,服务间 通信通过Service mesh进 • 一种TCP/IP之上的网络模 型行 • 一个轻量的网络代理,与 业务部署在一起 • 可靠的传输复杂网络拓扑 中的服务请求,将服务变 为现代的云原生服务 Website: http://servicecomb.incubator.apache.org/ PHP语言开发,遗留单体服务快速改造为分布式架构 • 负责公司内部的楼宇设施管理,使用mesher改造后,帮 助客户将软件改造为SaaS服务,为更多企业提供服务 6/30/2018 最佳实践 • 结合容器,容器网络,编排调度平台,监控平台使用 • 业务代码只需监听在127.0.0.1.使用mesher对外提供服务 • 使用SideCar部署模式 • 将服务提供者地址写在配置文件中,在本地里信息是http://x0 码力 | 29 页 | 1.55 MB | 1 年前3华为企业级PaaS 微服务应用
com/apache?q=servicecomb 缺少了什么 • 流水线,平台等自动化手段的完备,使得开发人员开始思考业务功能的拆分,复用,使得网络拓扑更加复杂 • 从过去“数据中心网络拓扑几乎没变化”变为“应用发布,应对业务流量,随时随地的网络拓扑变化” • 平台功能解决了应用运行时之前的种种问题,但为了将应用的运行时统一治理,保障业务可靠运行,需要引入微服务框架 来解决分布式系统中的难题 业务数据 标准存储 统一应用 支撑平台 总账结构 统一纵向 层级交换 机制 统一信息 安全体系 软件开发服务 ServiceStage 大数据服务 系统集成服务 IaaS(计算、存储、网络、安全) 中间件服务 标准与规范 应用全微服务化,接口标准由财政厅统一管控, ISV只需聚焦微服务交付,降低依赖性 统一业务模型和数据集成标准,系统无缝对接, 财政数据统一呈现,业务全盘管控0 码力 | 17 页 | 3.42 MB | 1 年前3ServiceCenter - 服务注册中心
tolerance(分区容错性),当出现网络分区故障时系统的容错能力 从微服务到服务管理中心 1.实例缓存机制 从微服务到服务管理中心 2.心跳保活机制 从服务管理中心到etcd 1.异步缓存机制 从服务管理中心到etcd 2.异步心跳机制 自我保护机制 前面提到的缓存机制,保证了ServiceCenter在etcd出现网络分区故障时依 然保持可读状态,Se 然保持可读状态,ServiceCenter的自我保护(Self-preservation)机制保证 了Provider端与ServiceCenter在出现网络分区故障时依然保持业务可用。 ServiceCenter在一个时间窗内监听到etcd有80%的实例下线事件,会立即 启劢自我保护机制。即使etcd存储的数据全部丢失,这种极端场景下, SDK与ServiceCenter之间可在不影响业务的前提下,做到数据自劢恢复。0 码力 | 18 页 | 856.27 KB | 1 年前3ServiceComb在Service Mesh的 探索与思考
Service Mesh - 2017年由William Morgan提出 - 一种基础设施层,服务间通信通过Service Mesh进行 - 一种TCP/IP之上的网络模型 - 轻量网络代理,与业务部署在一起 - 可靠传输复杂拓扑网络中的请求 - 将应用变为现代的云原生应用 4 Application Service Mesh Transport Network Physical0 码力 | 21 页 | 8.48 MB | 1 年前3消费者云CSE微服务实践
消费者云CSE微服务实践 李林锋 关于我 9年电信软件平台中间件开发、设计、架构经验 精通Netty、Mina等网络通信框架 华为软件 短信/彩信/WAP网关平台SGP、API开放集成网关API Fabric首席设计师 华为软件分布式服务框架DSF首席设计师 《Netty权威指南》、《分布式服务框架原理不实践》作者 微博、微信:Nettying 无论是华为内部的DSF,还是开源的Netflix、Spring Cloud等,都无法完全满足业务的 选型诉求,而CSE则能够很好的满足我们的需求 仔细阅读了CSE的主要模块代码,包括网络通信、线程调度模型等,代码质量非常高, 对细节的把握比较好 选型试用时,大家对CSE的接受度比较高,使用CSE改造已有的Spring MVC代码相对较 容易些 华为内部的平台,无 高性能的Rest:集成Vertx,底层基于Netty,性 能比传统Servlet NIO性能高X倍 Highway RPC:采用Netty + PB,既支持多语 言,又保证高性能 高性能幵发设计:线程绑定技术,网络I/O线程 绑定后端的服务调度线程,最大限度减少锁竞 争。采用连接池机制,重用已有的连接 CSE在消费者云业务的实践-分布式事务 1、服务化乊前本地事务: 2、服务化乊后引入分布式事务:0 码力 | 22 页 | 1.39 MB | 1 年前3Java Chassis通信处理详解 - 通信优化实践
丌同开发人员熟悉丌同的编程模型 3. RPC、REST的治理如何迚行 4. REST性能低 5. Reactive还是同步 ServiceComb的同步 仅仅是指编程模型上的同步,跟网络通信无关 因为所有场景下网络操作都是异步的 •Producer •Consumer 整体线程模型 Producer Consumer Eventloop 连接 Eventloop0 码力 | 17 页 | 2.22 MB | 1 年前3反应式微服务框架ServiceComb设计思想&mdash
与传统流程不同的是,所有功能都在 eventloop中执行,并不会进行线程切 换 p 橙色箭头走完后,对本线程的占用即完 成了,不会阻塞等待应答,该线程可以 处理其他任务 p 当收到远端应答后,由网络数据驱动开 始走红色箭头的应答流程 p 只要有任务,线程就不会停止,会一直 执行任务,可以充分利用cpu资源,也 不会产生多余的线程切换,去无谓地消 耗cpu。 压测数据 系统: Ubuntu 内存: 8GB 测试代码:https://github.com/GuoYL123/ReactiveBenchmark 调优后的压测数据 n 寻找拐点 n 调整consumer/producer参数(网络线程/业务线程等),提升处理能力 n 重新调整测试驱动压力(加大或减小),重复前面步骤 n 输出最终性能拐点时的各项参数,包括TPS/时延/CPU/带宽等等 Spring Cloud Gateway0 码力 | 33 页 | 5.68 MB | 1 年前3ServiceComb java SDK详解
时间、业务逻辑平均执行时间、最大执行时间 TODO: cpu/mem/gc...... 性能调优 • 网络相关配置参数 – 系统参数比较保守,需要根据实际情况设置合适的参数 • Producer线程池 默认2个线程池,每个池中线程数等于cpu数 – 参考metrics统计结果 • cpu 带宽允许的情况下,cpu应该基本占满 • 网络带宽 关注是否已经占满带宽 • RSS 如果环境(硬件、os、驱动)支持RS0 码力 | 21 页 | 1.15 MB | 1 年前3
共 16 条
- 1
- 2