高并发系统设计40问
唐扬
美图公司技术专家
立即订阅
9308 人已学习
课程目录
已更新 42 讲 / 共 45 讲
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 | 面试现场第三期:你要如何准备一场技术面试呢?
实战篇 (2讲)
37 | 计数系统设计(一):面对海量数据的计数器要如何做?
38 | 计数系统设计(二):50万QPS下如何设计未读数系统?
高并发系统设计40问
登录|注册

26 | 负载均衡:怎样提升系统的横向扩展能力?

唐扬 2019-11-22
你好,我是唐扬。
在基础篇中,我提到了高并发系统设计的三个通用方法:缓存、异步和横向扩展。到目前为止,你接触到了缓存的使用姿势,也了解了如何使用消息队列异步处理业务逻辑。那么本节课,我将带你了解一下如何提升系统的横向扩展能力。
在之前的课程中,我也提到过提升系统横向扩展能力的一些案例。比如,08 讲提到可以通过部署多个从库的方式,来提升数据库的扩展能力,从而提升数据库的查询性能,那么就需要借助组件,将查询数据库的请求按照一些既定的策略分配到多个从库上,这是负载均衡服务器所起的作用,而我们一般使用 DNS 服务器来承担这个角色。
不过在实际的工作中,你经常使用的负载均衡的组件应该算是 Nginx,它的作用是承接前端的 HTTP 请求,然后将它们按照多种策略分发给后端的多个业务服务器上。这样,我们可以随时通过扩容业务服务器的方式来抵挡突发的流量高峰。与 DNS 不同的是,Nginx 可以在域名和请求 URL 地址的层面做更细致的流量分配,也提供更复杂的负载均衡策略。
你可能会想到,在微服务架构中我们也会启动多个服务节点承接从用户端到应用服务器的请求,自然会需要一个负载均衡服务器作为流量的入口,实现流量的分发。那么在微服务架构中,如何使用负载均衡服务器呢?
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《高并发系统设计40问》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(18)

  • ASCE1885
    是否使用客户端负载均衡,跟微服务框架中服务之间通信是使用 RPC 协议还是 HTTP 协议无关,例如Spring Cloud 中的 Ribbon 就是用来进行客户端负载均衡的;一般来说,在系统接入层,使用的是服务端负载均衡,而微服务之间的内部调用,使用的是客户端负载均衡。

    作者回复: 是的

    2019-11-22
    3
  • 蓝魔丶
    1.nginx类的负载组件只支持静态配置,无法动态感知配置,使用openrestry代替nginx好很多,不仅可以动态配置,而且比nginx提供了更多扩展模块
    2.在docker容器的k8s环境中也使用过nginx-controller代理组件,但是这个组件虽然可以实现动态配置参数,但是路由和治理能力都偏弱,可以考虑使用istio等servicemesh网关
    2019-11-26
    1
  • longslee
    打卡。 涨姿势了。
    曾经项目使用一层 IBM WebSphere 简单路由,但是客户端学聪明了,都手动绑定 hosts ,负载不均衡了。所以还是多层不暴露比较好。
    提问:老师,您讲到结合注册中心的客户端负载均衡,它又是怎么做到“动态策略”的呢?

    作者回复: 文中有提到,一般是在RPC客户端里面统计对服务端的连接数或者响应时间,这样可以选择连接数最少,或者响应时间最短的服务端

    2019-11-25
    1
  • M
    请教下老师,app与服务器之间使用websocket协议连接,如何使用负载均衡呢?

    作者回复: nginx可以支持websocket协议的

    2019-11-22
    2
    1
  • 良记
    老师好像很少说到Spring Cloud相关的组件,有的话也是一笔带过,请问是这些组件的性能不好吗?

    作者回复: 不是的,只是有些组件没有在实际项目中用过,不敢随便说~

    2019-12-03
  • Geek_33c134
    nginx能否已集群的方式同时提供呢?也就是如果最外层用nginx来做代理的话,理论上nginx能够承受的并发量为5W,如果7的并发量来的话,是否可以采用两台nginx同时提供服务呢?(如果不可以nginx当最外层同时提供服务,解决这种方法是应该通过lvs来提供最外层,然后转发到两台nginx,但是如果lvs也达到了瓶颈那么如果来解决呢?)
    2019-12-02
  • 阿土
    优雅关机与启动有案例么?理解了原理,具体怎么实现呢?

    作者回复: 文中提到的nginx的例子,就是一个案例
    除此之外,在微服务在重启时,先从注册中心中摘掉节点,然后观察流量没有了之后再重启。

    其实,总的一点就是先切流量,再重启

    2019-11-28
    1
  • 白马度和
    负载均衡还有一种策略:粘性连接。同一客户的请求会被分发到同一个服务实例。如F5的cookie中pool就是对目标服务的记忆,还有ng的sticky策略也是这样。
    2019-11-27
  • 星空123
    老师提供的nginx_upstream_check_module 我要自己研究下,有些东西确实公司限制多,都没用过

    作者回复: 这个是标配的,可以看看~

    2019-11-25
    1
  • Luciano李鑫
    负载均衡应该分为:
    客户端负载均衡
    后端负载均衡
       DNS负载均衡
       IP负载均衡
       反向代理负载均衡
    2019-11-25
  • 啊啊啊哦哦
    nginx 上为什么要阶lvs。 一般dns服务器也可以实现轮训分发到不同的nginx上啊。

    作者回复: LVS能抗更高的并发

    2019-11-24
  • 约书亚
    "请求包转发之后,由客户端和后端服务直接建立连接..."
    这里的建立连接这个描述似乎不太严谨,实际没有“连接”对吧。
    负载均衡除了F5这种硬件的基本都接触过了,在各个维度有各个维度负载均衡,曾经改过ribbon的负载,原生的weighted response太简陋了
    其实一直有疑问,为什么把响应时间作为权重的负载算法,虽然有,但出现的相对较少,难道不实用,还是耗费计算资源?
    2019-11-23
  • 小喵喵
    1.Nginx和LVS都可以做负载均衡,这些组件也都可以应用于C/S系统吗?
    2.health_check只能检测到服务器和节点指点是否可用,节点可用但是并不能代表内部服务接口是可用的,这个有什么好的方案呢?

    作者回复: 1. 是可以的
    2. 是的,这个在于你被探测接口的实现

    2019-11-22
  • leesir
    求教,对于普通web服务,nginx有办法感知新增结点吗?

    作者回复: 可以呀,有一种consul + nginx方案,就是把节点信息写在consul里面,这样当节点变化时,nginx可以得到通知

    2019-11-22
  • 陈 争
    恰巧最近在研究怎样优雅的关闭服务节点,老师的讲解给了我很多启发。
    看来nginx_upstream_check_module需要搞起来了(≖ᴗ≖)✧
    2019-11-22
  • XD
    一口气读完。干货还是很多的。
    2019-11-22
  • sdjdd
    关闭服务之前,用 503 状态码响应健康检查是不是语义更明确一些。

    作者回复: 是的,我的意思是这样的

    2019-11-22
  • Demter
    这里说的客户端是啥,是用户的浏览器吗。。。

    作者回复: 浏览器或者app

    2019-11-22
    3
收起评论
18
返回
顶部