当前位置: 首页 > news >正文

零基础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.")

代码解释:

  1. Step 1: 创建 Load Balancer 并配置监听器

    • 创建了一个 Application Load Balancer(ALB),并配置了跨多个可用区的子网。
    • 创建了一个目标组,并配置健康检查。
    • 创建了一个监听器,将其配置为监听 HTTP 80 端口,并将流量转发到目标组。
  2. Step 2: 创建 Launch Template

    • 创建了一个 Launch Template,指定了 AMI ID、实例类型、安全组、用户数据等配置。
  3. 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…...

JavaWeb基础:HTTP协议与Tomcat服务器

目录 1. HTTP协议简介 示例代码:创建HTTP GET请求 2. Tomcat服务器介绍 Tomcat的基本操作 示例代码:部署简单Servlet 3. 使用Servlet处理请求 示例代码:处理POST请求 在现代网络开发中,理解HTTP协议和如何使用Tomcat作为服…...

python井字棋游戏设计与实现

python实现井字棋游戏 游戏规则,有三个井字棋盘,看谁连成的直线棋盘多谁就获胜 棋盘的展现形式为 棋盘号ABC和位置数字1-9 输入A1 代表在A棋盘1号位数下棋 效果图如下 部分源码如下: 卫星工纵浩 白龙码程序设计,点 代码获取 …...

据说是可以和 Windows 一拼的 5个 Linux 发行版

现如今有数以千计的 Linux 发行版可供您使用,然而人们却无法选择一个完美的操作系统来替代 Windows。 使用 Windows 时,傻瓜都能操作自如,同样的方法却不适用于 Linux。在这里,您必须具备操作和使用操作系统的基本知识。因此人们经…...

PHP 常用函数

1. ksort() 如果你有一个数组 array([11] > array(XX), [6] > array(YYY)),你想要返回按照key重新排序,并不改变键和值之间的关联,处理之后的结果为 array([6] > array(YY…...

如何将MySQL迁移到TiDB,完成无缝业务切换?

当 MySQL 数据库的单表数据量达到了亿级,会发生什么? 这个现象表示公司的业务上了一个台阶,随着数据量的增加,公司规模也进一步扩大了,是非常喜人的一个改变 ,然而随之而来的其他变化,就没那么…...

【嵌入式烧录刷写文件】-2.10-为一个Intel Hex文件计算校验和Checksum

案例背景(共6页精讲): 有如下一段Intel Hex文件,为其创建Checksum校验和:CRC16,CRC32(CVN),SHA-256 Hash算法…, 将Checksum Value填充到指定地址。 :2091000058595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767…...

整体思想以及取模

前言&#xff1a;一开始由于失误&#xff0c;误以为分数相加取模不能&#xff0c;但是其实是可以取模的 这个题目如果按照一般方法&#xff0c;到达每个节点再进行概率统计&#xff0c;但是不知道为什么只过了百分之十五的测试集 题目地址 附上没过关的代码 #include<bits…...

RabbitMQ 消息可靠保障

RabbitMQ 消息可靠保障 消息的可靠性保证生产者重连生产者确认解决思路A-确认机制解决思路B-备份交换机 MQ 服务器宕机导致消息丢失消费端消息的可靠性保障 消费端限流给消息生成唯一id 消息的可靠性保证 实际项目中 MQ 的流程一般是&#xff1a;生产端把消息路由到交换机&…...

Redis 作为 PHP 的会话存储

使用 Redis 作为 PHP 的会话存储&#xff0c;可以实现多个服务器之间的会话共享&#xff0c;提高会话管理的效率&#xff0c;特别是在分布式系统中。这种方法将会话数据存储在 Redis 中&#xff0c;而不是使用默认的文件系统&#xff0c;从而使多个服务器可以访问相同的会话数据…...

基于伏图的数字心脏模拟仿真APP应用介绍

一、背景介绍 心脏是保证人体正常运转最重要的动力&#xff0c;人体内的血液循环通过心血管运输到各个部位&#xff0c;因此&#xff0c;心血管系统的稳定是人体健康的关键。心血管内科领域极具专业性&#xff0c;其理论研究与技术发展日新月异&#xff0c;心血管疾病患者往往…...

wordpress4.9安装/网络seo营销推广

1、首先你要有图形化桌面 如果没有 用以下命令安装&#xff1a;yum -y groupinstall "Desktop" yum -y groupinstall "X Window System" yum -y groupinstall "Chinese Support" //此为中文简体包&#xff0c;如果不需要&#xff0c;可以不下 将…...

网站用图片做背景图片/石家庄百度搜索引擎优化

C语言简介&#xff1a;BCPL->newB->C->UNIX->Linux->gccC语言专门编写操作系统的语言&#xff0c;所以天生适合对硬件编程&#xff0c;也以运行速度快著称&#xff0c;也非常适合实现数据结构和算法。由于出现时间过早&#xff0c;有很多缺陷&#xff0c;也没想…...

做网站说要自己贴税点是怎么回事呀/近期新闻热点

推荐地址&#xff1a;推荐这款 软件源码模板资料.rar 001 01.第1章内容介绍.flv 003 03.项目介绍-项目概述.flv 004 04.项目介绍-功能模块和业务流程.flv 005 05.项目技术架构-软件架构的演进-从单体到SOA.flv 006 06.项目技术架构-软件架构的演进-微服务架构.flv 007 07.项目…...

wordpress+编辑模板/网络推广培训课程内容

[url]http://commvault.net.cn/page/commshpjch/[/url]转载于:https://blog.51cto.com/zhshujun/150921...

织梦网站地图在线生成/北京seo人员

2019独角兽企业重金招聘Python工程师标准>>> 这里介绍两种安装方式&#xff1a;1.Python源代码编译安装和2.从epel仓库安装 一、Python源代码编译安装 1 - 安装必要工具yum-utils它的主要功能时管理repository及扩展包的工具 sudo yum install yum-utils 如果报错提…...

网站建设行业税率/一键生成网站

简介 Google 的 gflags 是一套命令行参数处理的开源库。比 getopt 更方便&#xff0c;更功能强大&#xff0c;从 C的库更好的支持 C&#xff08;如 C的 string 类型&#xff09;。 example 源代码先看 example 源代码&#xff0c;然后逐步介绍。 example.cc 1 2 3 4 5 6 7 8 9 …...