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

集群概述

集群的介绍及优势

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

集群分类及特点

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

  • 负载均衡集群

    负载均衡集群(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轮询)

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

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

相关文章

2023年国赛高教杯数学建模D题圈养湖羊的空间利用率解题全过程文档及程序

2023年国赛高教杯数学建模 D题 圈养湖羊的空间利用率 原题再现 规模化的圈养养殖场通常根据牲畜的性别和生长阶段分群饲养,适应不同种类、不同阶段的牲畜对空间的不同要求,以保障牲畜安全和健康;与此同时,也要尽量减少空间闲置所…

代码随想录算法训练营第五十五天 _ 动态规划_392. 判断子序列、115.不同的子序列。

学习目标: 动态规划五部曲: ① 确定dp[i]的含义 ② 求递推公式 ③ dp数组如何初始化 ④ 确定遍历顺序 ⑤ 打印递归数组 ---- 调试 引用自代码随想录! 60天训练营打卡计划! 学习内容: 392. 判断子序列 这个题目就是 …

消息队列kafka详解:Kafka原理分析总结

一、概述 Kakfa起初是由LinkedIn公司开发的一个分布式的消息系统,后成为Apache的一部分,它使用Scala编写,以可水平扩展和高吞吐率而被广泛使用。目前越来越多的开源分布式处理系统如Cloudera、Apache Storm、Spark等都支持与Kafka集成。 Kaf…

SGPIO介紹

什么是SGPIO? Serial General Purpose Input Output (SGPIO) is a method to serialize general purpose IO signals. SGPIO defines the communication between an initiator (e.g. a host bus adapter) and a target (e.g. a backplaneholding disk drives). The …

最小窗口子串算法题——Java解答

题目:最小窗口子串 题目描述: 给你一个字符串 s 和一个字符串 t,返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 ""。 注意: 对于 t 中重复的字符&#xff…

Axure的交互与情形,事件,动作

交互样式 交互样式是指当用户与原型进行交互时,元素所呈现出的视觉效果。在Axure中,可以通过设置交互样式来调整元素在交互过程中的外观,例如改变颜色、大小、位置等。 交互事件 交互事件是指在用户与原型进行交互时触发的动作。在Axure中&…

一次应急响应记录

背景: 周五晚上,我健身完回到宿舍收到qq消息,原来是安全厂商在扫描资产时,发现一批openssh漏洞如下图: 其实我是一名小白,我的第一反应就是升级openssh版本。但是这里问题又来了,我们内网主机是…

Python 自动化之收发邮件(一)

imapclient / smtplib 收发邮件 文章目录 imapclient / smtplib 收发邮件前言一、基本内容二、发送邮件1.整体代码 三、获取邮件1.整体代码 总结 前言 简单给大家写个如何用Python进行发邮件和查看邮件教程,希望对各位有所帮助。 一、基本内容 本文主要分为两部分…

基于ssm在线作业管理系统的设计与实现论文

摘 要 网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。因此学生作业信息的…

Web Worker的快速理解与简单应用

Web Worker 是一种在浏览器环境中运行的脚本它在主线程之外运行,可以在后台执行计算密集型或需要长时间运行的任务,而不会阻塞主线程的执行。Web Worker 通过在独立的线程中执行,可以提高页面的性能和响应性。 实现流程: 主线程&a…

补题与总结:牛客小白月赛83(B~F)

文章目录 写在最前面的复盘B-小天的魔法(贪心 模拟 双指针)C-小天的 Minecraft(概率)D-小天的子序列(预处理 排列组合)E-小天的贪吃蛇(模拟)F-小天的 AB(结论题&#xff…

举个栗子!Tableau 技巧(261):自由切换图表的背景颜色

数据粉反馈了一个有趣的需求:Tableau 图表的背景颜色可以设置多个,然后按需切换么? 我们知道,图表的背景颜色对于可视化分析呈现来说非常重要。大部分情况下,我们会固定使用一种背景色。 如果确实需要切换图表背景颜…

K8s内容器拓扑图工具

1.背景:随着线上容器越来越多,需要一个可视化的方式展示各个容器之间的拓扑图。 2.需求:轻量级,部署方便。 3.部署 helm repo add groundcover https://helm.groundcover.com/ helm repo update helm install caretta --namespa…

代码随想录算法训练营第二十天 | 二叉搜索树

目录 力扣题目 力扣题目记录 654.最大二叉树 617.合并二叉树 用值 用指针 700.二叉搜索树中的搜索 递归 迭代 98.验证二叉搜索树 总结 力扣题目 用时:2h 1、654.最大二叉树 2、617.合并二叉树 3、700.二叉搜索树中的搜索 4、98.验证二叉搜索树 力扣…

JupyterNotebook VS JupyterLab 如果jupyter安装成功,点击jupyterlab即可进入lab环境

简介 JupyterNotebook 是一个款以网页为基础的交互计算环境,可以创建Jupyter的文档,支持多种语言,包括Python, Julia, R等等。一般来说,如果是使用R语言的话,使用Rstudio居多,使用Python的话,使…

如何快速优化几千万数据量的订单表

前言 为了保证有一个更健康的身体,所以慢慢降低了更新频率,在有了更多休息时间的前提下,思考了一下接下来准备分享的一些内容。 决定在更新一些技术干货的同时,会穿插一些架构知识,放在单独的专栏里面,希…

鸿蒙Js实战,计算器功能开发

场景: 通过动态设置按钮组件button实现计算器的键盘,通过文本text显示计算的表达书,可以计算,-,*,/,可以一个一个移除,可以重置 等。 下面我们开始今天的文章,还是老规…

【网络安全】-Linux操作系统基础

文章目录 Linux操作系统目录结构Linux命令格式Linux文件和目录操作命令Linux用户和用户组操作命令Linux查看和操作文件内容命令Linux文件压缩和解压缩命令Linux网络管理命令Linux磁盘管理和系统状态命令Linux安全加固总结 Linux是一个强大的操作系统,广泛用于服务器…

HarmonyOS 4应用开发:1.从环境搭建到Hello World

在踏上HarmonyOS应用开发之旅之前,需要进行一些必要的准备工作。首先,你需要下载并安装DevEco Studio,并进行相应的环境配置。 一、下载和安装DevEco Studio 前往DevEco Studio官方的下载地址,点击“立即下载”跳转至下载页面。…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)控件的部分公共属性和事件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)控件的部分公共属性和事件 一、操作环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、公共属性 常用的公共属性有: 宽(with)、高(height)、…