透明多级分流系统(用户端缓存和负载均衡)
部件考虑
有些设备位于客户端或者网络边缘,能够迅速响应用户请求,避免给cpu和数据库带来压力,比如,本地缓存,内容分发网络,反向代理等。
有些设备处理能力能够线性扩展,易于伸缩,应尽量作为业务主体,如集群能够扩展的服务节点
有些设备对系统有全局性影响,需要时刻保持容错备份,比如服务注册中心,配置中心。
有些是单点设备,比如系统路由,网关,数据库等。
对系统进行流量规划时,应该考虑到部件特性
规划原则
尽量减少单点部件,尽量减少到达单点部件的流量
最简单的系统就是最好的系统
客户端缓存
服务器对于客户端请求的响应中附带一些条件,要求客户端在想要发出相同请求时,先判断是否满足条件,如果满足,就直接使用上一次服务器给予的响应来替代,不必重新访问。
通过不同条件,客户端缓存又分为:强制缓存和协商缓存
强制缓存
比如收到请求的10分钟内有效,那么除了用户主动刷新页面,对于新开窗口,浏览器地址输入,前进,后退均可生效。
HTTP的Header参数实现强制缓存
Expires
Header参数是一个截止时间参数。
问题:
受限客户端时间。
无法描述不缓存。
无法让私有资源不被代理服务器,内容分发网络缓存。
Cache-Control
如果expire和cache-control起冲突,会以cache-control为准。
参数:
- max-age和s-maxage:缓存有效时间,以秒为单位,s-maxage的s是share的缩写,意味着在CDN,代理中持有缓存的有效时间。
- public和private:private不允许CDN等缓存。
- no-cache:不缓存
协商缓存
需要浏览器和服务器协商一次,检查客户端的资源是否过期了,会有另外的开销。和强制缓存是并行运行的。
有两种检查资源是否过期的模式:根据修改时间,根据资源唯一标识是否发生变化。他们都是通过一组成对出现的Header来实现的。
Last-Modified和IF-Modified-Since
服务端返回资源会带上Last-Modified的Header,客户端下一次请求相同资源时,就会带上IF-Modified-Since(即获得资源的Last-Modified),如果服务器发现这段时间没有修改,就返回304/Not Modified,无消息体,从而节省流量。
ETage和If-None-Match
ETage代表资源的唯一标识,相比于Modified更精密,因为modified是秒级。
但是通过哈希算ETage也会消耗资源。
传输链路
基于传输链路的设计原则:
- 减少请求数量,因为每个http请求都需要建立tcp连接。
- 扩大浏览器的并发请求,现代浏览器一般支持6个对于相同域名的并发请求,通过将资源分布在不同域名上,从而实现并发请求。
- 压缩传输
tcp连接复用
HTTP/2支持了每个域名维持一个TCP连接,一个HTTP响应当作一个个流,每个数据帧带有流ID,根据流ID可以在浏览器将数据帧重新组装成一个完整的HTTP响应。
对于小而多的文件,一个tcp好用(HTTP2),但是对于大文件,不如多tcp连接快。
压缩HTTP响应
域名解析是透明多级分流系统中重要的环节
DNS查询“icyfenix.cn"
DNS服务返回一个CNAME,”icyfenix.cn.cdn.dnsv1.com“。
递归查询CNAME,返回”icyfenix.cn"的全部的全国的DNS地址。
典型的 CDN 部署中,第一次 DNS 查询是为了获取 CDN 的 DNS 服务器地址,而第二次 DNS 查询则是通过 CDN 的 DNS 服务器获取实际的 IP 地址,CDN的DNS服务器会根据用户的位置等信息返回最优的CDN服务器地址,它可能是一个也可能是一组。
内容分发网络:CDN
仅从网络传输的角度看,一个互联网系统的速度取决于这四点:
- 网站服务器接入网络运营商的链路所能提供的出口带宽。
- 用户客户端接入网络运营商的链路所能提供的入口带宽。
- 从网站到用户所经过的不同运营商之间的带宽。
- 从网站到用户的物理链路传输时延。
除了第二条,其他都可以通过CDN实现。
内容分发:CDN获取源站资源的方式
在DNS服务器的协助下,无论是用户还是服务器,内容分发网络都完全是透明的,在两者不知亲的情况下,由CDN节点接管了用户向服务器发出的资源请求。
这其中的问题就是,CDN节点中必须有用户要的资源,其中包括两个内容”如何获取源资源“,”如何保证资源是最新的“。
CDN获取源站资源的方式就叫做内容分发。
主要有两种方式:
- 源站主动分发(Push),预加载。
- CDN被动回源(Pull)
CDN的应用
CDN能做的事情:
- 加速静态资源分发
- 安全防御,如果只使用CDN,而隐藏服务器的IP,恶意攻击就无法触及到服务器。
- 状态缓存
- 修改资源的内容,比如可以压缩,修改Header参数等。
负载均衡:就是将进入网关的流量合理分配给多个服务器
经历过“域名”-“CNAME”-“最优CDN地址”(这个是DNS的负载均衡),在网络边缘的CDN才进行负载均衡(这是网关层面的负载均衡)。
无论在网关内部建立了多少层负载均衡,从形式上也只能分为两种:四层负载均衡和七层负载均衡,层是对OSI网络模型来说的。
四层负载均衡(链路层的负载均衡)
修改MAC地址在链路层分流
特点是维持同一个TCP连接。
请求进入负载均衡器中,通过修改请求帧的MAC地址,在局域网内将请求送到服务器,由于帧的用户信息没变,服务器直接对用户响应。
想要实现的话需要服务器写入响应的ip地址和负载均衡器的相同,因为这样用户才能判断是自己发出的那个请求的响应。
IP隧道协议在网络层分流
网关给用户的请求再次封装,目标ip为服务器地址,服务器接收到后进行两次拆包,直接给用户响应。
要求服务器写入响应的ip地址和网关的相同。
通过修改请求的ip让服务器和网关通信,然后网关和用户通信
会带来较大的性能损失
七层负载均衡(应用层)
四层的负载均衡使用的都是一个数据帧,也就是通过修改帧的内容来实现的(即维持一个TCP连接)。
应用层的负载均衡需要网关和用户建立TCP,网关和服务器建立TCP,性能一定比不了四层。
七层代理的强大功能:
- CDN能做的,它都能做,静态资源缓存,安全防护等等。
- 更智能化的路由
- 微服务的治理很多都在七层实现
负载均衡的算法策略
- 轮询
- 权重轮询
- 随机均衡
- 权重随机
- 哈希MAC或者IP
- 测试服务器的响应速度进行均衡
- 最少连接均衡(通过记录服务器连接数)
相关文章:
透明多级分流系统(用户端缓存和负载均衡)
部件考虑 有些设备位于客户端或者网络边缘,能够迅速响应用户请求,避免给cpu和数据库带来压力,比如,本地缓存,内容分发网络,反向代理等。 有些设备处理能力能够线性扩展,易于伸缩,应…...
Python sort从大到小排序面试题
在Python中,你可以使用内置的sorted()函数或者列表的sort()方法来对列表中的元素进行从大到小的排序。 使用sorted()函数: numbers [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] sorted_numbers sorted(numbers, reverseTrue) # 设置reverseTrue实现从大到小排…...
【Stable Diffusion】入门:AI绘画提示词+参数设置攻略
目录 1 提示词1.1 分类和书写方式1.1.1 内容型提示词1.1.2 标准化提示词1.1.3 通用模板 1.2 权重1.2.1 套括号1.2.2 数字权重1.2.3 进阶语法 1.3 负面提示词 2 参数详解2.1 Sampling steps2.2 Sampling method2.3 Width, Height2.4 CFG Scale2.5 Seed2.6 Batch count, Batch si…...
Qt使用Q_DECLARE_INTERFACE Q_INTERFACES宏实现接口类使用qobject_cast进行类型转换
在写抽象类或者接口的时候,肯定是不能继承QObject的 但是又想使用qobject_cast进行类型转换,使用以下办法就能实现 #ifndef FACTORYINTERFACE_H__ #define FACTORYINTERFACE_H__ #include <QObject> class FactoryInterface{ public:FactoryInterf…...

docker离线搭建仓库
要在Docker中搭建本地仓库,可以按照以下步骤进行操作: 首先安装 Docker。根据不同的操作系统选择合适的版本并完成安装过程。打开命令行工具(如Terminal或PowerShell),运行以下命令来创建一个新的容器并将其设置为本地…...
ABC344 A-E题解
文章目录 A题目AC Code: B题目AC Code: C题目AC Code: D题目AC Code: E题目AC Code: 不易不难,写到5题很简单,但是要有足够的思维能力。 A 题目 我们用一个 flag 变量记录我们是不是在两个竖…...
Jeecg-boot 初次启动项目失败
1.将IDEA的字符编码全部改成utf-8 2. 更改database的密码 3.换个jdk重新启动...

封装的echarts子组件使用watch监听option失效的问题
项目场景: 我在项目里面封装了一个echarts组件,组件接收一个来自外部的option,然后我用了一个watch函数去监听这个option的变化,option变化之后,销毁,然后再新建一个charts表 碎碎念 问题如标题所示,这篇…...

爬虫入门到精通_框架篇14(PySpider架构概述及用法详解)
官方文档 Sample Code: from pyspider.libs.base_handler import *class Handler(BaseHandler):crawl_config {}# minutes24 * 60:每隔一天重新爬取every(minutes24 * 60)def on_start(self):self.crawl(http://scrapy.org/, callbackself.index_page)…...
WPF DataGrid常用属性
AlternationCount属性:表示有几行不同的颜色来回替换,如果设置2则表示有两个颜色交替循环 AutoGenerateColumns属性:是否生成列 CanUserAddRows属性:用户是否可以添加行 CanUserDeleteRows属性:用户是否可以删除行 …...

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Stepper)
步骤导航器组件,适用于引导用户按照步骤完成任务的导航场景。 说明: 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 仅能包含子组件StepperItem。 接口 Stepper(value?: { index?…...
Python基础语法:基本数据类型(列表)
现实世界中总是存在一组一组的事物。"组"的概念作为基本数据类型的一种,它也是来源于我们去解决现实生活中的一些问题而产生的。它需要有“组”这样的一个数据类型来丰富我们的基本数据类型。 那么在Python中如何来表示“组”的概念呢? 在Py…...

神经网络线性量化方法简介
可点此跳转看全篇 目录 神经网络量化量化的必要性量化方法简介线性对称量化线性非对称量化方法神经网络量化 量化的必要性 NetworkModel size (MB)GFLOPSAlexNet2330.7VGG-1652815.5VGG-1954819.6ResNet-50983.9ResNet-1011707.6ResNet-15223011.3GoogleNet271.6InceptionV38…...

阿里云k8s内OSS报错UnKnownHost。
这个问题就是链接不上oss属于网络问题: 1.排查服务器 在服务器(ecs)上直接ping oss地址看是否能够通。 不通就要修改dns和hosts(这个不说,自己网上查) 2.排查容器 进去ping一下你的容器是否能访问到oss…...

nginx的使用,homebrew安装及使用nginx。
Nginx 是一个高性能的 HTTP 和反向代理服务器,它提供了诸如 IMAP、POP3 和 SMTP 等邮件代理服务。以下是 Nginx 的主要作用:12345 作为 Web 服务器。Nginx 能够以较少的系统资源提供高效率的服务,尤其在高并发连接下表现出色。1…...
计算机等级考试:信息安全技术 知识点六
1、P2DR模型是美国ISS公司提出的动态网络安全体系的代表模型,可用数学公式表达为Pt>DtRt,其中Pt表示:系统防护时间。 2、美国联邦政府颁布数字签名标准(Digital Signature Standard,DSS)的年份是1994 3、密码分析者(攻击者)已…...

vue provide 与 inject使用
在vue项目中,如果遇到跨组件多层次传值的话,一般会用到vuex,或者其他第三方共享状态管理模式,如pinia等,但是对于父组件与多层次孙子组件时,建议使用provide 与 inject,与之其他方式相比&#x…...

Vue3.0 所采用的 Composition Api 与 Vue2.x 使用的 Options Api 有什么不同?
开始之前 Composition API 可以说是Vue3的最大特点,那么为什么要推出Composition Api,解决了什么问题? 通常使用Vue2开发的项目,普遍会存在以下问题: 代码的可读性随着组件变大而变差每一种代码复用的方式ÿ…...

php集成修改数据库的字段
1.界面效果 2.代码 <?phpecho <form action"" method"post"><label for"table">表名:</label><input type"text" id"table" name"table"><br><div id"fieldsContaine…...

爬虫技术之正则提取静态页面数据
第一天 简单示例 在爬虫过程中,我们获取到了页面之后,通常需要做的就是解析数据,将数据持久化到数据库为我所用。如何又快又准确得提取有效数据?这是一门技术,看了我的博客之前可能略有难度,但各位大师看…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...
redis和redission的区别
Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...

spring Security对RBAC及其ABAC的支持使用
RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...

算法—栈系列
一:删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {stack<char> st;for(int i 0; i < s.size(); i){char target s[i];if(!st.empty() && target st.top())st.pop();elsest.push(s[i]);}string ret…...

Java中HashMap底层原理深度解析:从数据结构到红黑树优化
一、HashMap概述与核心特性 HashMap作为Java集合框架中最常用的数据结构之一,是基于哈希表的Map接口非同步实现。它允许使用null键和null值(但只能有一个null键),并且不保证映射顺序的恒久不变。与Hashtable相比,Hash…...

EEG-fNIRS联合成像在跨频率耦合研究中的创新应用
摘要 神经影像技术对医学科学产生了深远的影响,推动了许多神经系统疾病研究的进展并改善了其诊断方法。在此背景下,基于神经血管耦合现象的多模态神经影像方法,通过融合各自优势来提供有关大脑皮层神经活动的互补信息。在这里,本研…...
【题解-洛谷】P10480 可达性统计
题目:P10480 可达性统计 题目描述 给定一张 N N N 个点 M M M 条边的有向无环图,分别统计从每个点出发能够到达的点的数量。 输入格式 第一行两个整数 N , M N,M N,M,接下来 M M M 行每行两个整数 x , y x,y x,y,表示从 …...
标注工具核心架构分析——主窗口的图像显示
🏗️ 标注工具核心架构分析 📋 系统概述 主要有两个核心类,采用经典的 Scene-View 架构模式: 🎯 核心类结构 1. AnnotationScene (QGraphicsScene子类) 主要负责标注场景的管理和交互 🔧 关键函数&…...