美文网首页系统架构治理
系统设计中为什么要避免共享数据库

系统设计中为什么要避免共享数据库

作者: 踏浪听涛 | 来源:发表于2018-05-15 08:22 被阅读20次

本文摘自sam newman 《微服务设计》

目前为止,我和同事在业界所见到的最常见的集成形式就是数据库集成。使用这种方式时,如果其他服务想要从一个服务获取信息,可以直接访问数据库。如果想要修改,也可以直接在数据库中修改。这种方式看起来非常简单,而且可能是最快的集成方式,这也正是它这么流行的原因。

图4-1展示了某商业系统的部分的应用级服务,其中用户注册服务直接使用SQL在数据库中创建用户。还可以看到,呼叫中心应用可以直接运行SQL来查看和编辑数据库中的数据。仓库应用通过查询数据库来显示更新后的客户订单信息。这是一种非常普通的模式,但实践起来却困难重重。

图 4- 1: 使用数据库集成来访问和修改数据信息

首先,这使得外部系统能够查看内部实现细节,并与其绑定在一起。存储在数据库中的数据结构对所有人来说都是平等的,所有服务都可以完全访问该数据库。如果我决定为了更好地表示数据或者增加可维护性而修改表结构的话,我的消费方就无法进行工作。数据库是一个很大的共享API,但同时也非常不稳定。如果我想改变与之相关的逻辑,比如说帮助台如何管理客户,这就需要修改数据库。为了不影响其他服务,我必须非常小心地避免修改与其他服务相关的表结构。这种情况下,通常需要做大量的回归测试来保证功能的正确性。

次,消费方与特定的技术选择绑定在了一起。可能现在来看,使用关系型数据库做存储是合理的,所以我的消费方会使用一个合适的驱动(很有可能是与具体数据库相关的)来与之一起工作。说不定一段时间之后我们会意识到,使用非关系型数据库才是更好的选择。如果消费方已经和数据库具体技术非常紧密地绑定在了一起,那么能够轻易替换这个数据库吗?正如前面所讨论的,隐藏实现细节非常重要,因为它让我们的服务拥有一定的自治性,从而可以轻易地修改其内部实现。再见,松耦合。

最后,让我们考虑一下行为。肯定会有一部分逻辑负责对客户进行修改。那么这个逻辑应该放在什么地方呢?如果消费方直接操作数据库,那么它们都需要对这些逻辑负责。对数据库进行操作的相似逻辑可能会出现在很多服务中。如果仓库、注册用户、呼叫中心都需要编辑客户的信息,那么当修复一个bug的时候,你需要修改三个不同的地方,并且对这些修改分别做部署。再见,内聚性。

还记得前面提到过的关于好的微服务的核心原则吗?没错,就是高内聚和低耦合。但是使用数据库集成使得这两者都很难实现。服务之间很容易通过数据库集成来共享数据,但是无法共享行为。内部表示暴露给了我们的消费方,而且很难做到无破坏性的修改,进而不可避免地导致不敢做任何修改,所以无论如何都要避免这种情况。

相关文章

  • 系统设计中为什么要避免共享数据库

    本文摘自sam newman 《微服务设计》 目前为止,我和同事在业界所见到的最常见的集成形式就是数据库集成。使用...

  • mysql数据库设计和优化

    数据库设计 一: 为什么要进行数据库的设计 优良的数据设计 : 减少数据冗余、避免数据维护异常、节约空间、高效访问...

  • 浅谈数据库集群方案

    单点数据库 数据库往往是系统中的性能瓶颈,所以通常在系统设计中会引入各种各样的缓存机制,以避免频繁访问数据库。另外...

  • 突破Java面试(46)-分库分表

    0 Github 1 面试题 为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中...

  • 轻量级分布式锁的设计原理分析与实现

    为什么要设计分布式锁 在简单的单机系统中,当存在多个线程同时要修改某个共享变量时,为了数据的操作安全,往往需要通过...

  • 如何进行分库分表

    转载自(寒夕若梦) 1、面试题 为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中...

  • 系统设计目录

    数据库基础: SQL, NoSQL, indexLoad balancer系统设计中的估算系统设计中的画图Memc...

  • MySQL的主从复制

    介绍 为什么要主从复制 做数据的热备 如果主数据库宕机,可以快速将业务系统切换到从数据库上,可避免数据丢失。 业务...

  • 数据库设计(笔记)

    数据库设计数据库设计第一步:标识实体•在需求分析阶段,需要知道要在数据库中存储哪些信息。•即标识实体:找出该系统要...

  • 数据库原理及其应用(二)

    数据库系统(DBS)计算机系统中引入数据库后的系统。 数据库(DB):存储在计算机内有组织可共享的数据和数据对象(...

网友评论

    本文标题:系统设计中为什么要避免共享数据库

    本文链接:https://www.haomeiwen.com/subject/pdzsdftx.html