微服务架构设计与实现
RestBucks 系统依赖
接口设计及其依赖:
- 用户信息 b2b-customer-service
- customer-api 提供RESTful API的用户信息接口
- product-api 提供用户在Restbucks所充值的会员卡号码
- self-loyalty-service 提供用户的所有会员卡具体信息,公用 Domain,以及共有逻辑
- 会员卡信息 b2b-loyalty-service
- gcis 提供用户的个人身份信息
- self-loyalty-service 提供不同品牌会员卡的统一接口
- wmb 提供每张会员卡的具体信息,部分品牌
- group protect 提供每个会员卡的具体信息,但支持的品牌不同
- order centre 提供不同种类咖啡的可购买次数
- 订单信息 b2b-order-service
- order centre 提供咖啡交易的具体信息
- 分为 getOrder 和 getOrderList 两个接口
- 并含有相关服务的集成,比如:
- 下订单 placeAnOrder
- 获取门店照片 storePhotos
- 电商网站 my-order-manager 前后端分离
- 前端 my-order-manager-webapp
- 后端 my-order-manager-services
- 遗留系统 my-order-manager-webflow
- domain
- self-service
- webflow-webapp
遗留系统问题分析
封装旧技术栈的依赖
一些依赖的旧服务采用 SOAP,只能用 XML 进行交互,并且根据 WSDL 生成相关代码,每当一更新就有可能破坏接口,当字段发生改变就有可能因为无法匹配而失败。
- 在 REST service 底下一层抽象出 connectors 的概念,封装成为一个 library
- 这个 connectors 有两种方式获取数据
- getOrder 使用 Apache CXF 来生成 WDSLToJava 代码
- getOrderList 和 getStorePhotos 则使用常规 SOAP Request 来处理旧 API
- commons-httpclient HttpClient - HttpClient Tutorial
- 经典架构1: Proxy & Impl
- OrderServicesClientProxy() 构造函数中 new OrderListServiceClientImpl() & new OrderRepairServiceImpl
- 继承关系 XXServiceClientImpl extends BaseOrderServiceClient 然后在父类 executeSoapRequest(requestXML)
- 之后再由 new XXResponseParser().parseResponseToXX(responseXML) 解析出 List
和 OrderPhotos
- 经典架构2:定义流程,授权
- 每个接口都会有自己的 requestBuilder 和 responseParser
- 交由统一的 OrderCenterService 发送请求和执行解析
- OrderCenterService.sendRequest(requestBuilder, responseParser)
- response = HttpRequest.post(requestBuilder.build(), ...anotherParams)
- responseParser.parse(response.toString())
- requestBuilder 和 responseParser 都有抽象类和接口
封装接口 ordercenter-services 作为统一的 library +