数据系统基础
互联网作得太出色了,以致于不少人把它看做某种太平洋同样的天然资源,而非人造。你还记得上一个达到如此规模而又这样健壮的技术是什么?web
------------Alan Kay,Dr.Dobb杂志采访(2012)数据库
何谓数据密集型系统?
对一个应用系统,若是‘数据’是其成败决定性因素,包括数据的规模,数据的复杂度或者数据产品与变化的速率等,咱们就能够称为‘数据密集型应用系统’;与之对应的是计算密集型,cpu主频每每是后者最大的制约瓶颈。缓存

可靠性
对于软件的可靠性,能够从如下几个方面描述:服务器
- 应用程序执行用户所指望的功能。用户可以经过使用你的产品得到最基本的知足,好比经过微信能聊天,支付,经过京东能购物等,符合最初的预期。
- 能够容忍用户出现错误或者不正确的软件使用方法。对于错误的方法不至于致使软件的崩溃,可以经过指引继续或者通知用户因为什么缘由不能继续。
- 性能能够应对典型场景,合理负载压力和数据量。对于突增的用户流量能作到降级,限流,扩容,不影响大部分用户的体验。
- 系统可防止任何未经受权的访问和滥用。作好软件的鉴权措施,保护用户的隐私,防止黑客的攻击
保证系统的可靠性,提升总体可用性,减小硬件,软件认为致使的故障,能够从如下几个点考虑:微信
- 增长冗余。能够经过数据备份,多地部署,以10倍流量部署机器等方式,当问题发生时,能及时恢复,减小故障时间。
- 熔断开关。当下游出现问题时,能对部分业务熔断处理,不影响总体系统的可用性。
- 限频。限频开关可以防止业务请求的突增致使业务的奔溃,特别是对于不能自动扩容的系统。即便是对于一些请求量稳定的业务系统,有时候也可能由于请求重试的放大致使系统奔溃,限频是对系统很好的一种保护
- 关键路径与非关键路径梳理并隔离部署,对于非关键路径能够进行降级处理。
- 解耦。对于一些能够异步处理的操做,好比消息通知等,经过mq异步处理,下降系统的响应时间防止被拖垮。
- 对于一些人为因素致使的系统不可用,能够经过充分的测试,好比对核心代码编写gtest单元测试,自动化测试等,完善有效的监控,增强风险意识的培训。
可扩展性
可扩展性是用来描述系统应对负载增长能力的术语。能够理解为当用户从1w/smin增加到100w/min时,系统是否还能正常运行。负载能够用称为负载参数的若干数字来描述。参加的最佳选择取决于系统的结构,它多是web服务器的每秒请求处理次数,数据库中写入的比例,聊天室的同时活动用户数量,缓存命中率等。异步
当负载增长时,会关注系统的响应时间以及最终失败量。对于应对负载能够从垂直扩展和水平扩展两个方面考虑:分布式
- 垂直扩展就是提升单机的性能,操做简单,不过成本很高。
- 水平扩展就是增长机器,优势是通常对机器要求不高,可是技术实现负载。分布式的系统一般都支持水平的扩展,在无状态的状况下能够支持自动扩容,可以很好的应对负载升高的状况。
可维护性
可维护性性能
方便运营团队来保持系统平稳运行单元测试
简单性测试
简化系统复杂性,使新工程师可以轻松理解系统。注意这与用户界面的简单性并不同
可演化性
后续工程师可以轻松地对系统进行改进,并根据需求变化将其适配到非典型场景,也称为可延伸性,易修改性或可塑性