版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一个会画图的工程师
发现小谢图画的很好,虽然有些也是他引用的,但是我觉得还是很好所以这里收集
下。
【RocketMQ源码学习】2-Namesrv
1.PUT_KV_CONFIG
2.GET_KV_CONFIG
3-Remoting模块
rocketmq-remoting模块是RocketMQ中负责网络通信的模块,被其他所有需要网
络通信的模块依赖。它是基于Netty实现的,避免了网络编程很多tricky的问题。
首先来看下RocketMQNettyServer的Reactor线程模型,一个Reactor主线程负责
监听TCP连接请求,建立好连接后丢给Reactor线程池,它负责将建立好连接的
socket注册到selector上去(这里有两种方式,NIO和EpolL可配置),然后监
听真正的网络数据。拿到网络数据后,再丢给Worker线程池。
Worker拿到网络数据后,就交给Pipeline,从Head到Tail一个个Handler的走下
去,这些Handler是在创建Server的时候指定的。NettyEncoder和NettyDecoder
负责网络数据和RemotingCommand之间的编解码。NettyServerHandler拿到解码
得至!J的RemotingCommand后,根据RemotingCommand.type来判断是request还
是response,如果是request,就根据RomotingCommand的code(code用来标识不
同类型的请求)去processorTable找到对应的processor,然后封装成task后,丢给
对应的processor线程池,如果是response就根据RemotingCommand.opaque去
responseTable中拿到对应的ResponseFuture,把结果set给它。
对于Client,经过Pipeline的顺序是从Tail至!JHead。不管是Server和Client,并
不是每次数据流转都得经过所有的Handler,而是会根据Context中的一些信息去
判断。
整个数据流转过程中还有很多hook,比如处理command前,处理command后,
发送数据前,发送数据后等。
【RocketMQ源码学习】4-消息发送
Broker端,消息的处理和落地
|SendMessageProcessor|
CONSUMERSENDMSGBACK
|EndTransactionProcessor|
|ENDTRANSACTION一
【RocketMQ源码学习】5-消息消费
Pull的过程比较简单(因为应用代码要去做比较多的事情),所以这里我主要来梳
理一下Push方式的整个过程。
|Rcbuucclmpl|[rabalanceSerrlce]
BubscriptionZaner
AnamorvAddrListMbiertpitoaDati
PullMeaaageServlca
Scheduled线程
topicSubacrib«lnfoTabla
--SiSPulIM*
____clanOfllineBrokcr
send!lanbatToAHBrokcrWithLockPullKaquait
pullKwueatQuoua
•updataToplcRoutalnfoFrooli
|DcfaultMqProducerlmpl|
topicPublisMnfoTable
IMQCUrntliutanccI
producttrrabls
erovplMQFr»duc*rlBMr
|OefaultMQPu>h<'nn«umer|
Broiip:MQHr*du«rln»«r
clicBtCoafig
叫rb«l«r5*mT;M»p<br»k«]<Ud<lrw]
各和API
»|DefaultMQPuihCon»umerlinc
【RocketMQ源码学习】6-消息存储
写消息MappedFileAppendMessage
[Put
MappedFile和物理文件是一一对应的,append的过程,消息的具体构成如图所示,
大部分字段都很好理解,这里重点关注下queueOffset和physicaloffset.
queueOffset是指对应的consumeQueue中的offset,physicaloffset是指该消息的
物理offset,即图中的wroteOffset,它等于fileFromOffset(当前mappedFile的物理
offset]力口上mappedFile对应的buffer的position(一个逻辑的offset).
1024*1024*1024
00000000000000000000
TOTALSIZE
MAGICCOOE
BOOYCRC
QUEUEID
00000000001073741824
PHYSICALOFFSET
00000000002147483648
:YSFSG
BORNTIMESTAMP
SIORtlIMtSIAfP
STOREIP
currentPos/wrotePosition=xxxxxSTOREPORT
RECONSUMETIMES
wroteOffset(物理Offset)=fileFromOfTset+currentPos
=00000000002147483648+xxxxx、、
fileFromOfTset=00000000002147483648PreparedTransactionOffset
oodyLengtn
txxlyContent
topicLength|topic
propertiesLengtpropertiesData
ReputMessageService也是一个单独的线程,它负责构建ConsumeQueue和Indexo
ConsumeQueue的结构如图:
ConsumeQueue#mappedFileQueue
r..........30W*20
00000000000000000000
0
CommitLogOffset
00000000000006000000
MessageTagHashCode
00000000001200000000
IndexFile
SlotTable
JavaNio
作者jjenkov最后写了一个niodemo/fdx321/java-nio-server.
过了一遍源码,工作过程大致如图:
[Tomcat学习笔记】2-整体架构
下面是Tomcat的整体架构
Server
GlobalNamingResources
Connector
Realm
Connector
Alias
Connector
告MUNDIEnterprise
Naming配直
这个类图是Tomcat最主要的一个结构:
Engine>Host>Context、Wrapper四种Container者B可以配置Valve,即使不配置,
每个Container代码里都有默认的Valve(StandardEngineValve,
StandardHostValve...)是处理请求的时候必须经过的。关于Pipeline和Valve,就
是一个水管中间有多个阀门,每个数据流过来都在阀门的地方被处理一下。四个
容器的Pipeline串起来,可以用张图来描述一下:
【Tomcat学习笔记】3-组件声明周期
«lnterface»
«lnterface»
Lifecycle
MBeanRegistration
+init()
+preRegister()
+start()
+postRegister()
+stop()
+preDeregiter()
+destroy()
+postDeregiter()
+addLifecycleListener
LifecycleEvent
+type
+data
LifecycleSupport
+listeners:LifecycleListener[]<
+fireLifecycIeEvent()
«lnterface»
LifecycleListener
+lifecycleEvent
LifecycleState这个枚举类定义了生命周期的各个阶段,这个状态机是这样子滴:
start()
Iinit()
NEW-»—INITIALIZING
|auto
\|/start()\autoautostop()
INITIALIZEDSTARTINGPREPSTARTINGSTARTED
destroy()I
autoauto
MUSTSTOP
\l/autoautostart()
STOPPINGPREPSTOPPINGSTOPPED
stop()
auto
MUST_DESTROY
|auto
destroy;)M/destroy()
FAILEDDESTROYING
destroy。|auto
\|/
DESTROYED
stop()
【Tomcat学习笔记】4-启动流程分析
它们是如何一层一层完成初始化和启动的
以StandardServer为例:
https:属
如下面的时序图所示:
【Tomcat学习笔记】9-ClassLoader
先来张图:
Tomcat的三大ClassLoader
为什么Tomcat里要自定义ClassLoader呢,先来考虑一个问题:一个Tomcat部署
两个应用,Appl和App2,Appl里定义了一个com.fdx.AAA类,App2也定义了一
个com.fdx.AAA类,但是里面的实现是不一样的,如果不自定义ClassLoader,
而都用AppClassLoader来加载的话,你让它加载哪一个呢,一个ClassLoader是
不能加载两个一样的类的。所以,ClassLoader最重要的一个功能就是类隔离。
【Tomcat学习笔记】14-Cluster
TomcatCluster这块代码较多,代码主要在org.apache.catalina.ha和
org.apache.catalina.tribes两个package,ha这个package主要做了两件事,或者说
Tomcatcluster主要就做了这两件事:集群间Session同步和集群War部署。
tribes则是Tomcat集群通讯模块。
Apache/Ngnix
Tomcat做了个集群的功能,大部分功能主要是解决session在集群中的同步,然
而在有点规模的互联网公司都不怎么用它。
1.对于无状态的应用,通过apache/ngnix负载均衡到各个tomcat就可以了
2.对于有状态的(session)应用,往往都自研分布式Session应用。分布式系统下
用Tomcat的session会有很多限制。
Tomcat还做了个功能,监控集群中应用的变更,如果有一台的War包发生了变化,
会通知其他机器自动重新部署。这个功能,在有点规模的互联网公司应该也不会用
它,肯定用自研的运维系统,可以支持更灵活的应用部署,方便和公司的运维体系
打通。
JavaVolatile学习笔记
图片
LocalDRAMOtherCPU
MemorySockets
L2CacheL2Cache
LICache
E
o
n
s
p
eU
sM
TT
ExecutionUnitsExecutionUnits•••
RegistersRegisters
Core1CoreN
说明:他引用的这个作者在JVM方面有一定的研究,图画的不错
/
Socket1Socket2
Registers/Buffers
~1cycle<1ns
~3cycles~1ns
~12cycles~3ns
~38cycles~12ns
QPI~40ns
~65ns
终于搞清楚Java的日志了
Java的日志框架很多,JUL,Log4J,Lobback,JCL,SLF4J等
先来看下slf4j官方的一张图:
SLF4Jboundtologback-classicwithSLF4JboundtoIog4jwith
redirectionofcommons-logging,Iog4jredirectionofcommons-logging
andjava.util.loggingtoSLF4Jandjava.util.loggingtoSLF4J
SLF4Jboundtojava.util.loggingwith
redirectionofcommons-loggingand
Iog4jtoSLF4J
Thesediagramsillustrateallpossible
redirectionsforvariousbindingsfor
reasonsofconvenienceandexpediency.
Redirectionsshouldbeperformedonly
whennecessary.Forinstance,itmakes
nosensetoredirectjava.util.loggingto
SLF4Jifjava.util.loggingis
notbeingusedinyourapplication.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 体育馆观众疏散路线图
- 服务租赁订金合同模板
- 古建筑翰林府修复合同
- 榆次劳动合同范例
- 办公楼装修脚手架施工分包合同
- 技术服务合同模板
- 丹毒的操作中医护理
- 天然气生产设备租赁承包合同
- 抹灰工程总承包合同模板
- 普通化妆品购销合同模板
- 电杆套筒基础施工方案
- 自我评价主要学术贡献、创新成果及其科学价值或社会经济意义
- 《篮球三步上篮》说课PPT
- 1500TD菜籽坯预处理及榨油车间工艺流程设计
- 军队文职招聘考试-数量关系100题
- 医务科运用PDCA循环提高手术安全核查执行率品管圈成果汇报
- 图说工厂品质管理(实战升级版)
- 北京科技大学第二批非教学科研岗位招考聘用模拟预测(共500题)笔试参考题库附答案详解
- 审计模拟实训教程第4版马春静课后部分参考答案
- 国家集输工技能题库(操作)
- 第2课《走月亮》第一课时(分层作业)四年级语文上册部编版
评论
0/150
提交评论