【问题标题】:Microservices and database微服务和数据库
【发布时间】:2017-04-22 11:40:11
【问题描述】:

在微服务架构中部署数据库的最佳实践是什么,更准确地说是在分布式环境中,例如 docker swarm?微服务原则指出,每个服务都应该是无状态的以实现扩展。由于数据库显然是有状态的,它是否应该在集群外部的固定位置,在集群初始化之前部署和配置?

我很困惑,因为所有 docker compose 示例都在服务定义中包含数据库容器。但事情并没有那么简单。通常,数据库在准备好使用之前需要进行大量配置。此外,docker 在协调服务启动顺序方面很糟糕。

如果将数据库与服务一起部署到 docker swarm 确实是一个好习惯,那么如何确保关键数据的一致性和持久性?

【问题讨论】:

    标签: database docker cloud microservices docker-swarm


    【解决方案1】:

    这是一个很好的问题,我认为很多人仍在思考最佳做法。答案实际上取决于您的需求。有几种方法可以解决这个问题,但这是我现在使用的两种方法:

    • 在具有复制等功能的专用机器上以典型方式运行数据库
    • 我目前正在尝试在 Docker Swarm 集群上将数据库作为服务运行,数据通过 GlusterFS 在集群中持久保存
      • 集群中有三台机器标记为数据库机器
      • 这些数据库机器都运行提供 GlusterFS 功能的 GlusterFS 容器
        • 当数据库服务启动时,我将 GlusterFS 共享映射到容器中,并指定该服务只能在标记为数据库节点的机器上运行。使用此设置,数据库服务在哪个节点上启动并不重要,如果机器出现故障,数据库服务会自动迁移到另一个标记为数据库节点的节点。数据的 GlusterFS 复制可确保持久化数据的完整性。

    如前所述,据我了解,这方面仍有大量实验正在进行,“最佳实践”尚未完全确立。这些最佳实践最终将取决于您的需求和风险承受能力。

    【讨论】:

    • 使用 glusterFS 和数据库最大的问题是整个网络流量问题和 gluster 的最大容量。去年,我为一个包含日志的 PHP 应用程序提供了一个 gluster 分布式数据存储。实际上,仅从分布式读写到日志的负载,我们就已经到了一个地步,仅从日志的规模就一次又一次地使 gluster 过载
    • @Dockstar,同意并感谢您发布您的经验。这就是为什么我现在正在测试它。您是如何配置 GlusterFS 的?分散式?条带化、分布式+条带化、复制、复制+分发?
    • 我们的是条带化的,因为我们有多个端点,所以没有复制。老实说,除非您有专用的闪存(不是磁盘,而是闪存卡),否则我看不到 IO 能够以这种速度对数据进行条带化以及复制。我一直在研究的是一种为活动的活动 galera 集群进行自动服务发现的方法。会在数据库级别复制而不是存储,但即便如此,您也会一遍又一遍地访问存储阵列以获取相同的块
    • @Dockstar,这听起来像是另一种值得研究的方式。在多大的数据库和日志文件中,您开始注意到性能问题以及您的 GlusterFS 设置的网络环境如何?
    • 所以在我们的环境中,数据库实际上是它们自己的服务器。这些实际上只是应用程序日志。我们有 22 个队列运行器运行每天会生成大约 100MB 日志的作业。当您有 8 个主机以这种方式进行条带化时,问题就出现了。跟上它所需的大量读取和写入不断导致 gluster 失败,因此我们放弃了很多应用程序日志记录,并决定今年不再朝这个方向发展。如果你向它扔一个数据库,这一切都取决于你的负载和复制策略。
    猜你喜欢
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 2016-11-05
    • 2021-03-30
    • 2019-10-08
    相关资源
    最近更新 更多