Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

现在有出版消息了吗?顺便问一下有否设计事务相关内容 #2

Open
zengzizhao opened this issue Jan 9, 2021 · 11 comments

Comments

@zengzizhao
Copy link

主要关心skynet下多 actor 协作的事务问题,因为消息发送机制多个 actor 需要协作时,能否有事务来保证一系列操作的过程中,状态不会被破坏,需要失败后的回退机制,这在网游手游的游戏逻辑中太普遍了,请问书中有涉及这块吗?

@luopeiyu
Copy link
Owner

按照skynet的设计,它默认单节点内的actor通信是安全的。更多的是在业务分割时把有事务需求的actor安排在一个节点内,这样可以避免因底层通信问题导致的事务不一致。

事务机制在数据库方面应用的比较多,游戏服务端业务逻辑上使用强事务机制的见到的似乎并不是很多。一方面是在一致性、吞吐量几个方面做取舍,和具体业务需求有关;另一方面是会使系统复杂度增加许多。遇到有事务需求,一般可以有三种替代方案。
其一是可以通过架构层面去规避,比如把强交互的actor放到同个节点,或者减少拆分。
其二是使用数据库的事务机制,通过数据库来做事务的中转。
其三是保留每一步的记录,万一出问题可以查询。比如充值系统每一步都会记录日志。

@zengzizhao
Copy link
Author

举个例子,如果我需要买点东西,先从银行查询余额,然后从商店获取一个物品,然后去银行扣掉钱,再把物品加到背包里。这个过程会涉及多个 actor ,整个过程又需要是一个事务,不要在执行这个事务过程中,有任何涉及的 actor 状态改变。
按上面回复的意思,那这个需求中也不需要有商店、银行之类的actor了,是不是不需要多个actor了,就只存在一个“我“这个actor?就不存在强一致性了?貌似不会这么组织数据吧

@luopeiyu
Copy link
Owner

书稿中正好有个类似的例子,虽然不是说事务,但涉及到银行的例子。
算是通过业务逻辑去规避一些事务问题。

相关部分:
aaa1
aaa2

@zengzizhao
Copy link
Author

好的,期待

@zengzizhao
Copy link
Author

书的上市时间确定了吗,期待在年前可以拜读大作

@luopeiyu
Copy link
Owner

也特别期待,刚刚问了下编辑,还在文学修改阶段。估计还要一小段时间

@gedageda
Copy link

gedageda commented Feb 7, 2021

罗老师这个新内容比 https://github.com/TrinityCore/TrinityCore 如何?你的unity网络第二版我终于快读完了,很好,学了很多东西。

@zengzizhao
Copy link
Author

具体上市时间现在是否确定了?

@luopeiyu
Copy link
Owner

luopeiyu commented Mar 1, 2021

具体上市时间现在是否确定了?

至少要年中了TAT

@zengzizhao
Copy link
Author

有具体的出版时间了吗

@luopeiyu
Copy link
Owner

这几天网店陆续上架了^_^ 谢谢大家的等待

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants