上QQ阅读APP看书,第一时间看更新
3.1.5 数据库伸缩
大多数应用程序都会使用关系型数据库来存储其事务数据。而关系型数据库的主要问题是它在引入其他技术(例如分片和调整应用程序)之前无法水平伸缩。这听起来很复杂。
对于数据库来说,最好采取预防措施并减少其负载。混用多种存储(例如将用户会话存储在单独的NoSQL数据库中,以及将静态内容存储在对象存储中等)有助于减轻主数据库的负担。最好让数据库的主节点仅用于写入和更新数据,并使用额外的只读副本来处理所有的读请求。
Amazon RDS引擎为关系型数据库提供最多6个只读副本,并通过Oracle插件在两个节点之间实时同步数据。只读副本在与主节点同步时可能会有毫秒级的延迟,因此在设计应用程序时需要提前考虑这一点。建议使用诸如Memcached或Redis之类的缓存引擎来为频繁的查询请求提供缓存,从而减少主节点的负载。
如果开始超出数据库的容量,那么就需要重新设计数据库并通过分区策略将其划分为多个分片。这样每个分片都可以独立增长,同时,应用程序需要根据分片请求的分区键来确定请求将流向哪个分区。
综上所述,可伸缩性是设计解决方案架构时的重要考虑因素,如果规划不当,就会严重影响项目的总体预算和用户体验。解决方案架构师在设计应用程序和优化工作负载时始终需要考虑弹性伸缩,以获得最佳的性能和成本。
统计分析系统(Statistical Analysis System,SAS)需要评估不同的选项,例如用于静态内容伸缩的CDN、负载均衡和用于扩展服务器的自动伸缩选项,以及用于缓存、对象存储、NoSQL存储、只读副本和分片的各种数据存储选项。
本节介绍了各种伸缩方法以及如何为架构的不同层注入弹性。可伸缩性是确保应用程序具有高可用性和韧性的必要因素。下一节将介绍有关高可用性和韧性的内容。