【问题标题】:About Containers scalability in Micro service architecture关于微服务架构中的容器可扩展性
【发布时间】:2021-12-10 06:31:09
【问题描述】:

一个关于可扩展性的简单问题。我一直在研究可扩展性,我想我理解它背后的基本概念。您可以使用 Kubernetes 之类的编排器来管理系统的自动可扩展性。因此,这样,随着特定微服务的调用需求增加,编排器将创建它的新实例,以处理需求的需求。现在,在我们的案例中,我们正在构建一个类似于 Microsoft 的“eShop On Containers”示例的微服务结构:

现在,每个微服务都有自己的数据库来管理,就像在我们的应用程序中一样。我的问题是:在升级这个系统时,通过创建某个微服务的新实例,比如说上面示例中的“Ordering microservice”,那不会创建一组新的数据库吗?在我们的应用程序中,我们使用的是 SQLite,因此每个微服务都有自己的数据库副本。我假设为了能够升级这样的系统,需要每个微服务连接到外部 SQL Server。但如果是这样的话,那不是瓶颈吗?我的意思是,拥有多个微服务实例来满足特定服务的更多需求,但所有这些实例仍在访问单个数据库服务器?

【问题讨论】:

  • "...需要每个微服务连接到外部 SQL Server..." -- 是的。在非常高的负载下,这种连接可能会成为瓶颈。在这些情况下,我会将所有更新排队到一个非常快的队列中。然后另一个进程可以从队列中读取并以延迟的方式更新 SQL Server 数据库。

标签: sql database docker kubernetes microservices


【解决方案1】:

在我们的应用程序中,我们使用的是 SQLite,因此每个微服务都有自己的数据库副本。

横向扩展服务最重要的方面之一是它们是stateless - Kubernetes 上的服务应根据 12 要素原则设计。这意味着服务实例不能拥有自己的数据库副本,除非它是缓存。

我认为,为了能够升级这样的系统,每个微服务都需要连接到外部 SQL Server。

是的,如果您希望能够横向扩展,您需要使用实例外部并在实例之间共享的数据库。

但如果是这样的话,那不是瓶颈吗?

这在很大程度上取决于您如何设计系统。将微服务与单体进行比较;使用单体架构时,通常使用一个大数据库,但使用微服务更容易使用多个不同的数据库,因此以这种方式横向扩展数据库应该更容易。

我的意思是,拥有多个微服务实例来满足特定服务的更多需求,但所有这些实例仍访问单个数据库服务器?

还有很多方法可以扩展数据库系统,例如缓存读取操作(但要小心)。但这本身就是一个很大的话题,很大程度上取决于你做什么以及如何做。

【讨论】:

  • 感谢 Jonas,为我阐明了很多概念!
猜你喜欢
  • 2020-03-27
  • 2020-11-07
  • 2017-08-28
  • 2020-03-11
  • 2021-08-11
  • 2020-11-12
  • 2020-11-11
  • 2011-06-20
  • 2018-08-26
相关资源
最近更新 更多