微服务架构把网站从一个单体结构拆分为多个独立服务的集合


单体结构,各个模块都在一起


服务网关 Service Gateway_java


微服务结构,各服务模块独立部署


服务网关 Service Gateway_java_02

带来了很多好处,例如,提高了系统稳定性、使资源利用最大化、提高了开发部署效率等等(更详细介绍请看“微服务架构

同时也产生了一个问题,例如客户端要展示商品信息页面,页面中需要有:商品详情、用户评论、相关商品推荐、购物车信息

在单体结构中,这个需求的实现很简单,客户端发起一个商品详情的请求,如http://api.xxx.com/product/id


网站收到请求后进行查询计算等操作,把需要的信息组合成一个结果集,返回给客户端

服务网关 Service Gateway_java_03

而在微服务架构中,这个需求中的数据是分布在不同的微服务中,例如:

商品详情 - 商品信息服务

用户评论 - 评论服务

商品推荐 - 推荐服务

购物车信息 - 购物车服务

这就需要客户端调用不同的服务来获取数据

服务网关 Service Gateway_java_04

这种方式中,客户端需要了解很多api,服务端如果产生微服务的再次拆分或合并,客户端都需要跟着变动,维护复杂,而且每个页面都可能需要发起多次请求,性能不好

对于这些问题,就可以采用“服务网关”的方式来解决

服务网关也是个服务器,作为网站的入口,客户端不再自己调用N个服务获取数据,还是像单体结构一样,客户端发送一个请求给服务网关,服务网关负责调用多个微服务聚合结果,返回给客户端

服务网关 Service Gateway_java_05

优点

(1)外部系统从服务网关上看到的就像是一个统一的完整服务,网关屏蔽了后台服务的复杂性,同时也屏蔽了后台服务的升级和变化

(2)外部请求必须经过服务网关,网关可以集中对访问进行安全控制,如认证授权、防爬虫等

(3)在流量高峰期,服务网关可以限制流量,在内部系统出现故障时,网关可以集中做容错,保持外部良好的用户体验

(4)便于收集访问日志

缺点

服务网关本身形成了一个系统,需要开发、部署、维护管理,成本较高,而且,服务网关可能会成为系统瓶颈

但服务网关方式的优势明显,已被普遍采用