对学习开源服务和框架原理,源码一些体会

前一段时间上传了很多结构图和脑图,它包含了Java应用开发的大部分知识。要把这些知识串起来,或者更深入的了解,就得了解服务架构运行的原理,了解了原理有助于运用这些组件。

 

前面20多篇博客最好将其串起来阅读和思考,本人没有打算成为写作专业人员,所以格式上有些土,只是上传上来自己总结,好查看和对大家有一些帮助。

 

既然是开源服务和框架的原理,我们就列举几个服务和框架作为基础,和说明对象。

(我们这里将搭建和运行整合起来是一个服务的组件,称其为开源服务)

 

开源服务,如:

  1. Dubbo
  2. Zookeeper
  3. Nginx
  4. Slor
  5. MQ

 

框架,如:

  1. SpringMVC
  2. Spring
  3. Mybatis
  4. Flume
  5. Kafka
  6. Storm
  7. Spark

 

 

不论是上面的开源服务,还是框架,如果看源码,或者是扩展开发,会从三个方面去了解源码和原理。

  1. 线程池和线程
  2. 通信,有关通信协议(通信方式有:点对点,点对多的发布订阅)
  3. 算法,某些功能的高性能算法

然后将这三个方面串起来去阅读源码,了解其原理

 

  1. 就第一点讲解:(线程池和线程)

如:Dubbo和SpringMVC

Dubbo的Provider和Consumer分别是应用进程里面创建的线程池运行起来的。

SpringMVC的每一个Servlet运行,本身就是一个线程。

 

  1. 就第二点讲解:(通信,有关通信协议)

呈上启下,只要是通信,就会线程池运行做支撑,大部分的通信的底层是IO。对于Java来说尤其是NIO,因为大部分的协议Java底层都是NIO,(用NIO是为了防止IO阻塞,当然还有BIO,和AIO)

如:TCP,   UDP,   HTTP,   RTMP,   RPC  

代表:Netty通信

 

  1. 就第三点讲解:(算法,某些功能的高性能算法)

呈上启下,只要是通信,就会序列化做支撑,如何序列化,每一种序列化本身就是一套算法,不同序列化通信性能和安全性不一样。

如:Hession

代表:Netty序列化

 

 

现在我们来将这三点整合起来看看,以zookeeper为例。如果我们要来了解zookeeper的源码或者原理,我们就先看它的线程和线程有关的代码,然后就在看它的通信和通信协议方面的代码,最好看它的有关算法方面的代码。当然有些开源服务和框架的源码和原理不止这一个模块,我们都可以按照这种方式去阅读。

 

  1. 创建线程的过程:

zookeeper的启动和停止就是线程的生命周期创建和销毁的过程。

  • 1. 启动ZK服务:       sh bin/zkServer.sh start
  • 2. 查看ZK服务状态: sh bin/zkServer.sh status
  • 3. 停止ZK服务:       sh bin/zkServer.sh stop
  • 4. 重启ZK服务:       sh bin/zkServer.sh restart

 

  1. 通信,监听节点的增删查改

每个节点的通信是通过心跳机制连接,这种连接的底层和mina的机制很相似。

 

 

  1. 算法,分布式锁的一致性算法paxos

 

Paxos解决保证每个节点执行相同的操作序列,master是维护一个全局队列,所有的写操作都必须放入这个队列编号,无论多少节点,都按照这个编号来。

 

 

例如:(storm原理,源码也类似)

https://www.cnblogs.com/frankdeng/p/9572017.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Frank浩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值