akka集群实战

关于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发送的消息
这里写图片描述

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

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值