zoukankan      html  css  js  c++  java
  • Ray聊天记录

    由于工作变动,Ray的文档、示例没有及时更新,深表歉意。在Ray升级后,性能较几个月前有了非常大的提升,也更具易用性。这是QQ交流群里大家的聊天记录,跟大家分享一下(由于时间仓促群里大家的聊天记录没有整理,请见谅)。

    -----

    Evenstar  17:45:57

    demo里面业务数据存到哪儿去了呢?真实项目中应该在什么地方进行业务数据的读写呢

    无名  18:05:17

     

    在这里写插入数据库的操作

    无名  18:05:23

    @Evenstar 

    Evenstar  18:08:47

    我现在有一套基于mysql的业务数据库,如果想要用ray来进行改造,业务数据还是存在原数据库里面,那mongodb又是拿来干嘛的呢?

    无名  18:09:12

    存事件

    无名  18:09:30

    内存状态变动的事件

    Evenstar  18:09:49

    用于灾后恢复?

    无名  18:11:33

    你可以先了解下Event Sourcing的概念

    Evenstar  18:17:06

    我大概看了以下概念,就是不知道真实项目中哪些应该定义为事件,比如我原来业务系统中有一套报警处理流程的业务,报警发生后,先被人接收了,后来他上传给了其他人,其他人又处理了,这个感觉有点像事件溯源里面描述的场景,那我是应该把这些处理流程定义为事件么?我原来mysql业务系统里面专门有一张表来存储这些变更过程,定义为事件存储到mongodb以后,原来的mysql业务数据库里面流程表还需要存储么?

    Evenstar  18:17:53

     

    最新的代码要装core 2.1哇?

      、陈依(470923079) 18:36:44

    什么时候完善下文档之类的。

      、陈依(470923079) 18:36:57

    来个稳定的生产版本

    无名  18:37:59

    我已经用在生产环境了

    Evenstar  18:46:54

     

     

    客户端里面这几句具体是干嘛呢?起什么作用

    无名  18:50:53

    启用消息队列监听

    Evenstar  18:55:43

    监听服务器pub的消息哇?监听消息的回调函数呢?或者说监听消息的输出在哪儿呢

    无名  19:00:01

    Handle

    Evenstar  19:05:45

     

    这里么?这里又远程调用服务器的grain,是触发OnEventDelivered这个方法?

    Evenstar  19:19:45

    好懵逼呀,客户端调用grainAddAmount,然后grain调用RaiseEvent发布事件,然后这个事件到AccountDb这个的Process了?

    无名  19:30:06

     

    无名  19:30:40

    @Evenstar 

    3个都会收到事件消息

    无名  19:31:06

    Db同步到数据库,Flow处理后续的业务逻辑,Rep提供副本功能

    Evenstar  19:34:21

    Db是做自己的业务数据持久化,Flow里面如果是充值,那就不必做处理,如果是转账AccountDb里面只是把原账户金额减了,Flow里面来做目标账户的金额增加操作?

    夜夜  19:37:10

    你好,无名。

    无名  19:37:43

    是的

    无名  19:37:50

    @夜夜 好啊

    夜夜  19:38:02

    rabbitmqol扩展streams后只有500qps,单单测试rabbitmq1w qps

    Evenstar  19:38:43

    为什么不是直接在原账户的grain实例里面激活目标账户的grain直接增加金额呢?这么设计的目的是什么呀

    无名  19:38:47

    姿势不对

    无名  19:39:14

    @Evenstar 如果A减了金额,突然断电,B的金额没有增加呢?

    夜夜  19:39:43

    完全参考Azure Queues写的啊

    无名  19:40:27

    @夜夜 我自己的框架,一秒钟几万qps

    Evenstar  19:40:32

    这个设计如何避免这种情况的发生呢?

    无名  19:40:34

    也是rabbitmq

    无名  19:41:07

    @Evenstar 最终一致性,只要A执行成功,那么消息一定会流转到flow里面

    无名  19:41:18

    然后操作B

    夜夜  19:41:24

    你的rabbitmqLinux上的吗

    无名  19:41:32

    夜夜  19:42:43

    我现在是一脸懵逼,单单

    Evenstar  19:43:13

    A执行成功以后,消息才会到flow

    无名  19:43:21

    是的

    Evenstar  19:43:46

    A执行成功以后,断电了,系统重启以后,flow还能收到这个消息?

    无名  19:44:05

    能啊

    夜夜  19:44:45

    memory streams也不是很快 在我的i5四核上,才2000qps.严重怀疑姿势不对

    Evenstar  19:45:18

    是消息队列对消息的可靠保障提供的功劳哇?

    无名  19:45:27

    我不用stream

    夜夜  19:45:30

    用的官方文档的隐式订阅

    无名  19:45:44

    不依赖消息队列,依赖事件版本号

    Evenstar  19:46:44

    哦,因为事件已经到mongodb做了持久化,所有重启以后flow还能收到消息

    夜夜  19:47:10

    溯源

    夜夜  19:47:20

    首次启动的时候

    无名  19:47:52

    我的框架现在性能已经非常牛了

    夜夜  19:47:55

    stream

    夜夜  19:48:03

    我也不打算用了

    夜夜  19:48:23

    搞不定

    Evenstar  19:49:14

    好吧,先不纠结这个可靠性了,AccountRep这个副本收到事件消息又干嘛了呢

    无名  19:50:16

    这个正常用不到,这个是读写分离用的

    夜夜  19:50:16

    测试了好几天了。一开始rabbitmq没升级到预览版,一到创建链接就报地址错误,我都开始慌了

    无名  19:50:32

    Account提供写入,AccountRep提供查询

    夜夜  19:51:27

    大佬的框架我也研究了,很给力

    夜夜  19:52:16

    olevent sourcing 

    Evenstar  19:52:23

    客户端查询的时候,我看Account里面有GetBalanceAccountRep里面也有GetBalance,什么机制导致客户端会调用到AccountRep里面的方法呢?

    夜夜  19:52:47

    实现,只提供了两个接口,一个read 一个write

    无名  19:53:15

    @Evenstar 手动控制啊

    无名  19:53:26

    这个业务逻辑要手动精确控制的

    Evenstar  19:53:26

    rep收事件消息是为了同步Account里面的数据哇?

    无名  19:53:34

    是啊

    夜夜  19:54:04

    也可以避免单个grain压力太大

    无名  19:54:46

    我考虑的应用场景很多的

    Evenstar  19:54:46

     

    这个地方我看还是直接调用的Account实例,实例里面是通过AlwaysInterleave这个属性来控制这个请求去副本调用么?

    无名  19:55:17

    这里没有用到Rep

    无名  19:55:32

    我只是写个例子,告诉可以进行读写分离操作

    Evenstar  19:56:12

    哦,那如果要用,是在客户端直接实例化rep实例去调用GetBalance?客户端来做这个精准控制?

    无名  19:57:07

    Evenstar  19:57:53

    事件持久化不需要写代码来控制,只要注册了,就自动处理了么

    夜夜  19:58:10

    MongoDb写入性能怎么样,我用sqlserver qps只有1000

    夜夜  19:58:39

    我也是转账实例

    夜夜  19:59:11

    就是多加了个判断余额够不够

    Evenstar  19:59:25

    AlwaysInterleave 这个属性是干嘛的呀?

    无名  19:59:44

    你用的事务啊?

    无名  19:59:58

    我的事件插入,一秒钟插入十几万

    无名  20:00:16

    我用的postgresql

    夜夜  20:00:30

    你是批量吗

    无名  20:01:26

    事件不是批量的

    无名  20:01:30

    没法批量

    Evenstar  20:02:57

     

    整个流程里面,客户端注册这个是干嘛的呀?帮忙解答一下,感觉快理顺了

    夜夜  20:05:25

    是啊,难道是连接打开关闭上耗了性能?

    无名  20:05:29

    消息流转和做额外处理的

    无名  20:05:59

    比如转账了,可以在这里的LocalProcess里面发短信

    无名  20:06:24

    @夜夜 连接池无所谓的

    夜夜  20:06:59

    sqlserver性能也不至于这么差吧

    夜夜  20:07:11

    感觉又是姿势不对

    无名  20:07:21

    你可以装个postgresql试试

    Evenstar  20:08:01

    demo里面,服务器充值了,是服务器的AccountDb执行了AmountAddEventHandler事件以后,AccountCoreHandler才接收到消息?

    夜夜  20:08:20

    明天试试装个pg

    夜夜  20:08:40

    也是linux的吗

    无名  20:08:42

    @Evenstar 先到handler再到DB

    无名  20:08:49

    Evenstar  20:12:57

    demo里面并没有做LocalProcess的实现,而是在SendToAsyncGrain里面执行了flowtell又是在干嘛呢?

    无名  20:13:33

    把消息送达Flow

    Evenstar  20:15:08

    哦,那消息就是AccountAccountCoreHandlerAccountDbAccountFlow,是这么个流程哇?

    无名  20:16:55

    Db,Flow一起执行的

    Evenstar  20:23:18

    其他流程大概清楚了,就这个AccountCoreHandler始终还是没明白,主要用于什么,是服务器做了操作通过mq来通知客户端么

    无名  20:23:42

    通过MQ来流转消息

    Evenstar  20:24:08

    为什么要到客户端来跑一圈来通知flow

    Evenstar  20:32:45

    @无名 谢谢大神的耐心解答,我觉得整个流程不写清楚,新手很难上手,看demo看不明白为什么要这样做,目的是什么,一个开源项目能不能活跃起来,新人很重要,大神对开源的东西好多都只看不用

    无名  20:36:53

    主要现在比较忙

    无名  20:36:58

    没空写文档

    Evenstar  21:01:57

    这安装不上咋回事呢

    Evenstar  21:18:06

    环境都安装好了,下周先摸索一下,谢谢@无名 指导了哈,以后有问题还要麻烦大神

    Evenstar  22:39:57

    @无名 睡了吗?再麻烦一下,我现在改造现有系统,第一步是将客户端大量的查询业务转移过来,只有很少量的数据写入操作,这种情况下,可能事件溯源主要用来记录客户端的操作日志,应该就不需要客户端注册mq了吧? 

     --

    Ray框架交流QQ群:713485689

    Evenstar  17:45:57

    demo里面业务数据存到哪儿去了呢?真实项目中应该在什么地方进行业务数据的读写呢

    无名  18:05:17

     

    在这里写插入数据库的操作

    无名  18:05:23

    @Evenstar 

    Evenstar  18:08:47

    我现在有一套基于mysql的业务数据库,如果想要用ray来进行改造,业务数据还是存在原数据库里面,那mongodb又是拿来干嘛的呢?

    无名  18:09:12

    存事件

    无名  18:09:30

    内存状态变动的事件

    Evenstar  18:09:49

    用于灾后恢复?

    无名  18:11:33

    你可以先了解下Event Sourcing的概念

    Evenstar  18:17:06

    我大概看了以下概念,就是不知道真实项目中哪些应该定义为事件,比如我原来业务系统中有一套报警处理流程的业务,报警发生后,先被人接收了,后来他上传给了其他人,其他人又处理了,这个感觉有点像事件溯源里面描述的场景,那我是应该把这些处理流程定义为事件么?我原来mysql业务系统里面专门有一张表来存储这些变更过程,定义为事件存储到mongodb以后,原来的mysql业务数据库里面流程表还需要存储么?

    Evenstar  18:17:53

     

    最新的代码要装core 2.1哇?

      、陈依(470923079) 18:36:44

    什么时候完善下文档之类的。

      、陈依(470923079) 18:36:57

    来个稳定的生产版本

    无名  18:37:59

    我已经用在生产环境了

    Evenstar  18:46:54

     

     

    客户端里面这几句具体是干嘛呢?起什么作用

    无名  18:50:53

    启用消息队列监听

    Evenstar  18:55:43

    监听服务器pub的消息哇?监听消息的回调函数呢?或者说监听消息的输出在哪儿呢

    无名  19:00:01

    Handle

    Evenstar  19:05:45

     

    这里么?这里又远程调用服务器的grain,是触发OnEventDelivered这个方法?

    Evenstar  19:19:45

    好懵逼呀,客户端调用grainAddAmount,然后grain调用RaiseEvent发布事件,然后这个事件到AccountDb这个的Process了?

    无名  19:30:06

     

    无名  19:30:40

    @Evenstar 3个都会收到事件消息

    无名  19:31:06

    Db同步到数据库,Flow处理后续的业务逻辑,Rep提供副本功能

    Evenstar  19:34:21

    Db是做自己的业务数据持久化,Flow里面如果是充值,那就不必做处理,如果是转账AccountDb里面只是把原账户金额减了,Flow里面来做目标账户的金额增加操作?

    夜夜  19:37:10

    你好,无名。

    无名  19:37:43

    是的

    无名  19:37:50

    @夜夜 好啊

    夜夜  19:38:02

    rabbitmqol扩展streams后只有500qps,单单测试rabbitmq1w qps

    Evenstar  19:38:43

    为什么不是直接在原账户的grain实例里面激活目标账户的grain直接增加金额呢?这么设计的目的是什么呀

    无名  19:38:47

    姿势不对

    无名  19:39:14

    @Evenstar 如果A减了金额,突然断电,B的金额没有增加呢?

    夜夜  19:39:43

    完全参考Azure Queues写的啊

    无名  19:40:27

    @夜夜 我自己的框架,一秒钟几万qps

    Evenstar  19:40:32

    这个设计如何避免这种情况的发生呢?

    无名  19:40:34

    也是rabbitmq

    无名  19:41:07

    @Evenstar 最终一致性,只要A执行成功,那么消息一定会流转到flow里面

    无名  19:41:18

    然后操作B

    夜夜  19:41:24

    你的rabbitmqLinux上的吗

    无名  19:41:32

    夜夜  19:42:43

    我现在是一脸懵逼,单单

    Evenstar  19:43:13

    A执行成功以后,消息才会到flow

    无名  19:43:21

    是的

    Evenstar  19:43:46

    A执行成功以后,断电了,系统重启以后,flow还能收到这个消息?

    无名  19:44:05

    能啊

    夜夜  19:44:45

    memory streams也不是很快 在我的i5四核上,才2000qps.严重怀疑姿势不对

    Evenstar  19:45:18

    是消息队列对消息的可靠保障提供的功劳哇?

    无名  19:45:27

    我不用stream

    夜夜  19:45:30

    用的官方文档的隐式订阅

    无名  19:45:44

    不依赖消息队列,依赖事件版本号

    Evenstar  19:46:44

    哦,因为事件已经到mongodb做了持久化,所有重启以后flow还能收到消息

    夜夜  19:47:10

    溯源

    夜夜  19:47:20

    首次启动的时候

    无名  19:47:52

    我的框架现在性能已经非常牛了

    夜夜  19:47:55

    stream

    夜夜  19:48:03

    我也不打算用了

    夜夜  19:48:23

    搞不定

    Evenstar  19:49:14

    好吧,先不纠结这个可靠性了,AccountRep这个副本收到事件消息又干嘛了呢

    无名  19:50:16

    这个正常用不到,这个是读写分离用的

    夜夜  19:50:16

    测试了好几天了。一开始rabbitmq没升级到预览版,一到创建链接就报地址错误,我都开始慌了

    无名  19:50:32

    Account提供写入,AccountRep提供查询

    夜夜  19:51:27

    大佬的框架我也研究了,很给力

    夜夜  19:52:16

    olevent sourcing 

    Evenstar  19:52:23

    客户端查询的时候,我看Account里面有GetBalanceAccountRep里面也有GetBalance,什么机制导致客户端会调用到AccountRep里面的方法呢?

    夜夜  19:52:47

    实现,只提供了两个接口,一个read 一个write

    无名  19:53:15

    @Evenstar 手动控制啊

    无名  19:53:26

    这个业务逻辑要手动精确控制的

    Evenstar  19:53:26

    rep收事件消息是为了同步Account里面的数据哇?

    无名  19:53:34

    是啊

    夜夜  19:54:04

    也可以避免单个grain压力太大

    无名  19:54:46

    我考虑的应用场景很多的

    Evenstar  19:54:46

     

    这个地方我看还是直接调用的Account实例,实例里面是通过AlwaysInterleave这个属性来控制这个请求去副本调用么?

    无名  19:55:17

    这里没有用到Rep

    无名  19:55:32

    我只是写个例子,告诉可以进行读写分离操作

    Evenstar  19:56:12

    哦,那如果要用,是在客户端直接实例化rep实例去调用GetBalance?客户端来做这个精准控制?

    无名  19:57:07

    Evenstar  19:57:53

    事件持久化不需要写代码来控制,只要注册了,就自动处理了么

    夜夜  19:58:10

    MongoDb写入性能怎么样,我用sqlserver qps只有1000

    夜夜  19:58:39

    我也是转账实例

    夜夜  19:59:11

    就是多加了个判断余额够不够

    Evenstar  19:59:25

    AlwaysInterleave 这个属性是干嘛的呀?

    无名  19:59:44

    你用的事务啊?

    无名  19:59:58

    我的事件插入,一秒钟插入十几万

    无名  20:00:16

    我用的postgresql

    夜夜  20:00:30

    你是批量吗

    无名  20:01:26

    事件不是批量的

    无名  20:01:30

    没法批量

    Evenstar  20:02:57

     

    整个流程里面,客户端注册这个是干嘛的呀?帮忙解答一下,感觉快理顺了

    夜夜  20:05:25

    是啊,难道是连接打开关闭上耗了性能?

    无名  20:05:29

    消息流转和做额外处理的

    无名  20:05:59

    比如转账了,可以在这里的LocalProcess里面发短信

    无名  20:06:24

    @夜夜 连接池无所谓的

    夜夜  20:06:59

    sqlserver性能也不至于这么差吧

    夜夜  20:07:11

    感觉又是姿势不对

    无名  20:07:21

    你可以装个postgresql试试

    Evenstar  20:08:01

    demo里面,服务器充值了,是服务器的AccountDb执行了AmountAddEventHandler事件以后,AccountCoreHandler才接收到消息?

    夜夜  20:08:20

    明天试试装个pg

    夜夜  20:08:40

    也是linux的吗

    无名  20:08:42

    @Evenstar 先到handler再到DB

    无名  20:08:49

    Evenstar  20:12:57

    demo里面并没有做LocalProcess的实现,而是在SendToAsyncGrain里面执行了flowtell又是在干嘛呢?

    无名  20:13:33

    把消息送达Flow

    Evenstar  20:15:08

    哦,那消息就是AccountAccountCoreHandlerAccountDbAccountFlow,是这么个流程哇?

    无名  20:16:55

    Db,Flow一起执行的

    Evenstar  20:23:18

    其他流程大概清楚了,就这个AccountCoreHandler始终还是没明白,主要用于什么,是服务器做了操作通过mq来通知客户端么

    无名  20:23:42

    通过MQ来流转消息

    Evenstar  20:24:08

    为什么要到客户端来跑一圈来通知flow

    Evenstar  20:32:45

    @无名 谢谢大神的耐心解答,我觉得整个流程不写清楚,新手很难上手,看demo看不明白为什么要这样做,目的是什么,一个开源项目能不能活跃起来,新人很重要,大神对开源的东西好多都只看不用

    无名  20:36:53

    主要现在比较忙

    无名  20:36:58

    没空写文档

    Evenstar  21:01:57

    这安装不上咋回事呢

    Evenstar  21:18:06

    环境都安装好了,下周先摸索一下,谢谢@无名 指导了哈,以后有问题还要麻烦大神

    Evenstar  22:39:57

    @无名 睡了吗?再麻烦一下,我现在改造现有系统,第一步是将客户端大量的查询业务转移过来,只有很少量的数据写入操作,这种情况下,可能事件溯源主要用来记录客户端的操作日志,应该就不需要客户端注册mq了吧?

     

  • 相关阅读:
    Class的用途
    Flash网络编程安全沙箱问题隆重解决 (转)
    带参数的EventDispatcher
    Object的效率
    Oracle数据库语言修改成UTF8
    Python之字符串详解1
    初级/中级/高级运维,你是哪一级?
    这可能是php世界中最好的日志库——monolog
    vc程序大小优化最佳方案(转)http://blog.sina.com.cn/s/blog_4c50333c0100gjs3.html
    C# 调用lua 报错未能加载文件或程序集“lua51.dll”或它的某一个依赖项。找不到指定的模块。 解决方法
  • 原文地址:https://www.cnblogs.com/CharlesZHENG/p/9248946.html
Copyright © 2011-2022 走看看