首页 > 解决方案 > 关于微服务架构中的容器可扩展性

问题描述

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

容器上的 eShop

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

标签: sqldatabasedockerkubernetesmicroservices

解决方案


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

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

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

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

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

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

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

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


推荐阅读