高并发系统设计40问
唐扬
美图公司技术专家
立即订阅
9250 人已学习
课程目录
已更新 40 讲 / 共 40 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 为什么你要学习高并发系统设计?
免费
基础篇 (6讲)
01 | 高并发系统:它的通用设计方法是什么?
02 | 架构分层:我们为什么一定要这么做?
免费
03 | 系统设计目标(一):如何提升系统性能?
04 | 系统设计目标(二):系统怎样做到高可用?
05 | 系统设计目标(三):如何让系统易于扩展?
06 | 面试现场第一期:当问到组件实现原理时,面试官是在刁难你吗?
演进篇 · 数据库篇 (5讲)
07 | 池化技术:如何减少频繁创建数据库连接的性能损耗?
08 | 数据库优化方案(一):查询请求增加时,如何做主从分离?
09 | 数据库优化方案(二):写入数据量增加时,如何实现分库分表?
10 | 发号器:如何保证分库分表后ID的全局唯一性?
11 | NoSQL:在高并发场景下,数据库和NoSQL如何做到互补?
演进篇 · 缓存篇 (6讲)
12 | 缓存:数据库成为瓶颈后,动态数据的查询要如何加速?
13 | 缓存的使用姿势(一):如何选择缓存的读写策略?
14 | 缓存的使用姿势(二):缓存如何做到高可用?
15 | 缓存的使用姿势(三):缓存穿透了怎么办?
16 | CDN:静态资源如何加速?
加餐 | 数据的迁移应该如何做?
演进篇 · 消息队列篇 (6讲)
17 | 消息队列:秒杀时如何处理每秒上万次的下单请求?
18 | 消息投递:如何保证消息仅仅被消费一次?
19 | 消息队列:如何降低消息队列系统中消息的延迟?
20 | 面试现场第二期:当问到项目经历时,面试官究竟想要了解什么?
用户故事 | 从“心”出发,我还有无数个可能
期中测试 | 10道高并发系统设计题目自测
演进篇 · 分布式服务篇 (9讲)
21 | 系统架构:每秒1万次请求的系统要做服务化拆分吗?
22 | 微服务架构:微服务化后系统架构要如何改造?
23 | RPC框架:10万QPS下如何实现毫秒级的服务调用?
24 | 注册中心:分布式系统如何寻址?
25 | 分布式Trace:横跨几十个分布式组件的慢请求要如何排查?
26 | 负载均衡:怎样提升系统的横向扩展能力?
27 | API网关:系统的门面要如何做呢?
28 | 多机房部署:跨地域的分布式系统如何做?
29 | Service Mesh:如何屏蔽服务化系统的服务治理细节?
演进篇 · 维护篇 (7讲)
30 | 给系统加上眼睛:服务端监控要怎么做?
31 | 应用性能管理:用户的使用体验应该如何监控?
32 | 压力测试:怎样设计全链路压力测试平台?
33 | 配置管理:成千上万的配置项要如何管理?
34 | 降级熔断:如何屏蔽非核心系统故障的影响?
35 | 流量控制:高并发系统中我们如何操纵流量?
36 | 面试现场第三期:你要如何准备一场技术面试呢?
高并发系统设计40问
登录|注册

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

唐扬 2019-11-25
你好,我是唐扬。
到目前为止,你的垂直电商系统在经过微服务化拆分之后已经运行了一段时间了,系统的扩展性得到了很大的提升,也能够比较平稳地度过高峰期的流量了。
不过最近你发现,随着自己的电商网站知名度越来越高,系统迎来了一些“不速之客”,在凌晨的时候,系统中的搜索商品和用户接口的调用量会有激剧的上升,持续一段时间之后又回归正常。
这些搜索请求有一个共同特征是来自固定的几台设备。当你在搜索服务上加一个针对设备 ID 的限流功能之后,凌晨的高峰搜索请求不见了。但是不久之后,用户服务也出现了大量爬取用户信息的请求,商品接口出现了大量爬取商品信息的请求。你不得不在这两个服务上也增加一样的限流策略。
但是这样会有一个问题:不同的三个服务上使用同一种策略,在代码上会有冗余,无法做到重用,如果其他服务上也出现类似的问题,还要通过拷贝代码来实现,肯定是不行的。
不过作为 Java 程序员,你很容易想到:将限流的功能独立成一个单独的 jar 包给这三个服务来引用。不过你忽略了一种情况,那就是你的电商团队使用的除了 Java,还有 PHP 和 Go 等多种语言。
用多种语言开发的服务是没有办法使用 jar 包来实现限流功能的,这时你需要引入 API 网关。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《高并发系统设计40问》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(14)

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

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

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

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

    2019-11-27
    1
  • stubborn
    请教一下老师,增加聚合服务有什么约束条件吗?比如聚合服务要同时写入服务A和服务B,这样很容易引起分布式事务。
    2019-11-25
    3
    1
  • 电光火石
    聚合服务是否可以考虑用graphql来做?
    2019-12-05
  • longslee
    打卡。只是简单的使用nginx。职责链模式是我最喜欢的设计模式没有之一,哈哈哈。
    提个问题:出口网关这里,还是倾向于设计一个直接调用的出口网关吗?那这样的话出口网关怎样通知调用它的下游呢? 是否采用消息队列?

    作者回复: 出口网关是直接调用第三方的服务的

    2019-11-27
  • 任鹏斌
    刚完成网关改造,选用了zuul1.0,主要是简单可控,另外业务量级别也没那么大。只实现了统一认证和鉴权,下一步将引入限流讲理,监控,过滤器热加载等。
    2019-11-27
  • 蓝魔丶
    请教老师一下,如果有了性能很不错的入口网关的时候,还有必要使用nginx等web端代理工具嘛?

    作者回复: 我觉得是可以代替的

    2019-11-26
  • 蓝魔丶
    最后的服务蓝图中web层应该还是保留吧,把它放到网关和微服务之间,比如提到了聚合服务就是web层服务

    作者回复: 聚合层可以做单独的一层微服务~

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

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

    2019-11-25
    1
  • 约书亚
    我经历的网关变化挺复杂,最早是nginx + spring cloud zuul + 人工手写的BFF(BFF近似于聚合服务),其实这时候nginx意义不大
    后来做改造了spring cloud zuul部分功能,和BFF逐渐合并。
    目前是用traefik顶在前面做限流熔断鉴权服务发现等工作,后接具体微服务或者BFF,相当于又将网关功能拆分了。
    未来考虑去掉BFF中的Zuul换成其他更容易进行复杂编程的异步IO的网关,比如spring cloud gateway

    2019-11-25
    2
  • XD
    用过kong,当时倒腾了一个很简陋的lua脚本做防刷,打算抽空看一下tyk
    2019-11-25
  • 多路同步复用在哪一节课讲的?

    作者回复: RPC这一节

    2019-11-25
  • 博弈
    老师您好,我们最近项目中使用到了Spring cloud gateway,配置为使用https访问,在用jmeter进行压力测试时,1秒钟发送2000个请求,会出现ssl hand shake timeout错误,也在配置文件中设置了handshake timeout时间为60秒,还是会出现,请问老师有没有好的解决办法?谢谢
    2019-11-25
    2
  • 刘楠
    好像一个过滤器,系统
    2019-11-25
收起评论
14
返回
顶部