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连接,会新创建一个线程。
多线程的问题
- 线程创建资源开销大;
- 创建线程会占用内存,不能无限制创建;
- CPU使用率高;
线程池的网络通信编程(池化)和问题
线程池的参数:
- core pool size:核心线程数,使用OS的cpu核数作为参数,但是JDK8以后的可以在虚拟机参数中指定核心线程数,因为Java应用往往跑在docker上,不知道机器的真实核数是多少了。
- 最大线程数量:
优化方案:
- 使用线程池预先定义好线程的数量,解决了线程不断创建的开销;
NIO如何解决阻塞问题 && 原理
Netty 的原理
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!