考虑一个场景.
一个节点initiator,通过yarn提交一个appmaster.
然后appmaster去启动其他另外的cluster,比如prestor的coordinator和worker.
那么这时候就有这么一个从属关系.
initiator<-appmaster<-coordinator/worker.
在最初的方案的时候,appmater是以unmanaged的方式提交的.
也就是实际上是
initoator(appmaster)<-coordinator/worker的形式.
这个结构主要有两个问题.
一个是实现上,局限了只能有一个presto cluster.
虽然这点也不是架构决定的,可以重新实现.
主要是第二点的.
在initiator挂掉之后,虽然presto cluster可以继续存在.
但是没有一个比较好的方式把presto cluster的信息找回来.
因为即使在yarn cluster层面得不到实际container的各个service端口.
自然也就没办法做进一步的事情.
而managed appmaster的结构在于,至少还有appmaster这个可寻址的入口可以找到presto cluster的信息.
因为存在一个appmaster的register信息在yarn cluster层面.
所以,当initiator挂掉重启之后是有办法join回去的.
而appmaster本身在yarn上面存在一个自动拉起的机制,所以问题也不大.
至于coordinator和worker的拉起则可以交由appmaster去维护.
或者给initiator.
虽然不太和逻辑就是了.
所以问题在于怎么实际地让各个部分join回去.
这里里面的airlift framework有几个比较有意思的设计点或者说概念.
一个是discovery.
一个是inventor.
还有一个是announcer.
discovery就是所谓的微服务架构当中常见的name service了.
announcer对应的就是这个service的register/announcer了.
而inventory是个比较有趣的实现.
有时候跟discovery是interchangeable的.
但也并不完全是一回事.
区别主要在bootstrap的过程.
逻辑上来说,discovery的bootstrap uri是根据inventory拿到的.
而inventory的获得,一个途径是通过discovery的uri对应的service获得的.
所以这里有一个循环依赖的问题.
不过从实现上来说,inventory是dominated的.
所以如果它没设置,discovery还是可以自己起来的.
然后通过其他一些手段让两者一致.
还有一个比较重要的机制是airlift的discovery的replicate.
它会定义的将自身的nameservice同步到这个nameservice里的其他discovery中去.
也就是逻辑上来说,所以的discovery service都是eventually consistent的.
因此,利用这一点的话,可以让initiator/appmaster/coordinator这些discovery host共同export一个服务.
并互相announce这个服务.
这样的话,任何一个挂掉都可以从其他两个那里获得需要的service列表.
而且这里有个比较关键的点就是.
除了coordinator的地址是随机的之外,initiator和appmaster都是可确定寻址的.
但是这个服务不能是discovery服务.
因为如果是的话,presto cluster的信息也会出现在initiator上.
这样带来的问题就是这样事实上做不到多个presto集群.
毕竟实际上都是announce到同一个discovery/nameservice里.
事实上,这里存在一个类似union/联邦的制度.
各个discovery节点实际上是类似于一个联邦州的概念.
组成一个united states.
下属的各个presto cluster或者其他whatever cluster则是每个government下的实际组织架构.
实际上就是一种职责的分层涉及概念.
一些相同的职责的state作为一个class.
或者说,每一个具体的异构的function的government可以通一个high level的class label(HLCL)联系起来.
这个HLCL实际上是一个restricted/limited的responsibility/power representation.
它是一种有限职责的角色属性.
履行的是一种相对固定和松散的职责.
更多的是一种协调和平衡边界的属性/作用.
因为如果没有这个boundary在的话,下面的每个具体的functional agency都需要自己去独立的识别其他cluster下的东西.
也就是是leveled tree和fully connected graph的区别.
所以某种程度上来说,民主集中制也不算是一个特别矛盾的概念.
没有评论:
发表评论