从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中。

最新文章

  1. linux常用命令(二)
  2. 【原创】使用Fiddler抓取手机网络包
  3. Winform 中DataGridView控件添加行标题
  4. R语言学习笔记:分析学生的考试成绩
  5. NOIP2008 普及组T4 立体图 解题报告-S.B.S.(施工未完成)
  6. rsyslog 日志统一搜集&message格式
  7. Entity Framework 使用sql语句分页(查询单表)
  8. MySql级联操作
  9. Cisco Packet Tracer做单臂路由的过程
  10. Redis基础及入门
  11. Vue(day6)
  12. Windows 7 下安装 docker 应用容器引擎
  13. 爬虫之requests请求库高级应用
  14. Jquery的window.onload实现
  15. svn eclipse链接
  16. English trip V1 - B 2. May I Help You? 它是多少钱? Teacher:Lamb Key:
  17. TCP/IP之蓟辽督师 转
  18. ArraySegmentSample
  19. 关于Nginx里面的配置文件里面的location参数的意思
  20. 一款表达谱数据分析的神器--CCLE--转载

热门文章

  1. Node.js小项目——学生信息管理系统
  2. 腾讯大牛教你简单的自动化测试模型(Python+Selenium)
  3. 【Flutter 实战】17篇动画系列文章带你走进自定义动画
  4. 滴滴Ceph分布式存储系统优化之锁优化
  5. composer源码简单分析(一)
  6. 如何写好转正答辩PPT
  7. 在C++/CLI环境下,千万不要把普通全局函数当标准C/C++的函数指针传递给native的库使用
  8. 用Python写一个随机数字生成代码,5行代码超简单
  9. 原生JDK网络编程- Buffer
  10. python基础 格式化输出