概要设计需要注意的几个地方
外部关系,
外部系统的逻辑关系,物理关系,通讯方式
整体结构,
整体的技术及业务逻辑架构
代码结构,
1.代码的分层分包,核心代码逻辑。复杂业务应引入领域层,领域层可使用多表查询形成单一领域对象,各领域间不使用多表查询,而是在服务层拼接。
2.执行自顶向下的开发模式:
高级技术人员(理解项目背景与目的,关注系统整体结构与外部关系):技术选型,整体架构,并形成对应的基本设计文档。
中级技术人员(理解基本设计,关注单一功能整体结构与其他功能关系):自顶向下完成接口和方法定义,合理利用设计模式·,遵循设计原则,依据业务结构实现代码复用,并形成对应的详细设计文档。
初级技术人员(理解详细设计,关注单一功能实现):具体代码实现。
代码规范,
禁止在循环中使用IO操作。不依据代码重复度而是依据业务逻辑实现代码复用。
必要数据同步执行,异常需回滚。非必要数据异步执行,异常只记录不回滚。异步执行因无法回滚,在同步事务之后执行。
master数据操作对外提供钩子函数。
支付时同一个订单保证同一个支付id。
输入式id需设计校验码。
系统异常需完整log堆栈,禁止直接catch。
代码审查,
权限管理,
多角色控制访问模块和按钮
多部门控制访问数据内容
异常处理,
500系:业务异常
403:越权访问
401:token过期
日志处理,
异步,切片。数据的出入口监控。
系统日志,文件管理
审计日志,ES管理
数据隔离,
组件依赖,
开发环境,
预期数据性能,
数据压力的两种形式:
单次多数据操作(导入,批量处理):提供批量处理接口,IO操作批量执行。
多次单数据操作(多用户操作,频繁修改):多线程并发执行,共享资源加锁。
测试及生产部署,
部署设计时,需考虑计算成本,存储成本,互联网系统还需要考虑流量成本,可用性成本
安全(互联网系统数据异常,请求数请求时间段异常预警),
国际化,
静态标签,静态段落,静态页面,静态文档。
业务提示,数据字典。
缓存数据,
配置缓存,登录信息缓存(通过控制缓存唯一保证单设备登录,删除缓存强制下线)。
锁动作锁选择,
使用分布式锁时一定要设置过期时间,防止意外中断没有删除而永久锁定。
防重复提交,
除上传大文件外,计算型任务3秒内防重复,存储任务10秒内放重复,费时处理应尽量用线程异步处理或使用同步分段处理),
MQ异步,
MQ的唯一作用是削峰填谷,对实时性要求不高的数据通过降低一致性来提高性能。
使用MQ时应该以生产者为单位产生消息,使用观察者模式分发消息,消费者根据自身需求获取消息内容。
多个消费者可使用广播模式。
事务,
4种隔离机制
7种传播方式
使用外部接口时使用二段或三段式分布事务。无法使用时,通过数据库状态或表格管理事务。
池技术,
线程池,链接池
存储,
关系型数据库:mySql ,百万。单次查询千以下。高并发:读写分离,集群。大数据:sql语句优化,分表分库。
列数据库: Hbase, 亿。高压缩存储,字段灵活,单条增删查改困难,列式检索统计性能极高,海量数据。
键值数据库:reids, 键检索容易,值检索困难,内存存储性能高难以支持大数据。
文档数据库:ES,千万至亿。单次查询万以下。字段不灵活,写入慢,全文检索快,复杂查询快,占用系统资源大,中量数据。
mongoDB,json存储,字段灵活,复杂查询困难。
分布式计算:共享缓存,分布式锁,负载均衡方式
分布式存储:数据库读写分离,数据库集群,数据库负载均衡,数据库分表分库,sql语句优化,分布式事务。