工具随笔-生活工作点滴开发工具

如何做好系统设计

2019-07-08  本文已影响450人  诺亚方舟LOVE

摘要

在互联网系统架构设计中,如何用最少的资源支撑起亿级流量是每位工程师孜孜不息奋战的目标。虽然业务场景林林总总,但是万变不离其宗。本文分享了一些系统设计理论与方法,也是这两年多在工作中对系统设计的一些思考与总结。

一、善用UML工具

用例图
用于需求分析阶段,从用户角度描述系统功能。

用例图

静态图:类图、对象图、包图

静态图

交互图-时序图(注重时间)
常用组合片段:选项(Opt)、循环(Loop)、并行(Par)、抉择(Alt)、中断(Break)

时序图

交互图-协作图(注重对象)

协作图

行为图-状态图(注重状态)

状态图

行为图-活动图(注重活动)

活动图

实现图-组件图

组件图

实现图-部署图

部署图

二、遵从设计原则

设计模式基础

设计模式

创建型
工厂方法(Factory Method)、抽象工厂(Abstract Factory)、建造者(Builder)、单例(Singleton)、原型(Prototype)。

结构型
组合(Composite)、代理(Proxy)、外观(Facade)、适配器(Adapter)、装饰(Decorator)、桥接(Bridge)、享元(Flyweight)。

行为型
策略(Strategy)、模板方法(Temple Method)、观察者(Observer)、状态(State)、备忘录(Memento)、迭代器(Iterator)、命令(Command)、责任链(Chain Of Responsibility)、中介者(Mediator)、访问者(Visitor)、解释器(Interpreter)。

分布式设计原则

高可用
降级、限流(漏桶-平滑、令牌桶-可突发、环形队列+滑动窗口)、切流、熔断、回流、可回流、超时、隔离(线程、读写、资源、热点、爬虫)、负载均衡。

高并发
无状态、拆分、服务化、队列、数据异构(异构->原子化->聚合->缓存)、缓存、并发化(Future、Callback、Completable Future)、池化。

业务设计
防重、幂等、规则引擎、状态机、审计、审批。

分布式理论
CAP:一致性、可用性、分区容错性(三选二);
BASE:基本可用、软状态、最终一致性;
ACID:原子性、一致性、隔离性、持久性。

一致性原则
XA协议:准备 -> 提交(具有阻塞、协调者单点、脑裂等缺点);
XA三段协议:询问 -> 准备 -> 提交;
TCC:try -> confirm / try -> cancel 锁定 -> 确认/释放;
最终一致性:查询、补偿、定期校对、可靠消息、缓存一致性。

超时处理
原则:谁超时谁处理,即接口调用超时,查询+补偿;接口调用成功后,接口内部服务超时须自己补偿。

缓存
缓存分片:客户端分片(redic)、代理分片、集群分片(一致性Hash);
缓存穿透:缓存空值、有效Key判断;
缓存并发:分布式锁、本地锁、软过期(业务过期);
缓存雪崩:错峰失效。

三、画好架构图

4+1视图

场景视图:参与者与功能用例关系,用例图表示;
逻辑视图:功能拆解后的组件边界及关系,组件图和类图表示;
物理视图:软件与硬件映射关系,部署图表示;
处理流程图:各组件流程与数据交互,时序图和流程图表示;
开发视图:模块划分及包组成,包图表示。

C4视图

语境图:梳理待建设系统用户和高层次依赖,在中间画出自己的系统,周围是用户与其它交互系统。


C4语境图

容器图:展开语境图待建设系统,用框图表示,可包含名称、技术选择、职责、框图间交互,明确外部系统边界。


C4容器图

组件图:展开某个容器,描述其内部模块组件组成、关系。


C4组件图

类图:同UML静态图,此处不再展开。

结束语

技术服务业务,如何在技术选型与实现上结合实际情况做最优的取舍,才是每位工程师的价值所在。

参考资料

《亿级流量网站架构核心技术》
《面向对象技术及UML教程》

上一篇 下一篇

猜你喜欢

热点阅读