高并发系统设计 40 问
唐扬
美图公司技术专家
49013 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
高并发系统设计 40 问
15
15
1.0x
00:00/00:00
登录|注册

27 | API网关:系统的门面要如何做呢?

统一处理第三方服务调用
独立服务层实现接口聚合
协议转换、限流等功能下沉到API网关
Filter
责任链模式
线程隔离或保护
线程池并行处理
I/O模型
统一认证、授权、审计和访问控制
日志记录
黑白名单
客户端认证和授权
服务治理策略
协议转换
统一接入地址
出口网关
服务聚合
入口网关
Tyk
Zuul
Kong
扩展性
性能
出口网关
入口网关
引入系统中
开源实现
实现关键点
作用
API网关

该思维导图由 AI 生成,仅供参考

你好,我是唐扬。
到目前为止,你的垂直电商系统在经过微服务化拆分之后已经运行了一段时间了,系统的扩展性得到了很大的提升,也能够比较平稳地度过高峰期的流量了。
不过最近你发现,随着自己的电商网站知名度越来越高,系统迎来了一些“不速之客”,在凌晨的时候,系统中的搜索商品和用户接口的调用量会急剧上升,持续一段时间之后又回归正常。
这些搜索请求有一个共同特征是来自固定的几台设备。当你在搜索服务上加一个针对设备 ID 的限流功能之后,凌晨的高峰搜索请求不见了。但是不久之后,用户服务也出现了大量爬取用户信息的请求,商品接口出现了大量爬取商品信息的请求。你不得不在这两个服务上也增加一样的限流策略。
但是这样会有一个问题:不同的三个服务上使用同一种策略,在代码上会有冗余,无法做到重用,如果其他服务上也出现类似的问题,还要通过拷贝代码来实现,肯定是不行的。
不过作为 Java 程序员,你很容易想到:将限流的功能独立成一个单独的 jar 包给这三个服务来引用。不过你忽略了一种情况,那就是你的电商团队使用的除了 Java,还有 PHP 和 Go 等多种语言。
用多种语言开发的服务是没有办法使用 jar 包来实现限流功能的,这时你需要引入 API 网关。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

API网关是系统中解决服务治理问题的重要架构模式,分为入口网关和出口网关两类。入口网关实现了动态路由和屏蔽服务的部署地址和协议细节,提供了便捷的调用方式;而出口网关用于对外部API进行统一认证、授权、审计和访问控制。在实现API网关时,关注性能和扩展性是关键,而开源的API网关组件包括Kong、Zuul和轻量级API网关等,适用于不同的技术栈团队。引入API网关后,系统架构得到了优化,将Web层中的协议转换、认证、限流等功能挪入到API网关中,将服务聚合的逻辑下沉到服务层。因此,当微服务系统越来越复杂时,使用API网关作为整体系统的门面是一个值得考虑的选择。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《高并发系统设计 40 问》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(37)

  • 最新
  • 精选
  • Julien
    上一讲的负载均衡和这一讲的API网关是什么关系呢?

    作者回复: 作用不同,负载均衡作用是分流,API网关作用是服务治理

    2019-11-25
    32
  • 小洛
    之前用zuul做过网关,思路和老师说的大同小异,有授权,有检验,有限流熔断,也有线程池隔离等,就是聚合服务没有抽成单独的服务来做,因为在组织架构上,大家都不想接手这种聚合别人接口的服务,有时候这种非技术的问题让人特别困惑!所以当初就设计了一个配置api中可以配置多个服务接口,网关把结果整合,然后json返回了!

    作者回复: 这样也好

    2020-02-11
    3
    20
  • Darren
    Spring cloud gateway 性能比zuul好一些,并且是异步的

    作者回复: 是的

    2020-04-01
    2
    13
  • 张德
    老师 请教一下 这个oauth2.0的登录认证 请求是先经过网关后验证是否登录了 还是什么别的流程 能否讲一下这个架构下 登录鉴权应该怎么做???

    作者回复: 就是请求在经过网关后,先做oauth的认证,认证成功后,将一些用户信息写入到request里面,这样业务服务器就不需要关心认证了

    2019-11-25
    2
    9
  • Xiang
    apisix 这个API网关性能很好 https://github.com/apache/incubator-apisix

    作者回复: 谢谢,我研究一下

    2020-02-24
    4
  • 刘冲
    请问,像sql注入拦截这种工作,是后端每个微服务要做的事情呢?还是都应该只需要放在api网关来做?

    作者回复: 这种安全策略可以放在API网关中来做

    2019-11-27
    4
    4
  • API网关,这个也一定使用过,不过距离自己的编码距离有些远,没实际直接接触过。 类似一个村子的主路口,进村时做安全、鉴权、限流、熔断等控制,出村时做认证、审计、授权等工作。

    作者回复: 是的,可能开发同学了解不多

    2020-04-28
    2
    3
  • JOHN
    看了本文,这边我有几个问题想请教下老师? 1、不太清楚业务网关与聚合服务层之间的区别 2、在服务调用上,我觉得很多接口并不是聚合接口,那是否api网关也可以直接调用原子服务层 3、api网关与web服务的最大区别点就是 web服务多了服务聚合的功能么??

    作者回复: api网关有转换协议,限流,熔断等功能

    2020-03-10
    2
  • 古德
    我的理解聚合业务层就是BFF层吧,一般是按照业务范围来分,应该放网关层后面,网关层和业务要无关

    作者回复: 可以认为是BFF层

    2020-01-06
    2
  • 高志强
    老师我想问一下,这个api网关处在,负载均衡服务和应用服务之间么,都用它这个api网关万一挂了怎么办?

    作者回复: 是的,服务要保证可用性呀

    2020-03-31
    2
    1
收起评论
显示
设置
留言
37
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部