状态机的理解与应用场景?

2020-09-22 13:06:17 +08:00
 beryl

抱歉,这目前不是个分享而是个讨论

当前系统是Java 微服务架构,准备引入状态机,但是没有相关经验,也不确定是不是必须要引入

有几个问题想和大家交流:

  1. 状态机适合在什么业务场景和架构上使用
  2. 状态机解决什么问题
  3. 微服务场景适合状态机么
  4. 有没有参考的资料可以学习下

谢谢

5202 次点击
所在节点    程序员
32 条回复
lzxz1234
2020-09-22 15:08:15 +08:00
适合场景:复杂流程对象,例如特殊类型订单,三个参与方以上的订单,用户下单,用户撤回、客服打回、商家拒单就是三个,再加上不同状态允许操作的人员不一样,很容易堆出各不相同的几十种状态来

纯在代码靠 if else 复杂度极高,维护过程新加角色、状态或者 几条操作路径都可能导致工作量爆炸

至于微服务和状态机的关系,这个其实没关系,更取决于业务复杂度

资料直接看工作流就可以
sampeng
2020-09-22 15:43:37 +08:00
此机非彼机…看到机字就是机器是么
reus
2020-09-22 15:56:00 +08:00
@beryl 用规则引擎啊,把所有规则都写下来
新建 app 需要什么要素,满足了才能新建
上线需要什么条件,满足了才能上线,等等
直接搬运现实的办事方式就行,需要什么材料,需要哪里盖章,都完备了,就可以办某件事
不用管什么状态机,只有两种状态:条件够了,能办,条件没够,不能办。
例如一个事情需要盖十个章,你不需要把每一种盖章组合都搞出一个状态来,你只需要说,缺哪些,不能办,就够了
状态机这个模型,用来描述业务是不适合的,它只适合微观的场景,例如 TCP 状态机这类几十年不用变的。用状态机描述业务,一旦业务流程变了,整个状态机都要改,麻烦得很。
liuhuan475
2020-09-22 17:00:02 +08:00
你说的状态机是这个吗? https://www.bilibili.com/video/BV1Eb411U7z8?p=95
ieiayaobb
2020-09-22 17:38:37 +08:00
电商业务,订单系统是个很经典的 state machine
THESDZ
2020-09-22 17:47:53 +08:00
将这种服务抽离成单独的服务,看业务,可以进行读写锁,大概就能满足你的需求了
THESDZ
2020-09-22 17:48:40 +08:00
@THESDZ 或者直接用 redis 做为 k-v 存储,业务逻辑交给业务代码处理?
amoyiki
2020-09-22 18:02:07 +08:00
大家有在生成上面有过 状态机吗?目前我还是用 if else
gaius
2020-09-22 18:06:56 +08:00
就是独立订单服务,有啥问题。服务只是计算,实际的状态机是后面的数据库
SurfaceView
2020-09-22 18:09:12 +08:00
我做过几个。。
1 个是播放器的 1 个是下载系统
都深度依赖状态机 (非状态模式
useben
2020-09-22 18:34:55 +08:00
我理解的状态机是分布式系统中的状转移个同步..
SmiteChow
2020-09-23 10:05:49 +08:00
常规情况下要考察控制流是否经常变动,如果控制流经常变动,那么使用状态机更合适.
如果不怎么变动,那么直接硬编码控制流为编程语言语法即可.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/709373

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX