design-patterns - 这是“合法”的微服务设计吗?
问题描述
设置:
- 在整个系统中,每个客户都有一个项目列表的概念,这需要一个被多个服务 A、B、C 理解的概念。
- 这些相同的多个服务执行对该项目列表进行操作的不同类型的工作。
- 如果 B 或 C 正在对一个不是最新的项目列表版本进行操作,则可以,只要它们最终获得最新版本即可。
我的设计:
- 一项服务 A 是项目列表当前状态的真实来源。该列表在此服务中进行操作。
- 当列表发生变化时,A 会发布列表,而 B 和 C(该事件的订阅者)将其副本存储在自己的存储中。
- 当 B 和 C 做他们的工作时,他们使用列表的本地副本。
- B 和 C 还具有特定于其域的附加状态。
我的理由:
由于 B 和 C 在工作时不会向 A 索要列表,因此他们不依赖 A。如果由于某种原因 A 出现故障,对系统的影响只是 B 和 C 没有 up-最新信息,这是可以接受的,并且在 A 固定后将得到缓解。
这有什么问题吗?
解决方案
B 和 C 有所谓的缓存。当它过时是可以接受的,只需用 A 验证当前版本是什么(通常使用最后修改的日期时间),你会没事的。
推荐阅读
- swift - SwiftUI - Sheet Dismmis 按钮不起作用
- ruby-on-rails - Rail 6.1 中非默认 Active Storage 服务的优雅回退
- azure - 如何从 Azure Devops Repos 在 Azure App 服务上部署 Gatsby 项目?
- pyspark - 将列加入新的数据框,但仅当存在 customerID 时
- javascript - 在地图函数中使用状态作为 json 键值
- html - 从开发者控制台获取任意 HTML 元素的锚链接
- javascript - 阻止 safari 在 clipboard.write 中修改 HTML
- javascript - 使用 PHP 和 jQuery 从 XML json 请求填充表单
- java - 当它们被另一个端点发布时,如何实时只返回新项目?
- mysql - 使用 MySQL 5.7 升级 Ubuntu 18.04