随着系统的业务场景复杂化
、架构方案的分布D服优化演进
,我们在克服问题的自研过程中,也总会延伸出新的鲁班技术诉求。分布式ID也是分布D服诞生于这样的IT发展过程中,在不同的自研关联模块内
,我们需要一个全局唯一的鲁班ID来让模块既能并行地解耦运转
,云计算也能轻松地进行整合处理。分布D服以下,自研首先让我们一起回顾这些典型的鲁班分布式ID场景。 1.1.1 系统分库分表 随着系统的分布D服持续运作 ,常规的自研单库单表在支撑更高规模的数量级时,无论是鲁班在性能或稳定性上都已经难以为继 ,需要我们对目标逻辑数据表进行合理的分布D服物理拆分
,这些同一业务表数据的拆分,需要有一套完整的源码下载 ID生成方案来保证拆分后的各物理表中同一业务ID不相冲突
,并能在后续的合并分析中可以方便快捷地计算 。 以公司的营销系统的订单为例 ,当前不但以分销与零售的目标组织区别来进行分库存储 ,来实现多租户的数据隔离,并且会以订单的业务属性(订货单、退货单 、调拔单等等)来进一步分拆订单数据。在订单创建的高防服务器时候 ,根据这些规则去构造全局唯一ID,创建订单单据并保存在对应的数据库中;在通过订单号查询时
,通过ID的规则 ,快速路由到对应的库表中查询;在BI数仓的统计业务里,又需要汇总这些订单数据进行报表分析
。 1.1.2 系统多活部署 无论是面对着全球化的各国数据合规诉求 ,还是针对容灾高可用的架构设计,模板下载我们都会对同一套系统进行多活部署。多活部署架构的各单元化服务 ,存储的单据(如订单/出入库单/支付单等)均带有部署区域属性的ID结构去构成全局唯一ID,创建单据并保存在对应单元的数据库中 ,在前端根据单据号查询的场景
,通过ID的规则,可快速路由到对应的单元区域进行查询 。对应多活部署架构的中心化服务
,亿华云同步各单元的单据数据时 ,单据的ID是全局唯一,避免了汇聚数据时的ID冲突。 在公司的系统部署中
,公共领域的 BPM 、待办 、营销领域的系统都大范围地实施多活部署。 1.1.3 链路跟踪技术 在微服务架构流行的大背景下,免费模板此类微服务的应用对比单体应用的调用链路会更长、更复杂
,对问题的排查带来了挑战
,应对该场景的解决方案,会在流量入口处产生全局唯一的TraceID,并在各微服务之间进行透传,进行流量染色与关联,后续通过该全局唯一的TraceID,可快速地查询与关联全链路的调用关系与状态,快速定位根因问题。 在公司的各式各样的监控系统 、灰度管理平台、跨进程链路日志中,都会伴随着这么一个技术组件进行支撑服务。 常用系统设计中主要有下图9种ID生成的方式
: 我们的系统跨越了公共、生产制造、营销、供应链、财经等多个领域。在分布式ID诉求下还有如下的特点: 综合参考了业界优秀的开源组件与常用方案均不能满足
,为了统一管理这类基础技术组件的诉求
,我们选择基于公司业务场景自研一套分布式ID服务:鲁班分布式ID服务。 目前鲁班分布式ID服务共提供"Long类型" 、“String类型” 、“MixId类型”等三种主要类型的ID,相关ID构成规则与说明如下: 3.1.2 Long类型 (1)构成规则 静态结构由以下三部分数据组成,组成部分共19位 : : 由FixPart+ServerPart组成
。 :由大区zone 1位/代理 agent 1位/项目 project 1位/应用 app 1位,组成的4位数字编码。 : (2)降级机制 主要自增部分在服务器获取初始值后,由客户端SDK维护,直到自增99后再次访问服务端获取下一轮新的ID以减少服务端交互频率
,提升性能,服务端获取失败后抛出异常
,接入业务侧需介入进行处理。 (3)样例说明 3.1.2 String类型 (1)构成规则 静态结构由以下五部分数据组成,组成部分共25~27位 : : :2~4位由业务方传入的业务类型标识字符
。
:
一、自研方案背景
1.1 分布式ID应用的鲁班场景 

二
、系统架构


三
、 设计要点
3.1 支持多种类型的ID规则 