微服务架构基础之API网关

在微服务架构中,API网关是核心的基础服务之一。在微服务流行以前,API网关已经在不少架构中扮演重要的角色,尤为是开放平台,此时的API网关是系统的统一入口,肩负了不少的业务责任,好比限流,计费等功能。而在微服务架构中,API网关可能每每须要兼顾内部和外部的全部微服务,承担更多的职责。编程

1 什么是API网关

简单说,API网关是微服务架构中的“指路人”与“守护者”。首先,它会提供最基本的路由服务,将调用转发到上游服务。其次,做为一个入口,它还能够进行认证,鉴权,限流等操做,对上游服务保护。因此说,有了API网关,就能够作到“一夫当关,万夫莫开”。后端

g1

在通常的电商系统中,API网关位于订单服务和商品服务以前,全部外部的调用者(手机端和电脑Web端)都会先走网关,再进入具体的后端业务服务中。安全

2 为何须要API网关

大多数的Java工程师,都对Spring AOP有所了解,在实际的开发中,使用面向切面编程在完成一些功能时,可让代码的侵入性更小,实现更加优雅。而在微服务架构中,API网关能够给整个微服务增长面向切面编程的能力。架构

在API网关上,能够作到:负载均衡

  1. 安全相关:认证,鉴权,IP黑白名单。
  2. 流控
  3. 集成服务发现
  4. 日志和审计
  5. 动态路由

在架构设计上,有了API网管也可让整个架构更加灵活。不少业务系统,可能会涉及两套API,一套给本身的系统使用,一套给第三方使用,此时,就可使用API网关进行分流。使用单独的API网关服务于第三方调用者,同时也能够针对第三方者作一些特殊的业务逻辑处理。微服务

g2

因为API网关在整个架构系统中位置特别重要,并且承受巨大的压力。因此,高性能和高可用都须要考虑。比较经常使用的作法是在网关的前面,加上负载均衡,这样,网关既能水平扩展,又能保证高可用。性能

3 经常使用的API网关

结合开发中经常使用的微服务架构体系,再看API网关。插件

3.1 Kong

Kong是在客户端和(微)服务间转发API通讯的API网关,它的最底层是基于Ngnix,因此,有着与生俱来的性能优点。同时,Kong支持经过插件扩展其功能,自带了不少经常使用的插件。架构设计

Kong也是一个比较通用的API网关,对于上游的服务没有语言上的限制。因此,Kong的使用也很灵活,而且,功能上也很全面,如图:设计

kong

引用Kong的官方文档

3.2 Netflix Zuul

对于SpringCloud微服务架构体系来讲,最经常使用的是Netflix Zuul。Zuul是基于Servlet的Filter实现的,而且本身内部也是构建了多种Filter的支持,从Zuul的架构图,能够看到这些Filter,以下:

zuul

引用Zuul官方架构图

虽然,Zuul的性能不是那么的突出,可是Zuul充分体现出简单够用的实用性原则。Zuul有不少优势:

  1. 适合Java技术栈
  2. 基于Groovy实现的动态路由,很是强大
  3. 丰富的Filter,容易进行业务扩展
  4. 和Eureka完美集成

不久前,Netflix开源了Zuul2,最新的Zuul基于Netty实现,完全解决了饱受诟病的性能问题。

4 小结

本文主要从概念上对微服务架构中的API网关进行分析讲解,让读者从宏观上去理解API网关。文中主要以常见的API网关为例,简单介绍其原理及优缺点。读者能够结合本身的实际开发经验,理解API网关的概念和做用,从而更好地驾驭微服务。后续会继续推出偏向实战的微服务架构经验,主要是基于SpringCloud体系进行讲解,关注个人公众号:

me
相关文章
相关标签/搜索