透明多级分流系统(用户端缓存和负载均衡)
部件考虑
有些设备位于客户端或者网络边缘,能够迅速响应用户请求,避免给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…...
爬虫技术之正则提取静态页面数据
第一天 简单示例 在爬虫过程中,我们获取到了页面之后,通常需要做的就是解析数据,将数据持久化到数据库为我所用。如何又快又准确得提取有效数据?这是一门技术,看了我的博客之前可能略有难度,但各位大师看…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
Sklearn 机器学习 缺失值处理 获取填充失值的统计值
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...
使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...
