开发
故障类型及规避方法
- 空值
- 导致的问题:空指针异常,空值导致脚本查询条件异常从而导致查询结果或者更新删除结果与期望不符,特殊场景流程错误
- 规避方法:安全第一,不在当前实现控制范围内的外部变更都判空。代码或者脚本要注意防止出现空值时,也不会影响性能或者导致数据丢失
- if else处理场景覆盖不完整
- 导致的问题:特殊场景流程错误
- 规避方法:if else的条件要单一,符合实际条件层级结构
设计
设计原则
- 总原则
- 简易直接最好。关联关系要简单、交互标准要简单。
- 问题越快暴露越好。不能及时发现的问题最可能变成大问题。比如数据丢失。1、同步比异步安全2、从备份中取数据,可能会隐藏数据没有成功持久化的问题
- 数据库
- 主表的主键不要用业务号。原因:1、主键通过用于增删改查,通过有规律的业务号作为增删改查的入参,则接口是有风险的
- 业务数据和过程数据不能保存在同一个表中。原因:1、容易出现数据用错的情况 2、运维、报表查询数据困难
- 避免使用递增序号的方式保存数据。确实需要使用时,要处理序号的获取性能问题,避免使用直接查询该表序号最大值来确认下一个序号。原因:数据库性能最容易出现瓶颈。
- 所以表都应该有创建时间、更新时间字段。
- 为了提升查询性能,建表时要考虑增加冗余字段。原因:单表查询性能比多表查询好很多。
- 异步任务
- 失败要有监控
- 不成功不能清理原始数据
- 要有自动重试、手工重试、手工批量重试机制
- 用MQ还是自动任务?答:
- 异常处理
- 异常有监控
- 异常自动重试机制
- 异常人工处理