actor mysql 持久化之 specified actor
持久化到mysql,要求一次操作涉及到的多次读写的事务性。使用的 library 是 postgresql-async, akka 版本是 2.11。
1. 实现 per-user 逻辑,简单来讲,就是希望一个 user 的所有修改操作都在一个 actor 中阻塞的完成。
user 本身有很多状态(state),各状态的转换可以看成自动机,假设自动机的定义是这样的:
state1 -> action1 -> state2
state2 -> action2 -> state3
当 user 处于 state2 时,传递过来的 action1 请求将会被抛弃,自动机的 action 由用户上传的请求创建。
我目前的设计是这样的
【此处应有图】
Broker 会根据 userId 创建workerActor,workerActor 专门负责此 userId 的所有请求,当一段时间内此 workerActor 没有收到请求后,他会 kill 掉自己。对于 broker 来讲,就有一个 getOrCreate(userId) 的语义
workerActor 阻塞式的处理每个用户的请求【可以通过先声明多个future再一起wait,实现半异步的过程】,当请求处理完毕后,假如过了一段时间后没有消息待处理,就给自己一发 poison kill
参考
[1]: stackoverflow 关于 gerOrCreate 的问题
[2]: 创建高可用 akka 程序
actor mysql 持久化之 specified actor的更多相关文章
- gearman mysql持久化
gearman 创建Mysql持久化队列的方式如下: 启动gearman,命令如下: gearmand命令: -b, –backlog=BACKLOG 连接请求队列的最大值 -d, –daemon D ...
- MySQL 持久化保障机制-redo 日志
我们在 聊一聊 MySQL 中的事务及其实现原理 中提到了 redo 日志,redo 日志是用来保证 MySQL 持久化功能的,需要注意的是 redo 日志是 InnoDB 引擎特有的功能. 为什么 ...
- 第4节 Scala中的actor介绍:1、actor概念介绍;2、actor执行顺序和发送消息的方式
10. Scala Actor并发编程 10.1. 课程目标 10.1.1. 目标一:熟悉Scala Actor并发编程 10.1.2. 目标二:为学习Akka做准备 注:Sca ...
- 在这个应用中,我使用了 MQ 来处理异步流程、Redis 缓存热点数据、MySQL 持久化数据,还有就是在系统中调用另外一个业务系统的接口,对我的应用来说这些都是属于 RPC 调用,而 MQ、MySQL 持久化的数据也会存在于一个分布式文件系统中,他们之间的调用也是需要用 RPC 来完成数据交互的。
在这个应用中,我使用了 MQ 来处理异步流程.Redis 缓存热点数据.MySQL 持久化数据,还有就是在系统中调用另外一个业务系统的接口,对我的应用来说这些都是属于 RPC 调用,而 MQ.MySQ ...
- Windows搭建SkyWalking8.3环境进行JAVA应用性能监控及入门示例(使用Mysql持久化)
下载SkyWalking 一.下载地址(点击) 选择tar 解压后进入config文件夹先配置一下Mysql数据源,打开application.yml文件 默认selector是h2我们改成mysql ...
- PDO之MySql持久化自动重连导致内存溢出
前言 最近项目需要一个常驻内存的脚本来执行队列程序,脚本完成后发现Mysql自动重连部分存在内存溢出,导致运行一段时间后,会超出PHP内存限制退出 排查 发现脚本存在内存溢出后排查了一遍代码,基本确认 ...
- MySQL Server Logs
日志记录存储方式 #日志记录存储方式 mysql> show variables like 'log_output'; mysql> set global log_output='FILE ...
- 逻辑备份(mysqldump/select into outfile)
#mysqldump备份 shell> mysqldump -uroot -p -P4306 sakila actor>E:\sakila-actor.sql shell> mysq ...
- Akka系列(七):Actor持久化之Akka persistence
前言.......... 我们在使用Akka时,会经常遇到一些存储Actor内部状态的场景,在系统正常运行的情况下,我们不需要担心什么,但是当系统出错,比如Actor错误需要重启,或者内存溢出,亦或者 ...
随机推荐
- Extjs js 产生Guid或者UUID
Ext.data.IdGenerator.get('uuid').generate() 结果:a9c4efb8-06c9-4c2e-8a70-bb36a69e053e 更多介绍:http://docs ...
- ubuntu14.04 3D桌面效果制作
参考:http://www.360doc.com/content/14/0919/22/11681374_410808557.shtml
- node学习笔记8——发布npm包
1.注册一个npm账号: 2.在控制台输入 npm login: 依次输入你的账号信息,可通过 npm whoami 来验证是否登录成功 3.初始化包,控制台输入 npm init: 完成之后,可以看 ...
- mysql导入sql脚本
例如:我的用户名是root 密码是123 sql脚本存在C盘 名字为test.sql 数据库为test 有两种方法可以执行脚本 1:打开CMD输入以下命令(不需要转换目录)>mysql -u r ...
- JSP字符集编码集合
在这里,我们先说说JSP/Servlet中的几个编码的作用. 在JSP/Servlet 中主要有以下几个地方可以设置编码,pageEncoding="UTF-8".contentT ...
- R语言日期的表示和运算(详细总结)
1.取出当前日期 Sys.Date() [1] "2014-10-29" date() #注意:这种方法返回的是字符串类型 [1] "Wed Oct 29 20:36: ...
- python递归评论tree形图代码
首先我有必要记录下来这段代码,因为我遇到了这个问题, 然后没有解决 后来, 前段说我找到一段代码给我看看, 我并没有在意, 然后她实现了, 她实现了,她真的实现了, 我... 为了感谢她,我陪她玩了一 ...
- ecmall数据库表详解 二次开发必备
文章分类表ecm_acategory 字段 类型 Null 默认 注释 cate_id int(10) 否 自增ID号,分类ID号 cate_name varchar(100) 否 分类的名称 ...
- C# 符合备忘录
~ 按位求补符:! 非逻辑运算符:% 求余运算符:^ 异或位运算符:& 且位运算符:| 或位运算符:* 既可以用作乘法符号,还可以表示为指针:+ 表示数学运算符相加:= 用来表示赋值操作:\ ...
- python调用ansible接口API执行命令
python版本:Python 2.6.6 ansible版本:ansible 2.3.1.0 下载地址:https://releases.ansible.com/ansible/ 调用脚本 ...