akka集群实战

来源:互联网 发布:指环王和哈利波特 知乎 编辑:程序博客网 时间:2024/05/23 11:46

关于akka

akka是JAVA虚拟机JVM平台上构建高并发、分布式和容错应用的工具包和运行时。Akka用Scala语言写成,同时提供了Scala和JAVA的开发接口。

Akka处理并发的方法基于Actor模型。在Akka里,Actor之间通信的唯一机制就是消息传递。

Akka集群支持去中心化的基于P2P的集群服务,没有单点故障(SPOF)问题,它主要是通过Gossip协议和向量时钟(VECTOR CLOCKS)来实现。对于集群成员的状态,Akka提供了一种故障检测机制,能够自动发现出现故障而离开集群的成员节点,通过事件驱动的方式,将状态传播到整个集群的其它成员节点。

官网:http://akka.io

集群概念

  • • 节点(node):集群中的逻辑成员。允许一台物理机上有多个节点。由元组hostname:port:uid唯一确定。
  • • 集群(cluster):由成员关系服务构建的一组节点。
  • • 领导(leader):集群中唯一扮演领导角色的节点。
  • • 种子节点(seed node):作为其他节点加入集群的连接点的节点。实际上,一个节点可以通过向集群中的任何一个节点发送Join(加入)命令加入集群。

节点状态

关于节点迁移的状态转换,如图所示:

这里写图片描述

上图展示了状态转换的两个因素:动作和状态。

状态

  • • joining:节点正在加入集群时的状态。
    • weekly up:配置了akka.cluster.allow-weakly-up-members=on时,启用的状态。
    • up:集群中节点的正常状态。
    • down:标记为已下线的状态。
    • removed:墓碑状态,表示已经不再是集群的成员。

动作

  • • join:加入集群。
    • leave:告知节点优雅的离开集群。
    • down:标记集群为已下线。

akka集群demo

官方demo可参见:

https://github.com/akka/akka-samples/tree/2.5/akka-sample-cluster-java

自己的demo:

基于akka2.5.2官方的demo,结合业务上的需求,搭建了akka集群,
共分为两部分。第一部分为akka-client,负责消息的发送,第二部分
是akka-cluster,该集群包含seed-node,以及接收客户端发送消息
并进行路由的dispatcher。

akka-client:https://github.com/likeaboy/akka-client
akka-cluster:https://github.com/likeaboy/akka-cluster
欢迎大家star/fork,供学习交流使用。

使用

akka-cluster依赖akka-client,在akka-cluster中运行org.jrocky.akka.cluster.ClusterRunner,启动集群。
在akka-client中运行org.jrocky.akka.client.demo.Runner,向集群
发送消息,观察log如下图所示:

集群接收到来自akka-client Runner发送的消息
这里写图片描述

客户端接收到来自集群的消息反馈
这里写图片描述

原创粉丝点击