zoukankan      html  css  js  c++  java
  • 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 程序

  • 相关阅读:
    3.4
    3.3 TensorFlow运行模型 ------- 会话
    3.2 TensorFlow数据模型 ---- 张量
    3.1 TensorFlow计算模型 --- 计算图
    寻找两个有序数组的中位数
    最长子串
    vector的遍历删除
    超时空大决战
    面经七
    面经五
  • 原文地址:https://www.cnblogs.com/xinsheng/p/4461106.html
Copyright © 2011-2022 走看看