高并发系统设计40问
唐扬
美图公司技术专家
立即订阅
9202 人已学习
课程目录
已更新 38 讲 / 共 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:如何屏蔽服务化系统的服务治理细节?
演进篇 · 维护篇 (5讲)
30 | 给系统加上眼睛:服务端监控要怎么做?
31 | 应用性能管理:用户的使用体验应该如何监控?
32 | 压力测试:怎样设计全链路压力测试平台?
33 | 配置管理:成千上万的配置项要如何管理?
34 | 降级熔断:如何屏蔽非核心系统故障的影响?
高并发系统设计40问
登录|注册

23 | RPC框架:10万QPS下如何实现毫秒级的服务调用?

唐扬 2019-11-15
你好,我是唐扬。
21 讲22 讲中,你的团队已经决定对垂直电商系统做服务化拆分,以便解决扩展性和研发成本高的问题。与此同时,你们在不断学习的过程中还发现,系统做了服务化拆分之后,会引入一些新的问题,这些问题我在上节课提到过,归纳起来主要是两点:
服务拆分单独部署后,引入的服务跨网络通信的问题;
在拆分成多个小服务之后,服务如何治理的问题。
如果想要解决这两方面问题,你需要了解,微服务化所需要的中间件的基本原理,和使用技巧,那么本节课,我会带你掌握,解决第一点问题的核心组件:RPC 框架。
来思考这样一个场景:你的垂直电商系统的 QPS 已经达到了每秒 2 万次,在做了服务化拆分之后,由于我们把业务逻辑,都拆分到了单独部署的服务中,那么假设你在完成一次完整的请求时,需要调用 4~5 次服务,计算下来,RPC 服务需要承载大概每秒 10 万次的请求。那么,你该如何设计 RPC 框架,来承载如此大的请求量呢?你要做的是:
选择合适的网络模型,有针对性地调整网络参数,以优化网络传输性能;
选择合适的序列化方式,以提升封包、解包的性能。
接下来,我从原理出发,让你对于 RPC 有一个理性的认识,这样你在设计 RPC 框架时,就可以清晰地知道自己的设计目标是什么了。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《高并发系统设计40问》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(19)

  • 镜子
    先把单服务优化到极致,比一来就上各种乱七八糟的分布式框架靠谱的多

    作者回复: 说的没错

    2019-11-16
    4
    8
  • A:春哥大魔王
    为什么信号量方式和异步io没有普及呢?
    2019-11-15
    2
    4
  • 程序水果宝
    为啥RPC框架在选择高性能的 I/O 模型时不优先使用异步IO多路复用呢,异步IO多路复用的性能不是更好吗?
    2019-11-15
    2
    3
  • 小喵喵
    PRC框架只是针对java平台的吗?对于微软的.net平台有rpc框架吗??

    作者回复: 是有的,不过我不太熟悉

    2019-11-15
    2
    3
  • 约书亚
    其实tcp_nodelay这问题的原理挺简单的,但很多教程就是把简单问题说得复杂了。作者这种实战派讲解的就简洁易懂
    2019-11-16
    2
  • 飞翔
    公司自己实现的rpc框架闭源,我们内部人员都看不到代码😓
    2019-11-16
    2
  • 许童童
    老师讲得不错。
    2019-11-15
    1
  • 魏春河
    老师,您文章里面插图是用什么画的?就像RPC调用过程那张图

    编辑回复: 就是苹果自带的keynote鸭~😉

    2019-11-15
    1
  • 张彰
    逻辑非常缜密!
    2019-12-10
  • A:春哥大魔王
    老师我想问下,rpc框架可以支持泛化调用,那么这种泛化调用和非泛化调用相比是否存在性能问题呢?因为非泛化调用的长链接可以在服务启动时完成建立,而泛化调用长链接调用只能在服务发起时建立,所以应该在链接建立这里耗费时间吧

    作者回复: 这个说实话我没有试过~

    2019-11-26
  • 阿卡牛
    按照老师烧水的例子,明显应该还有个异步非阻塞I/O多路复用模型?
    2019-11-18
  • XD
    论学好操作系统的重要性。。
    2019-11-17
  • 星空123
    老师 棒棒哒
    2019-11-17
  • 张德
    老师为啥不推荐dubbo呢 难道是dubbo只支持java系统间的调用吗???

    作者回复: dubbo协议是支持多语言的

    2019-11-16
  • 约书亚
    以前系统设计时候允许有空值,且不论这对数据库是否友好,就是在切换序列化框架时候就有问题,有的协议不存在空值这一概念。这就要求在设计时,之前两个服务之间的协议每个字段都要有默认值
    2019-11-16
  • longslee
    哈哈哈哈,我居然忘记了我还使用过WebService呢,好古老。
    另外,如果系统交互间,纯使用 http RESTful 来调用,这算不算RPC呢

    作者回复: 广义上来看是算的

    2019-11-15
  • Geek_e986e3
    老师多路复用也可以用异步。不是很理解单独把异步领出来是什么意思。还有信号量 能举个代码中的例子吗?比如epoll select 这类。我感觉好像都需要信号通知。也可以用异步 所以有点不是很理解你说的五个网络模型
    2019-11-15
  • 海罗沃德
    李玥老師的消息對列課程裡也介紹了各種RPC框架,還介紹了各種序列化方式
    2019-11-15
  • 吃饭饭
    我感觉注册中心相当重要,序列化使用 Hession 也不错。文中提到建议关闭 Nagle 算法,但是我从其它地方看到是不建议这么做的,因为针对 Nagle 算法和延时 ACK 的优化已经非常成熟了,有可能在禁用 Nagle算法之后,性能问题反而更加严重

    作者回复: 可以看看RPC成熟的代码,一般是关闭Nagle算法的

    2019-11-15
收起评论
19
返回
顶部