架构设计的目的

在一个有约束的条件中去寻求最优解,约束条件包括:团队规模、经验、技术水平、成本、资源、业务所处阶段、用户量等

设计参考维度

性能

扩展性

可用性

安全性

成本

注:不同的公司、不同的客户群、不同的业务需求对各个维度的要求各不相同,所以并不是系统做的越复杂越好,适合才最重要。

大型互联网公司设计注意事项

性能

主从

集群

异步

动静分离

缓存

扩展性

架构应能水平扩展 - 水平扩展可以有效避免瓶颈问题

无状态设计 - 服务无状态可以水平扩容

高可用

N+1设计 - 系统中的每个组件都应该做到没有单点故障

回滚设计 - 确保系统可以向前兼容,在系统升级时应有办法回滚版本

禁用设计 - 应该提供控制具体功能是否可用的配置,在系统出现故障时能够快速下线功能

监控设计 - 在设计阶段就应该考虑监控的手段

多活数据中心设计 - 若系统需要极高的高可用,应考虑异地多活数据中心

采用成熟的技术 - 新发布的版本或是新开源的框架可能隐藏bug

资源隔离设计 - 应该避免单一业务占用全部资源

使用商用硬件 - 有效降低硬件故障率

快速迭代 - 功能细分,持续交付

链路追踪 - 快速定位问题

灰度设计 - 灰度设计

成本

非核心购买 - 如果非核心功能需要占据大量开发资源,可采用购买

安全性

网络层

防火墙

内外网

安全传输https

软件层

身份认证

加签验签

黑白名单

风控体系

注意:各个维度都可以从软硬件两个方面进行分析,这里主要分析软件设计方面

三、架构设计原则 – 《架构真经》

对于任务和原则应遵循smart规则

  1. S 原则和任务必须具体
  2. M 可度量
  3. A 可实现
  4. R 可达成
  5. T 可验证
  • N+1设计

    开发的系统在发生故障时,至少有一个冗余的实例

    对于服务来说 – 集群部署

    对于网络机房来说 – 灾备

    对于数据库来说 – 多库

  • 回滚设计

    确保系统可以向后兼容

  • 禁用设计

    可以关闭任何发布的功能,特别是与其他系统进行通信时

  • 监控设计

  • 多活数据中心设计

    异地多活,读写分离

  • 故障隔离

    避免单一业务占用全部资源,避免业务之间相互影响,机房隔离避免单点故障

  • 水平扩展

    通过部署机械可解决

  • 快速迭代

  • 异步设计
  • 无状态设计

    有状态:数据存储或更改

    无状态:只是一次操作,不能保存数据

    有状态服务:服务端保存请求的相关信息,每个请求默认可以使用之间的请求

    无状态服务:服务端不用保存任何请求信息

    有状态对象:非线程安全

    无状态对象:线程安全

四、系统设计六个原则

单一职责原则

一个类或一个接口只干一件事,只有一个原因引起这个类的改变

开闭原则

对扩展开放,对修改关闭

里式替换原则

在使用基类的地方可以任意使用其子类,能保证子类完美替代基类

迪米特法则**-**最小知识原则

一个软件实体应当尽可能少地与其他实体发生相互作用,中介者或外观模式

接口隔离原则

客户端不应该依赖那些他不需要的接口,接口中的方法尽量少。

依赖倒置原则

高层模块不应该依赖底层模块,抽象不依赖细节,细节应该依赖抽象,面向接口编程