微服务的主要好处是可以通过使用多个容器实例和负载平衡来扩展一种服务“类型”以提高吞吐量。
但有一件事是,“服务类型”的多个实例(即容器)共享同一个数据库实例;当多个实例在该数据库实例上写入/读取时,这可能会造成性能瓶颈。
传统上,我们会扩展该数据库实例的处理能力来满足高需求。
对我来说,主要问题是,当前横向扩展/水平扩展的最佳实践/设计/解决方案是什么,以便我们可以拥有该数据库的多个实例并提高性能?
特别是,我想要存档的是:
据我所知,
解决方案之一是 Microsoft SQL Server 为 SQL Server 容器提供高可用性,可以满足上述大部分要求(https://learn.microsoft.com/en-us/sql/linux/sql-server-linux-container-ha-overview?view=sql-server-2017 https://learn.microsoft.com/en-us/sql/linux/sql-server-linux-container-ha-overview?view=sql-server-2017)。但我想知道是否有更好的解决方案来避免技术锁定?
我正在考虑的另一个解决方案是:通过使用 CDC Stream Data 从主数据库实例复制到多个实例。这允许复制读取。
但我仍然不相信,因为为了保证一致性,每个服务实例都应该写入主数据库实例,这也可能成为主数据库实例上的瓶颈。
从广义上讲,数据库有 3 种可能的架构:
- 单一领导者(例如 RDBMS)
- 多领导者(例如多个 DC 中的 RDBMS)
- 无领导者(例如 Riak、Cassandra)
当您在上面的列表中从上到下查看时,水平可扩展性潜力会增加,但一致性会变弱。
可扩展性潜力增加,因为随着您沿着列表向下移动,更多节点可以接受写入。由于写入需要时间才能传播或复制到负责数据的所有节点,因此一致性会变弱。当相同的记录几乎同时写入两个不同的节点时,就会出现冲突,因此在复制时,系统不知道哪一个是正确的。
有多种冲突解决策略。不同的数据库使用不同的策略。您需要研究这些策略,以了解哪一种策略适合您的用例,并据此选择数据库。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)