项目3 构建移动电商服务器集群

项目引入

    经过前期加班加点地忙碌,我们的网站顺利上线了!年中促销活动也如约而至,虽然公司全体对这次活动进行多方面地准备和“布防”,可是意外还是发生了。就在促销优惠购物活动的当天,猛然增加的用户访问量直接导致浏览器购物车提交页面显示“server is too busy”,如此巨大的访问量是我们没有预计到的,服务器繁忙导致许多用户的订单提交不成功,公司客服部的电话响个不停,我们运维部门的压力徒增。

    Philip立刻召开了部门紧急会议。

    Philip:这次年终促销活动对我们的网站平台是一次真实的“压力”测试,测试结果是我们的平台显然还有亟待完善的地方。George你之前和Amanda处理了平台系统搭建的大部分工作,关于这次事件,你认为是什么原因。

    George:用户访问频次的巨量提升是客观因素,对我们的服务器是不小的冲击。但我估计我们对数据库的容量设计没有到位,这次访问压力事件的爆发很可能出在数据库访问瓶颈上。

    Philip:是的,业务情况总有淡旺季,这次促销活动能吸引到这么多用户也是市场那边都没有预估到的。Amanda你觉得数据库设计这块,我们应该从什么方向下手。

    :老大您有一点提醒我了,网站上的用户访问总是有常态和“非常态”,我们的数据库应该有成熟的伸缩架构设计,能够在像这次事件的情况下快速对数据库扩容,尽快缓解用户访问压力。

    解决此类问题,会上决定重新设计构建电商系统集群,先测试稳定后再将现有系统迁移过来

知识总图

任务一:认识服务器集群

1.任务描述

随着mobileshop的业务量增加,规模扩大,对服务器的要求也原来越高,单台服务器已经不能满足业务增长的访问请求,这时候我们所采用的办法是在不影响原有的业务情况下增加服务器数量,下面我们深入学习服务器集群相关知识

2.认识服务器集群

集群(cluster)是将若干台相互独立的计算机,通过网络连接,使它们协同工作,共同完成一项或者多项工作,这样的计算机群体,我们把它叫做计算机集群。集群技术是一种主流技术、也是当前大型移动电商系统部署主要的解决手段。

3.服务器集群的分类

高可用集群,简称HAC

负载均衡,简称LBC

高性能集群,简称HPC

1、高可用集群

       高可用集群高可用集群的英文全称是High Availability,简称HAC。高可用的含义是最大限度地可以使用。从集群的名字上可以看出,此类集群实现的功能是保障用户的应用程序持久、不间断地提供服务。

2、负载均衡集群

       负载均衡集群负载均衡集群也是由两台或者两台以上的服务器组成。分为前端负载调度和后端服务两个部分。负载调度部分负责把客户端的请求按照不同的策略分配给后端服务节点,而后端节点是真正提供应用程序服务的部分。与HA Cluster不同的是,负载均衡集群中,所有的后端节点都处于活动状态,它们都对外提供服务,分摊系统的工作负载。

3、高性能集群

       科学计算集群高性能计算集群,简称HPC集群。这类集群致力于提供单个计算机所不能提供的强大计算能力,包括数值计算和数据处理,并且倾向于追求综合性能。HPC与超级计算类似,但是又有不同,计算速度是超级计算追求的第一目标。最快的速度、最大的存储、最庞大的体积、最昂贵的价格代表了超级计算的特点。随着人们对计算速度需求的提高,超级计算也应用到各个领域,对超级计算追求单一计算速度指标转变为追求高性能的综合指标,即高性能计算。

4.常用集群软硬件的介绍及选型

企业运维中常用的集群软硬件产品

在互联网企业中常用开源负载均衡软件有:LVSNginxHaproxy,常用于高可用开源软件有:KeepalivedHeartbeat

常用负载均衡硬件有:F5NetscalerRadwareA10等,工作模式相当于Haproxy的工作模式。

对于集群负载均衡产品如何选型

现在对网络负载均衡的使用,是随着网站规模的提升,根据不同的阶段来使用不同的技术。

第一阶段:利用Nginx或者Haproxy进行单点载均衡

第二阶段:随着网络服务进一步扩大这时使用LVS或者商用F5就是首要选择

第三阶段:这时网络服务已经成为主流产品开源的LVS,已经成为首选,这时LVS会成为主流。

如何选择开源集群软件产品

中小型互联网企业网站首选Nginx负载均衡考虑负载均衡的高可用功能,建议首先Keepalived软件

大型互联网企业,负载均衡产品可以选择LVS+ Keepalived在前端做四层转发再后面是应用服务器

任务二:负载均衡部署

1.任务描述

在项目2中我们了解了Nginx作为Web服务器的特点,此外Nginx还能作为负载均衡来使用。Nginx作为负载均衡具有很多优点,本节中将深入解析Nginx作为负载均衡的配置和管理

2.负载均衡部署

负载均衡知识网结构

正向代理:

         局域网中的电脑用户想要直接访问网络是不可行的,只能通过代理服务器来访问,这种代理服务就被称为正向代理。

反向代理:

         客户端无法感知代理,因为客户端访问网络不需要配置,只要把请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据,然后再返回到客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。

         客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕之后,再将结果返回给客户端。

普通请求和响应过程

         但是随着信息数量增长,访问量和数据量飞速增长,普通架构无法满足现在的需求。

         可以增加服务器的数量,构建集群,将请求分发到各个服务器上,将原来请求集中到单个服务器的情况改为请求分发到多个服务器,也就是我们说的负载均衡。

         图解负载均衡:假设有15个请求发送到代理服务器,那么由代理服务器根据服务器数量,平均分配,每个服务器处理5个请求,这个过程就叫做负载均衡。

负载均衡介绍

为了解决大容量、高并发访问的问题,移动电商采取集群分布

部署的方式,将应用拆分后,部署到不同的服务器,实现

规模集群分布式系统

负载均衡原理

负载均衡(Load Balance),就是将负载(工作任务,访问

请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。

应用集群:将同一应用部署到多台机器上,组成处理集群,接收负载均衡设备分发的请求,

进行处理,并返回相应数据。

负载均衡设备:将用户访问的请求,根据负载均衡算法,分发到集群中的一台处理服务器。

这是一种把网络请求分散到一个服务器集群中的可用服务器上去的设备。

负载均衡的作用

1.提高响应速度

2.实现服务器高可用

3.扩展性

4.安全防护

5.对外提供一个IP地址

负载均衡分类

1.DNS负载均衡

       历用域名解析实现负载均衡,在DNS服务器配置多个A记录,这些A记录对应的服务器构成

集群。一般部分使用DNS解析,作为第一级负载均衡,如图所示:

1.DNS负载均衡

       在实践应用中,将DNS作为第一级负载均衡,A记录对应着内部负载均衡的多个IP地址,

通过内部负载均衡将请求分发到真实的应用服务器上,如图所示:

2. IP负载均衡  

在网络层通过修改请求目标地址进行负载均衡,称为IP负载均衡。

         后端服务器处理完成后,响应数据包回到负载均衡服务器,负载均衡服务器再将数据包

源地址修改为自身的IP地址,发送给用户浏览器。如图所示:

3.链路层负载均衡

         在通信协议的数据链路层修改MAC地址,进行负载均衡,称为链路层负载均衡。

         实际处理服务器IP和数据请求目的IP一致,不需要经过负载均衡服务器进行地址转换,

可将相应数据包直接返回给用户浏览器,避免负载均衡服务器网卡带宽称为瓶颈,也称为

直接路由模式(DR模式),如图所示:

4.混合型负载均衡

         把多个服务器群当作一个新的服务器群,即为混合型负载均衡。此种方式有时也用于

单台均衡设备的性能 不能满足大量连接请求的情况。是目前大型互联网公司普遍使用的方式。

根据适用的场景不同分为两种方式,方式一:

4.混合型负载均衡

         方式二:

负载均衡算法

1.轮询

       将所有请求一次按顺序分发到后端服务器上,不关心服务器实际连接数和系统负载。

适合服务器硬件相同的场景。

2.随机

       通过系统的随机算法,将请求随机分配到各个服务器。

3.最少链接

       根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理

当前的请求。

4.Hash(源地址散列)

       根据IP地址进行Hash计算,得到IP地址。

5.加权

       在轮询、随机、最少链接、Hash等算法的基础上,通过分配不同的权重,进行负载服务器

分配。

Nginx负载均衡概述

Ngnix具有反向代理负载均衡功能及环境缓存功能,是工作在七层Http协议的负载均衡系统。在反向代理负载均衡功能方面,它类似于大名鼎鼎的LVS负载均衡及Haproxy等专业代理软件,但是Nginx部署起来更为简单方便;在缓存服务功能方面,它又类似于Squid等专业的缓存服务软件

均衡策略

nginx的负载均衡策略可以划分为两大类:内置策略和扩展策略内置策略包含加权轮询和ip hash。扩展策略包含fair通用hashconsistent hash

Nginx负载均衡

Nginx一般作为入口负载均衡或内部负载均衡,结合反向代理服务器使用,具体使用根据场景而定。

1)入口负载均衡架构

Nginx服务器在用户访问的最前端,根据用户请求再转发到具体的应用服务器或二级负载均衡服务器(LVS)。如图所示:

2)内部负载均衡架构

LVS作为入口负载均衡,将请求转发到二级Nginx服务器,Nginx再根据请求转发到具体的应用服务器。如图所示:

3Nginx高可用

Nginx高可用,至少包含两个Nginx服务器,即一台主服务器和一台备服务器,两者之间使用

Keepalived做健康监控和故障检测。开放VIP端口,通过防火墙进行外部映射。如图所示:

Nginx负载均衡安装

1.安装依赖包 2.编译安装Nginx (查看实验指导书)

Nginx负载均衡配置与调试

Nginx配置文件详解

Nginx主配置文件主要分成四个部分:main(全局设置)server(主机设置)upstream(负载均衡服务器设置)location(URL匹配特定位置的设置)

其中main部分设置的命令将影响其他所有设置,server部分设置主要用于指定主机和对应的端口,upstream部分设置主要用于负载均衡后端对应的服务器,location部分设置用于匹配网页位置。这四者之间的关系为:server继承mainlocation继承serverupstream既不会继承其他部分的设置也不会被继承。

Nginx配置文件结构

任务实现服务器集群的高可用

1.任务描述

单台服务器部署存在隐患,一旦服务器故障,其所在的业务应用将不能使用,必须提高服务器对业务持续支持访问

2.Keepalived是什么?

          Keepalived起初是为LVS 设计的,专门用来监控集群系统中各个服务节点的状态。它根据layer3,4&5交换机制检测每个服务节点的状态,如果某个服务节点出现异常,或工作出现故障,Keepalived将检测到,并将出现故障的服务节点从集群系统中剔除,而在故障节点恢复正常后,Keepalived又可以自动将此服务节点重新加入到服务器集群中,这些工作全部自动完成,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。

          Keepalived后来又加入了VRRP的功能,VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写。它出现的目的是为了解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断地、稳定地运行。因此,Keepalived一方面具有服务器状态检测和故障隔离功能,另一方面也具有HA cluster 功能.下面详细介绍下VRRP协议的实现过程

3.Keepalived工作原理

在 Keepalived 服务之间,只有作为主节点会一直发送 VRRP 广播包,告诉备它还活着,此时备节点不会枪占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快可以小于1秒。

          Keepalived工作在TCPIP参考模型的第三、第四和第五层,也就是网络层、传输层和应用层。根据TCP/IP参考模型各层所能实现的功能,Keepalived运行机制如下:

         在网络层,运行着四个重要的协议:互联网协议IP、互联网控制报文协议ICMP、地址转换协议ARP以及反向地址转换协议RARP。Keepalived在网络层采用的最常见的工作方式是通过ICMP协议向服务器集群中的每个节点发送一个ICMP的数据包(类似于ping实现的功能),如果某个节点没有返回响应数据包,那么就认为此节点发生了故障,Keepalived将报告此节点失效,并从服务器集群中剔除故障节点。

       

         在传输层,提供了两个主要的协议:传输控制协议TCP和用户数据协议UDP。传输控制协议TCP可以提供可靠的数据传输服务,IP地址和端口,代表一个TCP连接的一个连接端。要获得TCP服务,须在发送机的一个端口上和接收机的一个端口上建立连接,而Keepalived在传输层就是利用TCP协议的端口连接和扫描技术来判断集群节点是否正常的。比如,对于常见的 Web服务默认的80端口、SSH 服务默认的22端口等,Keepalived一旦在传输层探测到这些端口没有响应数据返回,就认为这些端口发生异常,然后强制将此端口对应的节点从服务器集群组中移除。

         在应用层,可以运行FTP、TELNET、SMTP、DNS等各种不同类型的高层协议,Keepalived的运行方式也更加全面化和复杂化,用户可以通过自定义Keepalived的工作方式,例如用户可以通过编写程序来运行Keepalived,而 Keepalived将根据用户的设定检测各种程序或服务是否允许正常,如果 Keepalived的检测结果与用户设定不一致时,Keepalived将把对应的服务从服务器中移除

 想要深入了解keepalived,就要从vrrp通信来看

VRRP,全称 Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议,VRRP的出现是为了解决静态路由的单点故障

VRRP是通过一种竟选协议机制来将路由任务交给某VRRP路由器的

VRRP用 ip协议广播的方式(默认多播地址:224.0.0.18)实现高可用对之间通信

工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的开源。备节点可以有多个,通过优先级竞选,但一般 Keepalived系统运维工作中都是一对

VRRP使用了加密协议加密数据,但Keepalived官方目前还是推荐用明文的方式配置认证类型和密码

4.构建高性能主站点集群

Keepalived高可用软件介绍

KeepalivedLinux下一个轻量级的高可用解决方案Keepalived主要是通过虚拟路由冗余来实现高可用功

Keepalived体系结构拓扑图

Keepalived的体系结构从整体上分为两层,分别是用户空间层(User Space)和内核空间层(Kernel Space)。

内核空间层处于最底层,它包括IPVSNETLINK两个模块用户空间层位于内核空间层之上,Keepalived的所有具体功能都在这里实现,包括Scheduler I/O MultiplexerMemory ManagementControl PlaneCore components

5.构建高性能MySQL集群

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

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

相关文章

java线程状态介绍

1.新建(New): 线程对象已创建,但还没有调用 start() 方法。 2.可运行(Runnable): 线程已启动,处于就绪状态,等待 JVM 的线程调度器分配CPU时间。 3.阻塞(Blocked): 线程…

利用博弈论改进大模型性能:MIT最新研究解读

引言 在人工智能和大模型的发展过程中,我们常常遇到一个有趣的现象:同一个问题在不同形式下可能得到不同的答案。这种不一致性不仅降低了大模型的可信度,也限制了其在实际应用中的效果。为了应对这一问题,来自MIT的研究人员提出了…

什么是网络拓扑图,常见绘制工具

什么是网络拓扑图 网络拓扑图是一种图形表示方法,用于展示网络中组件的物理或逻辑布局。它显示了网络中的设备、连接以及它们之间的通信路径。网络拓扑图对于理解网络结构、规划网络扩展、诊断问题以及进行日常网络管理至关重要。 网络拓扑图的类型 1. 物理拓扑&…

Element快速入门

Vue组件库Element 1 Element介绍 vue是侧重于VM开发的,主要用于数据绑定到视图的,ElementUI就是一款侧重于V开发的前端框架,主要用于开发美观的页面的。 Element:是饿了么公司前端开发团队提供的一套基于 Vue 的网站组件库&…

深入理解 Go 语言中的字符串不可变性与底层实现

文章目录 前言1 字符串类型的数据结构组成2 为什么要这么设计数据结构?3 为什么说字符串类型不可修改?4 如何实现字符串的修改?5 为什么字符串修改的字面量用单引号?6 如何判断字符串的修改新建了一个字符串?7 字符串的…

c基础 - 输入输出

目录 一.scanf() 和 printf() 函数 1.printf 2.scanf 二 . getchar() & putchar() 函数 1.int getchar(void) 2.int putchar(int c) 三. gets() & puts() 函数 一.scanf() 和 printf() 函数 #include <stdio.h> 需要引入头文件,stdio.h 1.printf print…

【动力电池的四种冷却方式】

文章目录 动力电池的四种冷却方式1.自然冷却2.风冷3.液冷4.直冷 动力电池的四种冷却方式 目前动力电池系统的热管理主要可分为四类&#xff0c;自然冷却、风冷、液冷、直冷。其中自然冷却是被动式的热管理方式&#xff0c;而风冷、液冷、直流是主动式的&#xff0c;这三者的主…

[运维|数据库] deepin V20.9 安装人大金仓数据库

系统环境 系统&#xff1a; deepin V20.9 安装 以KingbaseES_V008R006C008B0014_Lin64_install.iso示例安装人大金仓数据库 下载镜像 镜像下载地址 下载授权文件 授权文件下载地址 挂在镜像 sudo mount -o loop KingbaseES_V008R006C008B0014_Lin64_install.iso /mnt执行…

el-tree常用操作

一、定义 <el-treeclass"myTreeClass":data"dirTreeData":props"dirTreeProps":filter-node-method"filterDirTree":expand-on-click-node"false"node-key"id"node-click"dirTreeNodeClick":allow-…

Web前端三大主流框架介绍

Web前端三大主流框架分别是Angular、React和Vue.js。以下是关于这三个框架的详细介绍&#xff1a; Angular 来源&#xff1a;由Google开发。特点&#xff1a; 完整的框架&#xff1a;Angular是一个完整的框架&#xff0c;包括了数据绑定、组件化、路由、依赖注入等功能。类型安…

M-G364PD惯性测量单元:相机及微小层面的革命性应用

在现代科技飞速发展的今天&#xff0c;精准控制和精确测量是众多高端设备实现卓越性能的关键。爱普生推出的M-G364PD惯性测量单元&#xff08;IMU&#xff09;&#xff0c;因其卓越的性能和微小尺寸&#xff0c;成为相机以及其他微小层面应用的理想选择&#xff0c;为科技创新提…

【Spring】Spring之依赖注入源码解析(上)

目录 Spring中到底有几种依赖注入的方式&#xff1f; 手动注入 自动注入 XML的autowire自动注入 Autowired注解的自动注入 寻找注入点 桥接方法 注入点进行注入 字段注入 Set方法注入 Spring中到底有几种依赖注入的方式&#xff1f; 首先分两种&#xff1a; 手动注…

存储 Bean 对象更加简单的方式

前置操作 如果是在 spring-config 中添加 bean 标签来注册内容&#xff0c;每个类都要弄一次就显得麻烦和臃肿了&#xff0c;对于 new 操作而言就没有什么优势了。因此 spring 就引入了注解操作来实现对 Bean 对象的存储。 配置扫描路径 想要将对象成功的存储到 Spring 中&…

RustDesk服务器

一、安装node.js # cd /usr/local # wget https://registry.npmmirror.com/-/binary/node/v16.18.1/node-v16.18.1-linux-x64.tar.gz # tar -zxvf node-v16.18.1-linux-x64.tar.gz -C ./node-v16.18.1 # cd cd node-v16.18.1 # cd node-v16.18.1-linux-x64/ # mv * ../二、配置…

python onnxruntime DLL load failed: 找不到指定的模块

在安装ddddocr 报错&#xff1a;ImportError: DLL load failed while importing onnxruntime_pybind11_state: 找不到指定的模块 试了降到onnxruntime 1.8.0版本&#xff0c;升级pip再重装ddddocr均无效。 这个错误通常是因为缺少onnxruntime_pybind11_state.dll文件或者没有…

适用于STM32的U8G2回调函数例程

简介 U8g2 还包括 U8x8 库。U8g2 和 U8x8 的功能包括&#xff1a; U8g2 包括所有图形程序&#xff08;线/框/圆画&#xff09; 支持很丰富的字体库 需要微控制器中的一些内存来渲染显示屏&#xff08;需要消耗较多的ram空间资源&#xff09;U8x8 仅文本输出&#xff08;字符&am…

Liunx中使用他人身份来执行命令或新建文件

前言 在一些情况下。我们想要借助某个用户的身份来执行命令或者新建文件&#xff0c; 比如某个用户的bash是 nologin 或者 false。 该怎么做呢&#xff1f;&#xff1f; 答&#xff1a;使用 sudo -u 即可。 例如&#xff1a; sudo -u ygz1 touch temp1.txt哈哈哈&#xff0…

android gradle8.3 发布插件踩过的坑

之前写过gradle6.x和gradle7.x的插件&#xff0c;会有一些改动&#xff0c;到8.x我发现又有一些变化&#xff0c;记录一下&#xff0c;防止后边再遇到相同的情况 下边是插件的gradle文件配置 plugins {id("java-gradle-plugin") //会自动引入java-library、gradleAp…

【ES实战】ES集群机器磁盘IO过高告警分析

ES集群机器磁盘IO过高告警分析 文章目录 ES集群机器磁盘IO过高告警分析现象分析思路与手段获取告警机器的磁盘高IO时的文件通过IO文件确认索引分析思路 优化第一步&#xff1a;每个data实例用不同的磁盘第二步&#xff1a;业务调整数据写入的集中程度第三步&#xff1a;扩容 反…

摄影后期照片编辑工具:LrC2024 for Mac/win 中文激活版

LrC2024&#xff08;Lightroom Classic 2024&#xff09;是 Adobe 公司推出的一款专业级别的照片编辑和管理软件。它是 Lightroom Classic CC 的升级版&#xff0c;具有更多的功能和改进。 这款软件主要用于数字摄影师和摄影爱好者处理、编辑和管理他们的照片。它提供了一套强大…