微服务架构中的 Elasticsearch

标签 elasticsearch design-patterns microservices

我正在设计一个系统,其中我们有两个不同的微服务来管理两种不同的数据类型。常见的方法是每个微服务都有一个数据库,但是如果 Elasticsearch 取代了一个数据库,你有什么想法?我应该为每个微服务拥有 Elasticsearch 实例(集群)来声称我的架构漂亮而 Shiny ,还是一个具有许多索引的实例(集群)可以?
我期待像“这取决于”这样的答案,但我仍然很想知道你对此的看法。

最佳答案

即使您使用的是关系数据库,也有一些方法可以实现持久数据封装,而不是为每个服务提供单独的数据库实例。为每个架构设置一个单独的架构是一种替代方案,它仍然可以让您的架构保持“漂亮和 Shiny ”。私有(private)拥有的 table 也是如此。只要您遵循将事物分开而没有任何跨域依赖或约束的意图,同时设置一些障碍以防止其他微服务团队作弊,您仍然处于 Shiny 的一面。

这也适用于 Elasticsearch。我会利用它的 Multi-Tenancy 功能,只使用索引来分割所有权。考虑到您只有两个用户(微服务),这应该是干净和容易的。您可以考虑为基于角色的索引所有权添加 Elasticsearch Shield 插件,以防止其他团队为获得真正 Shiny 的解决方案而作弊。使用 Elasticsearch,这变得非常灵活,因为您可以根据每个微服务的负载和数据量来定制索引。

由于您可以获得所需的封装程度以及您具有特定于服务的配置(通过索引),因此我认为您的第二个选项是可以的,因为它仍然符合架构的意图。

关于微服务架构中的 Elasticsearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51428155/

相关文章:

javascript - 如何在Node.js中的Elasticsearch中执行匹配查询?

java - Elasticsearch中的时间戳

performance - 能否消除Elasticsearch结果限制会导致性能问题?

design-patterns - 什么时候适合为对象创建装饰器,什么时候适合重写对象以允许应用策略?

microservices - 微服务部署——初始数据迁移

将来自不同微服务的数据连接到 CQRS 模式中

Python Elasticsearch 超时

design-patterns - Golang 自动包含可扩展应用程序

java - 具有多个类(class)的 JComboBox 的可能设计模式

node.js - 在 Express/Node Js 中验证基于微服务的 API 端点