netty-1

本文最后更新于:2023年4月21日 上午

分布式架构

要见森林,不要局限于树木。

netty

把微服务中的服务的功能,使用中间件来解决。

将依赖代码注解变为 服务网格化编程,ServerMash。

把有侵入性的服务从代码中转嫁到中间件中。

netty 是解决通信问题的,效率要高。

还是要用 Spring Cloud 的,要用 RPC 的。

Dubbo RQ

课程大纲

  • Netty and 源码
  • RPC编程 grpc
  • Dubbo and 源码
  • MQ and rocketmq源码:(kafka rocketmq) 源码中rocketmq的使用
  • 分布式算法:强一致性算法;对分布式领域的有更深入的理解;(CAP, 存储都是CP, AP)
  • SpringCloud and 源码

21min

目的:认识到软件的思想,提高设计能力,了解目前系统架构的发展演变,与底层实现。

架构师和业务开发是两个工作。

Netty

Netty 是什么

Netty 是一个异步事件驱动的网络应用框架,解决的是服务器和客户端之间的通信问题。它是一个NIO客户服务器框架
它是对Java中NIO的封装。

常用netty4版本。

为什么需要 Netty && Netty能做什么

  • 它是行业内网络通信编程的标准,用于其他中间件的底层。
  • 用于游戏行业;
  • 框架的通信底层,解决进程间通信问题;
  • 是分布式系统,通信的核心;

NIO是什么

前面在Netty的介绍中提到,它是一个NIO客户服务器框架,那NIO是什么呢?

  • NIO的全称是 None Blocking IO 非阻塞IO,在JDK1.4中引入,用于解决阻塞的问题。
  • 非阻塞的优点:能够在网络通信过程中,解决通信阻塞的问题,更加合理利用系统资源,提高系统并发效率。支持高并发的系统访问。

传统网络通信的开发方式(socket)和问题

对于一个客户端的socket连接,会新创建一个线程。

多线程的问题

  1. 线程创建资源开销大;
  2. 创建线程会占用内存,不能无限制创建;
  3. CPU使用率高;

线程池的网络通信编程(池化)和问题

线程池的参数:

  1. core pool size:核心线程数,使用OS的cpu核数作为参数,但是JDK8以后的可以在虚拟机参数中指定核心线程数,因为Java应用往往跑在docker上,不知道机器的真实核数是多少了。
  2. 最大线程数量:

优化方案:

  1. 使用线程池预先定义好线程的数量,解决了线程不断创建的开销;

NIO如何解决阻塞问题 && 原理

Netty 的原理


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!