零基础5分钟上手亚马逊云科技-高可用Web系统设计最佳实践
简介:
欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列,适用于任何无云计算或者亚马逊云科技技术背景的开发者,通过这篇文章大家零基础5分钟就能完全学会亚马逊云科技一个经典的服务开发架构方案。
我会每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿云开发/架构技术解决方案,帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS最佳实践,并应用到自己的日常工作里。本次介绍的是手把手从零到一,带你设计一个云上双区高可用Web系统,系统组件包括DNS服务器、CDN网络加速器、负载均衡器、前端服务器、后端服务器和数据库,利用多可用区的组件备份和负载均衡器的健康检测,提升系统的可用性和稳定性。本方案架构图如下:

方案所需基础知识
Amazon Route 53
Amazon Route 53 是亚马逊云科技提供的一项高可用性和可扩展的 DNS(域名系统)服务。它能够将域名请求路由到亚马逊云科技服务(如 EC2、S3)或外部网站,支持全球流量路由和健康检查,确保用户访问的可靠性和速度。
Amazon CloudFront
Amazon CloudFront 是亚马逊云科技的内容分发网络(CDN)服务。它将内容缓存到全球分布的边缘位置,减少用户访问延迟,加速静态和动态内容的交付,从而提升用户的访问体验,特别适用于视频流媒体、图像、API 等高需求应用。
Elastic Load Balancer
Elastic Load Balancer(ELB)是亚马逊云科技提供的一项自动流量分配服务,它可以将流量均匀分发到多个 EC2 实例或其他目标上。ELB 提供了多种负载均衡策略,并支持自动故障转移,确保应用的高可用性和弹性。
Amazon S3
Amazon S3(Simple Storage Service)是亚马逊云科技的对象存储服务,提供高可用、低成本的存储解决方案。S3 可以用作网页前端服务器,通过静态网站托管功能,直接存储和提供静态内容(如 HTML、CSS、JavaScript、图像等),无需运行服务器。它支持全球访问和高并发处理,是托管简单网站或应用前端资源的理想选择。

为什么要设计高可用的 Web 系统?
设计高可用的 Web 系统是为了确保应用程序在面对高流量、硬件故障或其他突发事件时,仍能保持正常运行和快速响应。高可用性减少了系统停机时间,提升了用户体验,保障了业务连续性,有助于企业在竞争中保持优势。
本方案包括的内容
1. 为EC2服务器配置自动扩展组,并挂载到负载均衡器上
2. 为复杂均衡器配置对EC2服务器配置自动扩展组健康检查
3. 为Web应用系统添加双区系统模块实现高可用
项目搭建具体步骤
1. 进入亚马逊云科技控制台,进入EC2服务主页,点击左侧Auto Scaling Groups自动扩展组,创建一个自动扩展组”TravelAgencyWebServers“。

2. 为自动扩展组添加服务器,自动扩展组会根据服务器的CPU使用率添加/移除EC2服务器。

3. 接下来我们编辑该自动扩展组,将其添加到Load Balancer负载均衡器上。

4. 我们选择添加Application Load Balancer应用层负载均衡器,并让其面向公有网络。

5. 为应用层负载均衡器选择三个可用区”us-east-1a“、”us-east-1b“、”us-east-1c“,并创建一个新的目标组”TravelAgencyWebServers-1“放置EC2服务器,点击Update完成配置。

6. 接下来我们为应用层负载均衡器配置一个Security Group防火墙,在EC2服务主页左侧的Security Group功能中,点击Create创建。

7. 为Security Group起名”TravelAgencyLoadBalancer“,添加Description描述,选择安全组所在VPC:”TravelAgencyVpc“。并点击Add rule为安全组添加入站规则。

8. 我们选择入站规则允许的请求类型为HTTP,允许的IP范围为”0.0.0.0/0“

9.使用相同的方式配置出站规则,选择的允许出站目的地址为EC2安全组”TravelAgencyWebServer“, 配置完成后点击Create创建。

10. 接下来点击Edit配置EC2安全组”TravelAgencyWebServer“。

11. 在入站规则中允许接收来自负载均衡器安全组HTTP 80端口的请求,点击Save完成配置

12. 在EC2服务主页中点击左侧的Load Balancer功能,选中我们刚创建的应用负载均衡器”TravelAgencyWebServer“。

13. 复制负载均衡器DNS域名

14. 在浏览器打开后即可看到我们服务器中托管的网页文件。

15. 接下来我们在左侧的Target Group功能中,选中我们创建的Target Group目标组”TravelAgencyWebServer“,再点击”Health Checks“页面,点击Edit进行编辑,为负载均衡器添加EC2服务器的健康检测。

16. 配置检测路径为/health,并点击”Advanced Health Check Settings“高级选项。

17. 分别配置”认为服务器不健康的检测次数“为2, ”认为不健康检测的等待时间”为2,认为健康的等待时间”为5。

18. 我们进入EC2服务器管理界面,点击”Instance State“下拉栏,再点击”Terminate Instance“删除一台服务器模拟服务器故障,触发健康检测。

19. 进入左侧菜单Auto Scaling Group功能,选中我们的Auto Scaling Group:”TravelAgencyWebServer“,查看Auto Scaling Group历史日志,发现Auto Scaling Group检测到EC2服务器被删除,成功新建了一台新的EC2服务器。

20. 我们再点击Edit配置该Auto Scaling Group

21. 我们配置"Desired Capacity"参数为2,让该Auto Scaling Group在两个可用区分别建一台EC2服务器,点击Update保存。

22. 再回到Auto Scaling Group历史日志页面中查看,Auto Scaling Group已经成功在另外一个可用区创建了新的EC2服务器

23.在EC2管理页面中,我们也可以查看该服务器已经成功被创建。

如何利用Python代码创建该Web应用系统?
下面是使用 Python boto3 创建一个 Auto Scaling 组,并将其挂载到一个跨多个可用区的 Load Balancer 上的代码示例。该 Load Balancer 开放 HTTP 80 端口,Auto Scaling 组的后端是开放 80 端口的 EC2 实例。
import boto3# 创建 ELB 客户端
elb = boto3.client('elbv2')# 创建 Load Balancer
load_balancer_response = elb.create_load_balancer(Name='my-load-balancer',Subnets=['subnet-0123456789abcdef0', 'subnet-abcdef0123456789'], # 替换为你的子网IDSecurityGroups=['sg-0123456789abcdef0'], # 替换为你的安全组IDScheme='internet-facing',Type='application',IpAddressType='ipv4'
)load_balancer_arn = load_balancer_response['LoadBalancers'][0]['LoadBalancerArn']# 创建目标组
target_group_response = elb.create_target_group(Name='my-target-group',Protocol='HTTP',Port=80,VpcId='vpc-0123456789abcdef0', # 替换为你的VPC IDHealthCheckProtocol='HTTP',HealthCheckPort='80',HealthCheckPath='/',Matcher={'HttpCode': '200'},TargetType='instance'
)target_group_arn = target_group_response['TargetGroups'][0]['TargetGroupArn']# 创建监听器并将其附加到 Load Balancer
listener_response = elb.create_listener(LoadBalancerArn=load_balancer_arn,Protocol='HTTP',Port=80,DefaultActions=[{'Type': 'forward','TargetGroupArn': target_group_arn}]
)print(f"Load Balancer and Listener created successfully. Load Balancer ARN: {load_balancer_arn}")# 创建 EC2 客户端
ec2 = boto3.client('ec2')# 创建 Launch Template
launch_template_response = ec2.create_launch_template(LaunchTemplateName='my-launch-template',VersionDescription='version1',LaunchTemplateData={'ImageId': 'ami-0123456789abcdef0', # 替换为你需要的AMI ID'InstanceType': 't2.micro', # 替换为你需要的实例类型'SecurityGroupIds': ['sg-0123456789abcdef0'], # 替换为你的安全组ID'UserData': 'IyEvYmluL2Jhc2gKc3VkbyB5dW0gaW5zdGFsbCBuZ2lueCB5dW0gc3RhcnQgbmdpbng=', # Base64编码的User Data'KeyName': 'my-key-pair' # 替换为你的密钥对名称}
)launch_template_id = launch_template_response['LaunchTemplate']['LaunchTemplateId']# 创建 Auto Scaling 客户端
autoscaling = boto3.client('autoscaling')# 创建 Auto Scaling 组
autoscaling.create_auto_scaling_group(AutoScalingGroupName='my-auto-scaling-group',LaunchTemplate={'LaunchTemplateId': launch_template_id,'Version': '$Latest'},MinSize=2,MaxSize=4,DesiredCapacity=2,VPCZoneIdentifier='subnet-0123456789abcdef0,subnet-abcdef0123456789', # 替换为你的子网IDTargetGroupARNs=[target_group_arn],HealthCheckType='ELB',HealthCheckGracePeriod=300,AvailabilityZones=['us-west-2a', 'us-west-2b'] # 替换为你的可用区
)print("Auto Scaling Group created successfully.")
代码解释:
Step 1: 创建 Load Balancer 并配置监听器
- 创建了一个 Application Load Balancer(ALB),并配置了跨多个可用区的子网。
- 创建了一个目标组,并配置健康检查。
- 创建了一个监听器,将其配置为监听 HTTP 80 端口,并将流量转发到目标组。
Step 2: 创建 Launch Template
- 创建了一个 Launch Template,指定了 AMI ID、实例类型、安全组、用户数据等配置。
Step 3: 创建 Auto Scaling 组
- 使用 Launch Template 创建了一个 Auto Scaling 组,设置了最小、最大和期望的实例数量,并将其挂载到之前创建的 Load Balancer 上。
以上就是在亚马逊云科技上设计一个高可用Web系统架构的最佳实践全部步骤。欢迎大家关注0基础5分钟上手AWS系列,未来获取更多国际前沿的AWS云开发/云架构方案!
相关文章:
零基础5分钟上手亚马逊云科技-高可用Web系统设计最佳实践
简介: 欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列,适用于任何无云计算或者亚马逊云科技技术背景的开发者,通过这篇文章大家零基础5分钟就能完全学会亚马逊云科技一个经典的服务开发架构方案。 我会每天介绍一个基于亚马逊云科技…...
培训学校课程管理系统-计算机毕设Java|springboot实战项目
🍊作者:计算机毕设匠心工作室 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目…...
基于STM32的智能婴儿床控制系统设计(手机APP+蓝牙无线控制)(210)
文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】设计实现的功能【3】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】HC05工作模式配置1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献【4】项目背景【5】摘要1.4 开发工具的选择【1】设备端开发【2】上…...
四、前后端分离通用权限系统(4)
🌻🌻 目录 一、前端开发和前端开发工具1.1、前端开发介绍1.2、下载和安装 VS Code1.2.1、下载地址1.2.2、插件安装1.2.3、创建项目1.2.4、保存工作区1.2.5、新建文件夹和网页1.2.6、预览网页1.2.7、设置字体大小 二、Node.js2.1、Node.js 简介2.1.1、什么…...
时序预测|基于贝叶斯BO-卷积-双向门控单元-注意力机制的单变量时间序列预测模型BO-CNN-BiGRU-Attention
时序预测|基于贝叶斯BO-卷积-双向门控单元-注意力机制的单变量时间序列预测模型BO-CNN-BiGRU-Attention 文章目录 前言时序预测|基于贝叶斯BO-卷积-双向门控单元-注意力机制的单变量时间序列预测模型BO-CNN-BiGRU-Attention 一、BO-CNN-BiGRU-Attention模型1. 贝叶斯优化&#…...
计算机毕业设计PySpark+Flask bilibili弹幕情感分析 B站视频数据可视化 B站爬虫 机器学习 深度学习 NLP自然语言处理 大数据毕业设计
### 开题报告:基于PySpark和Flask的B站弹幕情感分析系统 #### 一、研究背景 在网络视频平台的用户互动中,弹幕(Danmaku)作为一种实时评论的形式,已经成为观众表达观点和情感的重要方式。尤其是在B站(哔哩…...
点击展开详细说明网站html引导页源码
点击展开详细说明网站html引导页源码,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面 https://download.csdn.net/download/huayula/89…...
Android 架构模式之 MVP
目录 架构设计的目的对 MVP 的理解代码ModelViewPresenter Android 中 MVP 的问题试吃个小李子ModelViewPresenter 大家好! 作为 Android 程序猿,你有研究过 MVP 架构吗?在开始接触 Android 那一刻起,我们就开始接触 MVC 架构&am…...
Ciallo~(∠・ω・ )⌒☆第二十二篇 入门request请求库使用
请求库是用于发送HTTP请求的工具。常见的请求库有requests,它是一个功能强大且易于使用的HTTP库。 使用requests库发送GET请求: import requests url "https://httpbin.org/get"# 携带get请求参数 params {"pn": 10,"size&q…...
设计模式-创建型模式-原型模式
1.原型模式定义 用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象; 1.1 原型模式优缺点 优点 当创建一个新的对象实例较为复杂时,使用原型模式可以简化对象的创建过程,通过复制一个已有的实例…...
遗传算法与深度学习实战(7)——使用遗传算法解决N皇后问题
遗传算法与深度学习实战(7)——使用遗传算法解决N皇后问题 0. 前言1. N 皇后问题2. 解的表示3. 遗传算法解决 N 皇后问题小结系列链接 0. 前言 进化算法 (Evolutionary Algorithm, EA) 和遗传算法 (Genetic Algorithms, GA) 已成功解决了许多复杂的设计…...
R语言:如何安装包“linkET”
自己在R语言中安装包“linkET”时报错不存在叫‘linket’这个名字的程辑包 尝试了install.packages("linkET")和BiocManager::install("linkET")两种安装办法都不行 >install.packages("linkET") WARNING: Rtools is required to build R pa…...
JSON, YAML, XML, CSV交互可视化
1、jsoncrack https://jsoncrack.com/editor...
Android UI:PopupWindow:源码分析:设置WindowManager.LayoutParams中的各种参数
文章目录 设置flags是否包含某些flag设置gravity设置type设置softInputMode设置windowAnimations设置width/height设置token 在WindowManager.addView之前设置在WindowManager.addView之后,可通过i熬夜难过update方法设置设置format设置flags是否包含某些flag 1666 …...
MySQL:从入门到放弃
基础查询 MySQL:基础查询 Mybatis:基础巩固-DDL 项目实战 MySQL:按照日期分组查询 查询开始时间与结束时间在指定的日期范围之内,并且结束时间可以为NULL的数据...
C++OpenGL三维显示镜面反射光线漫反射实例
程序示例精选 COpenGL三维显示镜面反射光线漫反射实例 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《COpenGL三维显示镜面反射光线漫反射实例》编写代码,代码整洁,…...
【前端面试】从npm 升级到 pnpm的总结
pnpm优势 pnpm 和 npm 在性能上存在一些明显的差异,这也是一些开发者选择从 npm 切换到 pnpm 的原因。以下是一些关键的差异和原因: 1. 速度: pnpm 比 npm 快了近 2 倍,它通过优化的依赖管理,显著提高了安装速度 。 2. 磁盘空间效率: pnpm 使用基于内容寻址的文件系…...
同步外网YUM源-3
在企业实际应用场景中,仅仅靠光盘里面的RPM软件包是不能满足需要,我们可以把外网的YUM源中的所有软件包同步至本地,可以完善本地YUM源的软件包数量及完整性。 获取外网YUM源软件常见方法包括Rsync、Wget、Reposync,三种同步方法的区别Rsync方式需要外网YUM源支持RSYNC协议…...
Linux的oracle数据库导入其他用户导出的数据库文件
如果用户使用的是expdp的命令,导入就要使用impdp命令,本文以impdp为例进行介绍 1、查看当前创建的所有dmp导出目录 select * from dba_directories 2、为创建的目录赋权限 比如咱们将数据库导入到test用户, grant read,write on directo…...
FLUX.1 文生图模型微调指南
FLUX.1 是 Black Forest Labs 今年夏天发布的文本转图像模型系列。FLUX.1 模型为开源图像生成模型树立了新标准:它们可以生成逼真的手、清晰的文本,甚至可以生成搞笑表情包这样异常困难的任务。 现在,你可以使用 Ostris 的 Replicate 上的 A…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
基于单片机的宠物屋智能系统设计与实现(论文+源码)
本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢,连接红外测温传感器,可实时精准捕捉宠物体温变化,以便及时发现健康异常;水位检测传感器时刻监测饮用水余量,防止宠物…...
负载均衡器》》LVS、Nginx、HAproxy 区别
虚拟主机 先4,后7...
