2017年9月

简单聊聊NIO和Reactor

最近有人让大叔来几篇文章讲讲Netty. 想了几下之后, 还是觉得应该先来单独聊聊NIO和Reactor这两个东西.

NIO

关于NIO(non-blocking IO), 大叔首先推荐一篇文章, 这个仁兄的这个故事讲解的蛮到位的.一个故事讲清楚 NIO.

简单总结下, NIO就是在BIO的基础上, 使用多个线程(组)分工干活, 并且使用异步请求的方式将系统的潜力尽可能地挖掘出来.
用作者的总结就是: 分而治之,将任务拆分开来,由专门的人负责专门的任务.

提到Java的NIO, 就要提到下面三个东西:

  • Buffer
  • Channel
  • Selector

Buffer

NIO直接操作的就是Buffer, 数据要么通过Buffer取出, 要么通过Buffer写入. 它就是一个可读可写的内存区域.

Channel

数据通过Buffer从Channel中读, 或者通过Buffer写入到Channel中. 它是数据传输的通道, 是干道.

Selector

Selector允许单线程处理多个 Channel。就好像一个服务员同时照看好几个窗口, 一个哪个窗口有事情(事件)触发, 就会立即进行相应处理.
为了实现Selector管理多个SocketChannel,必须将多个具体的SocketChannel对象注册到Selector对象,并声明需要监听的事件(要不然Selector不认识事件肿么办?).

Reactor

Reactor采用主从多线程模型, 采用多个Reactor,每个Reactor都在自己单独的线程里执行。如果是多核,则可以同时响应多个客户端的请求,一旦链路建立成功就将链路注册到负责I/O读写的SubReactor线程池上。

Spring Cloud之组件概览

Spring Cloud本身和云没有什么关系. 可以认为他是一个工具集, 可以快速构建分布式系统的工具集.
Spring Cloud以Spring Boot为基础, 提供(或者说整合了)一些强大的项目作为一个快速构建微服务分布式系统的脚手架.

有一句话说的好, 我们不制造轮子, 我们只是轮子的搬运工.

- 阅读剩余部分 -

由单体程序到微服务

很多的程序最开始都是单体程序, 在Java Web的世界里, 单体程序就是一个war,包含了需要包含的一切

  • class
  • 依赖jar
  • 页面
  • 配置文件
    ...

这种程序挺好的, 在项目比较小的时候, 单体程序可以让我们很快地上线产品, 很快地迭代新功能. 直到有一天, 增加一个小功能, 都会牵出几个小虫子来, 再到最后, 这个单体程序的代码都没有人愿意去改了. 因为改她就意味着会引发问题, 还都是莫名其妙的问题.
一般在这个时候, 程序的代码行数基本都已经几千上万了, 或者更多.
出现这种问题, 就可以考虑改变一下架构, 比如--微服务.

- 阅读剩余部分 -