当前位置:   article > 正文

零基础5分钟上手亚马逊云科技-云原生架构设计

零基础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获取数据。

  1. echo "Renaming index.php to compute-index.php"
  2. mv /var/www/html/index.php /var/www/html/compute-index.php
  3. echo "Renaming serverless-index.php to index.php"
  4. mv /var/www/html/serverless-index.php /var/www/html/index.php
  5. echo "Restarting Apache"
  6. sudo systemctl restart httpdsh

index.php代码如下,可以看到数据库的访问代码段已经更新更新为访问DynamoDB:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <link
  5. 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"
  6. rel="stylesheet">
  7. <link rel="stylesheet" href="style.css">
  8. <meta name="viewport" content="width=device-width, initial-scale=1">
  9. <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
  10. </head>
  11. <body>
  12. <!-- Announcement -->
  13. <div class="announcement">
  14. <p>Save 10%! With Promo Code ANYCO</p>
  15. </div>
  16. <!-- Header -->
  17. <div class="header">
  18. <h1>ANYCO.</h1>
  19. </div>
  20. <!-- Main Body -->
  21. <div class="row">
  22. <div class="column">
  23. <img src="./images/main_icecream.jpg" style="width:100%">
  24. </div>
  25. <div class="column">
  26. <div class="cta">
  27. <p1>DON'T COMPROMISE ON TASTE! TRY OUR BOLD, CLASSIC FLAVORS TODAY.</p1>
  28. </div>
  29. <div class="menu">
  30. <?php
  31. // Autoloader required - using Composer
  32. require 'vendor/autoload.php';
  33. use Aws\DynamoDb\DynamoDbClient;
  34. try {
  35. // Register the Handler
  36. $client = DynamoDbClient::factory(array(
  37. 'version' => 'latest',
  38. 'region' => 'us-west-2',
  39. 'profile' => 'anyCoUser'
  40. ));
  41. $iterator = $client->getIterator('Scan', array(
  42. 'TableName' => 'Products',
  43. ));
  44. foreach ($iterator as $item) {
  45. // Grab the flavor value
  46. echo
  47. "<tr>
  48. <td>{$item['ProductFlavor']['S']}</td>
  49. <td>{$item['ProductPrice']['S']}</td>
  50. </tr>\n";
  51. }
  52. } catch (Exception $e) {
  53. echo 'Caught exception: ', $e->getMessage(), "\n";
  54. }
  55. ?>
  56. </div>
  57. </div>
  58. </div>
  59. <!-- Footer -->
  60. <div class="footer">
  61. <div class="footer-container1">
  62. <p2>Contact Us.</p2><br>
  63. <p2>(555) 555-1212</p2><br>
  64. <p2>1234 AnyCompany Drive</p2><br>
  65. <p2>AnyTown, USA, 55555</p2>
  66. </div>
  67. <div class="footer-container2"">
  68. <a href="#" class="fa fa-facebook"></a>
  69. <a href="#" class="fa fa-twitter"></a>
  70. <a href="#" class="fa fa-instagram"></a>
  71. <a href="#" class="fa fa-pinterest"></a>
  72. </div>
  73. </div>
  74. </body>
  75. </html>

12. 获得以下脚本回复

  1. ******************************
  2. **** This is OUTPUT ONLY. ****
  3. ******************************
  4. Renaming index.php to compute-index.php
  5. Renaming serverless-index.php to index.php
  6. Restarting Apache

13. 由于我们的前端页面目前部署在我们的S3中,我们此时通过打开S3存储桶的index.html网页文件URL,就可以打开我们刚刚部署的网页。

14. 打开网页可以看到,前端页面加载了我们刚刚在NoSQL数据库中添加的数据”Cinnamon-spiced Chocolate 7.99“

以上就是在亚马逊云科技上利用云原生服务设计网页应用架构,提升服务扩展性和降低维护压力、成本的全部步骤。欢迎大家关注0基础5分钟上手AWS系列,未来获取更多国际前沿的AWS云开发/云架构方案。 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/1021157
推荐阅读
相关标签
  

闽ICP备14008679号