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

news/2024/9/19 11:45:43/ 标签: 科技, 云原生, 架构, aws, 亚马逊云科技, 云计算, 开发

简介:

欢迎来到小李哥全新亚马逊云科技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.phpecho "Renaming serverless-index.php to index.php"
mv /var/www/html/serverless-index.php /var/www/html/index.phpecho "Restarting Apache"
sudo systemctl restart httpdsh

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

<!DOCTYPE html>
<html>
<head><linkhref="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 Composerrequire '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 valueecho"<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云开发/云架构方案。 


http://www.ppmy.cn/news/1517533.html

相关文章

当代传输算法以及其效率和公平

我不再提拥塞控制算法&#xff0c;因为当代一个好的&#xff0c;正常的传输算法本应该天然主动避免拥塞&#xff0c;而不是拥塞了再控制&#xff0c;本着这个思路&#xff0c;我甚至觉得 bbr 的 probe 都是一种 capacity-seeking 行为&#xff0c;而 capacity-seeking 是一定会…

简单分享下Python文件压缩与解压

在日常开发和数据处理中&#xff0c;文件的压缩与解压是一项基础而实用的技能。Python通过zipfile和tarfile模块提供了强大的文件压缩和解压缩功能。下面&#xff0c;我们将通过10个实战技巧&#xff0c;一步步深入学习如何高效地操作文件压缩包。 技巧1: 创建ZIP压缩文件 目…

会议音频方案

会议音频方案往往会根据会议室的大小、形状和用途等因素进行定制。不同的会议环境需要不同的音频解决方案&#xff0c;以确保声音的清晰度、覆盖范围和回声控制。以下是根据会议室大小和用途定制音频方案的关键考虑因素&#xff1a; 1. 小型会议室通常容纳4-10人&#xff0c;房…

rockyliunx 救援模式下禁用docker

目录地址 /usr/lib/systemd/system/docker.service 进入系统界面&#xff1a; 选择系统 按E 按e出现 如下界面&#xff0c;找到 quite 后面添加 init/bin/bash 按 ctrl x 保存 后&#xff0c;到如下界面 加载文件系统为读写 输入命令 mount -o remount, rw / 修改docer.s…

etcd v2/v3 最全常用命令差异

etcd v2/v3 最全常用命令差异 在分布式系统中&#xff0c;ETCD作为一个高性能、可靠且安全的键值存储系统&#xff0c;广泛应用于配置共享、服务发现、分布式锁等多个领域。 下面整理了v2/v3版本中命令的使用差异。 1. 查看集群状态 使用etcdctl member list命令可以查看ETC…

HarmonyOS 鸿蒙获取微信授权和持续获取位置信息

获取授权 PermissionManager.ets import { BusinessError } from "kit.BasicServicesKit"; import { abilityAccessCtrl, bundleManager, PermissionRequestResult, Permissions, common ,Want} from "kit.AbilityKit";/*** 查询是否有单个权限* param pe…

前端环境配置

GIT 安装 官网下载进行安装 前往下载已有项目执行git&#xff08;电脑C盘格式化&#xff0c;但是项目盘保留&#xff09;&#xff0c;可执行 git config --global --add safe.directory 项目绝对路径连接公司git&#xff1a; 命令rsa得到ssh key&#xff0c;添加到git网站配置…

华为Cloud连接配置

Cloud(云)连接意思为本地电脑和eNSP中的虚拟的VRP系统连接的 配置Cloud 先添加UDP 再添加需要使用的网卡 网卡建议使用虚拟机的网卡&#xff0c;如果没有虚拟机也可以使用其他网卡&#xff0c;自己设定一下IP就行 端口映射设置 配置R1 [R1]int e0/0/0 [R1-Ethernet0/0/0]ip …

双系统ubuntu引导项丢失如何修复

本来是win11和ubunt22.04的双系统&#xff0c;但是现在工作需要做一个外接固态里安装ubunt22.04去安装autoware, 按照装双系统的方法也装上了&#xff0c;引导项不知怎么回事&#xff0c;被设置在外接固态硬盘中了&#xff0c;导致开机必须插上外接固态才能进入引导项&#xff…

解决npm下载依赖速度慢的问题

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

智能儿童对讲机语音交互,乐鑫ESP-RTC音视频通信,ESP32无线语音方案

儿童对讲机一种专为孩子们设计的通讯设备&#xff0c;可以让父母与孩子之间进行双向通讯&#xff0c;增强亲子关系&#xff0c;增强孩子的可玩性。 儿童对讲机近几年发展的比较快&#xff0c;通过无线WiFi及蓝牙通信技术&#xff0c;可以实现远程控制和语音交互功能&#xff0…

浅析车辆类型检测算法实际应用车辆类型检测算法源码

随着交通运输和物流需求的不断增长&#xff0c;车辆类型检测的准确性和效率成为了一个关键问题。传统的检测方法往往依赖人工和基础的识别技术&#xff0c;面对日益复杂的交通环境&#xff0c;这些方法显得力不从心。幸运的是&#xff0c;智能算法的应用为这一问题带来了突破性…

MySQL 延迟从库介绍

前言&#xff1a; 我们都知道&#xff0c;MySQL 主从延迟是一件很难避免的情况&#xff0c;从库难免会偶尔追不上主库&#xff0c;特别是主库有大事务或者执行 DDL 的时候。MySQL 除了这种正常从库外&#xff0c;还可以设置延迟从库&#xff0c;顾名思义就是故意让从库落后于主…

考研系列-数据结构第八章:排序(下)

一、归并排序 1.算法思想 基本思想是将一个数组分成两半,对这两半分别进行排序,然后将排序好的两半合并在一起。这个过程一直递归进行,直到划分的子数组只包含一个元素(此时认为该元素已经排序好),然后开始合并过程,直到合并为一个完整的、排序好的数组。 2.具体步骤 …

C++设计模式6:适配器模式

适配器模式的主要目的&#xff0c;是让不兼容的接口可以在一起工作&#xff0c;当我们自己的项目接口与一些第三方库的接口不兼容的时候&#xff0c;就需要用到适配器&#xff0c;或者我们自己重构自己的代码&#xff0c;显然后者的代价比较大。 假如&#xff0c;我们有一种电脑…

【设计模式之建造者模式——自行车加工】

背景&#xff1a; 软件开发过程中有的时候需要创建很复杂的对象&#xff0c; ⽽建造者模式的主要思想是将对象的构建过程分为多个步骤&#xff0c;并为每个步骤定义⼀个抽象的接⼝。 具体的构建过程&#xff1a;由实现了这些接⼝的具体建造者类来完成。同时有⼀个指导者类负责…

如何设置Winfrom中dataGridView中的内容换行并行高自适应

如何设置Winfrom中dataGridView行高 在 Windows Forms (WinForms) 应用程序中&#xff0c;DataGridView 控件用于显示和编辑数据的表格形式。如果你想要设置 DataGridView 控件中行的高度&#xff0c;可以通过以下几种方式来实现&#xff1a; 1. 通过属性设置行高 你可以直接…

Springboot里集成Mybatis-plus、ClickHouse

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; Springboot里集成Mybati…

pytorch深度学习基础 8 (使用PyTorch的内置功能和默认参数来构建和训练一个简单的线性模型)

co 上面几节都是自定义了很多东西&#xff0c;比如模型的权重&#xff0c;偏置的大小&#xff0c;学习率&#xff0c;损失函数等等&#xff0c;但是实际上pytorch有很多内置的函数以及默认的参数可以对我们的模型部分进行替换&#xff0c;效果也是非常好的&#xff0c;今天我们…

【C#】【EXCEL】Bumblebee/Components/Analysis/GH_Ex_Ana_CondBar.cs

这段代码定义了一个名为 GH_Ex_Ana_CondBar 的 Grasshopper 组件&#xff0c;其主要功能是为 Excel 工作表中的特定范围添加条件格式条形。以下是该组件的主要功能和特点&#xff1a; 功能概述&#xff1a; 为 Excel 中的数据范围添加基于相对值的条件格式条形允许用户自定义条…