公共流程图
2021-07-03 13:42:54 1 举报
公共流程图
作者其他创作
大纲/内容
9
READ/WRITE
getSingleton(A)
(11)Response
Authentication
DB
资源管理器(DB1)RM
user_role
5. 将期间收集的增量命令发送Slave
user id
结束
HandlerAdpter处理器适配器
Handler (Controller)
AfterReturning
8
prepare
2
13
事物管理器TM
是,直接丢弃任务
3. AOF
Client
ServletRequestListener
YES
Master
Redis
将结果返回
role_func
DECODE/ENCODE/Other Business
TM
12
Filter2
Survive区2 / 10
再回到属性填充B阶段,此时调用getBean(B)方法,可以直接从singletonObjects中取到
增强方法:SmartInstantiationAwareBeanPostProcessor#getEarlyBeanReference
record
Around
Acceptor
Handler
Order 收到 XID
(3)HandlerExecutionChain执行链:HandlerInterceptor1,HandlerInterceptor2,Handler
role_menu
11
多线程Reactor模型 - 变种一
Client 1
From1 / 2
beanFactory.resolveDependency()-> doResolveDependency()-> getBean(B)
线程数小于核心线程数?
堆-Xms最小空间-Xmx最大空间
通过反射在B类中将属性A赋值
店3
Realm
10
19
Eden区8 / 10
RM
回写缓存
调用addSingletonFactory(B)将 B 实例加到singletonFactories.add(B)在earlySingletonObjects.remove(B)移除
User
17
店1
Before
READ/WRITE/...
ThreadLocal
Redis 主从同步过程
Thread
Redis做发布订阅存在问题:消息丢失
8 正常
3
commit
在第二阶段如果发生了错误,是没有办法回滚已经committed的RM,需要人工进行处理
7
Selector
ready
1
18
requestDestroyed
AfterThrowing
Client 4
postHandler
ThreadPool
4. Master写操作完成之后将RDB文件发送给Slave
添加工作线程并执行
Client 5
(5)执行Handler
后续还有initializingBean方法增强,是否会冲突,或者有属性判断?
value
存放【正在创建】的BeansingletonsCurrentlyInCreation存放【完全初始化】的BeansingletonObjects存放【单实例】Bean 工厂singletonFactories存放【创建好,还未初始化(早期)】Bean earlySingletonObjects
preInstantiateSingletons()实例化非延时加载的单例Bean
Method
新生代1 / 3-Xmn 年轻代
Role
READ/WRITE/DECODE/ENCODE/Other Business
本地方法栈
否
店员
AbstractApplicationContext#refresh()
beforeSingletonCreation() 把B加到【正在创建】的bean
requestInitialized
处理JSON:RequestResponseBodyMethodProcessor
OP_ACCEPT
Client 3
8 异常
netty-socket-ioServer 2
阻塞队列是否已满?
16
事务管理器
createBean(A)-> doCreateBean(A)
ESOP
拒绝策略:AbortPolicyDiscardPolicyDiscardOldestPolicyCallerRunsPolicy
preHandler
4
14
(2)TC生成全局事务ID返回(XID)
对 B Bean做初始化、AOP、生成代理
缓存数据处理流程
虚拟机栈
Request
public class A { private B b; public A(B b) { this.b = b }}public class B { private A a; public B(A a) { this.a = a }}
ThreadLocalMap
线程池是否关闭?
doFilter
Spring 解决循环依赖
20
线程私有
Main Reactor
Handler 处理使用线程池,解决了单线程Reactor存在的问题
shiro security只能控制操作级别
11 正常
Menu
将保存快照期间内的写指令增量保存起来 appendonly.aof
第一阶段 prepare
(2)委托查找Handler
宝安区
把A加到earlySingletonObjects在singletonFactories中移除,方法返回正在创建还没有注入的singletonObject
HandlerInterceptor1
NO,返回空
把Account本地事务注册到TC,并且将执行结果也告诉TC作为分支事务
线程池线程数小于最大线程数?
getSingleton(B)
After
XA 两段式提交
view/edit...
(1)Request
Storage
getBean(A) -> doGetBean(A)
Storage收到XID
第二阶段 commit
分发消息
在第一阶段任意一个资源管理器在预提交过程中发生错误,会抛出异常,其他的RM都会回滚
(4)HandlerExecutionChain
是
Slave
从singletonsCurrentlyInCreation中移除A
资源管理器(DB2)RM
待确定
Reactor 模型
响应
netty-socket-ioServer 1
5
(8)ModelAndView
把Order本地事务注册到TC并且将执行结果也告诉TC作为分支事务
AOP-Aspect1
To1 / 2
认证
多线程Reactor模型 - 变种二
threadLocal
1. 设置一个菜单权限
用户
老年代2 / 3
JVM 运行时内存结构
public class A { @Autowired private B b;}public class B { @Autowired private A a;}
NO
beanFactory.resolveDependency()-> doResolveDependency()-> getBean(A)
店长
缓存存在数据?
Client 2
资源管理器
Function
Client 6
Sub Reactor
Comp_Role
把Storage本地事务注册到TC并且将执行结果也告诉TC作为分支事务
committed
Entry
程序计数器
ViewReslover视图解析
通过反射在A类中将属性B赋值
Company
(9)View
Task
构造器注入为啥不行?
threadLocals
1. 每个店员只能看到自己的数据,店长只能看到当前店的数据,而区长可以看到当前区的所有数据
Aspect2 order = 2
将A加到singletonObjects从earlySingletonObjects、singletonFactories中移除
(7) ModeAndView
如果存在AOP,此时A Bean已经做了增强,返回代理对象objectFactory
(6)返回ModelAndView
前端控制器DispatchServlet接收请求、响应结果
beforeSingletonCreation() 把A加到【正在创建】的bean
把B加到singletonObjects从earlySingletonObjects、singletonFactories中移除
Area
店2
调用addSingletonFactory(A)加到:singletonFactories.add(A)移除:earlySingletonObjects.remove(A)
HandlerMapping处理器映射器
视图渲染:jsp、html..
TC事务协调器
Store
区长
getBean(B) -> doGetBean(B)
启动一个后台线程,将内存数据快照保存(BGSAVE) dump.rdb
1. 通过构造器实例化 A 对象 时,需要 B 对象填充;2. getBean(B)时,容器没有B,通过构造器实例化 B 对象 时,需要 A 对象填充;3. 此时 A 还没有实例化,所以getBean(A) 又通过构造器实例化,需要 B 对象填充 ....... 死循环了
AOP
缺点:当某个Handler处理耗时较长,那么会阻塞其他Handler的执行,并且还会阻塞Accept,导致整个程序阻塞,无法接收请求
单线程Reactor模型
如果为多核CPU,为了更充分利用CPU资源,使用多个Reactor
方法区
Filter1
afterCompletion
Reactor
Response
线程共享
AOP-Aspect2
取出数据直接返回
监听器 - 过滤器 - 拦截器 - AOP
11 异常
操作数据库
Security Manager
南山区
Account
(1)开启全局事务
多个Aspect执行流程
1. 发送sync命令
放入队列,等待空闲线程执行
6
线程池执行原理
(10)将Mode数据渲染到View
对A做初始化、AOP、生成代理对象
从singletonsCurrentlyInCreation中移除B
Target Method
subject.login
HandlerInterceptor2
查询数据库是否有数据?
createBean(B)-> doCreateBean(B)
15
Order
Business
2. RDB
0 条评论
下一页