集群(CS-Notes)

【CS-Notes】工欲善其事必先利其器(Code、Git、Docker、Linux) 文章目录Code工作台(工欲善其事必先利其器)1、通用工具1.1、编辑器1.2、Git 基本版本控制1.3、Docker容器2、Linux工作台`shell` 和 `bash`2.1、Linux命令2.2、开发工具1、Terminator终端2、Tmux(终端复用器)3、Vim配置4、ssh服务器配置以及图形界面5、代码对比3、编译与调试Bazelgdb调试valgrind 内存泄漏与越界检查 Code工作台(工欲善其事必先利其器) 原文链接:https://github.com/qipengh/CodeT 阅读详情

目录

1  负载均衡

1.1  负载均衡算法

1. 轮询(Round Robin)

2. 加权轮询(Weighted Round Robbin)

3. 最少连接(least Connections)

4. 加权最少连接(Weighted Least Connection)

5. 随机算法(Random)

6. 源地址哈希法 (IP Hash)

1.2  转发实现

1. HTTP 重定向

2. DNS 域名解析

3. 反向代理服务器

4. 网络层

5. 链路层

2  集群下的 Session 管理

2.1  Sticky Session

2.2  Session Replication

2.3  Session Server


1  负载均衡

集群中的应用服务器(节点)通常被设计成无状态,用户 可以请求 任何一个节点。

负载均衡器会根据集群中每个节点的负载情况,将用户请求转发到合适的节点上。

 

负载均衡器可以用来实现高可用以及伸缩性:

  • 高可用:当某个节点故障时,负载均衡器会将用户请求转发到另外的节点上,从而保证所有服务持续可用;
  • 伸缩性:根据系统整体负载情况,可以很容易地添加或移除节点。

 

负载均衡器运行过程包含两个部分:

  1. 根据负载均衡算法得到转发的节点;
  2. 进行转发。

 

1.1  负载均衡算法

1. 轮询(Round Robin)

轮询算法 把每个请求 轮流发送到每个服务器上。

下图中,一共有 6 个客户端产生了 6 个请求,这 6 个请求按 (1, 2, 3, 4, 5, 6) 的顺序发送。(1, 3, 5) 的请求会被发送到服务器 1,(2, 4, 6) 的请求会被发送到服务器 2。

该算法比较适合每个服务器的性能差不多的场景,如果有性能存在差异的情况下,那么性能较差的服务器可能无法承担过大的负载(下图的 Server 2)。

 

 

2. 加权轮询(Weighted Round Robbin)

加权轮询是在轮询的基础上,根据服务器的性能差异,为服务器赋予一定的权值,性能高的服务器分配更高的权值。

例如下图中,服务器 1 被赋予的权值为 5,服务器 2 被赋予的权值为 1,那么 (1, 2, 3, 4, 5) 请求会被发送到服务器 1,(6) 请求会被发送到服务器 2。

 

 

3. 最少连接(least Connections)

由于每个请求的连接时间不一样,使用轮询或者加权轮询算法的话,可能会让一台服务器当前连接数过大,而另一台服务器的连接数过小,造成负载不均衡。

最少连接算法就是:将请求 发送给 当前最少连接数的服务器上。

例如下图中,(1, 3, 5) 请求会被发送到服务器 1,但是 (1, 3) 很快就断开连接,此时只有 (5) 请求连接服务器 1;(2, 4, 6) 请求被发送到服务器 2,只有 (2) 的连接断开,此时 (6, 4) 请求连接服务器 2。该系统继续运行时,服务器 2 会承担过大的负载。

 

最少连接算法就是 将请求发送给当前最少连接数的服务器上。

例如下图中,服务器 1  当前连接数最小,那么新到来的请求 6 就会被发送到服务器 1 上。

 

 

4. 加权最少连接(Weighted Least Connection)

在最少连接的基础上,根据服务器的性能  为每台服务器分配权重,再根据权重  计算出  每台服务器能处理的连接数。

 

 

5. 随机算法(Random)

把请求 随机发送到服务器上。

和轮询算法类似,该算法比较适合服务器性能差不多的场景。

 

 

6. 源地址哈希法 (IP Hash)

源地址哈希 通过对客户端 IP  计算哈希值之后,再对服务器数量取模 得到目标服务器的序号。

可以保证同一 IP 的客户端的请求会转发到同一台服务器上,用来实现会话粘滞(Sticky Session)


 

 

1.2  转发实现

1. HTTP 重定向

HTTP 重定向:负载均衡服务器  使用某种负载均衡算法  计算得到服务器的 IP 地址之后,将该地址写入 HTTP 重定向报文中,状态码为 302。客户端收到重定向报文之后,需要重新向服务器发起请求。

缺点:

  • 需要两次请求,因此访问延迟比较高;
  • HTTP 负载均衡器 处理能力有限,会限制集群的规模。

该负载均衡转发的缺点比较明显,实际场景中很少使用它。

 

 

 

2. DNS 域名解析

在 DNS 解析域名的同时,使用负载均衡算法 计算 服务器 IP 地址。

优点:

  • DNS 能够根据地理位置进行域名解析,返回离用户最近的服务器 IP 地址。

缺点:

  • 由于 DNS 具有多级结构,每一级的域名记录 都可能被缓存,当下线一台服务器需要修改 DNS 记录时,需要过很长一段时间才能生效。

大型网站基本使用了 DNS 做为第一级负载均衡手段,然后在内部使用其它方式 做第二级负载均衡。也就是说,域名解析的结果为 内部的负载均衡服务器 IP 地址。

 

 

 

3. 反向代理服务器

反向代理服务器 位于 源服务器 前面,用户的请求 需要先经过 反向代理服务器 才能到达 源服务器。反向代理可以用来进行缓存、日志记录等,同时也可以用来做为负载均衡服务器。

在这种负载均衡转发方式下,客户端不直接请求源服务器,因此源服务器 不需要 外部 IP 地址;

而反向代理需要配置内部和外部两套 IP 地址。

反向代理服务器 相当于一个转发器

负载均衡:一个外部IP 对应 一个网站。一个网站里面有多台服务器。用户请求 先发到代理服务器(代理服务器有外部IP地址),然后由代理服务器 将用户请求转发到集群(集群上的服务器,不需要外部IP地址)。

反向代理:一个外部IP地址 对应 多个网站。对不同网站的请求,都发到同一个代理服务器。(可以在代理服务器的内部,为各个网站分配 内部IP地址)。然后由代理服务器根据代理服务器内部的各个网站的IP地址,将用户请求转发到 各自对应的网站。

优点:

  • 与其它功能集成在一起,部署简单。

缺点:

  • 所有请求和响应 都需要经过 反向代理服务器,它可能会成为性能瓶颈。

 

 

4. 网络层

在操作系统内核进程 获取网络数据包,根据负载均衡算法 计算 源服务器的 IP 地址,并修改请求数据包的目的 IP 地址,最后进行转发。

源服务器返回的响应 也需要经过负载均衡服务器,通常是让负载均衡服务器同时作为集群的网关服务器来实现。

优点:

  • 在内核进程中进行处理,性能比较高。

缺点:

  • 和反向代理一样,所有的请求和响应 都经过 负载均衡服务器,会成为性能瓶颈。

 

 

5. 链路层

在链路层根据负载均衡算法  计算  源服务器的 MAC 地址,并修改请求数据包的目的 MAC 地址,并进行转发。

通过配置源服务器的虚拟 IP 地址和负载均衡服务器的 IP 地址一致,从而不需要修改 IP 地址就可以进行转发。也正因为源服务器的虚拟 IP 地址和负载均衡服务器的的IP 地址一样,所以源服务器的响应不需要转发回负载均衡服务器,可以直接转发给客户端,避免了 负载均衡服务器 成为性能瓶颈。

这是一种三角传输模式,被称为直接路由。对于提供下载和视频服务的网站来说,直接路由避免了大量的网络传输数据 经过 负载均衡服务器。

这是目前大型网站使用最广负载均衡转发方式,在 Linux 平台可以使用的负载均衡服务器为 LVS(Linux Virtual Server)。

参考:


 

2  集群下的 Session 管理

一个用户的 Session 信息如果存储在一个服务器上,那么当负载均衡器把用户的下一个请求转发到另一个服务器,由于服务器没有用户的 Session 信息,那么该用户就需要重新进行登录等操作。

2.1  Sticky Session

需要配置负载均衡器,使得一个用户的所有请求 都路由到 同一个服务器,这样就可以把用户的 Session 存放在该服务器中。

缺点:

  • 当服务器宕机时,将丢失该服务器上的所有 Session。

 

 

2.2  Session Replication

在服务器之间进行 Session 同步操作,每个服务器都有 所有用户的 Session 信息,因此用户可以向任何一个服务器 进行请求。

缺点:

  • 占用过多内存;
  • 同步过程 占用 网络带宽以及服务器处理器时间。

 

2.3  Session Server

使用一个单独的服务器  存储  Session 数据,可以使用传统的 MySQL,也使用 Redis 或者 Memcached 这种内存型数据库。

优点:

  • 为了使得大型网站具有伸缩性,集群中的应用服务器通常需要保持无状态,那么应用服务器不能存储用户的会话信息。Session Server 将用户的会话信息 单独进行存储,从而保证了应用服务器的无状态。(如果应用服务器有状态,那就不能进行请求转发了)

缺点:

  • 需要去实现存取 Session 的代码。

参考:

 

手把手教你逆向分析某里系bx-ua参数(以225版本为例) 本文详细解析了某里系应用bx-ua参数的逆向工程实战方法,重点拆解其三层加密体系(二进制加密、字符替换和Base64编码)。通过工具链配置和实战案例,帮助开发者掌握逆向分析技巧,适用于合法合规的安全研究和加密技术评估场景。 阅读详情

相关推荐

DCDC--控制方式(Control Mode)

DCDC反馈控制方式

网始如芯个人博客 1万+

Github项目分享——CS-Notes,字节跳动资深面试官亲述

计算机操作系统Linux☁️ 网络计算机网络HTTPSocket💾 数据库数据库系统原理SQL 语法SQL 练习MySQLRedis☕ JavaJava 基础Java 容器Java 并发Java 虚拟机Java I/O💡 系统设计系统设计基础分布式集群攻击技术缓存消息队列🎨 面向对象。

2401_83946044的博客 637

Revit实战:从零到一,手把手教你用族(Family)搭建一个完整的水闸BIM模型

本文详细介绍了如何使用Revit的族(Family)功能从零开始构建一个完整的水闸BIM模型。通过参数化族设计,实现闸门开度调整自动关联流量计算等智能化功能,提升水利工程BIM模型的工程价值和应用效率。文章涵盖族库规划、核心构件创建、高级技巧及BIM数据深度应用,为水利工程数字化提供实用指南。

weixin_28738165的博客 264

Java 并发(CS-Notes)

目录 1 线程状态转换​ 新建(New) 可运行(Runnable) 阻塞(Blocked) 无限期等待(Waiting) 限期等待(Timed Waiting) 死亡(Terminated) 2 使用线程 2.1 实现 Runnable 接口 2.2 实现 Callable 接口 2.3 继承 Thread 类 2.4 实现接口 VS 继承 Thread 3...

春卷同学的博客 1885

实战!在 AMD RX 9070 XT (16G) 上使用原生 Windows ROCm 7.1 部署 ComfyUI + Z-Image-Turbo

本文详细介绍了如何在Windows系统下为AMD Radeon RX 9070 XT显卡配置Z-Image-Turbo AI绘图环境。主要内容包括:安装VS Build Tools和最新显卡驱动,配置Conda Python 3.12环境,安装ROCm 7.1.1 SDK及PyTorch适配版本,部署ComfyUI可视化界面。重点解决了AMD显卡在AI绘图中的适配问题,通过--use-split-cross-attention参数优化显存使用,最终成功搭建了可在消费级16G显存设备上运行的AI绘图环境

qq_33614778的博客 4693

RT-DETR改进策略【注意力机制篇】| 2024 PPA 并行补丁感知注意模块,提高小目标关注度

本文记录的是利用改进检测精度,详细说明了优化原因,注意事项等。原论文在红外小目标检测任务中,小目标在多次下采样操作中容易丢失关键信息。通过替代编码器和解码器基本组件中的传统卷积操作,更好地保留小目标的重要信息。HCF-Net: Hierarchical Context Fusion Network for Infrared Small Object Detection采用多分支特征提取策略,通过不同分支提取不同尺度和层次的特征。利用局部、全局和串行卷积分支,对输入特征张量进行处理。通过控制 patch si

Limiiiing的博客 1648

校招高频必背考点

2. 操作系统 2.1 基础 ★★★ 进程与线程的本质区别、以及各自的使用场景。 进程是操作系统资源分配的基本单位,线程是操作系统调度的最小单位,一个进程可以中可以有多个线程,线程依赖于进程存在。 ★☆☆ 进程状态。 阻塞,就绪,运行, ★★★ 进程调度算法的特点以及使用场景。 先来先服务,短作业优先,时间片轮转等 ★☆☆ 线程实现的方式。 ★★☆ 协程的作用。 用户级线程,没有上下文...

wwxy1995的博客 931

C#操作MySQL从入门到精通(3)——新建数据库、新建表

我们要首先新建一个数据库,并且在数据库中新建一系列的表来管理数据库。

qq_34059233的博客 951

CS-Notes:自学者的计算机科学笔记宝库

在计算机科学的学习路上,拥有一份系统的自学笔记至关重要。CS-Notes 便是一个这样的项目,它汇集了自学者的学习笔记,内容涵盖机器学习系统(MLSys)、C++ 编程,以及算法和操作系统等核心计算机科学领域。这个项目旨在为初学者提供一个学习路径和心得的参考,帮助他们更高效地掌握计算机科学知识。 ## 项目技术分析 CS-Notes 的技术架构以简洁性和实用性为主。项目使用了一个自制的笔记转化...

gitblog_00702的博客 1171

深入浅出之ADown降采样模块(YOLO)

YOLOv9中的ADown模块是一种用于目标检测任务中的下采样操作的卷积块。在深度学习模型中,下采样(downsampling)是减少特征图空间维度的常用技术,它有助于模型在更高层次上捕捉图像的特征,同时减少计算量。ADown模块的设计旨在以一种高效且对性能影响较小的方式进行这一操作。

浩瀚之水的专栏 4177

VTK实战完整教程介绍

该专栏以VTK提供的Example为基础,讲解VTK中的相关接口和使用方法。订阅该专栏,带你了解所有VTK的功能,以便VTK更好的解决工作中遇到的问题。一起学习起来吧!

qq_40041064的博客 2506

CS-Notes 集群核心技术解析:负载均衡算法、转发实现与 Session 管理全指南

集群是大型网站架构的核心命题:它用多台服务器协同承担单一服务器无法承受的流量压力,而让集群真正可用的关键技术正是负载均衡与分布式会话管理。本指南以 CS-Notes 知识库中的 [集群](https://link.gitcode.com/i/1021551c232960cdb137c3c36d8d4a7c) 笔记为骨架,系统讲解六大负载均衡算法、五种请求转发实现方式以及集群环境下三种 Sessio

gitblog_00009的博客 179

lammps教程:FeNiCr合金多晶结构建模方法

大家好,我是小马老师。 本文介绍合金多晶模型的建模过程,使用的软件为Atomsk。 Atomsk是一个开源软件,可运行在windows、linux等多种操作系统上,本文使用windows版的Atomsk实现建模,其他操作系统的建模命令基本相同。 建模过程如下: 1. 生成单晶Fe晶胞 atomsk --create fcc 3.65 Fe Fe.xsf 2. 建立多晶节点文件polycrystal.txt 新建一个文本文件polycrystal.txt,文件内容为: box 200 100 200 ran

lammps_jiayou的博客 6658

CS-Notes 完全指南:从算法到操作系统的面试知识体系一次性拆解

CS-Notes 是一个用 Markdown 写成的技术面试知识库,把算法题解、操作系统、计算机网络、数据库、Java、系统设计这六大块高频考点装进一个仓库,每篇都是"结论先行 + 代码/图示"的结构。它适合三类人:正在准备面试的求职者、想补基础的在校学生、需要快速查概念的技术从业者。先说清边界:它不是教程合集,没有视频、没有课后作业,也不替代项目经验。 [![CS-Notes 计算机网络与 S

gitblog_00253的博客 496

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

CS-Notes README

   算法    操作系统    网络    面向对象   数据库      Java    系统设计    工具  &n...

AthlenaA的博客 564

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

CS-Notes 知识清单 备战版

CS-Notes 知识清单 备战版前言清单3.1 操作系统基础3.2 Linux3.3 基础3.4 HTTP3.5 Socket3.1 SQL3.2 系统原理3.3 MySQL3.4 Redis3.1 设计模式3.2 分布式3.3 系统设计应用3.4 其它 前言 CS-Notes 寒假期间一直在看cyc2018 分享的 计算机知识笔记CS-Notes 800多页 量太大了 买了cyc2018在牛客和别的平台的一些 专栏 看到 cyc 分享了一些知识清单 我自己再拿来搜集一些答案 用来备战 清单 先把 fl

韩旭051的博客 2638

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

系统设计面试通关终极指南:CS-Notes分布式架构+缓存策略深度剖析

CS-Notes是一个全面的计算机科学学习资料项目,特别适合自学者掌握分布式架构和缓存策略等核心知识点。本指南将通过CS-Notes中的权威资料,带你系统掌握分布式系统设计的关键技术和缓存优化实践,助你轻松应对各类技术面试挑战。 ## 一、分布式架构核心技术解析 🚀 ### 1.1 分布式锁:数据一致性的基石 在分布式系统中,多个节点同时操作共享资源时,分布式锁是保证数据一致性的关键。CS

gitblog_00955的博客 998

java面试复习重点,面试必备,内容超级全(起源来自CS-NOTES)

本文来自CS-NOTES https://cyc2018.github.io/CS-Notes/#/ 面试考察的知识点多而杂,要完全掌握需要花费大量的时间和精力。但是面试中经常被问到的知识点却没有多少,你完全可以用 20% 的时间去掌握 80% 常问的知识点。 本文虽然来自CS-NOTES中,但是觉得里面有些地方解释的不够清楚,不够通俗易懂,所以写了本篇文章。 另外再附赠一份java...

逆水行舟,不进则退 4714

CS-Notes 技术面试笔记体系解析:十大知识域架构与系统性复习路线

CS-Notes 是面向计算机技术面试的知识库,其根目录 [README.md](https://link.gitcode.com/i/51f0fbac68caa963c5e9985eff185f3c) 并非简单的宣传页,而是一张完整的知识库总索引:以算法、操作系统、网络、面向对象、数据库、Java、系统设计、工具、编码实践、后记十个板块组织全部笔记,覆盖从底层原理到工程实践的面试核心考点。读完本

gitblog_01052的博客 463

CS-Notes:一套覆盖计算机科学核心领域的学习笔记

《CS-Notes:一套高星计算机科学学习笔记》介绍了GitHub上Star超18万的CS-Notes开源项目。该项目由CyC2018维护,系统整理了算法、操作系统、网络、数据库、Java等计算机核心领域知识,采用结构化分类呈现,包含代码实现和思路分析。笔记内容多为原创,遵循中文排版规范,适合面试复习和知识梳理。项目通过社区协作持续更新,已成为开发者广泛认可的学习参考资料,尤其适合求职者和计算机专业学生系统化查漏补缺。(149字)

badgateway356的博客 326

Github项目分享——CS-Notes

CS-Notes 项目地址 https://github.com/CyC2018/CS-Notes 项目介绍 ✏️ 算法 剑指 Offer 题解 Leetcode 题解 算法 字节跳动内推 ???? 操作系统 计算机操作系统 Linux ☁️ 网络 计算机网络 HTTP Socket ???? 数据库 数据库系统原理 SQL 语法 SQL 练习 MySQL Redis ☕ Java Java 基础 Java 容器 Java 并发 Java 虚拟机 Java I/O ???? 系统设计 系统设计基础 分布

su_zui的博客 3509

系统设计基础(CS-Notes)

1 性能 1.1 性能指标 1. 响应时间 指某个请求从发出到接收到响应消耗的时间。 在对响应时间进行测试时,通常采用重复请求的方式,然后计算平均响应时间。 2. 吞吐量 指系统在单位时间内 可以处理的请求数量,通常使用每秒的请求数来衡量。(吞吐量为 100 req/s ,表示 每秒能处理100个请求) 3. 并发用户数 指系统能同时处理的 并发用户请求数量。 在没有并发...

春卷同学的博客 1082

从单机到高可用:CS-Notes Redis核心原理与缓存策略全解析

CS-Notes 是一份面向技术面试的开源知识笔记库,本笔记系统梳理了 Redis 核心原理与缓存策略:五大数据类型、字典渐进式 rehash、跳跃表、RDB/AOF 持久化、主从复制、Sentinel 高可用、分片方案,以及缓存穿透、雪崩、一致性等实战问题的解决方案。读完本文,你既能掌握 Redis 面试高频考点,也能获得一套从单机部署走向高可用的完整思路。 ## 快速上手:CS-Notes

gitblog_01044的博客 734

CS-Notes 系统设计基础:从性能、伸缩性到可用性与安全性的架构能力全景解析

本篇是 CS-Notes 中"系统设计"方向的基石性知识梳理。系统设计关注的并不是某一个算法或框架,而是把并发访问、海量数据、故障与攻击都纳入考量后,如何搭建一套能长期稳定运行的大型网站架构。本指南将沿着性能、伸缩性、扩展性、可用性、安全性五个核心维度展开,说明每个维度的定义、关键指标与典型实现手段(负载均衡、缓存、消息队列、冗余、监控、服务降级等),并给出与仓库内 [集群](https://li

gitblog_00387的博客 415

CS-Notes 缓存技术全解:缓存特征、缓存位置、缓存问题与一致性哈希实践指南

本篇技术指南源自 [CS-Notes](https://link.gitcode.com/i/0508c2ccc6c0a75f7be8cfbda3ec5881)(技术面试必备基础知识库)中的 [缓存笔记](https://link.gitcode.com/i/cbe1b2d06f1c63959ee9d76ea762fa22),以“缓存系统”为主线,系统梳理缓存的两大核心特征、从浏览器到 CPU 的

gitblog_01098的博客 420

CS-Notes MySQL 核心技术指南:索引原理、查询优化、存储引擎与分库分表全面解析

本篇基于 [notes/MySQL.md](https://link.gitcode.com/i/95f7bede767159b5e0ef7fdc3890a772) 系统整理 CS-Notes 仓库中的 MySQL 面试与实战知识体系,围绕索引的 B+Tree 底层原理、Explain 查询优化、InnoDB/MyISAM 存储引擎选型、数据类型选择、水平/垂直切分(Sharding)策略以及主从

gitblog_01161的博客 869
上一篇: 分布式(CS-Notes)
下一篇: 攻击技术(CS-Notes)
春卷同学
博客等级 码龄12年 1668粉丝 244原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值