从单服务器模式到负载均衡设计

news2024/11/27 0:24:11

从单服务器模式到负载均衡设计

作者:Grey

原文地址:

博客园:从单服务器模式到负载均衡设计

CSDN:从单服务器模式到负载均衡设计

单服务器模型是最简单的一种架构,参考如下图
img

用户访问一个 URL,URL 会先到 DNS 服务器进行域名解析,然后返回给客户端一个 IP 地址,客户端会通过这个 IP 地址访问到真正的服务,服务接收到客户端请求以后,返回对应的 HTML 页面,就完成了整个过程。

当然,以上是静态页面,相对复杂的应用会配置数据库,架构如下

img

在选择数据库的时候,会涉及数据库选型问题,有两类比较主流的数据库可以选择,即关系型数据库非关系型数据库

关系型数据库也被称为关系型数据库管理系统(RDBMS),关系型数据库以表和行来表示和存储数据。其优势是你可以使用 SQL 语句在不同的数据库表中执行连接操作。

非关系型数据库也被称为 NoSQL 数据库。 一般被归纳为四类:键值存储、图形存储、列存储和文档存储。非关系型数据库一般不支持连接操作。

对于大多数开发者来说,关系型数据库是最好的选择,因为它们已经存在了40多年且一直运行良好;然而,如果关系型数据库不适合你的特定用例,

比如

  • 应用需要超低的延迟。

  • 数据是非结构化的,或者你没有任何关系型数据。

  • 只需要对数据进行序列化和反序列化(JSON、XML、YAML等)。

  • 需要存储大量的数据

则非关系型数据库可能是正确的选择。

关系型和非关系型数据库的选型可以参考这个网站:DB-Engines Ranking

随着用户数量增多,单服务架构的设计可能会导致一些问题,比如:

用户是直接连接到网络服务器的。如果网络服务器离线,用户将无法访问网站,在另一种情况下,如果许多用户同时访问网络服务器,并达到网络服务器的负载极限,用户一般会遇到较慢的响应或无法连接到服务器。

针对这些问题,有两种主要的思路,分别是:水平扩展垂直扩展

垂直扩展,简言之就是在你的服务器上增加更多的配置,比如 CPU、内存 等资源。

水平扩展,简言之就是增加更多的服务实例来扩展的服务能力。

当流量较低时,垂直扩展是一个很好的选择,简单直接。但是垂直扩展也有严重的局限性,因为

  • 不可能在一台服务器上增加无限的 CPU 和内存。

  • 垂直扩展不具备故障转移和冗余功能。如果一台服务器瘫痪了,整个网站/应用程序就会完全瘫痪。

由于垂直扩展的局限性,水平扩展对于大规模的应用来说是比较理想的。

水平扩展的一个技术就是负载均衡。可以比较好的解决这个问题。架构如下

img

如图所示,用户直接连接到负载均衡器的公共 IP。在这种设置下,网络服务器已经无法被客户直接访问。为了提高安全性,服务器之间的通信使用了私有 IP。私有 IP 是一个只能在同一网络中的服务器之间到达的 IP 地址;但是,它在互联网上是无法到达的。负载均衡器通过私有 IP 与网络服务器进行通信。
在图中,在添加了一个负载均衡服务器和第二个 Web 服务器后,我们成功地解决了没有故障转移的问题,并提高了Web层的可用性。

  • 如果服务器1离线,所有的流量将被路由到服务器2。这可以防止网站脱机。我们还将在服务器池中添加一个新的健康的Web服务器,以平衡负载。

  • 如果网站流量迅速增长,而两台服务器不足以处理这些流量,负载均衡器可以优雅地处理这个问题。你只需要向网络服务器池添加更多的服务器,负载平衡器就会自动开始向它们发送请求。

参考资料

System Design Interview

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

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

相关文章

java计算机毕业设计基于安卓Android的校园外卖点餐APP

项目介绍 餐饮行业是一个传统的行业。根据当前发展现状,网络信息时代的全面普及,餐饮行业也在发生着变化,单就点餐这一方面,利用手机点单正在逐步进入人们的生活。传统的点餐方式,不仅会耗费大量的人力、时间,有时候还会出错。Android系统伴随智能手机为我们提供了新的方向。手…

基于转换器 (MMC) 技术和电压源转换器 (VSC) 的高压直流 (HVDC) 模型(MatlabSimulink实现)

目录 1 概述 2 主要模块说明 2.1 简化电网 2.2 转换器 1 2.3 直流电路 2.4 控制器 2.5 示波器和测量 3 讲解 3.1 参数设置 3.2 SPS 比较 3.3 结果比较 3.4 参考文献 4 Matlab代码实现 1 概述 1000 MW HVDC-MMC 互连的 SPS 模型。本文基于模块化多电平转换器 (MMC)…

计算机网络-数据链路层:以太网协议、ARP协议、MAC、MTU

目录 一、以太网协议 1. 认识以太网 2. 协议格式 二、 MAC地址 1. 认识MAC地址 2. 对比MAC地址与IP地址 三、ARP协议 1. 认识ARP协议 2. ARP协议的作用 3. ARP协议的工作流程 4. ARP欺骗攻击 四、MTU 1. 认识MTU 2. MTU对IP协议的影响(了解&#xff…

在线教育系统源码讲解与代码分析

目前,许多行业已经开始向直播领域靠拢,例如直播带货、教育直播、娱乐直播等领域,想要在此分一杯羹,以在线教育系统来说,在2020年以后便进入了“白热化”,更多的直播、教育展现在大众视野中。在粉丝经济的时…

Linux的进程空间管理

用户态和内核态的划分 进程的虚拟地址空间,其实就是站在项目组的角度来看内存,所以我们就从task_struct出发来看。这里面有一个struct mm_struct结构来管理内存。 struct mm_struct *mm; 在struct mm_struct里面,有这样一个成员变量&#…

如何利用ArcGIS实现电子地图可视化表达?分析空间数据?提升SCI论文的层次?探究环境与生态因子对水体、土壤、大气污染物等影响?

查看原文>>>如何利用ArcGIS探究环境与生态因子对水体、土壤、大气污染物等影响 如何利用ArcGIS实现电子地图可视化表达?如何利用ArcGIS分析空间数据?如何利用ArcGIS提升SCI论文的层次?制图是地理数据展现的直观形式,也是…

ARM存储模型(数据存储、指令存储)

目录 1、ARM数据存储 (1) ARM数据类型 (2) ARM数据存储的方式 2、ARM的指令存储 (1) 指令集的分类 (2) 为什么ARM指令集的PC值与低2位无关? 1、ARM数据存储 (1) ARM数据类型 ARM采用32位架构,即ARM一次可以处理32bit的数据,基本的数据…

Linux--进程间通信(2)--共享内存--1126

1.共享内存的原理 进程A先申请一段内存空间,其页表映射到物理空间,进程B通过A的页表映射,将B的页表也同样映射到同一块物理空间。 释放共享内存 各自修改各自的页表指向并释放共享内存 2.共享内存的建立过程 头文件 comm.hpp #pragma o…

Windows系统dos命令之cmd

目录1. 使用cd命令快速切换到指定的盘符中1.1 参数说明1.2 cd 切换盘符2. 使用cd命令切换到指定的目录中2.1 切换指定目录3. 使用cd命令退回到上一层目录3.1 使用命令 ”cd ..“4. 使用cd命令直接退回到当前根目录下4.1 使用命令cd \1. 使用cd命令快速切换到指定的盘符中 cd 是…

JUC并发编程第十一篇,Java对象的内存布局

JUC并发编程第十一篇,Java对象的内存布局一、对象在堆内存中的存储布局1、对象头对象标记Mark Word类元信息(类型指针)2、实例数据3、对齐填充二、对象标记(MarkWord)布局与验证代码验证(JOL)一…

重点| 系统集成项目管理工程师考前50个知识点(4)

本文章总结了系统集成项目管理工程师考试背记50个知识点!!! 帮助大家更好的复习,希望能对大家有所帮助 比较长,放了部分,需要可私信!! 26、编制范围管理计划的输出: 范…

Flink Window Function

窗口函数定义了要对窗口中收集的数据做的计算操作,根据处理的方式可以分为两类:增量聚合函数和全窗口函数。 文章目录1.增量聚合函数1.1 ReduceFunction1.2 AggregateFunction2.全窗口函数2.1 WindowFunction2.2 ProcessWindowFunction3.增量聚合和全窗口…

【MySQL】用户管理

文章目录用户管理用户信息创建用户删除用户修改用户密码用户权限用户赋权回收权限用户管理 如果我们只能使用root用户,这样存在安全隐患,因为root可以访问所有的数据库和表,这时,就需要使用MySQL的用户管理,从而限制某个特定的用户只能访问特定的数据库和表,并且对其权限作出一…

【51-订单模块-资源整合-整合SpringSession-订单中心核心逻辑-认证拦截-订单提交-订单生成逻辑-接口幂等性处理-接口幂等性解决方案】

一.知识回顾 【0.三高商城系统的专题专栏都帮你整理好了,请点击这里!】 【1-系统架构演进过程】 【2-微服务系统架构需求】 【3-高性能、高并发、高可用的三高商城系统项目介绍】 【4-Linux云服务器上安装Docker】 【5-Docker安装部署MySQL和Redis服务】…

若依上面添加layui组件

1.因为若依本身有layui&#xff0c;所以不需要在引layui的css与js 2.下面是需要添加的 <div className"layui-btn-container" style"margin-top: 30px;"><button data-method"setTop" οnclick"sjhdekjshd()">多窗口模式…

基于vite搭建的vue3项目中如何引用环境变量

目录 回顾一下vue-cli2/cli3中环境变量使用方法 环境变量定义&#xff1a; 环境变量使用&#xff1a; vite中环境变量使用方法 环境变量定义&#xff1a; 环境变量使用&#xff1a; 回顾一下vue-cli2/cli3中环境变量使用方法 在vue-cli2/cli3中使用环境变量时 环境变量定…

Python Flask 路由配置

有关更多的Python 开发内容,可访问:《 Python Flask开发指南》 Flask中通过使用route装饰器实现路由访问功能,其路由匹配URL规则基于Werkzeug的路由模块。该模块基于Apache及更早的HTTP服务器主张,希望保证优雅且唯一的URL。其使用格式如下: from flask import Flask app …

突然 Java 倒下了......

TIOBE 公布了 2022 年 12 月的编程语言排行榜。 Java 首次跌出前 3 名。除此之外&#xff0c;Kotlin 和 Julia 也越来越接近 Top 20。 TIOBE 将于下个月揭晓其 2022 年度编程语言&#xff0c;目前共有 3 个候选者&#xff1a;Python、C 和 C。TIOBE CEO Paul Jansen指出&#…

如何实现工具无关化?——关于自动化测试脚本的设计

问题的提出 最近几年来&#xff0c;我的自动化测试工具之旅大致是这样的&#xff0c;最早用的是QTP&#xff0c;然后是RFT&#xff08;IBM的功能测试自动化产品&#xff09;&#xff0c;之后也经历了Selenium&#xff0c;Watir等。再后来还是一些商业工具&#xff0c;主要是偏…

KubeClipper 1.3.1 正式发布

2022 年 12 月 12 日&#xff0c;KubeClipper 1.3.1 版本正式发布&#xff01; 开源大事记 2022 年 08 月&#xff0c; KubeClipper 项目正式开源到 https://github.com/KubeClipper 项目。 2022 年 08 月&#xff0c;在由 OpenInfra 基金会举办的 2022 OpenInfra Days China…