你需要知道的4个数据库扩展解决方案
你已经用一个直观的、用户友好的用户界面启动了你的应用程序。但是,如果你的应用程序遇到负载问题,这将使你的终端客户在使用它时感到沮丧。很有可能问题不在应用程序内部,而是在数据库。根据一项调查,38%的数据库专业人员报告说数据库停机是让他们夜不能寐的重要问题。停机可能是由于任何数量的问题,包括不当的数据库配置、不良的负载处理、数据库查询超时,等等。在这篇文章中,我们将讨论你是否需要扩展你的数据库以及如何解决数据库的可扩展性问题。让我们从最明显的问题开始--为什么要进行数据库扩展?
为什么要扩展你的数据库?
你的应用程序的数据库应该能够扩展或收缩其计算资源,以配合应用程序的动态需求。例如,你的数据库应该能够扩大规模以处理突然激增的流量。另外,当不在状态时,你的数据库应该能够收缩以节省资源。确保良好的数据库扩展性的最好方法之一是根据你的要求选择合适的数据库。对于物理服务器,数据库的扩展和收缩可能是一个令人头痛的问题。云数据库解决方案可以做到这一点。
数据库的可扩展性是一项资源密集型和挑战性的任务。因此,在开始项目之前,你需要确保你的产品需要一个可扩展的数据库。首先,确定你的产品在可预见的未来是否会出现流量激增的情况。如果没有,你仍然可以用你的旧数据库来做。
如果你的企业是一个初创企业,那么在获取可扩展数据库方面投入资源是没有意义的。你可以在你的应用程序达到临界质量并期待流量的良好激增时再这样做。
下面是一些需要数据库可扩展性的情况:
你的应用已经过时了,你想迁移到云系统上
你的应用程序经历高负荷
你的应用程序需要符合法规的要求
你希望有一个平衡的工作负载,可以为世界各地的用户提供服务
数据库扩展解决方案
1. 缓存数据库查询
提高数据库负载处理能力的最直接的方法之一是缓存数据库查询。通常情况下,一个应用程序只有少数几个查询构成了大部分的请求。你可以对这些查询进行缓存,这样在将来,这些请求就可以从缓存中读取。这样就不需要每次都从数据库中获取数据了。用户很快就能得到所需的数据。这样一来,缓存有助于提高数据库的性能。
亚马逊ElastiCache是一种缓存服务,可以帮助你缓存数据库。有了Amazon ElastiCache,你可以通过内存缓存进行扩展。Amazon ElastiCache支持实时用例。以下是Amazon ElastiCache的理想用例:
游戏排行榜
分析
流媒体
2. 数据库索引
扩展数据库并不总是意味着在现有设置中增加更多的数据库。有时,通过优化当前的数据库,你可以在一定程度上进行扩展。这就是数据库索引发挥作用的地方。使用数据库索引技术,你正在构建数据,以提高从数据库表中检索数据的速度。
3. 数据复制
数据复制是一种策略,用于制作相同的数据库副本以创建额外的机器。复制策略有利于解决峰值负载问题。由于数据被复制,查询可以分散在多个数据库中,这反过来会减少单个数据库的负载。此外,万一存储设备发生故障,复制的数据就会派上用场,系统仍然可以全面运作。
4. 分片
扩展数据库的主要瓶颈之一是设计不当的数据库。为了确保你不面临这个瓶颈,必须从为正确的业务应用选择正确的数据库开始。比如:
一家银行应该选择关系型DBMS,以确保其结构化数据的ACID(原子性、一致性、隔离性、耐久性)。
一个在线多人游戏可以依靠键值无SQL数据库
无论你选择哪个数据库,都要确保它有分片功能。分片是指将数据库的一个大块分割成较小的数据块,称为分片,可以跨多个数据库存储。有两种类型的分片:
水平分片
垂直分片
当你的数据库查询返回一个数据行的子集时,水平分片证明是有效的。这些行通常被分组。例如,数据被过滤的查询是基于短的日期范围。
当你的数据库查询返回数据的列的子集时,垂直分片证明是有效的。例如,如果一些数据库查询只要求名字,而另一些只想要城市,那么垂直分片在这种情况下证明是有效的。
分片有两个主要优势:
系统的整体存储容量与数据库分片的数量成正比。
如果一个分片脱机,你仍然可以依靠分片池来检索和存储你的数据。当一个分片脱机时,目前只有整体数据集的一部分不可用。因此,它不会对系统的运行产生重大影响。
结论
数据库是任何应用程序的一个重要元素。如果你想扩展你的应用程序,你不能不扩展数据库。幸运的是,由于近年来的技术进步,我们拥有所有需要的工具,使扩展过程无缝和毫不费力。人们可以利用云服务提供商,如Azure、AWS或谷歌云来扩展他们的应用程序。然而,在进入可扩展性之前,人们需要考虑某些因素。我希望这篇文章能让你很好地理解与扩展相关的基本问题以及如何解决它们。
今天先到这儿,希望对云原生,技术领导力, 企业管理,系统架构设计与评估,团队管理, 项目管理, 产品管理,团队建设 有参考作用 , 您可能感兴趣的文章:
领导人怎样带领好团队
构建创业公司突击小团队
国际化环境下系统架构演化
微服务架构设计
视频直播平台的系统架构演化
微服务与Docker介绍
Docker与CI持续集成/CD
互联网电商购物车架构演变案例
互联网业务场景下消息队列架构
互联网高效研发团队管理演进之一
消息系统架构设计演进
互联网电商搜索架构演化之一
企业信息化与软件工程的迷思
企业项目化管理介绍
软件项目成功之要素
人际沟通风格介绍一
精益IT组织与分享式领导
学习型组织与企业
企业创新文化与等级观念
组织目标与个人目标
初创公司人才招聘与管理
人才公司环境与企业文化
企业文化、团队文化与知识共享
高效能的团队建设
项目管理沟通计划
构建高效的研发与自动化运维
某大型电商云平台实践
互联网数据库架构设计思路
IT基础架构规划方案一(网络系统规划)
餐饮行业解决方案之客户分析流程
餐饮行业解决方案之采购战略制定与实施流程
餐饮行业解决方案之业务设计流程
供应链需求调研CheckList
企业应用之性能实时度量系统演变
Openshift与Kubernetes的区别
如有想了解更多软件设计与架构, 系统IT,企业信息化, 团队管理 资讯,请关注我的微信订阅号:
作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-Petter Liu Blog。