微服务架构把网站从一个单体结构拆分为多个独立服务的集合
单体结构,各个模块都在一起
微服务结构,各服务模块独立部署
带来了很多好处,例如,提高了系统稳定性、使资源利用最大化、提高了开发部署效率等等(更详细介绍请看“微服务架构”)
同时也产生了一个问题,例如客户端要展示商品信息页面,页面中需要有:商品详情、用户评论、相关商品推荐、购物车信息
在单体结构中,这个需求的实现很简单,客户端发起一个商品详情的请求,如http://api.xxx.com/product/id
网站收到请求后进行查询计算等操作,把需要的信息组合成一个结果集,返回给客户端
而在微服务架构中,这个需求中的数据是分布在不同的微服务中,例如:
商品详情 - 商品信息服务
用户评论 - 评论服务
商品推荐 - 推荐服务
购物车信息 - 购物车服务
这就需要客户端调用不同的服务来获取数据
这种方式中,客户端需要了解很多api,服务端如果产生微服务的再次拆分或合并,客户端都需要跟着变动,维护复杂,而且每个页面都可能需要发起多次请求,性能不好
对于这些问题,就可以采用“服务网关”的方式来解决
服务网关也是个服务器,作为网站的入口,客户端不再自己调用N个服务获取数据,还是像单体结构一样,客户端发送一个请求给服务网关,服务网关负责调用多个微服务聚合结果,返回给客户端
优点
(1)外部系统从服务网关上看到的就像是一个统一的完整服务,网关屏蔽了后台服务的复杂性,同时也屏蔽了后台服务的升级和变化
(2)外部请求必须经过服务网关,网关可以集中对访问进行安全控制,如认证授权、防爬虫等
(3)在流量高峰期,服务网关可以限制流量,在内部系统出现故障时,网关可以集中做容错,保持外部良好的用户体验
(4)便于收集访问日志
缺点
服务网关本身形成了一个系统,需要开发、部署、维护管理,成本较高,而且,服务网关可能会成为系统瓶颈
但服务网关方式的优势明显,已被普遍采用