由于工作变动,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

好懵逼呀,客户端调用grain的AddAmount,然后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

我rabbitmq和ol扩展streams后只有500qps,单单测试rabbitmq有1w qps

Evenstar  19:38:43

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

无名  19:38:47

 SHAPE  \* MERGEFORMAT

姿势不对

无名  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

你的rabbitmq是Linux上的吗

无名  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

ol的event sourcing

Evenstar  19:52:23

客户端查询的时候,我看Account里面有GetBalance,AccountRep里面也有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

 SHAPE  \* MERGEFORMAT

我考虑的应用场景很多的

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

 SHAPE  \* MERGEFORMAT

你可以装个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里面执行了flow的tell又是在干嘛呢?

无名  20:13:33

把消息送达Flow

Evenstar  20:15:08

哦,那消息就是Account》AccountCoreHandler》AccountDb》AccountFlow,是这么个流程哇?

无名  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

好懵逼呀,客户端调用grain的AddAmount,然后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

我rabbitmq和ol扩展streams后只有500qps,单单测试rabbitmq有1w qps

Evenstar  19:38:43

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

无名  19:38:47

 SHAPE  \* MERGEFORMAT

姿势不对

无名  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

你的rabbitmq是Linux上的吗

无名  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

ol的event sourcing

Evenstar  19:52:23

客户端查询的时候,我看Account里面有GetBalance,AccountRep里面也有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

 SHAPE  \* MERGEFORMAT

我考虑的应用场景很多的

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

 SHAPE  \* MERGEFORMAT

你可以装个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里面执行了flow的tell又是在干嘛呢?

无名  20:13:33

把消息送达Flow

Evenstar  20:15:08

哦,那消息就是Account》AccountCoreHandler》AccountDb》AccountFlow,是这么个流程哇?

无名  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聊天记录的更多相关文章

  1. UvaLA 3938 "Ray, Pass me the dishes!"

                            "Ray, Pass me the dishes!" Time Limit: 3000MS   Memory Limit: Unkn ...

  2. iOS聊天下拉刷新聊天记录的实现

    1. 想法 最近在开发一个社交类app,要实现类似微信那种下拉刷新聊天记录的功能. 一般有两种实现方式: 1. 直接fetch一个entity的所有数据然后在内存中做filter,就是把所有聊天记录先 ...

  3. android微信聊天记录导出到电脑【微信安卓版技巧】

    微信,对它又爱又恨!爱的是微信能替代很多手机通话短信,恨的是有些较早前的手机不能友好支持,比如ytkah之前用的i8000,挺上手的,就是没办法装微信,当时工作需要必须用微信,只好忍痛割爱买了个and ...

  4. iphone如何导出微信聊天记录到电脑?

    有个小美眉买了个iphone,但发现自己就是一小白,很多功能都不会用,微信倒是用得挺上手的,可以晚上聊到三四点,流量直接飙升500MB.最近她说手机太卡了,问ytkah帮她整一下.拿起她的IPhone ...

  5. 如何使用iTunes与iTools导出微信聊天记录

    .tocblock .tocblock .tocblock { margin-left: 2.25em; } .madoko .toc>.tocblock .tocblock { margin- ...

  6. 微信聊天记录查看器(程序+源码) - iOS版

    本文版权归cxun所有,如有转载请注明出处与本文链接,谢谢!原文地址:http://www.cnblogs.com/cxun/p/4338643.html Updates [2016.10.14]感谢 ...

  7. 移动安全初探:窃取微信聊天记录、Hacking Android with Metasploit

    在这篇文章中我们将讨论如何获取安卓.苹果设备中的微信聊天记录,并演示如何利用后门通过Metasploit对安卓设备进行控制.文章比较基础.可动手性强,有设备的童鞋不妨边阅读文章边操作,希望能激发大家对 ...

  8. ray与triangle/quad求交二三事

    引擎中,ray与quad求交,算法未细看,但有求解二次方程,不解.ray与triangle求交,使用的是97年经典算法,仔细看过论文,多谢小武同学指点,用到了克拉默法则求解线性方程组.想模仿该方法,做 ...

  9. 借助无线路由器+2台笔记本+Windows桥接功能,成功绕过了微信聊天记录迁移的BUG

    最近入了台iphone se,在迁移微信聊天记录的时候,遇到个BUG.它的迁移流程是这样的:需要将两台手机连接到同一个WIFI上面,然后新手机扫旧手机上面的二维码,来完成导入.中途遇到的问题是: 此时 ...

随机推荐

  1. WPF里DataGrid分页控件

    1.主要代码: using System; using System.Collections.ObjectModel; using System.Windows; using System.Windo ...

  2. Ubuntu 搭建 GitLab 笔记

    简介 GitLab 社区版可以提供许多与 GitHub 相同的功能,且部署在属于自己的机器上,我们会因为网络及其他一些问题而不便使用 GitHub ,这时部署一个 GitLab 是最好的选择. 下载 ...

  3. C# Encoding.GetEncoding 编码列表

    原文:C# Encoding.GetEncoding 编码列表 代码页 名称 显示名称 37 IBM037 IBM EBCDIC(美国 - 加拿大) 437 IBM437 OEM 美国 500 IBM ...

  4. C# mysql set和enum属性字段的读取和添加

    1.使用Navicat for Mysql设置set和enum属性字段: a.enum类型 b.set类型 enum类型在创建表时需要设置初始值,在如图所示的位置设置. 2.C#读取和添加数据 a.e ...

  5. springboot 2.x处理404、500等异常

    404错误 404错误是不经过Controller的,所以使用@ControllerAdvice或@RestControllerAdvice无法获取到404错误 springboot2处理404错误的 ...

  6. wchar_t string on Linux, OS X and Windows

    Making wchar_t work on Linux, OS X and Windows for CMarkup release 10.1 I learned a couple of humble ...

  7. c# winfrom 可折叠的树形控件

    首先需要一个可绑定实体 [Serializable] public class TreeNodeModel { private Image _nodePic; /// <summary> ...

  8. Gps坐标距离计算C#实现

    园子里找到两钟实现方式,做一记录,回头再认真学习,先拿来就用吧: 1.@旋风描述的算法: 场景:已知两个GPS点的经纬度坐标信息.计算两点的距离. 1. 距离/纬度关系 GPS: 22.514519, ...

  9. 30411MySQL安装与配置_win10

    1 下载 1.1下载地址 下载地址  https://downloads.mysql.com/archives/community/ 1.2 选择适合自己的版本并下载 1.3 将下载文件解压至自定义路 ...

  10. CTF干货合集

    CTF练习平台 http://hackinglab.cn/ 网络信息安全攻防学习平台 http://captf.com/ ctf题目 http://oj.xctf.org.cn/ XCTF_OJ练习平 ...