零基础5分钟上手亚马逊云科技-云原生架构设计
简介:
欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列,适用于任何无云计算或者亚马逊云科技技术背景的开发者,通过这篇文章大家零基础5分钟就能完全学会亚马逊云科技一个经典的服务开发架构方案。
我会每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿云开发/架构技术解决方案,帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS最佳实践,并应用到自己的日常工作里。本次介绍的是如何利用亚马逊云科技上设计云原生架构,利用S3服务托管前端、EC2服务托管后端应用以及利用DynamoDB托管NoSQL数据库,提升云上应用程序的扩展性,降低运维维护难度。本方案架构图如下:
方案所需基础知识
利用S3托管前端的优势
Amazon S3(Simple Storage Service)是亚马逊云科技提供的高度可扩展、可靠且低成本的对象存储服务。利用S3托管前端应用程序具有以下几个显著优势:
高可用性与扩展性:
S3是一个全球分布的服务,提供了99.99%的可用性。前端文件(如HTML、CSS、JavaScript和图片)可以通过S3进行全球分发,确保用户无论身处何地,都能够快速访问应用。S3的自动扩展能力意味着无论有多少用户同时访问,都能保证稳定的性能。
成本效益:
使用S3托管静态网站或前端资源,费用相对较低。开发者只需为存储的文件和传输的数据量付费,不必担心服务器的维护和管理成本。这使得S3成为托管静态网站的理想选择,尤其适合初创公司和中小型企业。
简单的部署与管理:
将前端代码部署到S3非常简单,只需通过AWS CLI或管理控制台上传文件即可。S3还支持版本控制,允许开发者跟踪和管理不同版本的文件。此外,S3与亚马逊云科技的其他服务(如CloudFront)无缝集成,可以进一步增强内容交付的速度和安全性。
利用EC2作为后端服务器的优势
Amazon EC2(Elastic Compute Cloud)是亚马逊云科技提供的可扩展虚拟服务器,可以运行在云中的任意应用程序。利用EC2作为后端服务器有以下几个优势:
可配置性与灵活性:
EC2提供了多种实例类型,支持不同的计算、内存和存储配置,使开发者可以根据应用的需求选择最适合的实例类型。开发者还可以选择操作系统、安装必要的软件包,并配置防火墙和网络设置,完全控制的计算环境。
自动扩展与负载均衡:
EC2与Auto Scaling和Elastic Load Balancing(ELB)结合使用,可以根据流量自动扩展或收缩计算资源。这意味着在流量高峰期可以自动增加实例数量,在流量减少时自动减少实例,确保高效利用资源,优化成本。
集成与安全性:
EC2与亚马逊云科技的安全服务(如IAM、Security Groups等)深度集成,提供了可靠的安全功能,确保后端服务器及其数据的安全性。开发者可以定义精细的访问控制策略,确保只有经过授权的用户和服务能够访问开发者的EC2实例中的服务。
利用DynamoDB作为数据库的优势
Amazon DynamoDB是亚马逊云科技提供的一种完全托管的NoSQL数据库服务,具有快速性能和无缝扩展能力。作为数据库,DynamoDB在以下几个方面展现出明显的优势:
高性能与低延迟:
DynamoDB能够提供微秒级的延迟,即使在高流量的情况下也能保持一致的性能表现。DynamoDB的设计使其能够处理大量的读写请求,非常适合需要快速响应时间的应用程序,如实时数据处理和高频交易系统。
自动扩展与管理:
DynamoDB自动管理表的扩展和缩减,无需手动分片或进行容量规划。当应用的需求增加时,DynamoDB自动扩展容量,确保数据库能够处理更大的负载。相反,当需求减少时,DynamoDB自动缩减资源使用,帮助开发者节省成本。
无服务器架构:
DynamoDB是一种无服务器的数据库服务,这意味着不必担心底层的基础设施管理,包括服务器维护、软件升级和数据库备份。DynamoDB提供内置的高可用性和数据复制功能,确保数据安全可靠,使开发者能够专注于应用程序的开发和业务逻辑。
本方案包括的内容
1. 向S3存储桶中上传静态网页资源作为前端服务器
2. 将EC2中部署的MySQL迁移到云原生NoSQL服务DynamoDB上
3. 对DynamDB表格中的数据进行更新
4. 测试网页功能是否从数据库加载所需资源
项目搭建具体步骤
1. 打开亚马逊云科技控制台,进入到S3服务主页
2. 创建一个新的S3桶,命名为“labstack-85135d11-e72b-4e05-9185-2c64-s3htmlbucket-bhc9fvyuztil”,点击进入并点击Upload上传静态网页资源。
3. 上传资源后点击Upload确认上传。
4. 此时创建一台EC2作为运行后端应用的服务器,服务器命名为“Ice Cream”,部署后端应用程序,用于访问DynamoDB读取数据库。
5.接下来进入DynamoDB NoSQL数据库服务中
6.创建一个DynamoDB表,命名为“Products”,点击进入。
7. 点击"Create Item"为数据库添加数据
8. 点击右侧‘Add new attribute“为数据库添加新的字段,选择数据类型为String字符。
9. 填入以下键值对:”Id:1“, ”ProductFlavor:Cinnamon-spiced Chocolate“,”ProductPrice:7.99“,最后点击右下角的Create添加数据。
10. 接下来选中服务器Ice Cream,点击右上角的Connect SSH连接进入控制台
11. 运行以下脚本启动Apache Httpd服务器,更新后端应用访问DynamoDB获取数据。
echo "Renaming index.php to compute-index.php"
mv /var/www/html/index.php /var/www/html/compute-index.php
echo "Renaming serverless-index.php to index.php"
mv /var/www/html/serverless-index.php /var/www/html/index.php
echo "Restarting Apache"
sudo systemctl restart httpdsh
index.php代码如下,可以看到数据库的访问代码段已经更新更新为访问DynamoDB:
<!DOCTYPE html>
<html>
<head>
<link
href="https://fonts.googleapis.com/css2?family=Urbanist:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap"
rel="stylesheet">
<link rel="stylesheet" href="style.css">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
<body>
<!-- Announcement -->
<div class="announcement">
<p>Save 10%! With Promo Code ANYCO</p>
</div>
<!-- Header -->
<div class="header">
<h1>ANYCO.</h1>
</div>
<!-- Main Body -->
<div class="row">
<div class="column">
<img src="./images/main_icecream.jpg" style="width:100%">
</div>
<div class="column">
<div class="cta">
<p1>DON'T COMPROMISE ON TASTE! TRY OUR BOLD, CLASSIC FLAVORS TODAY.</p1>
</div>
<div class="menu">
<?php
// Autoloader required - using Composer
require 'vendor/autoload.php';
use Aws\DynamoDb\DynamoDbClient;
try {
// Register the Handler
$client = DynamoDbClient::factory(array(
'version' => 'latest',
'region' => 'us-west-2',
'profile' => 'anyCoUser'
));
$iterator = $client->getIterator('Scan', array(
'TableName' => 'Products',
));
foreach ($iterator as $item) {
// Grab the flavor value
echo
"<tr>
<td>{$item['ProductFlavor']['S']}</td>
<td>{$item['ProductPrice']['S']}</td>
</tr>\n";
}
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
?>
</div>
</div>
</div>
<!-- Footer -->
<div class="footer">
<div class="footer-container1">
<p2>Contact Us.</p2><br>
<p2>(555) 555-1212</p2><br>
<p2>1234 AnyCompany Drive</p2><br>
<p2>AnyTown, USA, 55555</p2>
</div>
<div class="footer-container2"">
<a href="#" class="fa fa-facebook"></a>
<a href="#" class="fa fa-twitter"></a>
<a href="#" class="fa fa-instagram"></a>
<a href="#" class="fa fa-pinterest"></a>
</div>
</div>
</body>
</html>
12. 获得以下脚本回复
******************************
**** This is OUTPUT ONLY. ****
******************************
Renaming index.php to compute-index.php
Renaming serverless-index.php to index.php
Restarting Apache
13. 由于我们的前端页面目前部署在我们的S3中,我们此时通过打开S3存储桶的index.html网页文件URL,就可以打开我们刚刚部署的网页。
14. 打开网页可以看到,前端页面加载了我们刚刚在NoSQL数据库中添加的数据”Cinnamon-spiced Chocolate 7.99“
以上就是在亚马逊云科技上利用云原生服务设计网页应用架构,提升服务扩展性和降低维护压力、成本的全部步骤。欢迎大家关注0基础5分钟上手AWS系列,未来获取更多国际前沿的AWS云开发/云架构方案。