服务编排最佳实践_第1页
服务编排最佳实践_第2页
服务编排最佳实践_第3页
服务编排最佳实践_第4页
服务编排最佳实践_第5页
免费预览已结束,剩余9页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、服务拆分之痛服务编排最佳实践缘起服务编排技术选型缘起几百个不同主题的消息订阅业务流程就像接力赛理想整洁的代码和结构就像记叙文,按照某种顺序,将人物事情交代清楚public void placeOrder(Order order)checkInventory(order.getCount(); reduceInventory(order.getCount(); waitOrPayment(1Min);cafe();现实而现实中的系统,却像侦探小说我们需要厘清千丝万缕的关系,才能整明白 丢失其中一条,可能就不明所以public void placeOrder(Order order) saveOr

2、der(order);sendMessage(“orderCreated”, buildMessage(order);MessageListener(“orderCreated”)public void messageCreated(Message msg) Order order = buildOrder(msg);Boolean isEnough = checkInventory(order); if(isEnough)sendMessage(“inventoryEnough”, buildMessage(order);elsesendMessage(“inventoryNotEnough

3、”, buildMessage(order);清晰的分层理想库存域支付域促销域物流域业务 流程商品域履约域现实订单库存支付促销履约促销Mybe何解缺少业务的全局视图业务与能没有隔离控制和逻辑没有分离全局视图服务协作问题Service Choreography发现流程缺陷局部视图有局限性失败补偿流程中途终happen beforeReal Service Choreography业务驱动专注价值链服务是实现段业务流程是的最终是为了交付价值Service Orchestration隔离能力域库存域支付域促销域物流域服务编排商品域履约域门店咖啡机货柜面条机引入编排层解决的问题全局业务视图和流程关注价

4、值链控制和逻辑分离技术选型可视化易性性能BPMNBPMNjBPMActivitiFlowableActiviti社区较活跃档较多Activiti性能般(主要于审批作流)内嵌式,不是为分布式改造Activiti提供解析流程流转MQ作节点架构ServerManagerApplicationSDK关键问题参数传递流程校验状态机事件关联粒度流程多态版本化(API)参数传递Start库存促销生单end参数传递生单促销库存Start参数传递Start库存促销生单endpublic void reduce(Map param)/扣减库存逻辑public Map promotion(Map param)/促销

5、服务逻辑参数传递Start库存促销生单endpublic void reduce(String sku, int quantity)/扣减库存逻辑public OrderPrice promotion(Order order)/促销服务逻辑参数传递流程校验-补偿流程校验-超时Start库存促销生单end支付流程校验-超时Start库存促销生单end?支付超时取消状态机Start库存促销生单end?支付超时取消状态机事件关联Start库存促销生单end支付Start库存促销生单end支付Start库存促销生单end支付流程实例1 orderId 123流程实例2 orderId 456流程实例3

6、 orderId 789事件关联Start库存促销生单end支付流程实例1 orderId 123事件拆为两部分: enter和leaveenter: 建立索引 - set orderIdleave: query by index(orderId)流程多态Start库存促销生单end支付Start库存促销生单end支付门店交易流程货柜交易流程编排的粒度业务、产品能理解能业务语描述户API事件API服务API户API - 事件APIWbpm(processDef=“order-flow”, version=“1.1”, desc=“下单流程”) public interface OrderFlo

7、wService Event(isOneway = true)void triggerSettle(Orderorder);EventFuture triggerPlace(Orderorder);户API - 操作APIResourceprivate OrderFlowService orderFlow;public void doXxx()Orderorder= orderFlow.triggerSettle(order);服务APIpublic class InventoryService WService(name=“inventory.reduce”, version=“1.1”) p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

0/150