我正在一个工作网站上工作,我正在考虑将工作匹配部分分解为微服务 - 其他一切都是巨石。
但是当考虑微服务应该如何拥有自己独立的数据库时,这意味着让微服务拥有所有工作的单独副本,因为monolith仍然可以处理所有工作crud功能。
我是否正确地考虑这种方式,并且在不同的微服务中分布相同数据的多个副本是否正常?
使用相同数据创建不同数据库的想法让我有点害怕,因为这会造成事情不同步的可能性。
答案 0 :(得分:1)
你正试图摆脱巨石,你正在采取的方法是非常普遍的,从巨石中取出可以转换成微服务的部分。 Monolith随着时间的推移开始缩小,你有更多的MS。
关于数据重复性的问题,是的,这是一个挑战,有些数据需要重复,但这种情况因案例而异,很难说而不需要查看应用程序。
您可以公开API,以便monolith可以在需要时获取/创建数据,我强烈建议不要牺牲或妥协微服务的数据模型以避免重复,因为MS将比你未来的巨石。请记住,你应该避免在整体结构中添加任何新代码,即使你必须这样做,因为数据要求MS而不是整体结构。
答案 1 :(得分:0)
您可以尝试做一件事,而不是在微服务之间调用REST API,而可以将缓存机制与事件总线结合使用。每个微服务都会将CRUD更改发布到事件总线,感兴趣的微服务会消耗这些事件并相应地更新本地缓存。
REST调用的问题是,在某些情况下,当依赖服务关闭时,我们无法查询主微服务,这有时会成为瓶颈。