Cluster Aware Router前端
Cluster aware Router相对于传统的Router区别在哪?传统的Router是相对于一个Akka System[有待进一步确认是否能够远程部署?],Cluster Aware Router是指可以识别集群的路由。集群必然涉及到多个Akka System,因此Cluster Aware Router就是Remoting和Routing的组合。Cluster Aware Router能够经过查找已有路由看成本身的routees,也能够建立远程部署到多个Node上。集群中的节点变更会自动挂载和卸载routee。 node
两种使用场景web
1.Router that lookup existing actors and use them as routeeswebsocket
2.Router that create new routees and deploy them on remote nodes 网络
说一下使用的场景,在下边的这个架构图中客户端经过websocket链接到Front-End模块,Front-End是整个系统的门面,负责前端发送的指令解析并向下转发。下边M1,M2,M3是系统的业务处理模块,接收Front-End发送过来的指令。假如系统的部署状况是这样的Front-End,M1,M2,M3都是集群中的Node。Front-End的路由就要使用Look-up的方式了也就是第一种方式,由于该模块定义了整个系统的服务接口,可是具体的业务是要由下边的模块去作的;M1,M2,M3各个模块的部署能够使用第二种远程的部署方式,这样部署能够使Routees分散在各个Node节点(注意不必定非要这样作,衡量利弊,看是否有必要。利:可控性统一调控actor数量;分布式;充分利用计算资源。弊:分布式带来的网络问题)。架构
Lookup existing actors方式socket
akka.actor.deployment {分布式 /statsService/workerRouter {spa router = consistent-hashingrouter nr-of-instances = 100 cluster { enabled = on routees-path = "/user/statsWorker" allow-local-routees = on use-role = compute } } } |
routees-path:从那个路径查找Actor做为本身的Routee
allow-local-routees:是否容许本地查找,或只容许远程查找
use-role:只从特定节点上查找
Create and deploy方式
akka.actor.deployment { /singleton/statsService/workerRouter { router = consistent-hashing nr-of-instances = 100 cluster { enabled = on max-nr-of-instances-per-node = 3 allow-local-routees = off use-role = compute } } } |
create-deploy方式就不用制定routees-path了,max-nr-of-instances-per-node:指定单个节点部署多少个routees。