-
mykit-bean:提供统一的bean类封装和整个框架使用的常量等信息。
-
mykit-common:封装整个框架通用的工具类。
-
mykit-config:提供全局配置能力。
-
mykit-core:整个框架的核心实现模块。
-
mykit-db:存放数据库脚本。
-
mykit-interface:整个框架的核心抽象接口。
-
mykit-service:基于Spring实现的核心功能。
-
mykit-rpc:以RPC方式对外提供服服务(后续支持Dubbo,motan、sofa、SpringCloud、SpringCloud Alibaba等主流的RPC框架)。
-
mykit-server:目前实现了Dubbo方式,后续迁移到mykit-rpc模块。
-
mykit-rest:基于SpringBoot实现的Rest服务。
-
mykit-rest_netty:基于Netty实现的Rest服务。
-
mykit-test:整个框架的测试模块,通过此模块可以快速掌握mykit-serial的使用方式。
发布模式
根据最终的客户使用方式,可分为嵌入发布模式,RPC发布模式和Rest发布模式。
-
嵌入发布模式:只适用于Java客户端,提供一个本地的Jar包,Jar包是嵌入式的原生服务,需要提前配置本地机器ID(或者服务启动时,由Zookeeper动态分配唯一的分布式序列号),但是不依赖于中心服务器。
-
RPC发布模式:只适用于Java客户端,提供一个服务的客户端Jar包,Java程序像调用本地API一样来调用,但是依赖于中心的分布式序列号(分布式ID)产生服务器。
-
REST发布模式:中心服务器通过Restful API提供服务,供非Java语言客户端使用。
发布模式最后会记录在生成的全局序列号中。
序列号类型
根据时间的位数和序列号的位数,可分为最大峰值型和最小粒度型。
1. 最大峰值型:采用秒级有序,秒级时间占用30位,序列号占用20位
| 字段 | 版本 | 类型 | 生成方式 | 秒级时间 | 序列号 | 机器ID |
| :-: | :-: | :-: | :-: | :-: | :-: | :-: |
| 位数 | 63 | 62 | 60-61 | 30-59 | 10-29 | 0-9 |
2. 最小粒度型:采用毫秒级有序,毫秒级时间占用40位,序列号占用10位
| 字段 | 版本 | 类型 | 生成方式 | 毫秒级时间 | 序列号 | 机器ID |
| :-: | :-: | :-: | :-: | :-: | :-: | :-: |
| 位数 | 63 | 62 | 60-61 | 20-59 | 10-19 | 0-9 |
最大峰值型能够承受更大的峰值压力,但是粗略有序的粒度有点大,最小粒度型有较细致的粒度,但是每个毫秒能承受的理论峰值有限,为1024,同一个毫秒如果有更多的请求产生,必须等到下一个毫秒再响应。
分布式序列号(分布式ID)的类型在配置时指定,需要重启服务才能互相切换。
数据结构
1. 序列号
最大峰值型
20位,理论上每秒内平均可产生2^20= 1048576个ID,百万级别,如果系统的网络IO和CPU足够强大,可承受的峰值达到每毫秒百万级别。
最小粒度型
10位,每毫秒内序列号总计2^10=1024个, 也就是每个毫秒最多产生1000+个ID,理论上承受的峰值完全不如我们最大峰值方案。
2. 秒级时间/毫秒级时间
最大峰值型
30位,表示秒级时间,2^30/60/60/24/365=34,也就是可使用30+年。
最小粒度型
40位,表示毫秒级时间,2^40/1000/60/60/24/365=34,同样可以使用30+年。
3. 机器ID
10位, 2^10=1024, 也就是最多支持1000+个服务器。中心发布模式和REST发布模式一般不会有太多数量的机器,按照设计每台机器TPS 1万/s,10台服务器就可以有10万/s的TPS,基本可以满足大部分的业务需求。
但是考虑到我们在业务服务可以使用内嵌发布方式