我正在构建一个包含多个异构服务的系统,这些服务通过网络相互通信,尽管在标准部署模型中它们都在同一台机器上。用于管理该复杂系统中的实体的UI客户端应该能够显示来自所有组成服务的聚合数据,同时允许跨该聚合数据进行搜索。
我想知道如何在这个系统中设计数据检索,以便它可以扩展,因为要搜索的数据量已经很高并且还在增加?
我正在考虑两种方法:
客户端按需查询所有服务中的数据,并在其图层中聚合结果。在许多情况下,它必须在来自多个服务的数据之间进行连接,所以我在这里关注性能。
以一种方式对服务数据进行非规范化,以便客户端查询,甚至在多个服务数据之间存储聚合,以便客户端不必按需进行连接。可能最好将每个服务的非规范化数据存储在自己的数据库或缓存中,因为这样可以更容易地使所有非规范化数据保持最新。但是,我需要将聚合视图放在其他地方的多个服务数据中,并且我担心使这个远程缓存保持最新的开销。
任何解决类似问题的现有架构的示例或参考都将受到高度赞赏。谢谢!
答案 0 :(得分:0)
拥有聚合缓存肯定会有更好的性能,但仔细考虑成本 - 同步。最终,您的客户端(或将为客户端执行此任务的某些远程服务)具有自己的数据库,该数据库与服务数据同步(类似于实现自己的数据库异步拉动复制)。检查从服务检索的数据如何变化。如果不删除/修改数据并且只能添加新数据,则最适合您。如果数据不必一致,那也会更容易。选择适当的同步机制取决于现有的架构和要求。