背景: 目前市面上的RPC框架很多,然后真正适用于自己公司的却不多,大部分框架为追求功能上的完整性而牺牲了 易用性。如很多框架支持跨语言,然后在每个公司内部后台技术中往往使用的是同一种语言。为了支持跨语言,各类 框架技术不得不定义自己的通信协议,维护大量复杂的接口定义文件是非常令开发人员头疼的事情。再如通信加密模块, 实际上在一个公司内部的各个系统中,基本上是用不着加密的。SSL加密一般只用于为外部系统提供接口的场景下。 这些功能使得框架变得非常大而复杂,学习成本也非常高。
目标: .深入介绍RPC框架原理 .实现一个简单高效RPC框架(RpcLite) .让开发者深入理解RPC框架,并可通过简单改造本文对应项目RpcLite,达到构造适用于自己项目的RPC框架
ROAD MAP
- 实现基本通信功能
- 实现通过接口rpc调用
- 调整代码结构
- 调整package结构,重命名
- 确定常用参数类型在框架中可以正常使用(8种基本类型,Date,BigDecimal,List,自定义类型T(T implenment Serialize)) 3)返回类型为 T implenment Serialize
- 为接口中方法增加Cache,启动时将所有方法加入cache,不必每次在调用前通过反射判别调用方法,提高效率。
- client端健壮性功能,自动重连
- 实现固定个数的Server端load balance功能
- 实现client端与Spring框架的集成
- 实现服务注册与发现功能
- 换成kyro序列化方式。
- 实现限制类型Exception
- 完善服务幂等配置
- 为底层kryo序列化加异常处理,增强健壮性
- 完善Log
- 压力测试与持续优化
- 完善TestCase
优点:
. 轻量级(代码量少,依赖的jar少),纯java实现,学习成本非常低。 . 支持java异常 . 人性化的接口定义(不需要写晦涩的IDL文件) . 简洁的配置
缺点:
. 不能跨语言
optional:
. 目前采用的是java原生序列化方式,可以在将来换成更加高效的序列化方式 . 为框架添加health check模块 . 为框架添加SSL加密模块 . 为框架添加IP黑名单,白名单功能