了解微服务架构

时间:2018-03-14 18:02:37

标签: spring mongodb docker jar microservices

由于我正在努力理解某些工作的微服务架构模式,因此我遇到了以下问题:

总是说微服务通常有自己的数据库。但这是否意味着它必须始终位于同一服务器或容器上(例如,运行MongoDB和我的JAR的一个 docker容器)?或者这也意味着我的JAR在一台服务器上运行而我的MongoDB位于其他地方(例如两个容器)?

如果第一个是正确的(JAR 数据库在一个容器中),我怎样才能在对我的应用程序进行一些更改后以及在我的新部署之后阻止它JAR我的MongoDB数据被重置(因为现在正在运行一个全新的容器)?

非常感谢: - )

3 个答案:

答案 0 :(得分:2)

替代意见:

  • 99%的现实生活中,你只有一个容器可以运行 数据库和应用程序,这些应该是分开的,因为一个 (db)保持状态,而另一个(app)应该是无状态的。
  • 对于微服务,您不需要单独的数据库,通常单独的模式就足够了(例如,您不希望为每个微服务部署单独的Exadata :))。重要的是,只有这个微服务可以读写,并对给定的表进行修改,其他人只能通过微服务公开的接口在这些表上操作。

答案 1 :(得分:2)

首先,每个微服务应该有自己的数据库。

其次,没有必要也不建议将微服务及其数据库放在同一个容器中。

通常,单个微服务将具有多个用于扩展的部署,并且它们都连接到应该是差异的单个数据库实例。容器和如果使用像NoSql DB这样的东西它的数据库集群。

答案 2 :(得分:1)

是的,每个微服务应该有自己的数据库,如果任何其他微服务需要另一个微服务拥有的数据,那么他们使用微服务公开的API来做。 不,根本不需要让微服务及其数据库托管在同一台服务器上。例如 - 微服务可以在本地托管,其数据库可以像AWS DynamoDB或RDS一样存在于云中。