内存数据库与共享内存IPC

问题描述 投票:0回答:1

我想建立一个微服务架构,其中包括采用多种技术(C++、Golang、PHP...)的服务。

其中一项服务的职责是从设备获取高速率数据(大约 4K 字节,每秒 15 次)并将其传递给其他三个单独的服务。

据我所知,共享内存是IPC最快的方法,我知道eCAL很好地支持它,但eCal只支持C++和Python,例如,它不支持Golang(我知道有一些包装器包)。

现在,我想,我可以利用In-Memory数据库作为IPC,所有服务都可以通过标准接口轻松连接到数据库

内存数据库的行为与共享内存 IPC 相比是否具有可比性并具有可容忍的性能(就我的高流量而言)?或者在性能方面没有可比性?一般来说,这个想法的优点和缺点是什么?

microservices ipc shared-memory in-memory-database
1个回答
0
投票

在微服务架构中使用内存数据库作为进程间通信(IPC)的手段是一个可行的选择,既有优点也有缺点。以下是一些注意事项:

优点:

语言不可知论: 内存数据库通常提供与语言无关的标准接口或 API,允许使用各种编程语言(C++、Golang、PHP 等)实现的服务与其交互。

易于开发: 与内存数据库集成通常很简单,因为它通常涉及使用标准查询语言(SQL 或 NoSQL 查询语言)或数据库提供的 API。

可扩展性: 内存数据库专为高性能而设计,每秒可以处理大量事务。这使得它们适合高数据速率的场景,就像您所描述的那样。

数据持久化(可选): 一些内存数据库提供持久性选项,允许您在需要时保留数据。在服务失败或重新启动的情况下,这可能是一个优势。

缺点: 延迟: 虽然内存数据库速度很快,但与共享内存 IPC 相比,它们可能会引入一些延迟,特别是在极低延迟至关重要的情况下。共享内存通信通常更加直接和即时。

复杂性: 引入内存数据库会增加系统的复杂性。您需要管理和维护数据库,并处理同步、数据一致性和访问控制等潜在问题。

资源消耗: 内存数据库会消耗系统资源。根据数据的大小和访问频率,这可能会影响微服务的整体资源使用情况。

单点故障: 如果内存数据库成为单点故障,可能会影响整个系统的可靠性。

开销: 内存数据库可能会在内存使用和 CPU 周期方面带来一些开销,特别是与共享内存 IPC 相比,共享内存 IPC 直接在内存上运行,无需中间数据库层。

推荐:

考虑到高数据速率(每秒 15 次,每次 4 KB),评估系统的性能要求至关重要。对于超低延迟的场景,共享内存IPC可能更合适。但是,如果内存数据库引入的延迟对于您的用例来说是可以接受的,那么与语言无关的接口和可扩展性的优势可能会使其成为一个不错的选择。

最终,共享内存 IPC 和内存数据库之间的选择取决于您的具体性能、可扩展性和架构要求,以及您愿意在复杂性和延迟方面做出的权衡。在您的特定用例中使用这两种方法进行性能测试可以为最合适的解决方案提供有价值的见解。

© www.soinside.com 2019 - 2024. All rights reserved.