2框架源码分析方法

源码分析方法

剖析代码结构的思路
基于分包设计,为什么代码结构要这么设计?
基于架构演进过程,如何从易到难对框架进行逐步拆解?
基于核心执行流程,如何抓住主流程对框架进行分层剖析?
基于基础架构组成,如何掌握从基础架构扩展到具体实现框架的方法?

基于可扩展性设计剖析代码结构,如何在框架中预留可扩展点?
基于通用外部组件(外部组件集成)剖析代码结构,如何从系统集成角度出发把控代码逻辑?
基于基础开发规范剖析代码结构,如何从规范切入理解系统执行流程?

基于可扩展性设计阅读源码

微内核架构

微内核:内核系统 + 插件
内核系统定义插件的实现规范,管理插件的生命周期
各个独立的插件根据规范完成某项业务功能并嵌入到内核系统

实现:不同的语言实现方式不同

Java实现方式 - SPI

Service ProviderInterface,服务提供接
可认为SPI就是一个个扩展点(系统提供扩展性的扩展点),系统可通过SPI动态加载各种扩展点的具体实现

(案例回顾Sentinel Process Slot)

案例 - ShardingSphere

1
2
3
4
@SingletonSPI
public interface SOLRouter<T extends ShardingSphereRule> extends OrderedSPI<T> {}
public final class ShardingSOLRouter implements SOLRouter<ShardingRule> {}
org.apache.shardingsphere.sharding.route.engine.ShardingSOLRouter

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分布式事务集成多种实现方式
若熟悉集成方式中的一种则触类旁通