VPC架构设计

一个虚拟私有云(VPC)的结构,名称为“MyVPC”。该VPC包含4个子网,分布在两个可用区(us-east-1a和us-east-1b)中。其中,us-east-1a包含PublicSubnet1和PrivateSubnet1,us-east-1b包含PublicSubnet2和PrivateSubnet2。此外,该VPC还配置了两个路由表:PrivateRouteTable和PublicRouteTable,其中一个路由表的ID为“rtb-08c231d3d0fbbf2c2”。最后,图中显示了两个网络设备:MyInternetGateway和MyNatGateway。这些组件共同构成了一个典型的VPC架构,用于管理和控制网络流量的路由和访问。

image-20240624154008942

B/S架构设计

这幅图展示了一个详细的虚拟私有云(VPC)架构,包含多个AWS组件和服务。该架构包括一个名为”MyVPC”的VPC,内部包含多个子网(如PublicSubnetA、PublicSubnetB、PrivateSubnetA、PrivateSubnetB)和路由表(如PublicRouteTable、PrivateRouteTable)。此外,还配置了网络ACL(如PublicNetworkACL、PrivateNetworkACL)来控制子网的入站和出站流量。网络设备方面,包含一个InternetGateway用于公共子网的互联网访问,以及一个NATGateway和其对应的弹性IP用于私有子网的互联网访问。安全组(如PublicInstanceSecurityGroup、PrivateInstanceSecurityGroup)用于实例的流量控制。实例部分,包括PublicInstanceA、PublicInstanceB、PrivateInstanceA、PrivateInstanceB等。

该架构使用堡垒机来登录实例,VPC通过CloudFormation模板构建,并基于CloudWatch指标实现自动扩展(AutoScaling)。会话状态保存在DynamoDB中,数据库缓存使用Amazon
ElastiCache for
Redis。此外,还使用消息队列SQS来处理消息。这些组件通过复杂的连接关系,构成了一个集成的、高度可扩展和可靠的网络架构,用于管理和控制流量的路由、访问和安全性,适用于在云环境中部署和管理各种应用和服务。

image-20240624154015927

Auto Scaling组配置

定义了一个自动扩展启动配置(Launch
Configuration),指定了使用的AMI镜像、实例类型、安全组、用户数据等信息,确保新实例能够按照指定的配置启动并运行。接着创建了一个自动扩展组(Auto
Scaling
Group),设置了VPC子网、启动配置、最小和最大实例数量、目标组等参数,以便根据负载情况自动调整实例数量。同时,配置了CloudWatch告警监控CPU利用率高低,当CPU利用率超过或低于阈值时,会触发相应的扩展或缩容策略。具体而言,定义了两个告警,分别用于CPU利用率超过70%和低于30%时的自动扩展和缩容操作。此外,还设置了扩展和缩容策略,包括调整实例数量、冷却时间等参数,以确保系统能够根据负载情况自动调整实例数量,实现自动化弹性扩展和收缩。整体而言,这个配置文件实现了一个基于CPU利用率的自动扩展机制,能够根据实际负载情况动态调整实例数量,提高系统的

image-20240624154021722

image-20240624154027789

ALB配置

这个应用负载均衡器(ALB)在你的架构中担任了至关重要的角色,确保了应用的高效运行和用户体验的优化。具体来说,ALB将进入的应用程序流量智能地分配到多个目标(如EC2实例),平衡了负载并防止了单点故障,从而保证了系统的高可用性和可扩展性。通过定期进行健康检查,ALB确保只有健康的实例接收流量,如果某个实例出现故障,它会自动将流量重定向到其他健康的实例,提高了应用的可靠性。

此外,ALB支持基于内容的路由功能,可以根据请求的URL路径、HTTP头、查询字符串等,将流量路由到不同的目标组,使得你可以更灵活地管理流量,比如将静态内容和动态内容分开处理,从而优化资源使用。ALB还可以与AWS的安全服务(如AWS
WAF和ACM)集成,提供强大的安全防护,支持SSL/TLS终止,确保传输层的安全,同时简化了证书管理。通过与Auto
Scaling集成,ALB可以根据流量负载自动增加或减少目标实例的数量,确保了应用能够应对流量高峰,同时优化了成本。ALB还与CloudWatch无缝集成,提供详细的监控和日志记录功能,让你可以实时监控流量模式、请求响应时间等关键指标,快速识别和解决潜在问题。

image-20240624154059526

image-20240624154035908

通过CloudFormation进行快速实施过程

首先,通过CloudFormation创建一个VPC和多个子网,配置Internet网关和NAT网关以实现公共和私有网络的连接。然后设置安全组并启动Bastion主机作为跳板机。接着,配置目标组和创建应用负载均衡器,设置监听器以将流量引导到后端实例。定义启动配置并基于此配置创建自动伸缩组,实现根据负载情况动态调整实例数量。继续创建RDS子网组和部署RDS实例,确保数据库服务的高可用性和持久性。创建DynamoDB表以存储非结构化数据,实现快速读写和扩展性。配置ElastiCache子网组并部署ElastiCache集群,提供高性能的缓存服务,加速数据访问。最后,创建SQS队列用于处理消息队列,确保应用程序之间的异步通信。在完成上述步骤后,获取关键资源的信息,包括Bastion主机的公有IP地址用于远程访问,负载均衡器的DNS名称用于访问应用程序,RDS实例的终端节点用于数据库连接,DynamoDB表名用于数据存储,Redis缓存的终端节点用于快速数据缓存,以及SQS队列的URL用于消息处理。这样可以确保整个架构的部署和运行顺利进行。

image-20240624154107810

image-20240624154125600

image-20240624154114091

遇到的问题与解决方案

权限问题:如果遇到权限不足的问题,确保使用的IAM用户或角色具有必要的权限,比如创建VPC、子网、EC2实例、RDS实例等权限。

资源限制问题:如果遇到资源限制(如EC2实例配额不足),可以通过联系AWS支持来提升配额。

网络配置问题:确保VPC和子网的CIDR块配置正确,避免重叠。确保安全组规则配置正确,允许所需的入站和出站流量。

模板语法错误:使用AWS
CloudFormation的模板验证工具来检查模板语法是否正确。

测试方案与结果

基于CloudWatch的AutoScaling

CloudWatch的Auto
Scaling是一种动态调整计算资源以匹配应用需求的机制,通过监控关键指标(如CPU利用率)来触发扩展或缩减操作。CloudWatch会收集和监控这些指标,并基于设定的阈值触发警报。当警报触发时,Auto
Scaling组会根据预定义的策略自动增加或减少EC2实例的数量。例如,当CPU利用率超过某个阈值时,Auto
Scaling会增加实例数量以处理高负载;当CPU利用率低于阈值时,Auto
Scaling会减少实例数量以节约成本。通过这种方式,Auto
Scaling确保了应用程序的高可用性和性能,同时优化了资源使用和成本效益。

image-20240624154158215

DynamoDB保存会话状态

在Web应用中,会话(Session) 是在用户与服务器之间的交互过程中维持状态的一种方式。HTTP协议本身是无状态的,这意味着每个请求都是独立的,服务器默认不会记住前一个请求的信息。会话状态技术允许服务器记住用户的状态信息(如用户是否已登录、用户的偏好设置等),这对于创建交互式Web应用是必要的。DynamoDB作为会话存储的后端,帮助Web应用维护用户的状态,提供连贯的用户体验,并且能够在用户数量激增时保持高性能和可靠性。

image-20240624154209751

使用消息队列SQS

使用AWS
SDK(例如Python的Boto3)向队列发送消息。首先,确保你已安装Boto3并配置了AWS凭证。接收消息也很简单。使用同样的SQS客户端,你可以从队列中拉取消息。

image-20240624154216362

使用ElastiCache for Redis数据库缓存

ElastiCache for Redis 是一种由 AWS
托管的内存缓存服务,通过在内存中存储数据,提供极低的延迟和高吞吐量的数据访问能力,适用于实时分析、会话存储和排行榜等应用场景。它支持水平和垂直扩展,可以根据应用需求动态调整节点数量和实例规格,确保在流量高峰期依然高效运行。通过多可用区部署和自动故障转移功能,ElastiCache
for Redis
提供了高可用性和数据持久性,确保在节点故障时数据不丢失并迅速恢复。此外,ElastiCache
for Redis 是完全托管的服务,AWS
负责基础设施管理、软件更新、安全补丁和备份恢复,简化了管理工作,使开发者可以专注于应用开发。它还支持VPC、子网、安全组和加密功能,确保数据传输和存储的安全性。总之,ElastiCache
for Redis
提供了一个高效、可靠和安全的缓存解决方案,显著提升了数据访问速度和系统响应能力,简化了缓存管理和运维工作,使开发者能够专注于核心业务逻辑的开发。

image-20240624154224745

实例与数据库连接

为了使EC2实例与RDS实例互联,需要创建并配置两个安全组,一个用于EC2实例,另一个用于RDS实例。然后在RDS实例的安全组中添加入站规则,允许从EC2实例的安全组IP地址范围通过数据库端口(如3306)进行访问。最后,在EC2实例中配置数据库客户端,使用RDS实例的端点和端口号进行连接,从而实现网络通信与数据库操作。

image-20240624154229517

image-20240624154234077

用CloudFormation进行VPC内容创建

使用CloudFormation进行VPC创建可以自动化管理和部署完整网络架构。通过编写CloudFormation模板,可以创建一个VPC,设置其CIDR块,配置公共和私有子网,创建并连接Internet网关和NAT网关,并配置路由表和关联。这样不仅提高了部署效率,还减少了人为配置错误,确保网络架构的可重复性和一致性。例如,模板中配置了一个CIDR为10.0.0.0/16的VPC,包含两个公共子网和两个私有子网,并分别配置了路由表和NAT网关,以保证私有子网具有访问外部网络的能力。

AWSTemplateFormatVersion: '2010-09-09'
Description: AWS CloudFormation Template for B/S Architecture with VPC, Subnets, RDS, EC2, Auto Scaling, DynamoDB, ElastiCache, and SQS

Resources:

MyVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
EnableDnsSupport: true
EnableDnsHostnames: true
Tags:
- Key: Name
Value: MyVPC

PublicSubnet1:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref MyVPC
CidrBlock: 10.0.0.0/24
MapPublicIpOnLaunch: true
AvailabilityZone: us-east-1a
Tags:
- Key: Name
Value: PublicSubnet1

PublicSubnet2:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref MyVPC
CidrBlock: 10.0.2.0/24
MapPublicIpOnLaunch: true
AvailabilityZone: us-east-1b
Tags:
- Key: Name
Value: PublicSubnet2

PrivateSubnet1:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref MyVPC
CidrBlock: 10.0.1.0/24
MapPublicIpOnLaunch: false
AvailabilityZone: us-east-1a
Tags:
- Key: Name
Value: PrivateSubnet1

PrivateSubnet2:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref MyVPC
CidrBlock: 10.0.3.0/24
MapPublicIpOnLaunch: false
AvailabilityZone: us-east-1b
Tags:
- Key: Name
Value: PrivateSubnet2

InternetGateway:
Type: AWS::EC2::InternetGateway
Properties:
Tags:
- Key: Name
Value: MyInternetGateway

GatewayAttachment:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
VpcId: !Ref MyVPC
InternetGatewayId: !Ref InternetGateway

NatGatewayEIP:
Type: AWS::EC2::EIP
Properties:
Domain: vpc
Tags:
- Key: Name
Value: MyNatGatewayEIP

NatGateway:
Type: AWS::EC2::NatGateway
Properties:
SubnetId: !Ref PublicSubnet1
AllocationId: !GetAtt NatGatewayEIP.AllocationId
Tags:
- Key: Name
Value: MyNatGateway

PublicRouteTable:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref MyVPC
Tags:
- Key: Name
Value: PublicRouteTable

DefaultPublicRoute:
Type: AWS::EC2::Route
DependsOn: GatewayAttachment
Properties:
RouteTableId: !Ref PublicRouteTable
DestinationCidrBlock: 0.0.0.0/0
GatewayId: !Ref InternetGateway

PublicSubnet1RouteTableAssociation:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref PublicSubnet1
RouteTableId: !Ref PublicRouteTable

PublicSubnet2RouteTableAssociation:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref PublicSubnet2
RouteTableId: !Ref PublicRouteTable

PrivateRouteTable:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref MyVPC
Tags:
- Key: Name
Value: PrivateRouteTable

DefaultPrivateRoute:
Type: AWS::EC2::Route
Properties:
RouteTableId: !Ref PrivateRouteTable
DestinationCidrBlock: 0.0.0.0/0
NatGatewayId: !Ref NatGateway

PrivateSubnet1RouteTableAssociation:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref PrivateSubnet1
RouteTableId: !Ref PrivateRouteTable

PrivateSubnet2RouteTableAssociation:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref PrivateSubnet2
RouteTableId: !Ref PrivateRouteTable

WebServerSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Enable HTTP, RDP, and SSH access
VpcId: !Ref MyVPC
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 3389
ToPort: 3389
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 5555
ToPort: 5555
CidrIp: 0.0.0.0/0
Tags:
- Key: Name
Value: WebServerSecurityGroup

BastionHostSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Enable SSH access to bastion host
VpcId: !Ref MyVPC
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 3389
ToPort: 3389
CidrIp: 0.0.0.0/0
Tags:
- Key: Name
Value: BastionHostSecurityGroup

BastionHostInstance:
Type: AWS::EC2::Instance
Properties:
InstanceType: t2.micro
ImageId: ami-00beae93a2d981137
SubnetId: !Ref PublicSubnet1
KeyName: keytest
SecurityGroupIds:
- !Ref BastionHostSecurityGroup
Tags:
- Key: Name
Value: BastionHostInstance

# Load Balancer Security Group
LoadBalancerSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Enable access to Load Balancer
VpcId: !Ref MyVPC
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 443
ToPort: 443
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 5555
ToPort: 5555
CidrIp: 0.0.0.0/0
Tags:
- Key: Name
Value: LoadBalancerSecurityGroup

# Application Load Balancer
ApplicationLoadBalancer:
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
Properties:
Name: MyApplicationLoadBalancer
Subnets:
- !Ref PublicSubnet1
- !Ref PublicSubnet2
SecurityGroups:
- !Ref LoadBalancerSecurityGroup
Scheme: internet-facing
Tags:
- Key: Name
Value: MyApplicationLoadBalancer

# Target Group for Load Balancer
TargetGroup:
Type: AWS::ElasticLoadBalancingV2::TargetGroup
Properties:
VpcId: !Ref MyVPC
Port: 80
Protocol: HTTP
TargetType: instance
HealthCheckProtocol: HTTP
HealthCheckPort: 80
HealthCheckPath: /
HealthCheckIntervalSeconds: 30
HealthCheckTimeoutSeconds: 5
HealthyThresholdCount: 5
UnhealthyThresholdCount: 2
Tags:
- Key: Name
Value: MyTargetGroup

TargetGroupTwo:
Type: AWS::ElasticLoadBalancingV2::TargetGroup
Properties:
VpcId: !Ref MyVPC
Port: 5555
Protocol: HTTP
TargetType: instance
HealthCheckProtocol: HTTP
HealthCheckPort: 5555
HealthCheckPath: /
HealthCheckIntervalSeconds: 30
HealthCheckTimeoutSeconds: 5
HealthyThresholdCount: 5
UnhealthyThresholdCount: 2
Tags:
- Key: Name
Value: MyTargetGroupTwo

# Listener for Load Balancer
LoadBalancerListenerHTTP:
Type: AWS::ElasticLoadBalancingV2::Listener
Properties:
LoadBalancerArn: !Ref ApplicationLoadBalancer
Protocol: HTTP
Port: 80
DefaultActions:
- Type: forward
TargetGroupArn: !Ref TargetGroup

LoadBalancerListenerCustomPort:
Type: AWS::ElasticLoadBalancingV2::Listener
Properties:
LoadBalancerArn: !Ref ApplicationLoadBalancer
Protocol: HTTP
Port: 5555
DefaultActions:
- Type: forward
TargetGroupArn: !Ref TargetGroupTwo

# Auto Scaling Launch Configuration
LaunchConfiguration:
Type: AWS::AutoScaling::LaunchConfiguration
Properties:
ImageId: ami-00beae93a2d981137
InstanceType: t2.micro
KeyName: keytest
SecurityGroups:
- !Ref WebServerSecurityGroup
UserData:
Fn::Base64: !Sub |
#!/bin/bash
yum update -y
yum install -y httpd nodejs unzip
systemctl start httpd
systemctl enable httpd
cd /var/www/html
aws s3 cp s3://myawsbucketkalyanzitiu/mysqlViewer.zip
unzip mysqlViewer.zip
rm mysqlViewer.zip
npm install
node /var/www/html/start.js &
/opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource AutoScalingGroup --region ${AWS::Region}

# Auto Scaling Group
AutoScalingGroup:
Type: AWS::AutoScaling::AutoScalingGroup
Properties:
VPCZoneIdentifier:
- !Ref PrivateSubnet1
- !Ref PrivateSubnet2
LaunchConfigurationName: !Ref LaunchConfiguration
MinSize: 1
MaxSize: 3
DesiredCapacity: 2
TargetGroupARNs:
- !Ref TargetGroup
Tags:
- Key: Name
Value: MyAutoScalingGroup
PropagateAtLaunch: true
- Key: Environment
Value: Production
PropagateAtLaunch: true

# CloudWatch Alarm for Auto Scaling
CPUUtilizationAlarmHigh:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmDescription: "Scale up if CPU > 70% for 5 minutes"
Namespace: AWS/EC2
MetricName: CPUUtilization
Dimensions:
- Name: AutoScalingGroupName
Value: !Ref AutoScalingGroup
Statistic: Average
Period: 300
EvaluationPeriods: 1
Threshold: 70
ComparisonOperator: GreaterThanThreshold
AlarmActions:
- Ref: ScaleUpPolicy

CPUUtilizationAlarmLow:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmDescription: "Scale down if CPU < 30% for 5 minutes"
Namespace: AWS/EC2
MetricName: CPUUtilization
Dimensions:
- Name: AutoScalingGroupName
Value: !Ref AutoScalingGroup
Statistic: Average
Period: 300
EvaluationPeriods: 1
Threshold: 30
ComparisonOperator: LessThanThreshold
AlarmActions:
- Ref: ScaleDownPolicy

# Scaling Policies
ScaleUpPolicy:
Type: AWS::AutoScaling::ScalingPolicy
Properties:
AutoScalingGroupName: !Ref AutoScalingGroup
PolicyType: SimpleScaling
AdjustmentType: ChangeInCapacity
ScalingAdjustment: 1
Cooldown: 300

ScaleDownPolicy:
Type: AWS::AutoScaling::ScalingPolicy
Properties:
AutoScalingGroupName: !Ref AutoScalingGroup
PolicyType: SimpleScaling
AdjustmentType: ChangeInCapacity
ScalingAdjustment: -1
Cooldown: 300

# DynamoDB Table
DynamoDBTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: SessionTable
AttributeDefinitions:
- AttributeName: SessionId
AttributeType: S
KeySchema:
- AttributeName: SessionId
KeyType: HASH
ProvisionedThroughput:
ReadCapacityUnits: 5
WriteCapacityUnits: 5
Tags:
- Key: Name
Value: SessionTable

# ElastiCache for Redis
RedisCacheCluster:
Type: AWS::ElastiCache::CacheCluster
Properties:
CacheNodeType: cache.t3.micro
Engine: redis
NumCacheNodes: 1
VpcSecurityGroupIds:
- !Ref WebServerSecurityGroup
CacheSubnetGroupName: !Ref RedisSubnetGroup
Tags:
- Key: Name
Value: RedisCacheCluster

RedisSubnetGroup:
Type: AWS::ElastiCache::SubnetGroup
Properties:
Description: "Subnet group for Redis cache"
SubnetIds:
- !Ref PrivateSubnet1
- !Ref PrivateSubnet2
CacheSubnetGroupName: RedisSubnetGroup

# SQS Queue
SQSQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: MyQueue
Tags:
- Key: Name
Value: MySQSQueue

MyDBSubnetGroup:
Type: AWS::RDS::DBSubnetGroup
Properties:
DBSubnetGroupDescription: My DB Subnet Group
SubnetIds:
- !Ref PrivateSubnet1
- !Ref PrivateSubnet2
Tags:
- Key: Name
Value: MyDBSubnetGroup

# RDS Instance for Multi-AZ Deployment
DBInstance:
Type: AWS::RDS::DBInstance
Properties:
DBName: MyDatabase
AllocatedStorage: 20
DBInstanceClass: db.t3.micro
Engine: mysql
MasterUsername: admin
MasterUserPassword: admin123
VPCSecurityGroups: []
DBSubnetGroupName: !Ref MyDBSubnetGroup
MultiAZ: true
Tags:
- Key: Name
Value: MyRDSInstance
DeletionPolicy: Snapshot

Outputs:
DBInstanceEndpoint:
Description: "The endpoint of the RDS instance"
Value: !GetAtt DBInstance.Endpoint.Address
BastionHostPublicIp:
Description: "The public IP address of the bastion host"
Value: !GetAtt BastionHostInstance.PublicIp
LoadBalancerDNSName:
Description: "The DNS name of the Application Load Balancer"
Value: !GetAtt ApplicationLoadBalancer.DNSName
DynamoDBTableName:
Description: "The name of the DynamoDB table"
Value: !Ref DynamoDBTable
RedisCacheEndpoint:
Description: "The endpoint of the Redis cache cluster"
Value: !GetAtt RedisCacheCluster.RedisEndpoint.Address
SQSQueueURL:
Description: "The URL of the SQS queue"
Value: !Ref SQSQueue

使用堡垒机登录实例

首先,通过SSH连接到堡垒机,以便安全地访问私有子网内的Web实例。登录堡垒机后,利用存储在堡垒机上的SSH密钥登录私有子网内的Web实例进行部署操作。有时使用密钥登录可能会显示“权限被拒绝”的错误,这通常是由于密钥文件权限设置不正确导致的。此时,可以通过运行chmod
400
path_to_your_private_key命令重新设置密钥文件权限,确保只有当前用户可以读取该文件,从而解决登录被拒绝的问题。通过这种方式,能够安全有效地管理和部署私有子网内的实例。

image-20240624154256449

image-20240624154303065

image-20240624154308929

性能评估

负载均衡测试

通过性能监控对实例进行分流,显示不同ip型号的实例

image-20240624154334381

image-20240624154338428

数据库性能测试

显示了数据库性能测试中的几个关键指标,包括剩余存储空间、读写操作次数(IOPS)、网络接收与发送吞吐量等。图中显示在测试初期读写操作和网络传输活动较高,随后逐渐趋于平稳,表明数据库在高负载初期经过密集活动后恢复到稳定状态。

image-20240624154345250

自动伸缩功能测试

进行自动伸缩功能测试时,首先配置一个Auto
Scaling组,并设置其最小实例数为2,最大实例数为3。此外,创建缩放策略,当CPU利用率低于30%时减少实例数量,当CPU利用率高于70%时增加实例数量。启动测试后,可以观察到,当负载增加时,Auto
Scaling组中的实例数量从2个自动扩展到3个,而在负载减小时,实例数量则会减少回2个。这种自动调整实例数量的功能确保了应用在高负载时有足够的资源,同时在低负载时节省资源成本。

image-20240624154404728

image-20240624154351414

image-20240624154414919

image-20240624154424766

项目部署效果测试

项目架构部署在AWS云平台上,使用包含两个可用区的VPC,配置有公有和私有子网,互联网网关和NAT网关。核心部分是通过配置在互联网网关内的应用程序负载均衡器和Auto
Scaling组,实现Web实例的自动扩展,并将这些实例分布在两个可用区内。同时,RDS数据库配置了主备实例,确保数据的高可用性和可靠性。安全组进一步管理网络安全,确保系统的高可用性和灵活扩展性。

当负载均衡器正常运行时,提示项目成功启动。您可以通过访问以下URL连接到数据库并查看Web项目:

http://myapplicationloadbalancer-608454718.us-east-1.elb.amazonaws.com:5555/

这将能够直接访问部署在AWS上的Web应用,并与底层的数据库实例交互,确保应用的可靠运行和性能优化。

image-20240624154510878

image-20240624154514651