系统设计|青训营笔记

89 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第12天。

系统设计

评估系统:可用性、安全性、扩展性、易用性、性能、耦合性、可维护性、伸缩性。

系统设计的流程:场景、存储、服务、扩展。

场景分析:系统、功能、并发量。

存储设计:数据组织、Sql存储、NoSql存储。

服务设计:业务功能和逻辑整合。

可扩展性:解决设计缺陷、提高鲁棒性、扩展性。

发现系统瓶颈的方法:火焰图分析、链路追踪、性能测试。

保证可用性和稳定性的方法:链路追踪、可观测性、全链路测试、稳定性控制、容灾演练。

秒杀系统的挑战:资源成本、反欺诈、高性能、防止超卖、流量管控、扩展性、鲁棒性。

场景功能:秒杀活动发布、秒杀商品详情、秒杀下单。

场景并发:万人参与秒杀。

子服务:用户服务、风控服务、活动服务、订单服务。

服务实现基础组件:ID生成器、缓存组件、MQ组件、限流组件。

扩展:流量隔离、CDN、缓存优化、流量管控、数据库扩展、MQ扩展、Redis扩展、服务水平扩展、服务垂直扩展。

系统架构组成:用户层、插入层、应用层、基础层。

用户层由WEB、IOS、Android写成。

接入层由Nginx写成。

应用层由Cache组件写成。

基础层由Redis、RocketMQ、MySQL组成。

进行系统设计时,必须把所要设计的对象系统和围绕该对象系统的环境共同考虑,前者称为内部系统,后者称为外部系统,它们之间存在着相互支持和相互制约的关系,内部系统和外部系统结合起来称作总体系统。因此,在系统设计时必须采用内部设计与外部设计相结合的思考原则,从总体系统的功能、输入、输出、环境、程序、人的因素、物的媒介各方面综合考虑,设计出整体最优的系统。进行系统设计应当采用分解、综合与反馈的工作方法。

不论多大的复杂系统,首先要分解为若干子系统或要素,分解可从结构要素、功能要求、时间序列、空间配置等方面进行,并将其特征和性能标准化,综合成最优子系统,然后将最优子系统进行总体设计,从而得到最优系统。在这一过程中,从设计计划开始到设计出满意系统为止,都要进行分阶段及总体综合评价,并以此对各项工作进行修改和完善。整个设计阶段是一个综合性反馈过程。

系统设计通常应用两种方法:一种是归纳法,另一种是演绎法。

应用归纳法进行系统设计的程序是:首先尽可能地收集现有的和过去的同类系统的系统设计资料;在对这些系统的设计、制造和运行状况进行分析研究的基础上,根据所设计的系统的功能要求进行多次选择,然后对少数几个同类系统作出相应修正,最后得出一个理想的系统。

演绎法是一种公理化方法,即先从普遍的规则和原理出发,根据设计人员的知识和经验,从具有一定功能的元素集合中选择能符合系统功能要求的多种元素,然后将这些元素按照一定形式进行组合,从而创造出具有所需功能的新系统。在系统设计的实践中,这两种方法往往是并用的。