当选择将应用程序构建为一组微服务时,需要确定应用程序的客户端如何与微服务进行交互。 对于单体应用程序而言,只有一组(通常是负载平衡的)endpoint。 但是,在微服务架构中,每个微服务都公开了一组通常是细粒度的endpoint。 这会如何影响客户端到应用程序的通信呢。
假设我们正在为购物应用程序开发本机移动客户端。 我们可能需要实现一个产品详细信息页面,该页面显示有关给定产品的信息。例如,下图显示了在应用程序中滚动产品详细信息时将看到的内容。
即使这是智能手机应用程序,“产品详细信息”页面也会显示很多信息。例如,不仅有基本的产品信息(例如名称,描述和价格),而且此页面还显示:
- 购物车中的物品数量
- 订单历史
- 顾客评论
- 库存不足警告
- 送货选项
- 各种建议,包括该产品经常购买的其他产品,购买此产品的客户购买的其他产品以及购买此产品的客户查看的其他产品
- 替代购买选项
使用整体应用程序体系结构时,移动客户端将通过对应用程序进行单个REST调用(GET api.company.com/productdetails/productId)来检索此数据。负载平衡器将请求路由到N个相同的应用程序实例之一。然后,应用程序将查询各种数据库表,并将响应返回给客户端。
相反,在使用微服务架构时,产品详细信息页面上显示的数据由多个微服务拥有。以下是一些可能的微服务,这些微服务拥有在示例产品详细信息页面上显示的数据:
- 购物车服务–购物车中的物品数量
- 订单服务–订单历史记录
- 目录服务–基本产品信息,例如其名称,图像和价格
- 审核服务–客户评论
- 库存服务–库存不足警告
- 运送服务–运送选项,期限和费用与运送提供商的API分开提取
- 推荐服务–建议项目
如下图所示: