我希望计划一个解决方案来管理我的体系结构中的丰富数据。
更明确地说,我有数十个微服务。
例如-国家、建筑物、楼层、工人。
所有这些都在单独的NoSql数据存储上运行。
当我从工人服务获取数据时,我还想呈现楼层名称(工人正在工作的楼层)、建筑物名称和国家名称。
解决方案1。 客户端将查询所有微服务。 问题-多个请求并使客户端了解结构。 我知道多个请求不应该困扰我,但我认为在一个单一的调用中返回描述实体的json更好。
解决方案2。 创建一个编排,从多个服务检索数据。 问题-如果数据(例如实体名称)未存储在DB的同一文档中,则很难按这些字段进行排序和过滤。
解决方案3。 在保存实体(例如工人)之前,调用所有其他服务并填充相关数据(建筑物名称、国家名称)。 问题-当建筑物名称更改时,它不会反映在工人服务中。
解决方案4。 (这是我能想到的最好的解决方案)。 创建一个订阅代理的进程,并接收所有实体更改。 对于每个实体,它更新所有相关实体。 当实体更改时,例如建筑物名称更改,它会更新所有保存建筑物名称的文档。 问题: 每个服务都必须知道可以更新什么。 当发生尾随更新时,它不应再次更新代理(递归更新),因此这可能会使微服务复杂化。
解决方案5。 保持一切规范化。在ElasticSearch中过滤和排序。 问题:在ES中保持规范化数据的性能太昂贵了。
当我从工人服务获取数据时,我还想呈现楼层名称(工人正在工作的楼层)、建筑物名称和国家名称。
解决方案1。 客户端将查询所有微服务。 问题-多个请求并使客户端了解结构。 我知道多个请求不应该困扰我,但我认为在一个单一的调用中返回描述实体的json更好。
解决方案2。 创建一个编排,从多个服务检索数据。 问题-如果数据(例如实体名称)未存储在DB的同一文档中,则很难按这些字段进行排序和过滤。
解决方案3。 在保存实体(例如工人)之前,调用所有其他服务并填充相关数据(建筑物名称、国家名称)。 问题-当建筑物名称更改时,它不会反映在工人服务中。
解决方案4。 (这是我能想到的最好的解决方案)。 创建一个订阅代理的进程,并接收所有实体更改。 对于每个实体,它更新所有相关实体。 当实体更改时,例如建筑物名称更改,它会更新所有保存建筑物名称的文档。 问题: 每个服务都必须知道可以更新什么。 当发生尾随更新时,它不应再次更新代理(递归更新),因此这可能会使微服务复杂化。
解决方案5。 保持一切规范化。在ElasticSearch中过滤和排序。 问题:在ES中保持规范化数据的性能太昂贵了。