在决定时,您将要考虑如何更新和更改这些数据。
假设偶尔需要更新这些数据(例如新城镇),管理这些更新的责任对于包含地理层级权威数据库的独立服务来说是一个非常好的候选者。
然后,您可以选择其他服务如何获取他们需要的地理层次结构数据。
他们可以对地理层次服务进行查询,但这意味着该服务的不可用意味着他们无法实现他们的目标。这些服务与地理层次服务深度耦合。
或者,地理层次结构服务可以发布描述地理层次结构变化的事件:其他服务订阅这些事件并更新他们自己的本地模型,其中包含他们完成目标所需的地理层次结构数据。因为这些数据与他们需要的其他数据一起存储,所以它将与他们拥有的其他数据一样可用;地理层次结构下降仅意味着没有更新。Kafka 或 Pulsar 等持久的日志结构存储系统非常适合事件发布。
第二种方法确实需要明确处理最终的一致性(在一段时间内,并非所有服务都同意地理层次结构的当前状态,就像在现实世界中有一段时间有些地图只有一个南斯拉夫和其他国家将拥有斯洛文尼亚/克罗地亚/波斯尼亚/塞尔维亚/黑山/科索沃的一些子集),但是在第一种方法中存在类似的问题(考虑在查询之后但在查询者完成之前发生更新时会发生什么使用结果(进一步:考虑缓存......))被扫到地毯下。
第二种方法的一个优点是,由于地理层次服务只需要进行更新,它不必一直运行。
如果数据几乎永远不会更新,那么也值得考虑将其设为可加载到各种服务中的静态配置数据。这并不能避免最终的一致性问题(除非您愿意在进行更新时使用地理层次结构关闭每个服务),但它可能会节省数据库的成本(无论您存储什么版本控制或配置管理) in 实际上是数据库)。