# rpc **Repository Path**: hsyj/rpc ## Basic Information - **Project Name**: rpc - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2022-03-03 - **Last Updated**: 2023-05-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RPC项目 #### 项目模块 - rpc-core : rpc核心模块 - rpc-spring:rpc整合spring - rpc-interface:rpc example的接口 - rpc-user:rpc example的user服务 - rpc-order:rpc example的order服务 #### 项目实现 使用方面 - @EnableRpc(scanBasePackages = "com.lry.order.service")即可完成启动rpc功能 - @RpcService注解即可完成服务导出 - @RpcReference即可完成服务引入 公共方面 - 实现了zip,gzip,SevenZ,BZip2等压缩解压缩工具 - 实现了fastjson,hessian,kryo等序列化工具 - 实现了基础spi组件 - 实现了加权随机,加权轮询,一致性hash负载均衡 - 实现了zk注册中心 - 实现了jdk,cglib动态代理 - 实现了Filter机制,远程调用可以实现接口扩展自定义 - 实现了RPC通用协议设计,完整netty通信 #### 项目架构 ![img.png](res/output.png) #### 容错设计 ##### 超时重试 超时重试极有可能造成服务调用间呈指数级增长,故采取下列四种方式解决: - 下游重试失败后向上游传递错误码,上游不重试 - 上游重试时向下游传递代码,下游不重试 - 滑动窗口统计最近10s 失败/成功的比例,超过0.1,则不重试 - 基于tcp ttl的思想,上游传递ddl=200,经过一次服务调用业务耗时花费100ms,ddl=100ms ,如果某时刻ddl<0,则不继续往下调用 ##### 熔断降级 - 断路器 - backup ##### 限流 流控效果:直接拒绝,匀速排队,warmup冷启动 算法:计数器,漏桶,令牌桶,滑动窗口统计数据 ##### 故障规避 对故障服务采取一定时间规避手段,可以记录一个未来时间戳,直到未来时间为止都不能访问这个服务 ##### 降低p99 在第一次服务调用返回之前,提前重试,以访问量换取低延迟,结合超时重试的手段,让重试和延迟达到平衡 #### 项目运行截图 ps: 需要安装zk user服务相关截图: ![img.png](res/img.png) user配置如下: ```yml server: port: 8081 rpc: application: name: rpc-user-consumer transport: serializer: compressor: registry: address: zookeeper://127.0.0.1:2181 consumer: token: 123fdsafaskd;f234-r0fdaofsdpaofpdasfdsar213dsafa proxy: router: ``` order服务相关截图: ![img_1.png](res/img_1.png) order配置如下: ```yml server: port: 8082 rpc: application: name: rpc-order-provider transport: serializer: compressor: registry: address: zookeeper://127.0.0.1:2181 provider: port: 20880 weight: 1 token: 123fdsafaskd;f234-r0fdaofsdpaofpdasfdsar213dsafa ```