-
Apache Mina是什么?
Apache MINA is a network application framework which helps users develop high performance and high scalability network applications
Apache Mina是一个能够帮助用户开发高性能和高伸缩性网络应用程序的框架。
-
我们公司使用Apache Mina 做什么?
在结算系统、交易系统作为核心网络基础组件。(快的打车,游戏,物联网,金融领域)
- Mina 作者简介 、项目简介
3.1 Mina作者背景
开源项目2:Netty: http://netty.io/
Netty is a NIO client server framework which enables quick and easy development of network applications such as protocol servers and clients.
开源项目3:Armeria: http://line.github.io/armeria
Armeria is an open-source asynchronous RPC/API client/server library built on top of Java 8, Netty 4.1, HTTP/2, and Thrift.
类似:Dubbo(阿里) Motan(新浪) finagle(Twitter) thrift(facebook ) Grpc(google)
4、操作系统网络模型以及Java网络编程历史发展
4.1操作系统网络模型简单介绍
《Unix网络编程》总结了网络编程的5中模型。
4.2 Java 编程世界中网络编程发展(JDK中提供bio、nio、aio的发展)
4.2-1 BIO 阶段
C、C++编程阶段占据服务器端巨大部分市场。因为可以充分利用操行系统提供的IO功能
4.2-2 NIO 阶段
2002年2月26日,J2SE1.4发布,Java平台提供NIO功能。
使用select epoll等操作系统api .
4.2-3 AIO 阶段
2011-07-28 Java SE 7.0发布,Java平台提供AIO功能。
使用windows IOCP完全端口系统api 和linux使用AIO系统api
5、Mina架构与源代码剖析(重点)
5-1 、SEDA架构
SEDA(Staged Event-Driven Architecture)的核心思想是把一个请求处理过程分成几个Stage,不同资源消耗的Stage使用不同数量的线程来处理,Stage间使用事件驱动、队列连接。
5-2 SEDA架构优点:
5-3 Apache Mina 、Netty 对SEDA 架构理论实践
5-4 Apache Mina : Acceptor 线程、IoProcessor 线程
1、bind事件,registerQueue(ConcurrentLinkedQueue)队列,Acceptor单线程,建立本地监听。
2、accept事件,newSessions(ConcurrentLinkedQueue) 列队,IoProcessor线程池,创建IoSession,执行read、write、close事件。
默认线程池数量:Runtime.getRuntime().availableProcessors() + 1;
平摊原则: pool[Math.abs((int) session.getId()) % pool.length]
3、write事件,flushingSessions->WriteRequestQueue
4、read事件
5-5 Netty Boss 线程、Work线程
6、Netty4.x 继往开来
Netty已经成为Java编程世界中网络库事实标准。
7、结束