我正在做一个使用微服务模式的新项目,但是我有一个关于某些特定流程的问题。例如,我们有这样的结构:
/ -> MS1 -> DB1
UI - -> MS2 -> DB2
-> MS3 -> DB3
这部分都很清楚,但在某些流程中,我们需要制作一些涉及2个或更多微服务调用的复杂流程。
最好的方法是什么?有一个中间服务来处理那些"复杂的";请求吗?在前端部分执行所有这些调用?
谢谢你的建议!
当你有一个需要调用多个微服务的流程时,首先要考虑的是你需要服务之间的一致性有多强。一致性要求越弱,你遇到的问题就越少。
如果流程需要足够强的一致性,接下来要考虑的是将与流程交互的服务组合成一个服务是否可行。如果这是可行的,那么就合并这些服务。
服务一致性困难。您可以通过消除一致性要求或只有一个服务来简化。
有时候你需要服务之间的一致性。在这里,最有效的做法通常是实现传奇模式:让中间服务管理流程,并通过应用补偿操作(例如回滚)来响应失败。您可能需要专门设计微服务的api来支持这种事情:rest风格的api通常特别困难(考虑一下当您只有GET/PUT/DELETE时回滚是什么样子)。