2框架源码分析方法
源码分析方法
剖析代码结构的思路
基于分包设计,为什么代码结构要这么设计?
基于架构演进过程,如何从易到难对框架进行逐步拆解?
基于核心执行流程,如何抓住主流程对框架进行分层剖析?
基于基础架构组成,如何掌握从基础架构扩展到具体实现框架的方法?
基于可扩展性设计剖析代码结构,如何在框架中预留可扩展点?
基于通用外部组件(外部组件集成)剖析代码结构,如何从系统集成角度出发把控代码逻辑?
基于基础开发规范剖析代码结构,如何从规范切入理解系统执行流程?
基于可扩展性设计阅读源码
微内核架构
微内核:内核系统 + 插件
内核系统定义插件的实现规范,管理插件的生命周期
各个独立的插件根据规范完成某项业务功能并嵌入到内核系统
实现:不同的语言实现方式不同
Java实现方式 - SPI
Service ProviderInterface,服务提供接
可认为SPI就是一个个扩展点(系统提供扩展性的扩展点),系统可通过SPI动态加载各种扩展点的具体实现
(案例回顾Sentinel Process Slot)
案例 - ShardingSphere
1 | @SingletonSPI |
resource/META-INF.service目录下有对应配置
基于分包设计原则阅读源码
无环依赖原则 Acyclic Dependencies Principle ,不应该存在环状结构
稳定抽象原则 Stable Abstractions Principle ,稳定抽象
稳定依赖原则 Stable Abstractions Principle ,顶层稳定,被依赖的组件应该具有更好的稳定性
shardingsphere-sharding-core包 高层组件依赖
shardingsphere-infra-route包 底层组件
基于核心流程阅读源码
内核层:KernelProcessor
1.SQLParserEngine 解析引擎 ->
2.ShardingSQLRouter 路由引擎->
3.SQLRewriteEngine 改写引擎->应用层:ShardingSphereStatement
4.ExecutorEngine 执行引擎 ->
5.MergeEngine 归并引擎 ->
基于架构演进阅读源码
ShardingSphere代码结构的演进
分库分表 -> 强制路由 -> 读写分离 -> 数据脱敏
示例:
SQLRewriteContext
ShardingSQLRewriteContextDecorator(分片) -> EncryptSQLRewriteContextDecorator (分片+数据脱敏)
基于外部组件阅读源码
ShardingSphere分布式事务集成多种实现方式
若熟悉集成方式中的一种则触类旁通