Distributed System 分布式系统 KC 关键特征
需要考虑的问题
- 有哪些不同的架构模块可以使用?
- 这些模块怎么互相交互?
- 应该怎么最好地使用这些模块?怎样做取舍?
关键特征(Key Chracterristics)
扩容性(Scalability)
扩容性(Scalablity)是指一个系统、进程、网络的容量会随着需求的增加而变大
水平扩容 VS 垂直扩容(Horizontal vs Vertial Scaling)
水平扩容(Horizontal Scaling)
- 添加更多的服务器, 例如 Cassandra 和 MongoDB 可以添加机器
垂直扩容(Vertical Scaling)
- 给已有的服务器添加更多资源,例如 CPU、RAM、Storage 等
- 例如 MySQL 从小服务器换成大服务器
- 可能会有一个停机时间(DownTime),并且有上限
可靠性(Reliability)
可靠性(Reliability)是指一个给定周期内系统发生故障的概率
- 分布式系统被认为是可靠的,是因为故障机器会被另一台机器替换
- 为了清除单点故障,可靠的系统必须准备弹性(Resilience)备份,并且支付开销
可用性(Availablity)
可用性(Avaliablity)是指一个系统在特定周期内,能运行所需功能的时间
- 可用性考虑可维护性(Maintainablity)、修理时间、备件(Spares )可用性、和其他后勤(Logistics)考虑。
- 例如一台飞机能飞很多小时,只有很小的停机时间(DownTime),那么就是有高可用性
可靠性 VS 可用性
可靠性是考虑了所有可能现实世界的情况后,随着时间发展的可用性
- 如果一个系统是可靠的,那么它肯定是可用的
- 反过来,一个可用的系统未必可靠
- 可能会通过最大限度地缩短维修时间来保证可用性,但是却降低产品的可靠性
- 例如一个在线零售商店,可能 99.99 % 可用,但是它却没有任何信息安全测试,那么就很可能出事故
有效性(Efficiency)
主要提现在一些效率的度量值(Measure)
- 例如响应时间(延迟)、吞吐量(Througput)或带宽(Bandwidth),这两个度量值对应于以下单位成本:
- 系统节点全局发送的消息数量,不管消息大小如何
- 代表数据交换量的消息大小
可维护性(Serviceability) / 可管理性(Manageability)
可维护性(Serviceability) / 可管理性(Manageability)是指系统修复/维护的简单性和速度
- 如果一个故障系统的修理时间增加,可用性就会下降
- 故障的早期检测可以减少或避免系统停机时间。
- 例如,一些企业系统遇到系统故障时可以自动呼叫服务中心(无需人工干预)