数据密集型系统认知
数据密集型应用通常基于标准模块构建,每个模块负责单一的常用功能(职责单一,模块的纵向拆分很重要),通常包含以下模块
- 数据库:用以存储数据
- 高速缓存:缓存那些复杂或操作代价昂贵的结果,加快下次访问
- 索引:用户可以按关键字搜索数据并支持过滤
- 流式处理:持续发送消息至另一个进程,处理采用一部方式
- 批处理:定期处理大量累积数据
数据系统的认知
一个系统的设计需要考虑以下三个问题
可靠性(Reliability)
当出现意外情况如硬件,软件故障,人为失误等,系统应可以继续正常运转;虽然性能可能有所降低,但确保功能正确
可扩展性(Scalability)
随着规模的增长,例如数据量,流量或复杂性,系统应以合理的方式来匹配这种增长
可维护性(Maintainability)
随着时间的推移,许多新的人员参与到系统开发和运维,以维护现有功能或适配新场景等,系统都应高效运转
可靠性
对于软件,典型的期望有以下
- 应用程序执行用户所期望的功能
- 可以容忍用户出现错误的软件使用方法(这种情况可以给出提示,但不许系统崩溃)
- 性能可以应对单行场景,合理的负载压力和数据量
- 系统可以防止任何未经授权的访问和滥用
对于上述目标都支持才算“正常工作”的话,那么可靠性大致意味着: