1 系统技术设计原则
好的系统都是迭代出来的
-
优先核心业务功能开发
系统的初期,以核心业务为主,快速上线,占取市场份额,等待用户及市场反馈,及时调整需求进行项目迭代,不要一开始就想开发一个淘宝或者京东,也许你可以开发出来,但是市场份额已满,到头来一场空。
-
不要过度复杂化系统
不要为了用某项技术而使用,某项技术的使用是为了应对业务增长带来的系统瓶颈问题,例如一个简单的OA系统,你非要使用微服务、分布式架构、亿级流量缓存,除了增加了开发、运维成本,还要应对开发过程中的种种问题,“不是贵的才是最好的,适合自己才是最重要的。”
-
先行的规划和设计
对将要做的系统有一个基本的了解,可以通过产品运营了解大概的用户量、请求等系统指标信息,并以此为基础对服务器资源、网络资源、系统架构有一个基本的规划和设计。
-
对现有的问题有方案,对未来可能出现的问题有预案
针对已上线或测试阶段发现的问题有解决方案,并对未来可能出现的问题有预案,例如秒杀场景下要预测大量请求进来对系统的压力(服务器、网络、存储等),并做好应急方案,防止系统崩溃。
无状态原则
- 什么是有状态
服务端保存用户登录状态,维护客户端会话。 - 什么是无状态
服务端不保存用户登录状态,不维护客户端会话。 - 有无状态对比
优缺点 | 有状态 | 无状态 |
---|
优点 | 服务端对登录状态可控 | 不存储登录状态;服务可伸缩 |
缺点 | 服务端存储,增加了服务端压力;服务伸缩困难 | 登录状态控制困难 |
拆分原则
- 为什么要拆分
用户量大了(并发上来了)、业务复杂了(需要快速迭代)、可配置资源增加了(运维成本)。 - 拆分的作用
高内聚、低耦合。 - 拆分维度
- 系统维度:可拆分为商品系统、支付系统、用户系统、订单系统等,具体拆分为几个系统需产品经理确定或项目经理决定。
- 功能维度:基于系统维度进行二次拆分,例如用户系统拆分为用户会员系统、用户积分系统、用户中心等
- 读写维度:读写比例特征进行拆分。读服务(多级缓存)、写服务(分区、分库)
- 切面:CDN、LVS、SLB,请求分流、限流、缓存等
- 模块:基础架构组封装二方库。数据库连接(支持多数据源、多种数据库)、分库分表表模块(动态配置接入)、综合消息队列(统一配置,兼容主流消息队列)、支付渠道接入(多渠道路由)
- 服务化原则:单节点到节点集群,节点维护困难,需要对服务进行自动注册及发现(服务治理),高并发下对服务进行限流、熔断、降级、隔离、恢复。
2 系统业务设计原则
防重原则
防重一般伴随着幂等一起出现,防止重复提交导致的幂等性问题。
- 客户端防重(按钮置灰、唯一标志)
- 服务端防重(锁、黑名单、限流)
模块复用原则
- 重构时机
当部分代码在多个地方出现,或者你有想要拷贝的欲望时,证明需要重构次部分代码了。 - 重构的作用
代码可读性、可维护性提升、个人能力的体现。
可追溯原则
一般情况下表现为记录日志,任何问题有据可查,有据可依,能快速发现问题并定位问题(甩锅锅)。
反馈原则
接口设计规范,语义明确,但隐私内容该做的处理还是要做。
备份原则
- 代码备份:Git、GitLab、代码分支
- 数据备份:运维备份(数据库、存储、操作记录)
- 人员备份:不因某功能负责人员缺席而导致功能无法正常运行导致项目停滞。
- 定期CodeReview
- 项目开发规范(阿里开发规范:泰山终极版)
- 项目文档
- 晋升:总结过去,展望未来。
- 标准:ios/iec等标准
- 功能性:满足现有业务功能需求。
- 效能:投入与产出。
- 系统兼容性
- 易用性
- 可靠性:容错、可恢复。
- 安全
- 可维护性
- 可移植性
4 系统衡量指标
- 吞吐量
- 并发数
- 并发用户数
有一部分用户使用业务,另外一部分用户 挂机,没有具体操作。 - 并发连接数
用户和服务器之间的连接。一部分连接在传输数据,一部分连接 仅仅连接而已。 - 并发请求数
请求静态数据,有可能是写操作。 - 并发线程数
系统内,并发的线程数目。
- 响应时间&平均响应时间
吞吐量:单位时间内,能接受和返回的数据请求量。
看业务逻辑,看请求数据。
TPS:Transaction Per Second。每秒进行的事务的数目。(整体定义事务的 请求、操作、返回)。
QPS:Queries Per Second。每秒查询量。
Tps和Qps的关系:打开首页就是一个事务。由具体的场景来决定。一个完整功能。
平均响应时间:响应时间(用户的角度)(请求发出, 接受到响应,之间的时间)
所有响应时间的平均值。
可靠性指标:平均无故障时间。系统上线,到第一次发生故障,运行时间的平均值。
公式计算:
阿姆达尔定律:
加速比:优化前的响应时间/优化后的响应时间。r。
增强比例:某个模块的响应时间/总时间。 <=1,p。
整体系统的平均响应时间:t新 = t老时间 * ((1-p)+ p/r)。
整体系统的加速比:1/((1-p)+ p/r)。
目的:优化 P值大的系统。加大r。