这是我参加[第五届青训营]伴学笔记创作活动的第十天
什么是系统设计
系统设计是一个定义系统架构、模块、接口和数据满足特定需求的过程。
比如设计一个短网址服务、评论服务、Feed流系统、抢红包系统。
微服务架构很多系统被按照业务拆分,需要单独设计一个系统服务。比如短网址服务一开始由于推特只能发140个字,然后很多时候贴一个很长网址就直接快把字符给沾满了,所以因为这个需求才诞生短网址服务,就是根据一个长度来生成一个短地址。现在很多网站如: 头条、微博、知乎都能见到类似形式的短网址。
在一个公司可能有很多不同部门不同的业务,不可能每个业务需要短网址服务就开发一套。这个时候就需要公司里提供一个供其它所有业务使用的一个短网址服务。
系统设计方法论
一.系统设计的那些问题
- 怎么做系统设计,如何落地一个系统
- 系统设计的定义是什么
- 系统功能实现之后,如何分析瓶颈并优化
- 为什么要做系统设计
- 如何验证系统的可用性和稳定性
二.为什么要做系统设计
个人
- 为了面试
- 个人能力提升
- 拓展技术视野
工作
- 业务驱动
- 系统重构
- 突破和创新
三.如何评估一个系统
一个系统的好坏主要从以下几个方面来评估
- 扩展性
- 耦合性
- 可用性
- 安全性
- 性能
- 伸缩性
- 易用性
- 可维护性
四.系统设计的定义
- 系统
关联的个体
规则运作
组成工作的整体
- 设计
设想和计划
目的
过程安排
定义:为了达成某种目的,通过个体组成整体的过程
系统设计的标准流程
一.如何做系统设计
场景 -> 存储 -> 服务 -> 扩展
- 场景分析(Scenario)
什么系统,需要哪些功能,多大的并发量
- 存储设计(Storage)
数据如何组织,Sq存储,NoSq存储
- 服务设计(Service)
业务功能实现和逻辑整合
- 可扩展性(Scale)
解决设计缺陷,提高鲁棒性、扩展性
二.如何发现系统的瓶颈
-
火焰图分析
-
链路追踪
-
性能测试
三.如何保证可用性和稳定性
- 链路梳理
核心链路
流量漏斗
强弱依赖
- 可观测性
链路追踪
核心监控
业务报警
- 全链路测试
压力测试
负载测试
容量测试
- 稳定性控制
系统限流
业务兜底
熔断降级 = 容灾演练 混沌工程应急手册容灾预案