系统设计几方面

1. 具象: 几个角色 -- 用例

2. 具象: 边界模块

3. 具象: 实体模块

4. 抽象: 详细设计后,抽出公用的部分.

5.

Status状态字段的设置和更改

系统设计中最核心的是异常设计.

如何?

有哪些异常

1. 通信失败

2. 实体失败

方法论:

1. 确定一个实体生命周的实体交互图. (可以是实体交互图,也可以是时序图) 先抛弃状态检查等.

2. 确定每个流程中的异常问题.

3. 区分. 明确状态 和 中间状态[不明确状态,例如超时状态][  开锁中, 支付中 ,超时状态] 本质上其实并不需要. 可以查看支付失败的原因,开锁失败的原因.

4. 并发问题. 乘客结束订单,司机抢单成功. 加分布式锁.

5. 保护权衡(分布式事务,抽象总结): 1. 保护资产. ( 先减款,再退钱 ) 2. 保护资产: 等开锁消息回来再结束计费 3. 保护乘客:

举例说明.

评审: 说服别人要明确举出工作中的缺点, 不要直说原则. 业务域就放业务域.   例如业务域不明确,增加一项,或者改变某个逻辑,大家都要改. cos 组合服务太重,

状态设计的需求来源:

1. 业务流程.

参考流程引擎的各种流程 . 垫付的流程更复杂,  1.支付 2.垫付  不仅独立而且共存. 但都会触发 分润. [         各个主体的认知梳理. 乘客,司机 (单流程 key value),客服,财务统计. 各个统计需求真的关注的到底是什么? 原状态流程不变,那么司机要重新对原 status 字段的判断要改. 司机也要改. ]

2. 后台查询诉求

1. 可能全局系统(n 个子系统)的状态, 全流程. 方便 crm 同学查询. 2.将内部系统的 n 个状态聚合成一个状态.  ( 已分润也算已支付.)

3. 统计诉求

对状态进行聚合统计. 新增状态要同步. 状态字典 加上 监控 ,对新增的状态进行监控.

代码级别就只能 review 了? 状态转换表. 不同业务场景下.

新增的 type,status 如何保证业务系统健全.

状态设计是误区.一定要是状态机设计. 相同状态但流程不同. 状态机是实体和流程的统一.

一定要前置状态校验和其他条件校验.

异常考虑: 另外要关注自动流转的状态,要警惕丢失掉对应的流转流程. (例子,代保养中 大单结束)

几种状态设计.

顺序流程:

1.  单系统 一个字段表征 N 个状态( 含 手动,含自动)

2. 分布式系统. 每个系统各一个字段.对应着生命周期扩展表.

顺序流程:

多个主体操作.

例子. 1. 发单, 乘客取消, 多个司机抢单. 2.tcp 状态机 关闭流程.  ack 的和 action 可能组合,

复杂流程:

N 个流程,独立. 有一个成功即走下去.

N 个流程,x 个都成功才能走下去.

N 个流程 x 个成功就能走下去, 但是不妨碍剩下的action 执行.

action 变成了实体, 不再是依附于状态节点. 或者是一个字段来表征也可以.

1. 每个实体都需要有状态

2. 当两个实体不是同时存在的时候,即使1:1也无法用下游实体代替上游实体的状态;

例如 订单行 ad 1:1 先有订单行 后有ad ;

如果只是把 订单行的状态设置在ad上; 那么你无法获取订单行是初始状态的情况( 订单行 left join ad 后 ad.status=null 或者 ad.status=Init 两种情况,这种很难考虑到)

3. 上游的状态是根据上游状态计算出来的,

一个计算技巧就是,当所有下有状态是Audited, 那么上游的Ad是什么状态,利用这个, 再根据 if else的逐位分析法,逐步判断;;

wiz上有详细.

1. status一定要有状态机更改

2. status状态的意义是屏蔽掉复杂业务.

比如说分润状态流转.有些是有三条流水,有些是有四条流水.

业务系统中最核心的状态设计,异常 case. (系统设计)的更多相关文章

  1. 聊聊业务系统中投递消息到mq的几种方式

    背景 电商中有这样的一个场景: 下单成功之后送积分的操作,我们使用mq来实现 下单成功之后,投递一条消息到mq,积分系统消费消息,给用户增加积分 我们主要讨论一下,下单及投递消息到mq的操作,如何实现 ...

  2. 架构设计 | 分布式业务系统中,全局ID生成策略

    本文源码:GitHub·点这里 || GitEE·点这里 一.全局ID简介 在实际的开发中,几乎所有的业务场景产生的数据,都需要一个唯一ID作为核心标识,用来流程化管理.比如常见的: 订单:order ...

  3. Mycat中的核心概念

      Mycat中的核心概念     Mycat中的核心概念 1.数据库中间件    Mycat 是一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而 Mycat 并没有 存储引擎,所以并 ...

  4. 整合Activiti Modeler到业务系统(或BPM平台)

    http://www.kafeitu.me/activiti/2013/03/10/integrate-activiti-modeler.html 1. 为什么要整合 Activiti 5.10版本把 ...

  5. 系统中异常公共处理模块 in spring boot

    最近在用spring boot 做微服务,所以对于异常信息的 [友好展示]有要求,我设计了两点: 一. 在业务逻辑代码中,异常的抛出 我做了限定,一般只会是三种: 1. OmcException // ...

  6. 如何在CRM系统中集成ActiveReports最终报表设计器

    有时候,将ActiveReports设计器集成到业务系统中,为用户提供一些自定义的数据表,用户不需要了解如何底层的逻辑关系和后台代码,只需要选择几张关联的数据表,我们会根据用户的选择生成可供用户直接使 ...

  7. [Hyperledger] Fabric系统中 peer模块的 gossip服务详解

    最近一直在看fabric系统中的核心模块之一——peer模块.在看peer的配置文件core.yaml的信息时,对其中的gossip配置选项很感兴趣.看了一上午,还是不能明白这个选项到底什么意思呢?表 ...

  8. 统一门户与业务系统的sso整合技术方案(单点登录)

    一.单点登录(SSO,Single Sign On)整合目前计划接入统一门户的所有业务系统均为基于JavaEE技术的B/S架构系统.由于统一门户的单点登录技术选用的是JA-SIG组织开发的Cas Se ...

  9. 以字节跳动内部 Data Catalog 架构升级为例聊业务系统的性能优化

    背景 字节跳动 Data Catalog 产品早期,是基于 LinkedIn Wherehows 进行二次改造,产品早期只支持 Hive 一种数据源.后续为了支持业务发展,做了很多修修补补的工作,系统 ...

随机推荐

  1. 2014-7-7 NOIP模拟赛(图论)

    1.无线通讯网(wireless.pas/cpp/c) [题目描述] 国防部计划用无线网络连接若干个边防哨所.2种不同的通讯技术用来搭建无线网络:每个边防哨所都要配备无线电收发器:有一些哨所还可以增配 ...

  2. php随机生成验证图片

    为了防止用户利用机器人自动注册.登录.灌水,现在网站一般都采用了验证码技术,就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入表单 ...

  3. 【OpenJ_Bailian - 3468】电池的寿命(贪心)

    电池的寿命 Descriptions: 小S新买了一个掌上游戏机,这个游戏机由两节5号电池供电.为了保证能够长时间玩游戏,他买了很多5号电池,这些电池的生产商不同,质量也有差异,因而使用寿命也有所不同 ...

  4. 理解:return、break、continue区别

    1.return:结束该方法的执行 2.continue:结束当前流程中的continue一下的代码,如果是for循环会再次执行下一个条件 3.break:完全终止当前执行流程,如果是for循环,那么 ...

  5. 2.Python基础认识(格式化输出,while语句,运算符,编码,单位转化)

    Python基础认识 1.字符串的格式化初识及占位符的简单应用 字符串的格式化 按照既定的要求进行有规定排版的一种输出方式. #我们想要输出的格式如下: ----------------------- ...

  6. 普通组件定义渲染和render渲染组件的区别(三)

    普通方式定义组件和效果: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  7. Java 定时任务(转)

    转自 http://www.cnblogs.com/chenssy/p/3788407.html 在我们编程过程中如果需要执行一些简单的定时任务,无须做复杂的控制,我们可以考虑使用JDK中的Timer ...

  8. NOIP前模拟赛总结

    NOIP前模拟赛总结 from 2018.10.7 to ??? Date Name Score(Rank) Problems 2018.10.7 McfXH AK Contest 42(?) 期望得 ...

  9. HDU6440(费马小定理)

    其实我读题都懵逼--他给出一个素数p,让你设计一种加和乘的运算使得\[(m+n)^p = m^p+n^p\] 答案是设计成%p意义下的加法和乘法,这样:\[(m+n)^p\ \%\ p = m+n\] ...

  10. C++中this指针的理解

    C++中this指针的理解 先要理解class的意思.class应该理解为一种类型,象int,char一样,是用户自定义的类型.用这个类型可以来声明一个变量,比如int x, myclass my等等 ...