Akka Netty 比较
從Akka出現(xiàn)背景來說,它是基于Actor的RPC通信系統(tǒng),它的核心概念也是Message,它是基于協(xié)程的,性能不容置疑;基于scala的偏函數(shù),易用性也沒有話說,但是它畢竟只是RPC通信,無法適用大的package/stream的數(shù)據(jù)傳輸,這也是Spark早期引入Netty的原因。
那么Netty為什么可以取代Akka?首先不容置疑的是Akka可以做到的,Netty也可以做到,但是Netty可以做到,Akka卻無法做到,原因是啥?在軟件棧中,Akka相比Netty要Higher一點(diǎn),它專門針對(duì)RPC做了很多事情,而Netty相比更加基礎(chǔ)一點(diǎn),可以為不同的應(yīng)用層通信協(xié)議(RPC,F(xiàn)TP,HTTP等)提供支持,在早期的Akka版本,底層的NIO通信就是用的Netty;其次一個(gè)優(yōu)雅的工程師是不會(huì)允許一個(gè)系統(tǒng)中容納兩套通信框架,惡心!最后,雖然Netty沒有Akka協(xié)程級(jí)的性能優(yōu)勢(shì),但是Netty內(nèi)部高效的Reactor線程模型,無鎖化的串行設(shè)計(jì),高效的序列化,零拷貝,內(nèi)存池等特性也保證了Netty不會(huì)存在性能問題。
Spark基于這個(gè)思想在上述的Network的基礎(chǔ)上實(shí)現(xiàn)一套自己的RPC Actor模型,從而取代Akka。其中RpcEndpoint對(duì)于Actor,RpcEndpointRef對(duì)應(yīng)ActorRef,RpcEnv即對(duì)應(yīng)了ActorSystem。
RpcEnv相對(duì)于ActorSystem:
首先它作為一個(gè)Server,它通過NettyRpcHandler來提供了Server的服務(wù)能力,
其次它作為RpcEndpoint的容器,它提供了setupEndpoint(name,endpoint)接口,從而實(shí)現(xiàn)將一個(gè)RpcEndpoint以一個(gè)Name對(duì)應(yīng)關(guān)系注冊(cè)到容器中,從而通過Server對(duì)外提供Service
最后它作為Client的適配器,它提供了setupEndpointRef/setupEndpointRefByURI接口,通過指定Server端的Host和PORT,并指定RpcEndpointName,從而獲取一個(gè)與指定Endpoint通信的引用。
RpcEndpointRef即為與相應(yīng)Endpoint通信的引用,它對(duì)外暴露了send/ask等接口,實(shí)現(xiàn)將一個(gè)Message發(fā)送到Endpoint中。
總結(jié)
以上是生活随笔為你收集整理的Akka Netty 比较的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ntdll!NtTerminatePro
- 下一篇: APKMirror