-
实现注册中心
-
实现rpc机制, 支持以下的策略, 如果不满足需求, 可自行扩展策略
2.1 支持多种rpc协议(jkr/jsonr/rmi)
2.2 支持多种序列化协议(原生/fast/kryo/hessian/protostuff)
2.3 支持多种均衡负载策略(随机)
2.4 支持多种分片策略(平均分)
- 实现server端
3.1 自动扫描service类, 并自动注册到注册中心
3.2 自动关掉空闲连接, 以便节省资源
- 实现client端
4.1 自动扫描service类, 并生成代理, 记录到 Referer 中
4.2 支持失败重试
4.3 支持自动重连
4.4 支持rpc请求分片调用
4.5 不支持连接池, 因为不需要: 由于netty发送请求是直接扔到队列中的, 建连接池并没有带来啥性能的提高
-
完善netty连接管理与io事件相关的调试/日志/修复bug
-
完善各种资源的释放
-
完成server/client的优雅关机
-
支持定时作业调度
-
支持分布式作业调度
- 支持mq雏形, 基于rpc来发送消息, broker负责将消息存到db中
-
将包
com.jksoa
重命名为net.jkcode.jksoa
-
支持限流: 支持令牌桶/计数器限流算法, 支持客户端与服务端双向限流, 支持在方法级注解配置
-
将自研的 Future 类体系, 换为 CompletableFuture
-
支持请求合并: 可根据key或group来合并请求, 可用于合并cache/rpc请求
-
支持请求计量
-
支持熔断
-
支持降级
-
添加 MethodGuard 方法级别的守护者, 支持缓存/合并/请求计量/限流/熔断/降级等注解, 并应用到rpc client中
-
完善日志
-
支持可继承ThreadLocal的线程池
-
支持请求拦截器
-
支持插件机制
-
添加分布式跟踪组件 tracer, 使用插件方式来动态接入原有的rpc系统
-
拆分子工程
-
完善根据统计指标自动降级
-
rpc service声明不在继承IService接口, 直接使用注解@RemoteService
-
完善均衡负载
-
完善 @RemoteService 注解, 添加属性 connectionHubClass 支持自定义连接管理, 添加属性 loadBalancer 支持自定义均衡负载
-
rpc支持双工, 详见rpc-client.yaml/rpc-server.yaml中的配置项 duplex
-
重构mq
5.1 broker负责将消息存到lsmtree文件中, 一个topic下有3个存储对象
5.1.1 队列存储: 子目录是queue, key是消息id, value是消息
5.1.2 索引存储: 子目录是index, key是消息id, value是待消费的分组id比特集合
5.1.3 进度存储: 子目录是progress, key为分组id, value是读进度对应的消息id
5.2 实现mq的注册中心, 支持topic分配信息的保存与分发, 用json格式存储在zookeeper中
5.3 引入broker leader来负责topic的分配
5.4 实现 ConsumerConnectionHub, 用于在broker端管理consumer连接
5.5 实现 BrokerConnectionHub, 用于在client端管理broker连接
5.6 支持消息的多分组消费, 从生成到存储到消费, producer生产消息时指定多分组, broker存储消息时使用BitSet来存储消息的分组, broker支持并发给多分组consumer推送消息, 只有该消息所有分组的consumer都消费完, 才能删除该消息
5.7 抽取 TopicMessagesExecutor 来执行单个主题的消息的消费, 同时继承 UnitRequestQueueFlusher, 通过改写属性 executor 来控制并发或串行执行
5.8 支持有序消息: 1 Message 添加属性 routeKey 来将消息路由到固定的队列与消费者上; 2 添加 SerialSuspendablePullMessageHandler 来支持串行的可暂停的拉模式的消息处理器, 从而保证消费处理是串行
-
添加序列号生成器: 基于zk的持久顺序节点来实现
-
优化分片
-
重构拦截器, 由原来的before()/after()优化为链式包装拦截处理
-
重构method guard, 支持rpc server
-
注册中心支持扩展.
-
添加rabbitmq的连接池
-
rpc server启动支持等待到关闭
-
支持基于mq的分布式事务
-
支持tcc的分布式事务
-
支持http server, 基于netty实现
-
支持异步的http client, 基于asynchttpclient实现
-
支持jsonr的rpc协议
-
将job抽取到独立项目
-
将自己实现的mq抽取到独立项目, 闭源
-
封装消息库, 支持kafka/rabbitmq client, kafka client解决consumer线程不安全问题
- 整合jphp, 支持同构异语言, 以便支持更多的动态性
1.1 引入jphp-java-ext
1.2 实现 WrapJavaReferer, 包装服务的java引用对象, 以便在php中进行rpc调用
1.3 实现 WrapPhpReferer, 包装服务的php引用对象(PhpReferer), 以便在php中进行rpc调用, 借助php的动态性, 我们可以动态的升级rpc接口
1.4 抽象 IMethodMeta 体系, 以便兼容java方法与php方法, 进而整合进 jkguard(熔断降级限流) 的守护体系中, 从而能守护java与php方法
- 整合集群框架(docker swarm)
2.1 完善部署脚本, 支持持续发布/持续部署, 支持云原生部署
2.2 在docker swarm集群内使用swarm自身的服务发现机制, 而不用第三方注册中心实现服务发现
- tracer支持jaeger实现