ccjeff's random thoughts

Chogori Design: K2 process

K2 process architecture

Chogori 的process model完全基于seastar, 由Seastar提供了单线程高并发的能力。为了最小化减少线程之间调度的overhead,Chogori在启动的时候会讲N个reactor固定的部署在某个固定的cpu core上。在每个reactor内,会有一个applet的instance,自己独立的网络stack和一个专门为缓慢task开的thread pool (所以并不是严格的单线程,事实上Seastar的event manager 也会单独的占用一个线程)。

在chogori的repo里,每个K2 app都可以在/src/k2/cmd的路径里找到。参考每个module的main function 就可以看到每个k2 app所包含的k2 applet。

k2 nodepool design

K2 cluster在设计上实际是一个k2 nodes的集群,每个k2 node可以映射到一个cpu core上。由于他们有单独的网络stack,他们都是可以被外部访问的(可以直接发送和接收信息)。每个k2 node会负责一个data partition的储存,这个信息会由CPO的partition map记录。

每个k2 node是作为一个线程存在的,它们由k2 nodepool这个进程来进行管理 (main thread,也就是第一个cpu core上会运行这个thread来进行管理)。每个nodepool中包含的k2 node的数量是在启动时决定的,没有办法动态增减,只能start/stop nodepool来管理容量。

Assignment Manager: 接收CPO传来的assign和offload的指令,同时负责创建新的和删除现存的partition

Monitor: 监控目前用量并统计,将这个node上的信息传给CPO, 允许CPO通过这个部分来监控集群健康状况并决定是否要扩容

TSOClient: 获得一个k2 timestamp

API server: Exposes a json-over-http port over which some RPCs can be invoked. Mostly used for testing/debugging