专栏首页Coder的技术之路高并发系列:垂直性能优化之细说负载均衡

高并发系列:垂直性能优化之细说负载均衡

高并发是业务发展到一定阶段必须面对的问题,那么面对高并发的问题,我们可以从哪些方面入手优化呢? 垂直性能优化 [包含整体层面的负载均衡、中间件异步化、存储优化、代码层面调优、jvm容器调优等等] 整体可用性优化 [包含服务治理、服务保护、可靠性保障、生产验证、故障演练等等] 水平扩展提升 [包含分层架构、弹性架构、服务拆分及单元化等等]

从这篇开始将对上述问题进行逐点阐述,欢迎大家一起交流讨论~

前言

性能为王。可用性和水平扩展,都要建立在性能优良的基础上才会去考虑。

性能是高并发的基础,而且涉及面极广,也是需要我们投入更多的精力去对待;同时,大部分优化点也是我们一线研发日常可以直接接触的模块。也是大厂面试的时候会经常涉及到的模块。

所以第一部分大概十几篇可能都会在垂直性能优化上。第一篇,垂直性能优化之细说集群部署和负载均衡。

从阿里架构演变来看负载均衡

我们将淘宝网的架构演进(即时通讯网[1])整理到一个滑动图里,如下图所示:

<<< 左右滑动见更多 >>>

当然,比如中台建设、上云等更高级演进就在此忽略了;

可以更清晰的看到,在集群部署和负载均衡,几乎分布在了整个演进链路上最关键的节点上:

  • 当解决了本地存储的性能瓶颈,新的瓶颈出现在了web容器的单体性能上。因此,使用nginx反向代理来实现多个web容器负载均衡
  • 当数据库和tomcat都达到水平扩容,可支撑的并发大幅提升时,单体nginx代理的性能成了新的瓶颈。因此,使用F5或LVS来实现多个nginx反向代理服务器负载均衡
  • 当业务进一步发展,达到多地多机房部署,垮地域访问延迟成了新的瓶颈。因此,使用DNS来实现地域机房间的负载均衡

细说负载均衡方案

常见的实现方案,其实从上面的演进链路中也已经可以基本了解到各个方案适用的发展阶段和应对常见,这里再系统的总结下:

  • 基于DNS的负载
  • 基于硬件的负载,如F5
  • 基于软件的负载,如Nginx/Squid

DNS负载

<<< 左右滑动见更多 >>>

头条号[2] 知乎[3]

上面两副图,可以看到DNS的解析过程和负载均衡的原理。天然的优势就是配置简单,实现成本非常低,无需额外的开发和维护工作。

而缺点也比较明显:

  • 目前的DNS是多级解析的,每一级都可能缓存。所以生效不及时。
  • 不能按服务器的处理能力来分配负载。DNS负载均衡采用的是简单的轮询算法,不能区分服务器之间的差异和运行状态,不灵活
  • 额外的网络问题。为了使本DNS服务器和其他DNS服务器及时交互,保证数据及时更新,一般都要将刷新时间设置的较小,可能造成流量增大。

基于硬件的负载均衡

「F5 Network Big-IP」 是一个网络设备,可以简单的认为是一个网络交换机一类的东西,性能非常好,百万级TPS。

性能优良、功能强大,多种均衡算法都可以支持,还有防火墙等安全功能。但,非常贵,一般小公司可用不起。

基于软件的负载均衡

软件负载均衡都是以TCP/IP协议的OSI模型的运用:(即时通讯网[4])

根据OSI模型可将负载均衡分为:

  • 二层负载均衡(一般是用虚拟mac地址方式,外部对虚拟MAC地址请求,负载均衡接收后分配后端实际的MAC地址响应);
  • 三层负载均衡(一般采用虚拟IP地址方式,外部对虚拟的ip地址请求,负载均衡接收后分配后端实际的IP地址响应);
  • 四层负载均衡(在三次负载均衡的基础上,用 ip+port 接收请求,再转发到对应的机器);
  • 七层负载均衡(根据虚拟的url或是IP,主机名接收请求,再转向相应的处理服务器)。

常见的其实只有4层和7层负载。

四层和七层的横向对比

四层

七层

原理

基于IP+端口

基于虚拟的URL或主机IP

分析内容

IP层及TCP/UDP层

应用层信息,如HTTP协议URI或Cookie信息

复杂度

架构简单、管理容易、问题定位方便

比较复杂

灵活性

仅支持基于网络层的需求转发

可对所有跟服务端的请求进行修改

安全性

无法直接抵御网络攻击

更容易抵御来自网络的攻击

效率

基于更底层设置,效率高

需要更多的资源损耗

常见的负载均衡算法

算法名

优点

缺点

轮询

简单高效,兼顾所有节点

集群性能瓶颈更多的会受性能差的服务器影响

随机

同轮询类似

一致性hash

相同来源请求落点相同,有利于灰度发布等功能

遇到热点会对节点有冲击;节点故障影响上游调用

加权轮询

将机器性能考虑在内,集群性能最大化

生产环境复杂多变,无法动态调整权重,只能粗略预先优化

动态连接数、最快响应

动态,根据节点状况实时变化

增大的复杂度和资源消耗

广义的负载均衡

上述内容基本都是基于服务级别来叙述的负载均衡的概念。其实,负载被运用的场景还很多,比如,服务端rpc选址、以及一些中间件的投递和请求分发,再有一些弹性架构下的弹性路由,单元化下的单元路由,其实也是更高层面的负载均衡。相应的,也有很多特定的负载算法,比如rpc中的本地优先负载等等。

结束语

负载均衡是业务发展到一定阶段必经的优化过程。掌握负载相关的原理和算法,对我们日常业务问题排查甚至是架构设计都可以起到很好的帮助。

本篇是高并发系列中垂直性能优化的第一篇,从服务的整体优化为出发点叙述了主要技术手段--负载均衡的主要内容,下一篇,将从中间件的应用入手,再聊性能优化。欢迎大家来一起交流。

Reference

[1]从100到1000万高并发的架构演进之路: http://www.52im.net/thread-2665-1-1.html

[2]头条号: 程序员小新人学习

[3]知乎: foxgab:DNS如何实现全局负载均衡

[4]一篇读懂分布式架构下的负载均衡技术: http://www.52im.net/thread-2494-1-1.html

本文分享自微信公众号 - Coder的技术之路(gh_1b3189982966),作者:Coder的技术之路

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-04-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 面试题总结 —— JAVA高级工程师

    近期考虑换工作的问题,于是投简历面试,面试5家公司的高级Java工程师,有4家给了我offer,想着总结一下面试经验,方便最近正在寻求机会的你们

    执笔记忆的空白
  • 如何服务化

    Cloud Native (国内译为“云原生”),最早是 Matt Stine 提出的一个概念。与微服务一样,Cloud Native 并不是一种具体的技术,而...

    cloudskyme
  • 负载均衡续:万亿流量场景下的负载均衡实践

    正是由于这些专门针对数据包的高性能支持,才得以实现性能优良的负载均衡器来支撑多年双11场景下的脉冲流量的压力。

    Coder的技术之路
  • 支撑千万级,大型电商分布式架构解析

    以用户为中心,提供快速的网页访问体验。主要参数有较短的响应时间,较大的并发处理能力,较高的吞吐量,稳定的性能参数。

    李红
  • 大型网站架构系列:电商网站架构案例(2)

    电网网站架构案例系列的第二篇文章。主要讲解网站架构分析,网站架构优化,业务拆分,应用集群架构,多级缓存,分布式Session。

    数商云
  • 碎片式的技术笔记

    统一SDK:封装统一的client/server标准接口规范(协议(http/TCP)&失败重试机制&参数传递规范)

    老_张
  • 冰河开始对Dubbo下手了!

    作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了...

    冰河
  • 浅谈Web网站架构演变过程及各阶段所用的技术和架构设计(转)

      我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。

    wuweixiang
  • 阿里P9架构师简述从单机至亿级流量大型网站系统架构的演进过程

    阶段一、单机构建网站 网站的初期,我们经常会在单机上跑我们所有的程序和软件。此时我们使用一个容器,如tomcat、jetty、jboos,然后直接使用JSP/s...

    Java架构
  • 从单机至亿级流量大型网站系统架构的演进过程

    阶段一、单机构建网站 网站的初期,我们经常会在单机上跑我们所有的程序和软件。此时我们使用一个容器,如tomcat、jetty、jboos,然后直接使用JSP/s...

    Java高级架构
  • 【经典必读】web网站架构演变过程,电商网站升级打怪

    前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。 该系统具备的功能: 用户模块:用户注册和管理 商品模块:商品展示和管...

    java思维导图
  • 电子商务网站是这样诞生的

    来自:cnblogs.com/xiaoMzjm 前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。 该系统具备的功能: ...

    架构师小秘圈
  • 浅谈web网站架构演变过程

    老七Linux
  • 浅谈web网站架构演变过程

    前言   我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。   该系统具备的功能: 用户模块:用户注册和管理 商品模块:商品...

    逸鹏
  • Web网站架构演变历程

    我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。

    lyb-geek
  • Web网站架构演变历程

    我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。

    好好学java
  • 美团面试:能不能画一下你们项目架构图?(文末福利)

    我们以Java Web 为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。

    田维常
  • 大型Web网站架构演变之9大阶段

    我们以Java Web为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。

    Java编程指南
  • 阿里P9架构师讲解从单机至亿级流量大型网站系统架构的演进过程

    美的让人心动

扫码关注云+社区

领取腾讯云代金券