如何部署一个高可用高并发的电商平台

news2024/11/26 23:32:07

假设我们已经有了一个特别大的电商平台,这个平台应该部署在哪里呢?假设我们用公有云,一般公有云会有多个位置,比如在华东、华北、华南都有。毕竟咱们的电商是要服务全国的,当然到处都要部署了。我们把主站点放在华东。

为了每个点都能“雨露均沾”,也为了高可用性,往往需要有多个机房,形成多个可用区(Available Zone)。由于咱们的应用是分布在两个可用区的,所以假如任何一个可用区挂了,都不会受影响。

这些服务器里面部署的都是计算节点,每台上面都有 Open  vSwitch 创建的虚拟交换机,将来在这台机器上创建的虚拟机,都会连到 Open  vSwitch 上。

接下来,你在云计算的界面上创建一个 VPC(Virtual Private Cloud,虚拟私有网络),指定一个 IP 段,这样以后你部署的所有应用都会在这个虚拟网络里,使用你分配的这个 IP 段。为了不同的 VPC 相互隔离,每个 VPC 都会被分配一个 VXLAN 的 ID。尽管不同用户的虚拟机有可能在同一个物理机上,但是不同的 VPC 二层压根儿是不通的。

由于有两个可用区,在这个 VPC 里面,要为每一个可用区分配一个 Subnet,也就是在大的网段里分配两个小的网段。当两个可用区里面网段不同的时候,就可以配置路由策略,访问另外一个可用区,走某一条路由了。

接下来,应该创建数据库持久化层。大部分云平台都会提供 PaaS 服务,也就是说,不需要你自己搭建数据库,而是采用直接提供数据库的服务,并且单机房的主备切换都是默认做好的,数据库也是部署在虚拟机里面的,只不过从界面上,你看不到数据库所在的虚拟机而已。

云平台会给每个 Subnet 的数据库实例分配一个域名。创建数据库实例的时候,需要你指定可用区和 Subnet,这样创建出来的数据库实例可以通过这个 Subnet 的私网 IP 进行访问。

为了分库分表实现高并发的读写,在创建的多个数据库实例之上,会创建一个分布式数据库的实例,也需要指定可用区和 Subnet,还会为分布式数据库分配一个私网 IP 和域名。

对于数据库这种高可用性比较高的,需要进行跨机房高可用,因而两个可用区都要部署一套,但是只有一个是主,另外一个是备,云平台往往会提供数据库同步工具,将应用写入主的数据同步给备数据库集群。

接下来是创建缓存集群。云平台也会提供 PaaS 服务,也需要每个可用区和 Subnet 创建一套,缓存的数据在内存中,由于读写性能要求高,一般不要求跨可用区读写。

再往上层就是部署咱们自己写的程序了。基础服务层、组合服务层、Controller 层,以及 Nginx 层、API 网关等等,这些都是部署在虚拟机里面的。它们之间通过 RPC 相互调用,需要到注册中心进行注册。

再往上层就是部署咱们自己写的程序了。基础服务层、组合服务层、Controller 层,以及 Nginx 层、API 网关等等,这些都是部署在虚拟机里面的。它们之间通过 RPC 相互调用,需要到注册中心进行注册。

再往外就是负载均衡了,负载均衡也是云平台提供的 PaaS 服务,也是属于某个 VPC 的,部署在虚拟机里面的,但是负载均衡有个外网的 IP,这个外网的 IP 地址就是在网关节点的外网网口上的。在网关节点上,会有 NAT 规则,将外网 IP 地址转换为 VPC 里面的私网 IP 地址,通过这些私网 IP 地址访问到虚拟机上的负载均衡节点,然后通过负载均衡节点转发到 API 网关的节点。

网关节点的外网网口是带公网 IP 地址的,里面有一个虚拟网关转发模块,还会有一个 OVS,将私网 IP 地址放到 VXLAN 隧道里面,转发到虚拟机上,从而实现外网和虚拟机网络之间的互通。

不同的可用区之间,通过核心交换机连在一起,核心交换机之外是边界路由器。

在华北、华东、华南同样也部署了一整套,每个地区都创建了 VPC,这就需要有一种机制将 VPC 连接到一起。云平台一般会提供硬件的 VPC 互连的方式,当然也可以使用软件互连的方式,也就是使用 VPN 网关,通过 IPsec VPN 将不同地区的不同 VPC 通过 VPN 连接起来。

对于不同地区和不同运营商的用户,我们希望他能够就近访问到网站,而且当一个点出了故障之后,我们希望能够在不同的地区之间切换,这就需要有智能 DNS,这个也是云平台提供的。

对于一些静态资源,可以保持在对象存储里面,通过 CDN 下发到边缘节点,这样客户端就能尽快加载出来。

此文章为10月Day8学习笔记,内容来源于极客时间《趣谈网络协议》,推荐该课程。

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

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

相关文章

汇编语言是怎么一回事?

汇编语言基础 汇编指令和机器码的区别 数据的表示 各类汇编指令 数据传送和算法运算 位运算 条件分支指令 函数调用 字符串处理 流水线和指令调度 流水线实现指令级并行 编译器指令调度 CPU乱序与投机执行 汇编器将汇编语言翻译成 CPU 可以执行的机器码&#xff0c…

【软考】9.1 顺序表/链表/栈和队列

《线性结构》 顺序存储和链表存储 每个元素最多只有一个出度和一个入度,表现为一条线状链表存储结构:每个节点有两个域,即数据,指针域(指向下一个逻辑上相邻的节点) 时间复杂度:与其数量级成正…

OpenCV防抖实践及代码解析笔记

视频防抖是指用于减少摄像机运动对最终视频的影响的一系列方法。摄像机的运动可以是平移(比如沿着x、y、z方向上的运动)或旋转(偏航、俯仰、翻滚)。 正如你在上面的图片中看到的,在欧几里得运动模型中,图像…

分布式文件系统HDFS(林子雨慕课课程)

文章目录 3. 分布式文件系统HDFS3.1 分布式文件系统HDFS简介3.2 HDFS相关概念3.3 HDFS的体系结构3.4 HDFS的存储原理3.5 HDFS数据读写3.5.1 HDFS的读数据过程3.5.2 HDFS的写数据过程 3.6 HDFS编程实战 3. 分布式文件系统HDFS 3.1 分布式文件系统HDFS简介 HDFS就是解决海量数据…

4.方法操作实例变量 对象的行为

4.1 操作对象状态的方法 同一类型的每个对象能够有不同的方法行为,任一类的每个实例都带有相同的方法,但是方法可以根据实例变量的值来表现不同的行为。 play()会播放title值表示的歌曲,调用某个实例的play()可能会播放“Politik”而另一个会…

第三章 Android 开发从入门到实战--简单控件

文章目录 1.文本显示1.1设置文本的内容1.2设置文本字体大小1.3设置文本的颜色 2.视图基础2.1设置视图的宽高2.2设置视图的间距2.3设置视图的对齐方式 3.常用布局3.1线性布局LinearLayout3.2相对布局RelativeLayout3.3网格布局GridLayout3.4滚动视图ScrollView 4.按钮触控4.1But…

集线器、交换机、路由器是如何转发包的

集线器、交换机、路由器是如何转发包的 集线器交换机MAC地址表的维护 路由器路由表中的信息路由器的包接收操作查询路由表确定输出端口找不到匹配路由时选择默认路由包的有效期通过分片功能拆分大网络包路由器发送操作中的一些特点 参考文档 集线器 集线器是一层(物…

异常:找不到匹配的key exchange算法

目录 问题描述原因分析解决方案 问题描述 PC 操作系统:Windows 10 企业版 LTSC PC 异常软件:XshellPortable 4(Build 0127) PC 正常软件:PuTTY Release 0.74、MobaXterm_Personal_23.1 服务器操作系统:OpenEuler 22.03 (LTS-SP2)…

【数据结构-二叉树 九】【树的子结构】:树的子结构

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【子结构】,使用【二叉树】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为&…

Qt单一应用实例判断

原本项目中使用QSharedMemory的方法来判断当前是否已存在运行的实例,但在MacOS上,当程序异常崩溃后,QSharedMemory没有被正常销毁,导致应用程序无法再次被打开。 对此,Qt assistant中有相关说明: 摘抄 qt-s…

Linux防火墙之firewalld

iptables与firewalld的联系 netfilter 位于Linux内核中的包过滤功能体系 称为Linux防火墙的“内核态” Firewalld/iptables CentOS7默认的管理防火墙规则的工具(Firewalld) 称为Linux防火墙的“用户态” iptables与firewalld的区别 iptables主要是基…

Spring的beanName生成器AnnotationBeanNameGenerator

博主介绍:✌全网粉丝4W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

软件设计原则 1小时系列 (C++版)

文章目录 前言基本概念 Design Principles⭐单一职责原则(SRP) Single Responsibility PrincipleCode ⭐里氏替换原则(LSP) Liskov Substitution PrincipleCode ⭐开闭原则(OCP) Open Closed PrincipleCode ⭐依赖倒置原则(DIP) Dependency Inversion PrincipleCode ⭐接口隔离…

tailscale自建headscale和derp中继

tailscale自建headscale和derp中继 Tailscale 官方的 DERP 中继服务器全部在境外,在国内的网络环境中不一定能稳定连接,所以有必要建立自己的 DERP 服务器的。 准备工作: 需要有自己的云服务器,本示例为阿里云轻量服务器需要有…

Tasmota系统之外设配置

Tasmota系统之外设配置 🎈相关篇《ESP32/ESP8266在线刷写Sonoff Tasmota固件以及配置简要》🔖这里以ESP32配置DS18B20温度传感器和dht11温湿度传感器为例。 ✨如果想接特定型号的显示屏幕,需要下载指定的固件,目前官方所提供的固件…

剑指offer——JZ36 二叉搜索树与双向链表 解题思路与具体代码【C++】

一、题目描述与要求 二叉搜索树与双向链表_牛客题霸_牛客网 (nowcoder.com) 题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示 数据范围:输入二叉树的节点数 0≤n≤1000,二叉树中每个节点的值 0≤val≤10…

“首站告捷 完美收官” | 风丘-EVM ASIA 2023精彩锦集

2023年9月19-21日,风丘携手德国IPETRONIK首次亮相马来西亚-EVM ASIA 2023——该地区第一大电动汽车、移动、制造和汽车零部件展览会,为大家呈现了在汽车测试、车辆诊断领域里专业的研发测试工具及创新解决方案,吸引了众多客户驻足洽谈。 无法…

SpringBoot-黑马程序员-学习笔记(一)

8.pom文件中的parent 我们使用普通maven项目导入依赖时,通常需要在导入依赖的时候指定版本号,而springboot项目不需要指定版本号,会根据当前springboot的版本来下载对应的最稳定的依赖版本。 点开pom文件会看到这个: 继承了一个…

WebGoat 靶场 JWT tokens 四 五 七关通关教程

文章目录 webGoat靶场第 四 关 修改投票数第五关第七关 你购买书,让Tom用户付钱 webGoat靶场 越权漏洞 将webgoat-server-8.1.0.jar复制到kali虚拟机中 sudo java -jar webgoat-server-8.1.0.jar --server.port8888解释: java:这是用于执行…

WebKit Inside: CSS 样式表的解析

CSS 全称为层叠样式表(Cascading Style Sheet),用来定义 HTML 文件最终显示的外观。 为了理解 CSS 的加载与解析,需要对 CSS 样式表的组成,尤其是 CSS Selector 有所了解,相关部分可以参看这里。 HTML 文件里面引入 CSS 样式表有 …