Pegasus来源于点评的开源框架pigeon:https://github.com/dianping/pigeon
什么是Pegasus
Pegasus是一个高性能的分布式服务框架,致力于提供RPC远程服务调用方案,并可作为精简版SOA服务治理的方案。实现基本的RPC,路由,负载均衡,容错,统计报表,服务注册订阅功能。
其核心模块包括以下几类:
- 远程通信:基于NIO的Socket通信,"底层异步上层同步" + "请求|响应" 模式的信息交互方式,可支持多种序列化协议。
- 集群支持:提供服务负载智能感知路由策略(load balance),容错(failover),以及服务集群等支持。
- 服务注册:实现服务自动/手动注册,服务调用者自感知的pub/sub模型。
- 监控分析:可插拔的集中式服务调用监控分析中心。
- 异构支持:提供http交互接口的支持,以便各类异构系统的接入。
- 调用方式:支持多种服务调用方式,如:sync, future, callback, oneway。
为什么需要Pegasus
随着应用规模的不断扩大,传统的垂直应用架构及应用堆砌已无法满足,急需一套分布式服务架构以及配套的服务治理框架,以便推动整体业务架构的演进。
技术架构的演进之路简述:单一应用优化 => 垂直拆分 => 分布式架构 => 分布式服务治理 => 云服务架构
构建一个稳定,高效,容错,易维护,可监控的服务调用框架,以便推动公司业务系统朝着SOA架构演进,从而使整体业务架构更加清晰,可控和可度量,最终实现业务产品的健康,敏捷发展。
单一应用优化:应用作为单一包部署,以部署多台机器和数据库表结构及sql为优化手段。
垂直拆分:单一应用按照业务模块拆分为多个独立的应用,分散流量并各自根据流量进行横向扩展,此时数据库可能也已按照业务拆分开,减小单库的压力。
分布式架构:应用之间存在复杂频繁交互,此时应抽取核心业务形成业务中心,为其他应用提供服务,具体业务应用应尽量薄,以便能够快速响应业务需求变更。
分布式服务治理:业务交互越来越复杂,人为掌控已越来越难,此时应该有治理系统专门负责,包括分析业务依赖,监控业务性能,优雅升降级,容量规划等,以监控和提升服务质量,支撑决策分析。
云服务架构:业务脉络继续无限增长,一套敏捷和高质的完整支撑框架变得越来越重要,缩短开发上线的生命周期,降低试错成本(快速试错),资源优化调配,灰度发布等等,都需要一套自动化的,全局的资源调配架构。包括iaas,paas及一整套配套的工具和系统支持,如iaas的管理工具接口,paas的配置中心,自动化发布流程及工具,自动化QA系统等等。相当复杂(公有云更甚),需要投入很大的人力与物力,但若成功构建,效果明显。
我们可以在哪里用Pegasus
Pegasus可以应用于内部所有Java系统之间的远程服务调用(或其他语言系统对Java系统的调用),它所提供的高性能﹑智能负载路由﹑容错﹑集群等特性,为打造快速﹑稳定﹑可靠的服务提供了技术保障,也为推进SOA化提供了基础平台支持。
Pegasus的性能
Pegasus采用NIO方式传输二进制流数据,并采用长连接方式减少握手,比一般的http短连接协议(如soap)更快,从而提高业务吞吐量。另外通过智能的全局负载均衡策略,能够更加合理的调配资源,从而提高整体性能。
Pegasus VS Other RPC
Pegasus调用方式
Pegasus类图
Pegasus协作图
Pegasus如何保持高性能
- pegasus通过不断的心跳检测,判断服务提供者是否正常服务,一旦与服务提供者的连接中断,或者连续几次心跳没有反馈(如虚拟机假死,但socket连接仍建立),那么就认为该服务提供者出现了异常,会自动将该提供者从客户端的可用列表中摘除,后续的请求将不再派发给该异常服务端,保证所有的请求都能被正确处理,从而达到高可用。而一旦该提供者恢复正常(如重启后),那么客户端重连任务会自动探测到它,并重新将其加入到可用列表中,接收并处理新的请求。
- 因为心跳检测有时间间隔,在间隔期如果某个服务提供者的连接中断,此时如果有请求发往该提供者会出现异常,此时我们会将该请求发往其他可用的提供者,即重试一次,由于这种情况概率很低,加上重试时又会碰到重试的提供者也瞬间中断的几率几乎为0,所以完全确保了请求会被发送到可用的服务提供者。