数据库(database):存储数据,以便自己或者其他应用程序之后能再次找到。
缓存(cache):记住开销昂贵操作的结果,加快读取速度。
搜索索引(search indexes):允许用户按关键字搜索数据,或以各种方式对数据进行过滤。
流处理(stream processing):向其他进程发送消息,进行异步处理。
批处理(batch processing):定期处理累积的大批量数据。
设计数据系统或服务时可能会遇到很多棘手的问题,例如:当系统出问题时,如何确保数据的正确性和完整性?当部分系统退化降级时,如何为客户提供始终如一的良好性能?当负载增加时,如何扩容应对?什么样的API才是好的API?
可靠性(Reliability)
系统在困境(adversity)(硬件故障、软件故障、人为错误)中仍可正常工作(正确完成功能,并能达到期望的性能水准)。
可扩展性(Scalability)
有合理的办法应对系统的增长(数据量、流量、复杂性)。
可维护性(Maintainability)
许多不同的人(工程师、运维)在不同的生命周期,都能高效地在系统上工作(使系统保持现有行为,并适应新的应用场景)。
故障可能发生在硬件(通常是随机的和不相关的),软件(通常是系统性的Bug,很难处理),和人类(不可避免地时不时出错)。 容错技术 可以对终端用户隐藏某些类型的故障。