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 好懵逼呀,客户端调用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聊天记录的更多相关文章
- UvaLA 3938 "Ray, Pass me the dishes!"
"Ray, Pass me the dishes!" Time Limit: 3000MS Memory Limit: Unkn ...
- iOS聊天下拉刷新聊天记录的实现
1. 想法 最近在开发一个社交类app,要实现类似微信那种下拉刷新聊天记录的功能. 一般有两种实现方式: 1. 直接fetch一个entity的所有数据然后在内存中做filter,就是把所有聊天记录先 ...
- android微信聊天记录导出到电脑【微信安卓版技巧】
微信,对它又爱又恨!爱的是微信能替代很多手机通话短信,恨的是有些较早前的手机不能友好支持,比如ytkah之前用的i8000,挺上手的,就是没办法装微信,当时工作需要必须用微信,只好忍痛割爱买了个and ...
- iphone如何导出微信聊天记录到电脑?
有个小美眉买了个iphone,但发现自己就是一小白,很多功能都不会用,微信倒是用得挺上手的,可以晚上聊到三四点,流量直接飙升500MB.最近她说手机太卡了,问ytkah帮她整一下.拿起她的IPhone ...
- 如何使用iTunes与iTools导出微信聊天记录
.tocblock .tocblock .tocblock { margin-left: 2.25em; } .madoko .toc>.tocblock .tocblock { margin- ...
- 微信聊天记录查看器(程序+源码) - iOS版
本文版权归cxun所有,如有转载请注明出处与本文链接,谢谢!原文地址:http://www.cnblogs.com/cxun/p/4338643.html Updates [2016.10.14]感谢 ...
- 移动安全初探:窃取微信聊天记录、Hacking Android with Metasploit
在这篇文章中我们将讨论如何获取安卓.苹果设备中的微信聊天记录,并演示如何利用后门通过Metasploit对安卓设备进行控制.文章比较基础.可动手性强,有设备的童鞋不妨边阅读文章边操作,希望能激发大家对 ...
- ray与triangle/quad求交二三事
引擎中,ray与quad求交,算法未细看,但有求解二次方程,不解.ray与triangle求交,使用的是97年经典算法,仔细看过论文,多谢小武同学指点,用到了克拉默法则求解线性方程组.想模仿该方法,做 ...
- 借助无线路由器+2台笔记本+Windows桥接功能,成功绕过了微信聊天记录迁移的BUG
最近入了台iphone se,在迁移微信聊天记录的时候,遇到个BUG.它的迁移流程是这样的:需要将两台手机连接到同一个WIFI上面,然后新手机扫旧手机上面的二维码,来完成导入.中途遇到的问题是: 此时 ...
随机推荐
- WPF里DataGrid分页控件
1.主要代码: using System; using System.Collections.ObjectModel; using System.Windows; using System.Windo ...
- Ubuntu 搭建 GitLab 笔记
简介 GitLab 社区版可以提供许多与 GitHub 相同的功能,且部署在属于自己的机器上,我们会因为网络及其他一些问题而不便使用 GitHub ,这时部署一个 GitLab 是最好的选择. 下载 ...
- C# Encoding.GetEncoding 编码列表
原文:C# Encoding.GetEncoding 编码列表 代码页 名称 显示名称 37 IBM037 IBM EBCDIC(美国 - 加拿大) 437 IBM437 OEM 美国 500 IBM ...
- C# mysql set和enum属性字段的读取和添加
1.使用Navicat for Mysql设置set和enum属性字段: a.enum类型 b.set类型 enum类型在创建表时需要设置初始值,在如图所示的位置设置. 2.C#读取和添加数据 a.e ...
- springboot 2.x处理404、500等异常
404错误 404错误是不经过Controller的,所以使用@ControllerAdvice或@RestControllerAdvice无法获取到404错误 springboot2处理404错误的 ...
- 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 ...
- c# winfrom 可折叠的树形控件
首先需要一个可绑定实体 [Serializable] public class TreeNodeModel { private Image _nodePic; /// <summary> ...
- Gps坐标距离计算C#实现
园子里找到两钟实现方式,做一记录,回头再认真学习,先拿来就用吧: 1.@旋风描述的算法: 场景:已知两个GPS点的经纬度坐标信息.计算两点的距离. 1. 距离/纬度关系 GPS: 22.514519, ...
- 30411MySQL安装与配置_win10
1 下载 1.1下载地址 下载地址 https://downloads.mysql.com/archives/community/ 1.2 选择适合自己的版本并下载 1.3 将下载文件解压至自定义路 ...
- CTF干货合集
CTF练习平台 http://hackinglab.cn/ 网络信息安全攻防学习平台 http://captf.com/ ctf题目 http://oj.xctf.org.cn/ XCTF_OJ练习平 ...