Netty — API网关Demo

上一小节我们总结了Reactor模型,Netty基于主从Reactor模型设计了自己的模型结构,使得Netty在不同的场景下都有非常亮眼的性能和可用性表现。进入到这一小节,我又想到了那句话”Talk is cheap, show me code”。虽然上一小节我们简单写了一个“快速开始”,但是这对于要达到快速使用Netty进行网络开发的目的还远远不够。在一小节中我们会通过一系列的Demo示例熟悉Netty的开发,从代码中感受他们的特性。最后我们会通过一个简单的聊天加深我们对Netty各个核心组件的理解。最后我们动手设计实践一个API网关,认识网关的功能和结构,同时也进入提升我们使用Netty进行网络开发的熟练度,同时为后续深入源码打下基础。这一小节代码比较多,不要害怕耐心看完并付诸实践,一定会收获满满。
Netty — API网关Demo

Netty流程剖析 — 服务启动源码

前面几个小节,我们梳理了几个核心组建,深入的分析了这几个组建的工作原理和一些实现细节,但是细看局部总是难以获得一个全局的视角,很难把它们真正的串起来。在梳理完这几个组件之后,我最想知道的就是启动的时候和读写操作的时候,这几个组件是怎么配合工作。虽然我也看过一切流程图,和一些简单的总结,但是自己没有深入过源码总感觉缺了点什么。我相信只有真正分析调试过源码才能真正理解,各个组件之间是怎么协作的,各个组件之间的设计要点是什么了。带着这些疑惑,我深入了源码也收获颇丰。这个部分,我们将对Netty的启动过程进行深入的分析,看看Netty是如何进行注册、绑定和监听。
Netty流程剖析 — 服务启动源码

Netty核心组件源码剖析 — ByteBuffer

在上一小节中,我们介绍channel,channel 的主要功能有处理网络IO读写,处理连接。这里需要注意的是channel仅仅是负责读写操作,在NIO中真正负责传输数据的是Buffer(缓冲区)。在NIO中,缓冲区的作用也是用来临时存储数据,可以理解为I/O数据的中转站。缓冲区直接对接channel,为其提供写入和读取的数据。通过操作buffer批量进行数据传输提高效率。在NIO中主要有八种缓冲区(ByteBuffer、CharBuffer、ShortBuffer,IntBuffer、LongBuffer、FloatBuffer、DoubleBuffer)。在网络中传输中,字节是基本单位,NIO使用的ByteBuffer作为Byte的字节容器,但是NIO中实现过于复杂,因此Netty又写了一套ByteBuf来代替NIO的ByteBuffer,这一小节我们将深入ByteBuf源码,探究ByteBuf底层原理与实现细节。
Netty核心组件源码剖析 — ByteBuffer

Netty核心组件源码剖析 — Channel

上一小节我们梳理了NioEventLoop,通过梳理我们知道,NioEventLoop本质上就是封装的执行线程,线程通过NioEventLoopGroup构造创建。NioEventLoop通过select()方法监听selectKey触发对应连接,读/写事件。并在每次的循环中执行一定的任务队列中的任务。而每次事件的触发都是基于Channel实现的。这里的Channel不是NIO中的Channel,而是我们Netty中封装了NIO Channel实现的Channel。这一小节我们将深入理解Channel的一些功能原理和具体的一些实现细节。
Netty核心组件源码剖析 — Channel

Netty核心组件源码剖析 — NioEventLoop

我们的源码分析会围绕着《Netty源码剖析与应用》这本书来学习,并且结合自己分析看源码,毕竟只有自己看到才是真的。这一小节我们要分析梳理核心组件NioEventLoop的源码,从源码角度看看NioEventLoop到底做了哪些事。第一次深入的研究源码学习,源码看得的确挺头大的,但是通过源码角度对Netty又有了一个全新的认知收获很多,那我们就一起来分析以下NioEventLoop吧。
Netty核心组件源码剖析 — NioEventLoop

网络编程 — Reactor模型与Netty

socket网络编程和IO模型,这一小节我们来入门Netty。对于很多程序员来说,Netty是非常遥远的。很多程序员认为平时的开发过程中基本不会使用到Netty,如果你也是这么认为的那就大错特错了。因为我们虽然不会直接写Netty的代码,但是我们每天都在间接使用Netty,大到我们的RPC框架dubbo、大数据的Hadoop,小到Redis的工具包,几乎所有实现网络通信的框架都是基于Netty实现的。所以学习Netty掌握Netty不论是对于我们来说都是开发网络程序,还是排查网络问题,亦或是框架设计思想上的提升都有莫大的帮助。这一小节我们先从最基本的Netty的结构模型开始,先建立一个Netty的基本的认知,随后我们编写Netty的HelloWorld加深对Netty的一些模块点的理解
网络编程 — Reactor模型与Netty

网络编程 — Socket编程与IO模型

网络的基础知识包括一些网络模型和协议。我们常说Talk is cheap, show me code.这一小节我们将解锁Socket网络编程,通过Socket来编写简单一些简单的网络小程序。我很早之前就接触过Socket网络编程,也能写一些简单的程序,但是始终感觉socket离我很遥远,不清楚socket到底是什么以及socket是如何工作的。如果你也有和我一样的疑问,通过这一小节的梳理让我们一起搞懂socket,解锁socket技能点。在编写完socket程序之后,我们还会思考如何提高我们socket网络程序的处理吞吐量连接数,并且引入我们的IO模型,深入理解几种常见的IO模型。
网络编程 — Socket编程与IO模型

网络基础 — 深入理解TCP协议

网络模型和一些网络协议,其中最大头TCP协议我们挖了一个坑,这一小节我们来填坑。这一小节我们主要分成三大块,第一部分我们将介绍,TCP的三次握手和四次挥手,通过简单的交互维护一个状态机之后建立一个稳定可靠的连接。我们有了一个稳定的连接,我们还需要数据包地稳定发送和接收。有了上面两个保障之后,如何充分利用网络带宽,成了最后的问题,这里我们介绍了传统算法和BBR算法。梳理完以上这些部分,我相信你对TCP协议会有更加深入的理解,让我们先从TCP的介绍开始吧~
网络基础 — 深入理解TCP协议

网络基础 — 网络模型与网络协议

网络对于程序员非常重要,可以说离开了网络软件程序就失去了70%的魔力。但是程序员对于网络相关的领域是又爱又恨,爱是因为网络赋予程序无限的可能性,恨是因为网络对软件开发来说几乎是透明的,不用刻意的去调整网络,我们也能进行业务的开发。掌握网络相关的知识并不容易,网络相关的领域的知识内容复杂且涉及范围广。可是如果要成为一个优秀的开发工程师,进行网络相关的开发,就必须对这个部分有一个清晰的结构化的认知。这一小节,我们会从网络的TCP五层模型和OSI七层结构模型开始梳理介绍,随后介绍每一层和每一层具有代表性的网络协议,最后我们简单的聊一聊一个数据包是怎么在网络上传输的。
网络基础 — 网络模型与网络协议

JVM GC篇 — 垃圾收集器(下)

前面一小节中,我们梳理了经典的垃圾收集器。从单线程的Serial串行垃圾收集器开始,聊到了CMS最后到G1,并着重的分析了CMS和G1并发垃圾收集流程和部分实现原理。这些垃圾收集器经过数千台服务器的验证淬炼,已经变得相当的成熟可靠,但是真的就是完美的垃圾收集器吗?答案是否定的。今天我们一起来看看相较于“经典”垃圾收集器的全新一代垃圾收集器 Shenandoah 和 ZGC。这种垃圾收集器能够实现超大堆的容量下,轻松实现垃圾收集停顿不超过10ms的目标,但是目前还处于实验状态,官方命名为“低延迟垃圾收集器”(Low-Latency Garbage Collector 或者 Low-Pause-Time Garbage Collector)。
JVM GC篇 — 垃圾收集器(下)

JVM GC篇 — 垃圾收集器(上)

前面一小节我们介绍了介绍了GC的一般性原理和垃圾回收算法,通过对前面知识的学习,我们基本掌握了垃圾收集的一般理论知识。但是理论终究知识在之上,距离真正的实践还有一定的差距。前面我们提到了第一个带有内存动态分配和垃圾收集的编程语言并不是 Java 而是1960年诞生的Lisp。当然这一小节中我们并不会梳理 Lisp 实现的垃圾收集器。这一小节我们会先从经典垃圾收集器入手,梳理各个垃圾收集器的特性、优缺点和适用场景。当然随着垃圾收集器的效率的不断提升其实现的复杂度也在不断提升。我们会主要的篇幅去介绍CMS和G1原理及部分实现细节,升华对垃圾收集器的理解。今天是六一儿童节,各位朋友坐好来,我们的梳理开始了。
JVM GC篇 — 垃圾收集器(上)

JVM GC篇 — 一般原理与垃圾收集算法

我们都知道 Java 程序员不用像 C++ 程序员一样手动申请和释放对象空间,这是因为 JVM 垃圾回收器的存在。为什么需要垃圾回收呢?因为空间是有限的,而我们运行程序完成各种各样的计算需要申请空间。但是空间不是无限的,如果我们的空间不够申请怎么办?这个时候就要释放内存,删除掉一些不用的无效的空间,来腾出空间来创建我们需要的对象。这就像我们的衣柜一样,我们买衣服回来放在衣柜里面,但是衣柜不是无限大的,所以当衣柜放不下的时候,我们就要清理丢掉小了的或者我们不穿的衣服,这样为新的衣服腾出空间。Java 自带GC会自动清理内存空间,而C++这种没有GC的语言,就需要使用手动清理空间了。全自动不用程序员操心的确很好,如果放仍不管也会引起其他的问题,那么怎么清理起来才是正确且高效。这就是一个有意思的问题,这一小节我们将从 GC 的一般原理和垃圾回收算法开始,逐步展开 Java GC 的世界。
JVM GC篇 — 一般原理与垃圾收集算法
Honesty
Honesty
花有重开日,人无再少年.
统计
文章数:
120