微服务架构基础之API网关

微服务架构基础之API网关

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

1 什么是API网关

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

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

2 为什么需要API网关

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

在API网关上,可以做到:

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

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

由于API网关在整个架构系统中位置特别重要,而且承受巨大的压力。所以,高性能和高可用都需要考虑。比较常用的做法是在网关的前面,加上负载均衡,这样,网关既能水平扩展,又能保证高可用。

3 常用的API网关

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

3.1 Kong

Kong是在客户端和(微)服务间转发API通信的API网关,它的最底层是基于Ngnix,所以,有着与生俱来的性能优势。同时,Kong支持通过插件扩展其功能,自带了很多常用的插件。

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

引用Kong的官方文档

3.2 Netflix Zuul

对于SpringCloud微服务架构体系来说,最常用的是Netflix Zuul。Zuul是基于Servlet的Filter实现的,并且自己内部也是构建了多种Filter的支持,从Zuul的架构图,可以看到这些Filter,如下:

引用Zuul官方架构图

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

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

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

4 小结

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101452.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python pandas fillna_python rfind函数

    python pandas fillna_python rfind函数本文概述我们可以使用fillna()函数填充数据集中的空值。句法DataFrame.fillna(value=None,method=None,axis=None,inplace=False,limit=None,downcast=None,**kwargs)参数值:它是一个用于填充空值的值,或者是一个Series/dict/DataFrame。method:一种用于填充重新…

    2022年8月12日
    5
  • 关于vue安装less和webpack版本冲突问题

    关于vue安装less和webpack版本冲突问题解决vue安装webpack和less的版本冲突

    2022年8月9日
    42
  • TCP TimeWait状态详解(比较全)[通俗易懂]

    TCP TimeWait状态详解(比较全)[通俗易懂]转载自:http://blog.chinaunix.net/uid-20384806-id-1954363.htmlTIME_WAIT状态TCP要保证在所有可能的情况下使得所有的数据都能够正确被投递。当关闭一个socket连接时,主动关闭一端的socket将进入TIME_WAIT状态,而被动关闭一方则转入CLOSED状态。见图解。 当一个socket关

    2022年6月3日
    54
  • MATLAB矩阵合并「建议收藏」

    MATLAB矩阵合并「建议收藏」两个或多个矩阵的拼接(合并)操作:学习链接用[]做拼接时,有三种连接符:逗号(,),空格,分号(;)。逗号(,)和空格等价,表示不换行,直接横向拼接,横向拼接要求两个矩阵行数相同;分号(;)表示换行后纵向拼接,纵向拼接要求两个拼接的矩阵的列数相同。代码展示:1.横向拼接:1%逗号和空格表示横向拼接2A=zeros(4,2)3B=ones(4,1)4C=[AB]A=00000000B=11

    2022年6月25日
    118
  • 常用 SQL 语句大全[通俗易懂]

    常用 SQL 语句大全[通俗易懂]本文总结了开发工作中常用的SQL语句,供大家参考……–语句功能–数据操作SELECT–从数据库表中检索数据行和列INSERT–向数据库表添加新数据行DELETE–从数据库表中删除数据行UPDATE–更新数据库表中的数据–数据定义CREATETABLE–创建一个数据库表DROPTABLE–从数据库中删除表ALTERTABLE–修改数据库表结构CREA

    2022年6月22日
    27
  • contentWindow属性是指指定的frame或者iframe所在的window对象

    contentWindow属性是指指定的frame或者iframe所在的window对象contentWindow属性是指指定的frame或者iframe所在的window对象在IE中iframe或者frame的contentWindow属性可以省略,但在Firefox中如果要对iframe对象进行编辑则必须指定contentWindow属性。function EnableEdit(){     var editor;     editor = documen

    2022年10月20日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号