欢迎转载,请支持原创,保留原文链接:blog.ilibrary.me

前言

公司项目(云计算)牵涉到很多异步计算,资源(磁盘,网络等)创建分配调度,都是耗时的任务。 在实现过程中,都通过异步变同步(async/await)的方式来实现业务逻辑。代码本身可读性还是挺好的,同步的逻辑,一步一步的走下去,和读常规的web service代码没有什么太大区别。

但是因为是异步的,出错处理特别复杂,有可能资源找不到了,有可能资源开始创建了,但是还没有成功,有可能资源创建失败了,还有可能网络请求失败,等等。

是否可以把各种出错都当作一种状态来处理,然后通过状态机编程来实现逻辑简化,让程序更加健壮?

下面会从状态机和Petri Net的基本概念开始。

状态机

定义

怎么理解Mealy和Moore

优点和缺点

子状态怎么管理

状态机设计模式

应用场景及限制

经典应用举例

在云计算中可以怎么用, 解决哪些类型的问题

状态机(state machine)有5个要素,分别是状态(state)、迁移(transition)、事件(event)、动作(action)、条件(guard)。

  1. 状态:一个系统在某一时刻所存在的稳定的工作情况,系统在整个工作周期中可能有多个状态。注意,是稳定的情况才是我们关注的状态,中间态不是我们需要关注的。
  2. 迁移:系统从一个状态转移到另一个状态的过程称作迁移,迁移不是自动发生的,需要外界对系统施加影响。
  3. 事件:某一时刻发生的对系统有意义的事情,状态机之所以发生状态迁移,就是因为出现了事件。 事件触发迁移,不同的状态下同样的事件产生不同的迁移。
  4. 动作:在状态机的迁移过程中,状态机会做出一些其它的行为,这些行为就是动作,动作是状态机对事件的响应。
  5. 条件:状态机对事件并不是有求必应的,有了事件,状态机还要满足一定的条件才能发生状态迁移。

Petri Net

定义

怎么理解Mealy和Moore

优点和缺点

应用场景及限制

经典应用举例

在云计算中可以怎么用, 解决哪些类型的问题

状态机和Petri Net差异和对比

状态机在分布式系统里的应用和实现

opensource application performance里面有一个用状态机实现分布式一致性算法paxos.

总结

用状态机还是Petri Net

库推荐

Refs

  1. 状态机编程