Akka Netty 比较
2024-09-07 17:13:18
从Akka出现背景来说,它是基于Actor的RPC通信系统,它的核心概念也是Message,它是基于协程的,性能不容置疑;基于scala的偏函数,易用性也没有话说,但是它毕竟只是RPC通信,无法适用大的package/stream的数据传输,这也是Spark早期引入Netty的原因。
那么Netty为什么可以取代Akka?首先不容置疑的是Akka可以做到的,Netty也可以做到,但是Netty可以做到,Akka却无法做到,原因是啥?在软件栈中,Akka相比Netty要Higher一点,它专门针对RPC做了很多事情,而Netty相比更加基础一点,可以为不同的应用层通信协议(RPC,FTP,HTTP等)提供支持,在早期的Akka版本,底层的NIO通信就是用的Netty;其次一个优雅的工程师是不会允许一个系统中容纳两套通信框架,恶心!最后,虽然Netty没有Akka协程级的性能优势,但是Netty内部高效的Reactor线程模型,无锁化的串行设计,高效的序列化,零拷贝,内存池等特性也保证了Netty不会存在性能问题。
Spark基于这个思想在上述的Network的基础上实现一套自己的RPC Actor模型,从而取代Akka。其中RpcEndpoint对于Actor,RpcEndpointRef对应ActorRef,RpcEnv即对应了ActorSystem。
RpcEnv相对于ActorSystem:
- 首先它作为一个Server,它通过NettyRpcHandler来提供了Server的服务能力,
- 其次它作为RpcEndpoint的容器,它提供了setupEndpoint(name,endpoint)接口,从而实现将一个RpcEndpoint以一个Name对应关系注册到容器中,从而通过Server对外提供Service
- 最后它作为Client的适配器,它提供了setupEndpointRef/setupEndpointRefByURI接口,通过指定Server端的Host和PORT,并指定RpcEndpointName,从而获取一个与指定Endpoint通信的引用。
RpcEndpointRef即为与相应Endpoint通信的引用,它对外暴露了send/ask等接口,实现将一个Message发送到Endpoint中。
最新文章
- linux常用命令(二)
- 【原创】使用Fiddler抓取手机网络包
- Winform 中DataGridView控件添加行标题
- R语言学习笔记:分析学生的考试成绩
- NOIP2008 普及组T4 立体图 解题报告-S.B.S.(施工未完成)
- rsyslog 日志统一搜集&message格式
- Entity Framework 使用sql语句分页(查询单表)
- MySql级联操作
- Cisco Packet Tracer做单臂路由的过程
- Redis基础及入门
- Vue(day6)
- Windows 7 下安装 docker 应用容器引擎
- 爬虫之requests请求库高级应用
- Jquery的window.onload实现
- svn eclipse链接
- English trip V1 - B 2. May I Help You? 它是多少钱? Teacher:Lamb Key:
- TCP/IP之蓟辽督师 转
- ArraySegmentSample
- 关于Nginx里面的配置文件里面的location参数的意思
- 一款表达谱数据分析的神器--CCLE--转载
热门文章
- Node.js小项目——学生信息管理系统
- 腾讯大牛教你简单的自动化测试模型(Python+Selenium)
- 【Flutter 实战】17篇动画系列文章带你走进自定义动画
- 滴滴Ceph分布式存储系统优化之锁优化
- composer源码简单分析(一)
- 如何写好转正答辩PPT
- 在C++/CLI环境下,千万不要把普通全局函数当标准C/C++的函数指针传递给native的库使用
- 用Python写一个随机数字生成代码,5行代码超简单
- 原生JDK网络编程- Buffer
- python基础 格式化输出