可靠性,可扩展性,可维护性

0 概述

本文主要介绍如何设计一个可靠性、可扩展性
、可维护性数据系统。

1 可靠性(Reliability)

  • 应用程序表现出用户所期望的功能。
  • 允许用户犯错,允许用户以出乎意料的方式使用软件。
  • 在预期的负载和数据量下,性能满足要求。
  • 系统能防止未经授权的访问和滥用。
    硬件故障:如某个机房或者某个机器挂了(内存问题、磁盘问题等),整个系统对外仍旧可以正常使用。一般策略是异地多活,当某一个机房挂了,其它机房仍旧可以继续提供服务,硬件故障一般不会同时发生。
    软件故障:如JVM bug,在接受特定输入触发;操作系统bug,在特定输入条件会死机。导致这类软件故障的BUG通常会潜伏很长时间,直到被异常情况触发为止。这类故障没有快速恢复办法,可以通过重启应用。可以通过做好监控、测量并分析系统行为。
    人为错误:设计并构建了软件系统的工程师是人类,维持系统运行的运维也是人类。系统配置错误、代码bug(如边界条件),异常处理问题等。如何降低人为的错误:1)以最小化犯错机会的方式设计系 2)将人们最容易犯错的地方与可能导致失败的地方解耦 3)在各个层次进行彻底的测试,从单元测试、全系统集成测试到手动测试 4)允许从人为错误中简单快速地恢复,以最大限度地减少失效情况带来的影响。如快速回滚,灰度、分批发布等策略。5)明确的系统监控,比如性能指标和错误率。

2 可扩展性(Scalability)

这里可扩展性(Scalability)是用来描述系统应对负载增长能力的术语。系统今天很好运行,不代表在双11大促也能很好的运行。当系统用户使用量由1-》100w人使用这个系统能否可靠运行。
描述负载:载可以用一些称为负载参数的数字来描述。参数的最佳选择取决于系统架构,它可能是每秒向Web服务器发出的请求、数据库中的读写比率、比如下单 300tps,订单查询500qps。
性能:系统响应时间,load、CPU。

当面对突发流量,系

你可能感兴趣的:(系统设计&架构设计)