系统设计的原则

2022-05-11  本文已影响0人  Robin92

好的系统是迭代出来的,个人对于系统设计原则的理解也从个人成长的迭代进度来考虑。


在最初根据任务来写 API 阶段时,主要考虑:

幂等原则

每个 API 重复访问结果一致。
如用 Restful API时 Put 请求修改资源指定修改后的结果是什么样,而不是根据当前资源进行 switch 类的切换。

可重复原则(DRY 原则)

开发可复用的逻辑块,而不是一直 Copy-Paste。

可扩展原则

当需求变化或使用技术进行变化的时候,都会引发代码的变动,如果能在写代码之初就能考虑到扩展性,那遇到变化的时候会有所准备。

可追溯原则

自己写完 API 一定要有观测、调试的方法,最基本的就是日志,日志的输出位置和分级就很重要。l
根据日志的输出可以追溯到某个业务链(Request-ID)执行逻辑是什么样的。
根据日志的分级,可以筛选出重要的和不重要的信息,如按以下原则:

反馈原则

如 HTTP 返回,用状态码 + 辅助信息向请求者进行反馈,尤其是 4xx 的错误,返回具体直观的描述信息可以方便他人和自己定位问题。
但同时也要考虑隐私性,如返回用户不存在和用户密码错误可能会招致一些攻击。如果用输入验证码能 cover 住这些攻击的话就可以放开一些。


当自己有能力负责一个模块后,涉及到表的结构设计和整个系统如分布式的考虑,要考虑:

无状态原则

每个服务不记录自己请求的状态,这样可以方便地进行复制扩展。
当然,如果像 Sip 这样本身有状态的协议,就必须有状态了,需要从系统架构方面增加有会话状态的负载均衡来处理。

切分原则

当业务压力大或系统复杂的时候,就需要考虑按一定规则进行分片(分成多个微服务、或仅一个服务但各自处理不同)。

分片原则按不同的维度有不同的策略,如:

在表的设计上也能体现切分的原则。

备份原则

当服务变大的时候,新人很难很快地了解业务以及代码,这时就发现备份原则的重要性。
要注意将业务文档化,将配置信息文档化等等,以及还要考虑人才流失的人员备份。

上一篇 下一篇

猜你喜欢

热点阅读