系统(架构)设计五要素

最近在看李智慧的《大型网站技术架构》,简单记录一下系统设计的五要素和一些解决方案。
五要素包括:

  1. 性能
  2. 可用性
  3. 扩展性
  4. 伸缩性
  5. 安全性

1. 性能

性能其实可以分为用户眼里的性能和工程师眼里的性能,用户眼里的性能是广义上的性能:从点击到响应的所有时间,一切影响因素的综合;而工程师关注的性能主要是比较狭义,单指网站架构性能这一块,暂时忽略了例如网络波动、设备性能等因素。
描述计算机处理需求能力的指标,一般包括以下方面:

  1. 响应时间
  2. 吞吐量/吞吐率
  3. 并发用户数

可考虑的提高性能的方法:

  1. 缓存

    本地缓存+缓存服务器

  2. 集群

    使用负载均衡+多台服务器提供服务

  3. 异步

    减少IO等待事件,提高CPU利用率进而提高吞吐量

  4. 动静分离

    其实也是缓存的一种

2. 可用性

即网站的可用(可正常提供服务)时间,一般要求达到四个9以上(99.99%)。

常见提高可用性的手段有:

  1. 冗余

    单节点服务器结构变为集群结构。

  2. 监控报警

    有问题及时上报,快速处理排查隐患。

  3. 服务降级

    保障最基础的功能可用。

3. 扩展性

不同于伸缩性关注集群的服务器增加的影响,扩展性关注的是网站架构在支持新业务开发方面的性能指标,即网站是否可以快速响应需求变化及时修改/增加新业务。

其主要标准在于在网站增加新的业务产品时,是否可以实现对现有产品透明无影响,只需要很少改动甚至不需要改动既有业务功能就可以上线新产品。

主要手段:

  1. 事件驱动架构

    通过消息队列实现,将用户请求和其它业务事件构造成消息发布到消息队列,消息的处理者作为消费者从消息队列中获取消息进行处理。

  2. 分布式服务

    将业务和可复用服务分离,通过分布式服务框架调用。(类似于中间件服务与顶层业务服务)

4. 伸缩性

伸缩性——指可以通过不断向集群中加入服务器的手段来缓解用户访问压力和数据增长需求,具体分为以下两个指标:

  1. 是否可以用多台服务器构建集群;
  2. 是否容易向集群中添加新的服务器;
  3. 加入后是否可以提供和原来的服务器无差别的服务;
  4. 集群中可容纳的服务器数量是否有限制。

根据不同功能的集群,会有不同的原则添加服务器。

5. 安全性

安全性一般体现为:

  1. 可抵御外界的恶意攻击和恶意访问;
  2. 保护用户数据安全。

具体表现为针对现存和潜在的各种攻击和窃密手段,是否有可靠的应对策略。

你可能感兴趣的:(架构,分布式,数据库)