高性能(一)

news2024/11/15 10:43:15

思维导图



一、负载均衡

1.概念

将用户请求分摊到不同服务器上处理,以提高系统整体的并发处理能力及可靠性。

如图:我们用到负载均衡,实现访问商品服务的请求的分流。

在这里插入图片描述

负载均衡是一种常用且简单的提高系统并发和可靠性的手段,单体或微服务架构都会使用

2.分类

2.1 服务端

主要应用于系统外部请求和网关层,软件或硬件都可以实现。

如图使用Nginx:

在这里插入图片描述

2.1.1 硬件负载均衡

通过专门的硬件设备(如F5、A10、Array)实现负载均衡

优点性能很强且稳定,缺点是价格太贵。如基础款F5最低也要20万。

2.1.2 软件负载均衡

通过软件(如LVS、Nginx、HAproxy)实现负载均衡

日常开发接触最多,性能差一些,但价格便宜。如基础款的Linux服务器也就几千,好一点的2-3万就不错了。

分类:

一层、二层、三层、四层、七层负载均衡(根据OSI模型)

在这里插入图片描述

(1)四层负载均衡

  • 工作在主要协议TCP/UDP的传输层

  • 负载均衡器能够看到数据包里源端口地址、目的端口地址,基于这些信息通过一定负载均衡算法将数据包转发到后端真实服务器

大部分用LVS(Linux内核的4层负载均衡)

(2)七层负载均衡

  • 工作在主要协议HTTP的应用层

  • 这一层负载均衡比四层负载均衡路由网络请求的方式更加复杂,它会读取报文的数据部分(如HTTP报文),然后根据读取数据(如URL、Cookie)做出负载均衡决策

大部分使用Nginx

(3)四层与七层负载均衡比较

  • 四层性能更强。七层比四层会消耗更多性能

  • 七层功能更强。更加灵活,能够更加智能的路由网络请求

比如可以根据请求内容进行缓存、压缩、加密等优化


2.2 客户端

主要应用于系统内部的不同服务器之间,可以使用现成的负载均衡组件来实现。

2.2.1 概念

(1)客户端会自己维护一份服务器的地址列表。
发送请求之前,客户端会根据对应的负载均衡算法来选择具体某一台服务器处理请求。

(2)客户端负载均衡和服务运行在同一个进程或者Java程序里,不存在额外的网络开销。
不过它会受到编程语言的限制,比如SpringCloud Load Balancer 只能用于Java语言

2.2.2 Java框架客户端负载均衡

以下都内置了开箱即用:

2.2.2.1 Dubbo

默认自带

2.2.2.2 SpringCloud

通过可选的组件形式实现,常用的有:

(1)SpringCloud Load Balancer(官方推荐)

在这里插入图片描述

<1> 2种基本策略:

  • RandomLoadBalancer:随机

  • RoundRobinLoadBalancer(默认):轮询

<2> 通过ServiceInstanceListSupplier实现类让其他支持类似于Ribbon的负载均衡策略

如:实现基于区域的负载均衡策略、基于hint提示的负载均衡策略等

(2) Ribbon(Netflix)
Netflix开发,功能全面支持的负载均衡策略多

7种策略:

  • RandomRule:随机

  • RoundRobinRule(默认):轮询

  • WeightedResponseTimeRule:权重(根据响应时间决定权重)

  • BestAvailableRule:最小连接数

  • RestryRule:重试
    按照轮询策略获取服务,如果获取的服务实例为null或者已经失效,则再指定时间之内不断重试来获取服务,如果超过指定时间依然没有获取到服务实例则返回null

  • AvailabilityFilteringRule:可用敏感性
    先过滤掉非健康的服务实例,然后再选择连接数较小的服务实例

  • ZoneAvoidanceRule:区域敏感性
    根据服务所在区域的性能和服务的可用性来选择服务实例

**备注:**Netflix开发的微服务组件还有:Feign、Zuul、Hystrix、Eureka。



3.常见算法

3.1 随机法

最简单粗暴

(1)未配置权重

  • 所有的服务器被访问到的概率都是相同的

  • 适合于服务器性能相近的集群,每个服务器承载相同的负载

(2)配置权重

  • 权重越高的服务器被访问的概率越大

  • 适合服务器性能不等的集群,权重的存在可以使请求更加合理化

(3)随机法缺陷
部分机器在一段时间内无法被随机到

3.2 轮询法

挨个服务器处理

(1)未配置权重

  • 每个请求按时间顺序逐一分配到不同的服务器处理

  • 适合于服务器性能相近的集群,每个服务器承载相同的负载

(2)配置权重

  • 权重越高的服务器被访问的概率越大

  • 适合服务器性能不等的集群,权重的存在可以使请求更加合理化

3.3 一致性Hash法

相同参数的请求总是发到同一台服务器处理,比如同个IP的请求

3.4 最小连接法

当有新的请求出现时,遍历服务器节点列表并选取其中活动连接数最小的一台服务器来响应当前请求。

活动连接数可以理解为当前正在处理的请求数

(1)可以尽可能最大的请求分配更加合理化,提高服务器的利用率。

(2)实现最复杂,需要监控每一台服务器处理的请求连接数

4.七层均衡怎么做

项目中解决方案:
DNS解析、反向代理、HTTP重定向(少)

4.1 DNS解析

(1)原理

  • 在DNS服务器中为同一个主机记录配置多个IP地址,这些IP地址对应不同的服务器。
  • 当用户请求域名时,DNS服务器采用轮训算法返回IP地址,实现轮询算法负载均衡。

在这里插入图片描述

(2)IP地址的权重配置
在服务器性能不等的集群中请求分配会更加合理化

在这里插入图片描述


4.2 反向代理

(1)概念
客户端将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器,获取数据后再返回给客户端。

对外暴露的是反向代理服务器地址,隐藏了真实服务器IP地址

(2)Nginx
将接收到的客户端请求以一定的规则(负载均衡策略)均匀地分配到这个服务器集群中所有的服务器上

在这里插入图片描述





二、CDN

1.概念

在这里插入图片描述

内容分发网络,Content Delivery Network/Content Distribution Network

就是将静态资源分发到多个不同的地方以实现就近访问,进而加快静态资源的访问速度,减轻服务器以及带宽的负担。

可看作服务上一层的特殊缓存服务,分布在全国各地,主要用来处理静态资源的请求。

1.1 内容与分发网络

  • 内容
    静态资源比如图片、视频、文档、JS、CSS、HTML。

  • 分发网络
    将这些静态资源分发到位于多个不同的地理位置机房中的服务器上

就可以实现静态资源的就近访问比如北京的用户直接访问北京机房的数据。

1.2 类比

类比京东在各地建立的仓库及系统,用户下单后就从距离用户最近的仓库发货

在这里插入图片描述

1.3 与全站加速区别

  • 全站加速(腾讯云叫 ECDN、阿里云叫 DCDN),既可以加速静态资源又可以加速动态资源。

  • 而内容分发网络(CDN)主要针对的是 静态资源 。

如图:

在这里插入图片描述

1.4 其他

1.4.1 为何不自建CDN

  • 绝大部分公司都会在项目开发中交使用 CDN 服务,但很少会有自建 CDN 服务的公司。

  • 基于成本、稳定性和易用性考虑,建议直接选择专业的云厂商或CDN 厂商提供的开箱即用的 CDN 服务

**云厂商:**阿里云、腾讯云、华为云、青云

**CDN 厂商:**网宿、蓝汛

1.4.1 为何直接将服务异地部署?

2.原理



本篇文章主要参考链接如下:

参考链接2-JavaGuide


持续更新中…

随心所往,看见未来。Follow your heart,see light!

欢迎点赞、关注、留言,一起学习、交流!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/341894.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL入门篇-MySQL 二进制日志binlog介绍

MySQl binlog介绍 binlog的作用 逻辑日志,记录的是数据库内部的所有变动&#xff08;sql语句 行的改变&#xff09; server层日志&#xff0c;binlog不仅仅记录innodb的变动&#xff0c;也记录myisam存储引擎的变动。 innodb redo 是存储引擎层&#xff0c;和binlog不是一层&…

spark02-内存数据分区切分原理

代码&#xff1a;val conf: SparkConf new SparkConf().setMaster("local[*]").setAppName("wordcount") val scnew SparkContext(conf) //[1] [2,3] [4,5] val rdd: RDD[Int] sc.makeRDD(List(1,2,3,4,5),3) //将处理的数据保存分区文件 rdd.saveAsText…

【PTA Advanced】1152 Google Recruitment(C++)

目录 题目 Input Specification: Output Specification: Sample Input 1: Sample Output 1: Sample Input 2: Sample Output 2: 思路 代码 题目 In July 2004, Google posted on a giant billboard along Highway 101 in Silicon Valley (shown in the picture below)…

清除 git 所有历史提交记录,使其为新库

清除 git 所有历史提交记录&#xff0c;使其为新库需求方案需求 基于以前的仓库重新开发&#xff0c;这样可保留以前的配置等文件&#xff0c;但是需要删除全部的历史记录、tag、分支等。 方案 创建新的分支 使用 --orphan 选项&#xff0c;可创建1个干净的分支&#xff08;无…

设置测试用例的具体方法

文章目录一、等价类分区/分块的概念等价类的划分二、边界值三、因果图(判定表)四、场景设计法五、错误猜测法总结一、等价类 用户的密码为6~18位,测试的时候使用到的测试数据是什么? 穷举法,6,7,8,9,10…18全部都测试一边,可以 但是将范围改成6~1000位,穷举法就不可取了 分区/…

从零实现高并发WebRTC服务器(五):ICE协议

文章目录零、ICE具体做些什么一、ICE协议是什么二、ICE Candidate2.1 ICE CANDIDATE TYPE2.2 收集candidate零、ICE具体做些什么 收集candidate对不同type的所有candidate pair进行排序&#xff0c;比如优先使用同一内网的host candidate连通性检查 一、ICE协议是什么 ICE,i…

线性杂双功能PEG试剂OPSS-PEG-Acid,OPSS-PEG-COOH,巯基吡啶聚乙二醇羧基

英文名称&#xff1a;OPSS-PEG-COOH&#xff0c;OPSS-PEG-Acid 中文名称&#xff1a;巯基吡啶-聚乙二醇-羧基 OPSS-PEG-COOH是一种具有OPSS和羧基的线性杂双功能PEG试剂。它是一种有用的带有PEG间隔基的交联剂。OPSS代表正吡啶基二硫化物或邻吡啶基二硫代&#xff0c;与硫醇、…

Java 修饰符和运算符,超详细整理,适合新手入门

目录 一、访问控制修饰符 1、访问权限 二、运算符 1、算术运算符 2、关系运算符 3、逻辑运算符 4、赋值运算符 5、三元运算符 一、访问控制修饰符 Java 支持 4 种不同的访问权限&#xff1a; private 私有的 protected 受保护的 public 公共的 default 默认 1、…

程序员必备小众又实用的网站,你知道几个?

程序员是世人眼中的高薪职业&#xff0c;虽然亚历山大&#xff0c;但是年收入非常可观。 职场上的程序员有很多所谓的标签&#xff0c; 比如&#xff1a;秃头&#xff0c;找不到女朋友&#xff0c;和产品经理的斗智斗勇等等.... 可以说&#xff0c;一个程序员的必备素养就是…

【C++11智能指针】unique_ptr

【C11智能指针】unique_ptr 概述 一个 unique_ptr “拥有”它所指向的对象。 与 shared_ptr 不同&#xff0c;某个时刻只能有一个 unique_ptr 指向一个给定对象。 当 unique_ptr 被销毁时&#xff0c;它所指向的对象也被销毁。 初始化 直接初始化 unique_ptr<int> p…

AcWing 166. 数独(DFS + 剪枝优化 + lowbit函数 + 状态压缩)

AcWing 166. 数独&#xff08;DFS 剪枝优化 lowbit函数 状态压缩&#xff09;一、题目二、分析1、状态压缩2、lowbit函数&#xff08;1&#xff09;函数作用&#xff08;2&#xff09;函数实现3、DFS思路4、剪枝优化三、代码一、题目 二、分析 1、状态压缩 那么如果针对某一…

情人节专场即将到来,各大平台各显神通

一年一度的情人节即将到来&#xff0c;情人节除了有情侣、恋人之间表达爱意或者追求浪漫之外&#xff0c;也有很多人想要购买一些特殊的礼物送给自己的爱人或者亲人。对于跨境电商而言&#xff0c;这个时段往往能更好的将品牌与社交媒体上的目标客户建立起联系&#xff0c;同时…

【青训营】分布式定时任务简述

这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天 分布式定时任务简述 定义 定时任务是指系统为了自动完成特定任务&#xff0c;实时、延时、周期性完成任务调度的过程。分布式定时任务是把分散的、可靠性差的定时任务纳入统一平台&#xff0c;并且实现集群管理调度和…

OpenCV-PyQT项目实战(6)项目案例02滚动条应用

欢迎关注『OpenCV-PyQT项目实战 Youcans』系列&#xff0c;持续更新中 OpenCV-PyQT项目实战&#xff08;1&#xff09;安装与环境配置 OpenCV-PyQT项目实战&#xff08;2&#xff09;QtDesigner 和 PyUIC 快速入门 OpenCV-PyQT项目实战&#xff08;3&#xff09;信号与槽机制 …

JumpServer开源堡垒机v3.0版本设计重点解读

编者注&#xff1a;在1月17日的JumpServer开源堡垒机v3.0预发布恳谈会直播中&#xff0c;JumpServer创始人广宏伟与大家分享了JumpServer v3.0版本的设计思路与功能亮点。在v3.0版本正式发布之前&#xff0c;JumpServer开源项目组基于此次直播内容为大家整理总结了JumpServer v…

C++11可变模板参数

C11可变模板参数一、简介二、语法三、可变模版参数函数3.1、递归函数方式展开参数包3.2、逗号表达式展开参数包一、简介 C11的新特性–可变模版参数&#xff08;variadic templates&#xff09;是C11新增的最强大的特性之一&#xff0c;它对参数进行了高度泛化&#xff0c;它能…

STM32单片机红外遥控

红外遥控接口电路STM32单片机红外遥控程序源代码#include "sys.h"#define LED_RED PBout(12) //红色发光二极管控制管脚初始化PB12#define LED_GREEN PBout(13) //绿色发光二极管控制管脚初始化PB13#define LED_YELLOW PBout(14) //黄色发光二极管控制管脚初始化PB14…

反射,枚举,lambda表达式

目录 1、反射 1.1 基本概念 1.2 反射相关的类 1.3 创建 Class 对象 1.4 反射的使用 1.4.1 通过反射创建对象&#xff1a; 1.4.2 获取私有的构造方法 1.4.3 获取私有的成员变量 1.4.4 获取私有的方法 1.5 总结 2、枚举 2.1 认识枚举 2.2 使用枚举 2.3 枚举与反射…

第4章 流程控制-if-else,Switch,For循环(循环守卫,循环步长,倒叙打印),While循环,多重循环...

第 4 章 流程控制-if-else,Switch,For循环(循环守卫&#xff0c;循环步长&#xff0c;倒叙打印)&#xff0c;While循环&#xff0c;多重循环 4.1 分支控制 if-else 让程序有选择的的执行&#xff0c;分支控制有三种&#xff1a;单分支、双分支、多分支 4.1.1 单分支 1)基本语法…

Leetcode-每日一题1234. 替换子串得到平衡字符串(滑动窗口 + 哈希表)

题目链接&#xff1a;https://leetcode.cn/problems/replace-the-substring-for-balanced-string/description/ 思路 题目意思 这题意思是一个只含有[Q, W, E, R] 四个字符的字符串s且长度一定是 4的倍数&#xff0c; 需要你通过替换子串&#xff0c;使他变成一个「平衡字符…