高可用接入层技术演化及集群概述

集群概述

集群的介绍及优势

  • 集群:将多台服务器通过硬件或软件的方式组合起来,完成特定的任务,而这些服务器对外表现为一个整体。
  • 集群的优势
    • 高可靠性:利用集群管理软件,当主服务器故障时,备份服务器能够自动接管主服务器的工作,并及时切换过去,以实现不间断服务。
    • 高性能:即充分利用集群中的每一台计算机的资源,实现复杂运算的并行处理,通常用于科学计算领域。
    • 负载均衡:即把负载压力根据算法合理分配到集群中的每一台计算机上,以减轻单台服务器的压力,降低对单台服务器的硬件和软件要求。
    • 可伸缩性:当服务器负载压力增长的时候,集群能够灵活扩展来满足需求,不降低服务质量。

集群分类及特点

计算机集群架构按照功能和结构一般分成以下几类:

  • 负载均衡集群

    负载均衡集群(Load balancing clusters)简称 LBC,负载均衡集群为企业提供了更为实用,性价比更高的系统架构解决方案。

    负载均衡集群是一种将很多客户集中访问的请求负载压力尽可能平均的分摊到计算机集群中的各个节点处理,以降低单台服务器压力,更好的向客户端提供服务的一种方式。

    负载均衡集群的作用:提供一种廉价、有效、透明的方法,来扩展网络设备和服务器的负载带宽、增加吞吐量,加强网络数据处理能力、提高网络的灵活性和可用性。简单来说,也就是:

    • 把单台计算机无法承受的大规模的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间,提升用户体验。
    • 7*24 小时的服务保证,任意一个或多个设备节点设备宕机,不影响到业务。在负载均衡集群中,所有计算机节点都提供相同的服务,集群负载均衡获取所有对该服务的入站请求。
  • 高可用集群

    高可用性集群(High availability clusters)简称 HAC,当集群中的任意一个节点失效的情况下,节点上的所有任务自动转移到其他正常的节点上,并且此过程不影响整个集群的运行,不影响业务的提供。

  • 高性能集群

    高性能计算集群(High perfomance clusters)简称 HPC,高性能计算集群采用将计算任务分配到集群的不同计算节点儿提高计算能力,因而主要应用在科学计算领域。


接入层技术演进

常用名词释义

  • 可用性:任何一台机器挂了,服务受不受影响
  • 扩展性:能否通过增加机器,扩充系统的性能
  • 反向代理+负载均衡:请求是否均匀分摊到后端的操作单元执行
  • nginx:一个高性能的 web-server 和实施反向代理的软件
  • lvs:Linux Virtual Server,使用集群技术,实现在 linux 操作系统层面的一个高性能、高可用、负载均衡服务器
  • keepalived:一款用来检测服务状态存活性的软件,常用来做高可用
  • f5:一个高性能、高可用、负载均衡的硬件设备
  • DNS轮询:通过在 DNS-server 上对一个域名设置多个 ip 解析,来扩充 web-server 性能及实施负载均衡的技术

裸奔时代(0)单机架构

在这里插入图片描述

裸奔时代的架构图如上:

1)浏览器通过 DNS-server,域名解析到 ip

2)浏览器通过 ip 访问 web-server

缺点:

1)非高可用,web-server 挂了整个系统就挂了

2)扩展性差,当吞吐量达到 web-server 上限时,无法扩容

注:单机不涉及负载均衡的问题


简易扩容方案(1)DNS轮询

在这里插入图片描述

假设 tomcat 的吞吐量是 1000 次每秒,当系统总吞吐量达到 3000 时,如何扩容是首先要解决的问题,DNS 轮询是一个很容易想到的方案:

  • 多部署几份 web-server,1个 tomcat 抗 1000,部署 3 个 tomcat 就能抗 3000
  • 在 DNS-server 层面,域名每次解析到不同的 ip

优点:

  • 零成本:在 DNS-server 上多配几个 ip 即可,功能也不收费
  • 部署简单:多部署几个 web-server 即可,原系统架构不需要做任何改造
  • 负载均衡:变成了多机,但负载基本是均衡的

缺点:

  • 非高可用:DNS-server 只负责域名解析 ip,这个 ip 对应的服务是否可用,DNS-server 是不保证的,假设有一个 web-server 挂了,部分服务会受到影响
  • 扩容非实时:DNS 解析有一个生效周期
  • 暴露了太多的外网 ip

简易扩容方案(2)nginx

在这里插入图片描述

tomcat 的性能较差,但 nginx 作为反向代理的性能就强多了,假设线上跑到 1w,就比 tomcat 高了10倍,可以利用这个特性来做扩容:

  • 站点层与浏览器层之间加入了一个反向代理层,利用高性能的 nginx 来做反向代理
  • nginx 将 http 请求分发给后端多个 web-server

优点:

  • DNS-server 不需要动
  • 负载均衡:通过 nginx 来保证
  • 只暴露一个外网 ip,nginx -> tomcat 之间使用内网访问
  • 扩容实时:nginx 内部可控,随时增加 web-server 随时实时扩容
  • 能够保证站点层的可用性:任何一台 tomcat 挂了,nginx 可以将流量迁移到其他 tomcat

缺点:

  • 时延增加 + 架构更复杂了:中间多加了一个反向代理层
  • 反向代理层成了单点,非高可用:tomcat 挂了不影响服务,nginx 挂了则整个系统瘫痪

高可用方案(3)keepalived

在这里插入图片描述

在这里插入图片描述

  • 做两台 nginx 组成一个集群,分别部署上 keepalived,设置成相同的虚 IP,保证 nginx 的高可用
  • 当一台 nginx 挂了,keepalived 能够探测到,并将流量自动迁移到另一台 nginx 上,整个过程对调用方透明

优点:

  • 解决了高可用的问题

缺点:

  • 资源利用率只有 50%
  • nginx 仍然是接入单点,如果接入吞吐量超过的 nginx 的性能上限,例如 qps 达到了50000,高并发会存在问题

scale up 扩容方案(4)lvs / f5

nginx 毕竟是软件,性能比 tomcat 好,但总有个上限,超出了上限,还是扛不住。

lvs 则是实施在操作系统层面;f5 的性能又更好了,它实施在硬件层面;它们性能比 nginx 好很多,例如每秒可以抗 10w,这样可以利用他们来扩容,常见的架构图如下:

在这里插入图片描述

  • 如同 nginx 可以扩展多个 tomcat 一样,可以通过 lvs 来扩展多个 nginx
  • 通过 keepalived + VIP 的方案可以保证可用性
  • 99.9999% 的公司到这一步基本就能解决接入层高可用、扩展性、负载均衡的问题。

但是不管是使用 lvs 还是 f5,这些都是 scale up 的方案,根本上,lvs/f5 还是会有性能上限,假设每秒能处理 10w 的请求,一天也只能处理 80 亿的请求(10w 秒吞吐量 * 8w秒),那万一系统的日 PV 超过 80 亿怎么办呢?(当然没几个公司要考虑这个问题)


scale out 扩容方案(5)DNS 轮询

如上所述,水平扩展,才是解决性能问题的根本方案,能够通过加机器扩充性能的方案才具备最好的扩展性。

facebook,google,baidu 的 PV 是不是超过 80 亿呢,它们的域名对应不止一个 ip,终点又是起点,还是得通过 DNS 轮询来进行扩容:

在这里插入图片描述

  • 通过 DNS 轮询来线性扩展入口 lvs 层的性能
  • 通过 keepalived 来保证高可用
  • 通过 lvs 来扩展多个 nginx
  • 通过 nginx 来做负载均衡,业务七层路由

总结

  • 接入层架构要考虑的问题域为:高可用、扩展性、反向代理+扩展均衡
  • nginx、keepalived、lvs、f5 可以很好的解决高可用、扩展性、反向代理 + 扩展均衡的问题
  • 水平扩展 scale out 是解决扩展性问题的根本方案,DNS 轮询是不能完全被 nginx/lvs/f5 所替代的

参考

  • nginx、lvs、keepalived、f5、DNS轮询(lvs为何不能完全替代DNS轮询)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Cesium 加载 Geoserver WMS 图层以及条件查询和切换图层样式

Cesium 加载 Geoserver WMS 图层以及条件查询和切换图层样式 图层样式核心代码完整代码:在线示例 Cesium 加载 Geoserver WMS 图层,在实际项目中常常会遇到,需要对图层进行过滤,这里介绍一下过滤方法。 Cesium Geoserver 图层条件…

AirPodsPro3爆料汇总,2025年发布?

不止是iPhone,苹果的AirPods Pro系列耳机也是非常受用户青睐的一款产品,相信不少果粉都非常期待它的升级换代。 第一代AirPods Pro于2019年10月发布,第二代AirPods Pro于2022年9月发布,按照这个时间线来看的话,第三代A…

《Linux C编程实战》笔记:进程操作之创建进程

进程是一个动态的实体,是程序的一次执行过程。进程是操作系统资源分配的基本单位。 以下是一些概念,我就直接抄书了 进程是操作系统的知识,简单理解的话,你写的代码运行起来算一个进程? 创建进程 每个进程由进程ID号…

在vue项目中,数据已经在页面渲染,但在后续操作时获取不到数据

如下图 产生这个问题的原因 异步问题 如何解决 方法一:可以将其存放在一个setTimeout里面(利用一个极小的延迟来获取数据),如下图 效果 方法二:将操作放入axios里面,如下图

昂首资本发现原油价差这样用,难怪银行这么富

难怪银行这么富,原来是发现一个稳定产生利益的投资策略。虽然这个利润可能看起来比较少。但是昂首资本需要提醒各位投资者的是:首先,这个策略几乎没有风险。第二,这是一个可以复制的投资策略。 下面昂首资本就通过原油的价差进行实…

开发信怎么写回复率高?写外贸邮件的技巧?

如何打造高回复率的开发信?有效的开发信模板推荐? 如何写一封能够引起客户兴趣并提高回复率的开发信变得至关重要。开发信是建立联系、促进销售和扩大业务的关键工具之一。蜂邮EDM将探讨一些关键策略,帮助你提高开发信的回复率,确…

爬虫图片验证码处理

图片验证码处理 目前&#xff0c;很多网站为了防止爬虫爬取&#xff0c;登录时需要用户输入验证码。下面我们学习如何在爬虫程序中识别验证码。 其中包含验证码。 页面中的验证码图片对应一个<img>元素&#xff0c;即一张图片&#xff0c;浏览器加载完登录页面后&#…

Spring 6(二)【IOC原理】

前言 IOC 是Spring的两大核心概念之一&#xff0c;它是一种思想&#xff0c;需要极其熟练的掌握。 今日摘录&#xff1a; 低能无聊的人太多。说他们勤勉&#xff0c;不过是因困为不会合理分配时间&#xff1b;说他们积极&#xff0c;不过是逃避其他困难工作而已。即便说工作只…

DNN二分类模型

import os import datetime#打印时间 def printbar():nowtime datetime.datetime.now().strftime(%Y-%m-%d %H:%M:%S)print("\n"""*8 "%s"%nowtime)#mac系统上pytorch和matplotlib在jupyter中同时跑需要更改环境变量 os.environ["KMP_DUP…

【网络安全】-Linux操作系统—操作系统发展历史与Linux

文章目录 操作系统发展历史初期的操作系统分时操作系统个人计算机操作系统 Linux的诞生UNIX与GNU项目Linux内核的创建 Linux的特点开放源代码多样性社区支持 Linux的应用服务器和超级计算机嵌入式系统桌面系统 总结 操作系统发展历史 操作系统&#xff08;Operating System&am…

详细教程 - 从零开发 Vue 鸿蒙harmonyOS应用 第五节 (基于uni-app封装鸿蒙接口请求库)

随着鸿蒙系统的兴起,越来越多的app会采用鸿蒙开发。而鸿蒙开发必不可少的就是调用各种接口服务。为了简化接口的调用流程,我们通常会做一层封装。今天就来讲解一下,如何用uni-app封装鸿蒙的接口请求库。 一、新建项目 首先我们要新建一个鸿蒙项目啦&#xff01;当然选择第一个…

neuq-acm预备队训练week 9 P1119 灾后重建

解题思路 本题可以用最短路算法——Floyd AC代码 #include<bits/stdc.h> #define inf 1e9 using namespace std; const int N 2e2 50; int n, m, q, now 0, a, b, c, t[N], G[N][N];int main() {scanf("%d%d", &n, &m);for(int i 0;i<n;i)sc…

044.Python异常处理_手动抛出异常自定义异常

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

ubuntu 磁盘挂载

1.前提 给自己的计算机加了一个新硬盘&#xff0c;怎么在ubuntu中使用呢 特别提示&#xff01;对磁盘操作存在一定丢失数据的风险&#xff0c;本篇是在一个新购买的硬盘上进行操作&#xff01;如果你使用的是一个带数据的硬盘&#xff0c;请勿参考本篇文章&#xff01; 2.找…

解决:AttributeError: module ‘scipy.misc’ has no attribute ‘imread’

解决&#xff1a;AttributeError: module ‘scipy.misc’ has no attribute ‘imread’ 文章目录 解决&#xff1a;AttributeError: module scipy.misc has no attribute imread背景报错问题报错翻译报错位置代码报错原因解决方法方法一 scipy版本回退&#xff08;不推荐&#…

记录 | Visual Studio报错:const char*类型的值不能用于初始化char*类型

Visual Studio 报错&#xff1a; const char *”类型的值不能用于初始化“char *”类型的实体错误 解决办法&#xff1a; 1&#xff0c;强制类型转换&#xff0c;例如&#xff1a; char * Singer::pv[] {(char*)"other", (char*)"alto", (char*)"c…

会旋转的树,你见过吗?

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;强烈推荐优质专栏: &#x1f354;&#x1f35f;&#x1f32f;C的世界(持续更新中) &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;…

工业数据的特殊性和安全防护体系探索思考

随着工业互联网的发展&#xff0c;工业企业在生产运营管理过程中会产生各式各样数据&#xff0c;主要有研发设计数据、用户数据、生产运营数据、物流供应链数据等等&#xff0c;这样就形成了工业大数据&#xff0c;这些数据需要依赖企业的网络环境和应用系统进行内外部流通才能…

字体包引入以及使用

将UI给的字体包下载到assets文件夹下 app.vue全局定义 <style> * {margin: 0;padding: 0; }font-face {font-family: PangMenZhengDao-3;src: url(/assets/fonts/庞门正道标题体3.0.TTF) format(truetype);font-weight: bold;font-style: normal; } </style>页面使…

亚马逊云科技re:Invent推出生成式AI技术堆栈及关键服务和工具

亚马逊云科技于29日推出“生成式AI技术堆栈”后&#xff0c;又在30日的re:Invent 2023大会上宣布了一系列支持这一全新堆栈的关键服务和工具。 亚马逊云科技数据和人工智能副总裁Swami Sivasubramanian在主题演讲中&#xff0c;将生成式人工智能与“超新星爆炸”进行了比较&am…