零基础5分钟上手亚马逊云科技-高可用Web系统设计最佳实践

news2024/9/20 13:19:51

简介:

欢迎来到小李哥全新亚马逊云科技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'],  # 替换为你的子网ID
    SecurityGroups=['sg-0123456789abcdef0'],  # 替换为你的安全组ID
    Scheme='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 ID
    HealthCheckProtocol='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',  # 替换为你的子网ID
    TargetGroupARNs=[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云开发/云架构方案!

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

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

相关文章

DT浏览器使用教程之如何使用智能问答

DT浏览器使用教程之如何使用智能问答, 在DT浏览器首页点智能问答, 在智能问答页面写上相关问题,点提问, 等待一会儿就可以显示出相关答案了, 点右上角保存,可以保存到DT浏览器的笔记本 DT浏览器是一款适合…

450nm 高功率蓝光激光模组使用多长时间需要更换

450nm蓝光激光模组以其独特的波长特性和高功率输出,成为了市场上备受瞩目的产品。然而,对于用户而言,了解这类高功率激光模组的使用寿命及何时需要更换,是确保工作效率和设备安全性的重要环节。本文将带大家了解450nm 高功率蓝光激…

华为流程框架梳理及实施

获取全部108页完成PPT材料,见下图

游戏发行技术体系

游戏发行技术体系 自认为一个合格的发行技术体系应该包括以下11个部分,并且进行了大致的初步能力划分。 其中,大部分的技术平台在市面上存在三方系统,固在左侧单独的列了一个三方,用来补充后续一些替代品、个人有所遗漏的内容。…

PostgreSQL案例:planning time超长问题分析

问题分析概述 库总是OOM,分析到是执行计划生成有问题,planning time 1秒,planning shared hit 100w。一通分析,定位到是统计信息基表pg_statistic膨胀,由于会话首次SQL执行时的CatCacheMiss,导致backend访…

学习C语言 第十九天

第一项 C 内存管理 内存是通过指针变量来管理的。通过一些函数和运算符,可以对内存进行操作,包括分配、释放、移动和复制等。 序号函数和描述1void *calloc(int num, int size); 在内存中动态地分配 num 个长度为 size 的连续空间,并将每一…

【安全靶场】-DC-7

❤️博客主页: iknow181 🔥系列专栏: 网络安全、 Python、JavaSE、JavaWeb、CCNP 🎉欢迎大家点赞👍收藏⭐评论✍ 一、收集信息 1.查看主机是否存活 nmap -T4 -sP 192.168.216.149 2.主动扫描 看开放了哪些端口和功能 n…

企业差旅报销管理:如何管控差旅成本?

如何高效地管理和控制差旅成本,是每个企业财务部门都要面对的重要课题。作为一体化差旅报销管理平台,分贝通提供了从事前、事中到事后的全流程差旅费控方案,帮助企业实现精细化管理和成本控制。本文将详细介绍分贝通如何通过其全流程差旅费控方案帮助企业管控差旅成本,提升管理…

Ansible初识

ansible初识 Ansible是一种自动化工具,用于配置管理、应用程序部署和任务自动化。它基于Python语言开发,使用SSH协议进行通信,并且不需要在被管理的主机上安装任何客户端。Ansible使用简单的YAML语言来描述任务和配置,使得操作简…

ROS2 入门控制命令(以海龟为例)和工作空间介绍

目录 前言1 打开海龟显示窗口2 启用键盘控制窗口3 海龟按圆形轨迹运动(圆周运动)4 产生新的海龟5 记录并播放海龟运动轨迹ros2 bag 功能5.1 记录5.2 播放 ROS的工作空间6 创建功能包7 编译功能包 前言 命令方向特别注意空格,冒号后面加空格要…

力扣 | 子数组滑动窗口 | 560. 和为 K 的子数组、209. 长度最小的子数组、862. 和至少为 K的最短子数组、220. 存在重复元素 III

文章目录 一、非滑动窗口1.1 560/LCR 010. 和为 K 的子数组1.2 862. 和至少为 K 的最短子数组 二、滑动窗口2.1 209/LCR 008. 长度最小的子数组2.2 220. 存在重复元素 III 下面的题并不是全都由滑动窗口解决,有的题可以,有的题不可以,放入滑动…

《黑神话:悟空》Steam峰值超200万 国内玩家占9成

《黑神话:悟空》自今天白天上午10点解锁以来,Steam在线峰值不断创新高,白天创下的140万记录又被晚上超过。据SteamDB统计,随着更多“打工人”回家休息,《黑神话:悟空》Steam同时在线已经突破了200万&#x…

编程之旅:从挫折到突破的心路历程

你是如何克服编程学习中的挫折感的? 编程学习之路上,挫折感就像一道道难以逾越的高墙,让许多人望而却步。然而,真正的编程高手都曾在这条路上跌倒过、迷茫过,却最终找到了突破的方法。你是如何在Bug的迷宫中找到出口的…

软件产品测试报告内容简析,第三方软件测试公司测试服务分享

在数字化快速发展的今天,软件产品的质量直接影响着企业的竞争力与市场表现,软件产品测试报告作为整个测试过程的总结性文档至关重要。 一、软件产品测试报告   软件产品测试报告是测试团队对软件系统的质量评估和诊断的重要文件,它包含了对…

LabVIEW滚动轴承故障诊断系统

滚动轴承是多种机械设备中的关键组件,其性能直接影响整个机械系统的稳定性和安全性。由于轴承在运行过程中可能会遇到多种复杂的工作条件和环境因素影响,这就需要一种高效、准确的故障诊断方法来确保机械系统的可靠运行。利用LabVIEW开发的故障诊断系统&…

VMwareWorkstation安装ESXi 7.0U3系统详细教程

版本信息 VMwareWorkstation版本如下: ESXI系统镜像版本如下: 安装步骤 ESXi虚拟机硬件配置 选择创建新的虚拟机 选择自定义,点击下一步 选择ESXi 7.0,点击下一步 选择稍后安装操作系统,点击下一步 按照图下所示选择…

十个方面100个网络安全相关知识点,快来学习!(上)

网络安全风险无处不在,现梳理了100个网络安全相关的小知识,希望能进一步提升大家的安全意识,帮助大家建立更加安全的网络环境。 一、账号密码安全 1. 如果有初始密码,应尽快修改。 2. 密码长度不少于8个字符。 3. 不要使用单一…

从零开始的nginx学习世界

一:nginx概述 1.1 nginx是什么 1:Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер&…

Linux ubuntu 24.04 运行《文明5》游戏,解决游戏中文设置的问题!

Linux ubuntu 24.04 运行《文明5》游戏,解决游戏中文设置的问题! 《文明5》是一款回合制经营策略游戏,拼的就是科技发展速度,点的是科技树,抢的就是科技制高点,但是真的是时间漫长,可能需要好几…

解密高可靠分布式锁:优化策略与技术实现指南

随着系统架构逐渐从单机走向分布式,如何在分布式环境下保证线程同步执行成为一个不可忽视的问题。分布式锁作为解决这一问题的关键技术,为分布式系统中的资源共享和任务协调提供了重要支持。选择合适的分布式锁实现方式,可以有效提高系统的可…