Docker 使用自己的数据库部署微服务:如何保证复制和可靠性?
我正在构建一个要部署在云环境中的应用程序。 我在用库伯内特斯和多克 My image包含两个容器:一个用于应用程序,另一个用于Postgres DBMS(包括通过持久卷声明存储的自己的数据库) 我这样做是因为这样我可以线性扩展我的应用程序,因为我的主要要求是能够这样扩展它 因此,当我扩展我的部署时,它将或多或少地类似于下面的draw bellow(我的应用程序有N个pod): 我已经对这个体系结构进行了性能测试,它可以很好地满足我的需求,并且可以根据需要进行扩展 但是,我担心数据复制及其可靠性 下面是我的问题:Docker 使用自己的数据库部署微服务:如何保证复制和可靠性?,docker,kubernetes,cloud,microservices,database-administration,Docker,Kubernetes,Cloud,Microservices,Database Administration,我正在构建一个要部署在云环境中的应用程序。 我在用库伯内特斯和多克 My image包含两个容器:一个用于应用程序,另一个用于Postgres DBMS(包括通过持久卷声明存储的自己的数据库) 我这样做是因为这样我可以线性扩展我的应用程序,因为我的主要要求是能够这样扩展它 因此,当我扩展我的部署时,它将或多或少地类似于下面的draw bellow(我的应用程序有N个pod): 我已经对这个体系结构进行了性能测试,它可以很好地满足我的需求,并且可以根据需要进行扩展 但是,我担心数据复制及其可靠性
无法按照建议执行Postgres缩放,并且无法在多个POD()中以读/写模式装入永久卷
缩放后,可以考虑
此外,将应用程序层与数据库分离有很多好处,包括对每一层上的扩展策略进行粒度控制附言:很好的图表。这使问题变得非常易懂。无法按照您的建议执行Postgres缩放,并且无法在多个POD中以读/写模式装入永久卷()
缩放后,可以考虑
此外,将应用程序层与数据库分离有很多好处,包括对每一层上的扩展策略进行粒度控制附言:很好的图表。这使问题变得非常容易理解。为什么要在同一个机架中部署数据库,而不是将数据库机架与应用程序机架分开?因为这样做的目的是,他们有自己的数据库,以便更好地扩展数据库。如果我只扩展应用程序,那么我的数据库就会成为一个瓶颈。如果通过引入新的服务实例来扩展,或者通过减少实例数来缩小,那么它是如何工作的。您已经保存的数据会发生什么变化?实例消失后,谁为它们提供服务?为什么要将DB部署在同一个pod中,而不是将DB pod与应用程序pod分开?因为他们有自己的数据库,以便更好地扩展数据库。如果我只扩展应用程序,那么我的数据库就会成为一个瓶颈。如果通过引入新的服务实例来扩展,或者通过减少实例数来缩小,那么它是如何工作的。您已经保存的数据会发生什么变化?我已经测试过了,效果很好。但为了简单起见,我使用HostPath对其进行了测试。两个独立的Postgres实例,愉快地写入它们的/var/lib/postgresql/data,却不知道在幕后,另一个实例正在写入相同的卷/HostPath?我们可以将它们映射到不同的装入点。例如:/data/app-001/data/app-002等等……我不明白。DBs如何同步?假设一个用户访问你的应用程序,他在PodA上注册。后来他回来了,但这次应用程序是从PodB提供的。如果他的用户名/通行证存储在PostgresA://data/app-001上,而PostgresB://data/app-002i中没有该用户名/通行证,PodB将如何知道他是注册用户?该用户名/通行证是由id分割的,因此我知道东西在哪里。当然,我在它前面有一些足够聪明的东西,可以找到它需要的东西。但这并不是问题的核心,我已经测试过了,效果很好。但为了简单起见,我使用HostPath对其进行了测试。两个独立的Postgres实例,愉快地写入它们的/var/lib/postgresql/data,却不知道在幕后,另一个实例正在写入相同的卷/HostPath?我们可以将它们映射到不同的装入点。例如:/data/app-001/data/app-002等等……我不明白。DBs如何同步?假设一个用户访问你的应用程序,他在PodA上注册。后来他回来了,但这次应用程序是从PodB提供的。如果他的用户名/通行证存储在PostgresA://data/app-001上,而PostgresB://data/app-002i中没有该用户名/通行证,PodB将如何知道他是注册用户?该用户名/通行证是由id分割的,因此我知道东西在哪里。当然,我在它前面有一些足够聪明的东西,可以找到它需要的东西。但这并不是问题的核心。