
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
学习如何架构开发数据库是每一位后端编程开发程序员都应该熟练掌握的一个编程能力,下面我们就通过案例分析来了解一下,数据库架构开发应用分析。
我们习惯于在任何需要的时候使用ACID事务。对于处理需求被保存在单个数据库服务器的大部分用户而言,这个模型很好。但是对于需要随着数据访问、存储性能和读写规模等需求的增长而扩充系统的用户而言,这种架构很快就会崩溃。对于这些用户,有两种方法来扩展数据存储:
垂直扩展:向单个服务器增加更强力的硬件,例如增强的CPU和RAM内存,或者移到一个大型计算机上。这通常很贵,而且当硬件再也不能升级时就会达到一个瓶颈。
水平扩展:添加更多服务器节点,所有东西都通过计算机网络连接。这通常是实际的实施方案。
在水平扩展中,一个数据存储拥有一个集群中的多个节点,事情就会变得有点儿复杂。由于数据驻留在物理隔离的服务器上,因此出现了一系列新的挑战。CAP定理解释了这一点,在分布式数据存储中以下属性只可以实现其中两点。
一致性:这涉及节点之间的数据一致性。数据会有一些副本,来在发生故障时提供冗余性并提高读取性能。这意味着,当一个数据在单个地方完成更新时,它应该在所有其它副本同步被更新,而不会给客户端带来任何延迟。这通常被称为具有线性化能力。如你所见,这与ACID中的一致性概念并不相同。
可用性:分布式数据存储是高度可用的,因此某个服务器实例的丢失不会妨碍整个数据存储的功能,用户仍将获得没有错误的请求响应。
分区容差:数据存储可以处理网络分区。网络分区是指网络中某些节点之间的通信中断。因此,某些节点可能无法与数据存储集群中的其它节点通信。在数据库集群的节点来看,这会将数据存储节点划分为多个本地网络。外部客户端仍然能够访问数据库集群中的所有节点。
根据这一点,不可能同时拥有一致性、可用性和分区容差。如果我们考虑可能发生的情况,我们就能直观地理解这种行为。
为了在写入数据时保持一致性,我们需要向所有副本服务器同时写入数据。然而,如果网络中有分区,我们就不能这么做,因为我们那时候只能访问某些服务器。在那种情况下,如果我们想要在保持一致性的同时容忍这些分区,我们就不能让用户从数据存储中读取这些不一致的数据。那意味着我们需要停止响应用户请求,使数据存储不再可用(一致性和分区容差)。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。