最近开始看 Hadoop 的一些源码,睁开hadoop的源码包,各个组件分得较量清晰,于是开始看一下 IPC 的一些源码。
IPC模块,也就是历程间通讯模块,假如是在差异的呆板上,那就可以领略为 RPC 了,也就是长途挪用。究竟上, hadoop 中的 IPC 也就是基于 RPC 实现的。
行使 sloccount 统计一下 ipc 包中代码的行数,一共是 2884 行。也就是说,IPC 作为hadoop的基本组件,仅仅用了不到3000行的代码,就完成得不变且富有服从。
IPC 中的要害类相关:
对用户而言,可以直接行使的就是绿色的类。
通过 RPC 这个门面:
客户端可以建设响应的 proxy,接着就可以举办长途挪用。
而处事提供者则可以建设响应的 server,并举办响应的生命周期打点(start、stop),从而提供处事。
序列化
从上图也可以看出,client 和 server 的交互,是通过收集 connection, 而走收集的挪用,是必要走序列化/反序列话的进程的。
这个进程, IPC 行使了 Hadoop 的本身的序列化机制,统统都在 Writable 接口中,只要给定 writable 的 DataOutput 和 DataInput,就可以让 Writable 本身实现序列化。
一些题目和思索
-
client 是单例的吗 —— 可以领略为是,但着实不必然。可以跟踪 getProxy 的代码,固然每次城市新建一个署理工具,但底层的 Client 照旧和 SocketFactory 对应的。一样平常默认的,都是行使默认的 SocketFactory, 但假如你配置了 "hadoop.rpc.socket.factory.class.default" ,则会有新的Client与你自界说的 SocketFactory 对应。这时辰, client 就不是单例的。
-
client 与统一个 server 有几个毗连 —— 一个 client与一个 server 只有一个毗连,详细可以看天生的署理中,有一个 remoteId, 这个 remoteId 是和 client关联的,client 举办挪用的行使,会将此 remoteId 作为一个 connectionId。因此,一样平常一个 client 是一个毗连。
-
假如 client 是一个毗连,那么对此 client 的挪用,不都是串行的吗? —— 看你怎么领略了,在用户层面,也就是 client 挪用的要领,是可以并发的。client 底层是行使一个毗连来进也许的完成吞吐量。每个 request 和 response 城市有一个 id 关联起来。因此一个毗连上可以跑满哀求和响应。
-
因为收集题目,client挪用处事失败后,有重试机制吗 —— 在IPC中没有看到call的重试,必要上层去担保了。可是后头的挪用会从头成立毗连。
-
server 是单例的吗 —— 不必然。假如你只 getServer 一次的话。建设一个 server 的价钱长短常重的。通过上图你也可以知道,他必要有一个线程 (Listener)来 accept socket,同时必要一些 Reader线程 来举办 socket 的 read,尚有一个 Responder 来举办 socket 的 write,其它,尚有多少个 handler线程 来举办营业处理赏罚。因此,假如可以镌汰 server 的个数,就应该镌汰 server 个数。
-
袒暴露的处事是否应该是线程安详的 —— 是的,必然要线程安详。server 底层是通过 nio 举办 socket 操纵的,因此固然只有一个线程认真 accept,可是可以或许支持许多的client毗连。这些毗连在达到 server 端之后,很有也许就会并发执行统一要领(假如你的营业handler不止一个的话)
-
一个 server 要耗损几多线程资源? —— 让我们来算一下,一个 Listener 线程,多少个 Reader 线程(默认1个),多少个 Handler 线程(在 getServer 的时辰指定,一样平常1 - 10个),一个 Responder 线程。假如都凭证默认值来计较的话。起码必要 1 + 1 + 1 + 1 = 4 个线程。大概,不该该算多,假如哀求量不大的话,这些线程应该都被 blocked 住的。
总结
- Hadoop 的 IPC 是一个较量轻量级此外 RPC
- 从代码来看,只支持 java 历程之间的通讯
- 从没有重试机制、一个Client 只有一个毗连的机制来看,得当与应用收集情形较好的场景,适条约机架可能同机房的集群。
P.S. 看了一下 io 包中,着实有个 retry 的 package,内里就是一个重试机制。稀疏的是为啥这个 package 被包括在 io package 中。 (编辑:河北网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|