当前位置: 首页 > 工具软件 > Pigeon > 使用案例 >

java服务端限流框架,美团大众点评服务框架Pigeon

罗安和
2023-12-01

服务框架Pigeon架构

? Pigeon提供jar包接入 ,线上运行在tomcat里

? Monitor-CAT ,负责调用链路分析、异常监控告警等

? 配置中心-Lion ,负责一些开关配置读取

? Governor-服务治理门户

? 一个interface定义为一个服务 ,每个服务有一个唯一标识

服务的注册与发现

? 注册信息包括service name、ip、port、group等

? 服务提供方初始化完成后自动注册 ,也可以通过api或管理端注册

? 服务调用方通过service name去发现服务

Registry (Zookeeper)

/DP/SERVER/com.dianping.iphub.IpService

10.66.1.1:5020,10.66.1.2:5020

服务的注销

? 服务地址通过zookeeper持久节点存储 ,避免临时节点的不稳定

? 关闭tomcat时会调用pigeon脚本去注册中心摘除本机服务地址

? 对于残留的无效地址 ,有独立的心跳服务会检测无效的服务地址进行zookeeper删除

? 客户端对于无效的服务地址 ,内部也有心跳检测机制等来保证

编程方式、序列化

? 基于Hessian序列化 ,通过netty实现自定义TCP协议格式 ,开发成本低 ,通过java interface定义服务接口

? 基于Thrift序列化 ,通过netty实现自定义TCP协议格式 ,性能更高 ,开发成本稍高 ,通过定义IDL或annotation方式定义服务接口 ,

更方便接入其他语言 ,thrift会有一些制如方法不支持重载、struct不支持继承等

调用模式

? Sync ,同步等待返回调用

? Future ,可实现并行发出多个请求 ,总耗时是最慢的请求的执行时长 ,推荐方式

? Callback ,发出结果不等待返回 ,结果回调 ,完全异步化

? Oneway ,无需返回结果

客户端心跳

? 心跳线程客户端发起 ,定期发送 ,服务端响应 ,连续5次不成功则在本地路由缓存里摘除该服务端节点 ,摘除后下次尝试重连

客户端负载均衡

? 多种负载均衡策略 ,默认是自适应策略 ,客户端会计算发往每个服务端节点的在途请求数 ,新的请求会优先选择在途请求数最小的节点发送

? 预热控制 ,针对服务端某个刚启动的节点 ,客户端按从慢到快的频率 ,将请求逐步发往这个节点 ,防止服务端刚启动的节点大量请求进来导致大量超时

? 也可自定义负载均衡策略

服务限流

? 可以在服务端对某一个服务接口的某一个方法 ,针对不同的调用方应用的请求进行流量QPS限制 ,超出阀值后调用端会收到服务拒绝异常 ,未来会在调用端进行限流

? 服务端会对任意接口的请求所占用的线程数进行控制 ,防止单个接口某个方法用尽线程池所有可用线程

服务隔离

? 服务端默认会监控每个接口的超时情况 ,超时多的接口请求会自动路由到独立的慢线程池处理 ,如果该接口恢复正常 ,则会回到正常共享线程池处理

? 也可以为某些接口方法配置独立的线程池 ,剩余的使用公共池

服务监控分析与告警

? 通过监控系统CAT (已开源 )分析调用链路 ,包括调用量、TP耗时、异常、请求及响应大小、区间耗时明细、QPS等

项目地址:https://github.com/dianping/pigeon

采用的监控系统:Central Application Tracking

项目地址:https://github.com/dianping/cat

监控系统环境搭建:http://www.cnblogs.com/softidea/p/5719331.html

 类似资料: