利用Akka Cluster 和 Clustering Sharding 构建一个Cluster

对企业级开发者来说,akka最有用到特征是构建一个集群.对于长时间使用Java作为一个开发语言,akka提出了一个不在局限于单台虚拟机的原则;基于akka的应用运行在多个jvms,像运行在一个单一系统中;下面是它如何工作的

在13图中,我们阐述了一个jvms集合,就行运行在一个单一的akka集群;他们知道对方存在,监控对方通过gossip协议,像14图中描述的一样;


在这里,在akka集群中,这些节点的管理通过akka自己来实现;akka知道何时哪个节点离开了.这里定义了明确定义了一个集群节点改变的拓扑图,来保持集群的正常运行;在这个方法论中,真实的使用案例中开发者不用注意在拓扑图中actors是如何改变的,akka是自动帮你处理好的.

Cluster Sharding

Cluster Sharding进行分区管理这这些分布在不同的actors,然后一个节点挂了,可以利用它,从其他节点中恢复这个actor(利用akka Persistence);actors之间的查找,也是通过Cluster Sharding 来实现的,一个集群唯一的Sharding Coordinator,然后每一个节点一个Sharding region Actor,Sharding coordinator通过Sharding region actor 来进行查询;

集群分区的用处:分布式的actors分布在一个几个集群的多个节点上,actors之间的交互是通过逻辑标识确定的,不用关心actor在集群中的物理位置;

在图15中,想象一个IOT场景,一个actor代表着一个设备实体;这里有一个大的实体集合和在这些实体正在使用的小的实体;将会是一个很好的方式存储每一个实体状态在内存中,但不适合在一个机器中;在图15右侧中,一个长的矩形代表一个节点;里面有很多小的存有actor的分区;

把所有的actor放在一个节点上是一个不好的选择;从系统的可恢复性和扩展性把它分布在多个机器上是一个不错的选择;像这样,一个节点丢失了,其他节点松散的运行来保持集群的运行,有一个简短是停顿,来响应节点的丢失;


图16,Cluster Sharding 将大量集合放入到小的分区中,可以利用定义好的分配策略利用实体ID,来进行分配;

四个节点的集群,一个节点挂了,可以通过Cluster Sharding确定actor,然后利用akka Persistence进行恢复;

actors之间的查找,也是通过Cluster Sharding 来实现的,一个集群唯一的Sharding Coordinator,然后每一个节点一个Sharding region Actor,Sharding coordinator通过Sharding region actor 来进行查询;

请求消息到来,在集群中进行轮讯到一个节点,然后利用Sharding Region 向 Sharding Coordinator发起请求,Sharding coordinator 遍历查找到,然后返回给Sharding Region,然后Sharding region 会告诉请求消息的actor在哪里;

Sharding Region 会缓存actor的位置到 Shard中,然后不用每次都去请求 Sharding Coordinator;

Shard Coordinator, 代表 Cluster Singleton actor

the Shard Region, 代表 the Node Singleton actor,

the Shard and  the Actors themselves 代表 Sharded actors themselves.

你可能感兴趣的:(利用Akka Cluster 和 Clustering Sharding 构建一个Cluster)