微服务和数据库

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

我很困惑,因为所有的docker组合示例在服务定义中包含数据库容器。 但事情并不那么简单。 在准备使用之前,数据库通常需要大量的configuration。 另外,docker员在协调服务启动顺序方面很糟糕。

如果将数据库和服务一起部署在Docker群中是一个很好的做法,那么如何确保Cricial数据的一致性和持久性呢?

这是一个很好的问题,我认为很多人仍然在思考最佳实践。 答案真的取决于你的需求。 有几种方法来破解这个坚果,但这些是我现在使用的两个:

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

如前所述,我的理解是,现在还有很多实验正在进行,“最佳实践”并没有完全build立。 这些最佳实践将最终取决于您的需求和风险承受能力。