1、?敖剑微软 Principal Software Engineer 背景:微服务分层与工作流 微服务分层架构 工作流的通用模式 工作流的挑战微服务分层架构原子微服务组合微服务API/边缘微服务UserInventoryPaymentDeliveryNotificationproductLoginBFF移动应用API外部系统OrderProcessOrder listshoppingcar工作流通用模式任务链模式 Fan-out/Fan-in 模式 观察者模式外部系统交互模式工作流是实现服务编排/组合微服务的通用方案。任务链模式Activity1Activity2Activity3workflo
2、w挑战如果其中一个活动因为 可恢复故障 而长时间失败,要如何处理?可否自动重试工作流?可否从上一次失败的点重新开始并取回所有的工作流状态?X可恢复故障服务过载服务不可用慢响应超时临时性错误熔断限流进程崩溃网络异常工作流状态Activity1Activity2Activity3workflowWorkflow inputWorkflow outputWorkflowInput workflowInput=ctx.getInput(WorkflowInput.class);/some business logic/local variablesString orderId=ctx.getInsta
3、nceId();Object output1=ctx.callActivity(Activity1.class.getName(),input1).await();/some business logicObject output2=ctx.callActivity(Activity2.class.getName(),input2).await();/some business logic/here!Object output3=ctx.callActivity(Activity3.class.getName(),input3).await();/some business plete(wor
4、kflowOutput);Activity input/outputActivity input/outputActivity input/outputhere!所有的变量都是状态Fan-out/Fan-in 模式Activity1workflowActivity2Activity3X如何控制并发度?如何触发后续的聚合步骤?挑战观察者模式PollStatusActivityworkflowSleepActivityNotifyActivityNotificationsStatues休眠时间可能是动态的,取决于业务逻辑长时间观察Sleep time?挑战:外部系统交互模式RequestAppro
5、valActivityPreview ActivityNext Activity人工操作的等待时间非常长人工操作ApprovedRejectedTimeout暂停并等待外部系统执行某些操作常见场景:暂停并等待人工操作案例:等待请求审核,等待用户付款挑战结论:理想很美好,实现很骨感Activity1Activity2Activity3workflowstartCompletedRapidly Succeed Rapidly SucceedRapidly Succeed理想模式长时间重试长时间观察等待外部系统交互现实模式工作流挑战:容错&长时间运行&有状态workflowBounded Conte
6、xtBounded ContextBounded Contextnetworknetworknetwork生命周期不一致服务不可用有状态&长时间运行容错工作流状态持久化不友好的用户体验WorkflowInput workflowInput=ctx.getInput(WorkflowInput.class);String orderId=ctx.getInstanceId();Input1 input1=/some business logicObject output1=ctx.callActivity(Activity1.class.getName(),input1).await();Inp