反应式微服务框架ServiceComb设计思想&mdash任PaaS团队架构师,负责微服务框架 的开发。曾任当当网架构师,主导电 商平台架构设计;曾就职于搜狐负责 手机微博的研发。《持续演进的Cloud Native》作者,微信公众号“奔跑中 的蜗牛”博主。 p为什么微服务框架需要 Reactive pServiceComb 的 I/O 通信模型演进 pServiceComb API⺴关Edge Service p实践案例 为什么微服务框架需要Reactive? vs webflux ServiceComb 的通信模型演进 启动更多的线程 Why? Thread 2 Thread 1 Thread 4 Thread 3 进程1 Thread 2 Thread 1 Thread 4 Thread 3 进程2 核3 核1 核0 核2 集中到⼀个线程 ServiceComb 的通信模型演进—Reactor 黄金法则:不要阻塞Event ServiceComb同步线程模型 ServiceComb嵌套同步线程模型 一个误区 ServiceComb非阻塞线程模型 p 与传统流程不同的是,所有功能都在 eventloop中执行,并不会进行线程切 换 p 橙色箭头走完后,对本线程的占用即完 成了,不会阻塞等待应答,该线程可以 处理其他任务 p 当收到远端应答后,由网络数据驱动开 始走红色箭头的应答流程 p 只要有任务,线程就不会停止,会一直0 码力 | 33 页 | 5.68 MB | 1 年前3
Java Chassis通信处理详解 - 通信优化实践Java Chassis通信处理详解 通信优化实践 议题 问题不挑战 整体线程模型 Consumer Producer 问题不挑战 消费者 编程 模型 透明 RPC Spring MVC Transport Highway Vertx REST Servlet REST 生产者 编程 模型 透明 •Producer •Consumer 整体线程模型 Producer Consumer Eventloop 连接 Eventloop 连接 …… 业务线程 业务线程 业务线程 业务线程 Eventloops Executor 线程 …… 线程 队列 Executor 线程 …… 线程 队列 …… Consumer 消费端,主要需要处理的问题是如何更 高效地将请求推送到对端去,然后拿到 应答信息。 透明RPC Consumer业务线程 Consumer Eventloop 连接 业务线程 hello.sayHello() Handlers.handle HttpClientFilters.beforeSendRequest (Http) Handlers.asyncResponse0 码力 | 17 页 | 2.22 MB | 1 年前3
ServiceComb在华为消费者云的亿级用户微服务实践不一刀切,根据业务实际需要选择同步或者异步微服务调用 微服务消费端 业务 线程 池 异步 I/O线 程池 NIO异步通信 微服务提供端 NIO异步通信 业务线程阻塞, 同步等待 唤醒等待的业务线程, 获取响应 1 2 微服务同步调用问题: 1、同步服务调用:业务线程将请求消息交给I/O线程之后, 无论I/O线程是同步还是异步发送请求消息,业务线程都会 同步阻塞,等待响应 2、异步I/O通信:I/O通信方式与服务调用方式没关联关 同步服务调用的几个缺点: 1、业务线程利用率低:线程资源是系统中比较重要的资源, 在一个进程中线程总数是有限制的。提升线程的使用率,就能 够有效提升系统的吞吐量。在同步服务调用中,如果服务端没 有返回响应,客户端业务线程就会一直阻塞(wait),傻等期 间,无法处理其它业务消息。 2、纠结的超时时间:服务的超时时间配置是个比较纠结的事 情,如果超时时间配置过大,如果响应慢,会导致线程被长时 间挂住; 间挂住;如果配置过小,则会导致超时增多,成功率降低。 3、雪崩效应:假如超时时间配置较大(例如3S),服务端响 应的平均时延达到了超时时间阈值,会导致业务线程长时间处 于wait状态,工作效率降低,业务堆积,发生级联的雪崩效应。 实践-全栈异步 Website: http://servicecomb.incubator.apache.org/ Gitter: https://gitter.0 码力 | 15 页 | 1.15 MB | 1 年前3
ServiceComb java SDK详解透明RPC、JAX-RS、SpringMVC统一规则: class Schema { // 传统同步调用,默认在线程池中执行 public String hello1(String name) { return “hello “ + name; } // 默认为reactive模式,不通过线程池执行 public CompletableFuturehello2(String name) 实例化并注册 spectator-reg-servo,设置较小的order,保 证比下面2类MetricsInitializer先执行 – Meters Initializer: 实现TPS、时延、线程 池、jvm资源等等数据的统计 – Publisher: 输出统计结果,内置了日志输出, 以及通过RESTful接口输出 • Metrics-prometheus提供与prometheus对接的能力 原始数据 日志输出内容是根据原始数据分析计算后的结果 • eventLoopContext-created 如果持续增加,说明有计划外的线程切换,需要定位 • threadPool 以线程池为单位进行统计,输出最小线程数、最大线程数、 当前线程数、当前排队任务数,以及平均每秒提交任务数、完成 任务数等等数据 • consumer 以transport、调用结果两个维度进行分组,以operation为 0 码力 | 21 页 | 1.15 MB | 1 年前3
消费者云CSE微服务实践无论是华为内部的DSF,还是开源的Netflix、Spring Cloud等,都无法完全满足业务的 选型诉求,而CSE则能够很好的满足我们的需求 仔细阅读了CSE的主要模块代码,包括网络通信、线程调度模型等,代码质量非常高, 对细节的把握比较好 选型试用时,大家对CSE的接受度比较高,使用CSE改造已有的Spring MVC代码相对较 容易些 华为内部的平台,无论是新需求 底层基于Netty,性 能比传统Servlet NIO性能高X倍 Highway RPC:采用Netty + PB,既支持多语 言,又保证高性能 高性能幵发设计:线程绑定技术,网络I/O线程 绑定后端的服务调度线程,最大限度减少锁竞 争。采用连接池机制,重用已有的连接 CSE在消费者云业务的实践-分布式事务 1、服务化乊前本地事务: 2、服务化乊后引入分布式事务:0 码力 | 22 页 | 1.39 MB | 1 年前3
ServiceComb介绍… 运⾏行行模型 围绕服务契约进⾏行行开发以及运维 异步化⽀支持 • 基于Vertx提供的异步内核 • 保持⾼高性能的同时⽀支持同步调⽤用⽅方式 • 将通信线程与业务处理理线程分离 • 操作级别线程池控制,⽀支持隔离仓 • ⽀支持多种异步编程接⼝口 • CompletableFuture • RxJava • Reactive Stream • ……. Process0 码力 | 16 页 | 877.58 KB | 1 年前3
ServiceComb雄关漫道服务发现 熔断 负载均衡 配置 跟踪 … 运行模型 围绕服务契约进行开发以及运维 异步化支持 • 基于Vertx提供的异步内核 • 保持高性能的同时支持同步调用方式 • 将通信线程与业务处理线程分离 • 操作级别线程池控制,支持隔离仓 • 支持多种异步编程接口 • CompletableFuture • RxJava • Reactive Stream • ……. Process Event-Loop0 码力 | 20 页 | 4.00 MB | 1 年前3
华为微服务框架ServiceComb1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 异步性能支持 • 基于Vertx提供的异步内核 • 保持高性能的同时支持同步调用方式 • 将通信线程不业务处理线程分离 • 操作级别线程池控制,支持隔离仓 • 支持多种异步编程接口 • CompletableFuture • RxJava • Reactive Stream • ……. Process0 码力 | 28 页 | 1.53 MB | 1 年前3
微服务环境下的系统治理与容错还必须记住:实现微服务架构并不是你的目标。你的目标是加速大型复杂应用程序的开发。 --Chris Richardson 容错 故障和问题 线上故障“画像“ 系统稳定性指标 可监控设计 同步调用下-无线程池隔离 同步调用下-线程池隔离实现方法 快速失败-超时 快速失败-时间窗口 快速失败-超时重试次数 区分部署和上线 常规系统保障流程 没有不出问题的系统 什么是混沌工程 混沌工程 故障注入 故障测试的区别0 码力 | 45 页 | 16.09 MB | 1 年前3
使用微服务架构快速开发万级TPS高可用电商系统[Github ] https://github.com/apache?q=servicecomb 其他优化… 步骤3 其他优化: 1. 可以使用JMeter集群进行压测,不断调优,每台最高约1250 线程, 同时发请求。JMeter 需要调高 Xmx / Xms。 2. 需要迅速伸缩,用了docker-compose。 注意NAT的性能问题。 启发:不一定要K8s,Istio, 一定是需求驱动。 [Github ] https://github.com/apache?q=servicecomb 其他优化… 步骤3 其他优化: 1. 可以使用JMeter集群进行压测,不断调优,每台最高约1250 线程, 同时发请求。JMeter 需要调高 Xmx / Xms。 2. 需要迅速伸缩,用了docker-compose。 注意NAT的性能问题。 启发:不一定要K8s,Istio, 一定是需求驱动。0 码力 | 15 页 | 1.46 MB | 1 年前3
共 17 条
- 1
- 2













