当前位置: 首页 > news >正文

Amazon云计算AWS(一)

目录

    • 一、基础存储架构Dynamo
      • (一)Dynamo概况
      • (二)Dynamo架构的主要技术
    • 二、弹性计算云EC2
      • (一)EC2的基本架构
      • (二)EC2的关键技术
      • (三)EC2的安全及容错机制



在这里插入图片描述
提供的服务主要包括:

  • 弹性计算云EC2
  • 简单存储服务S3
  • 简单数据库服务Simple DB
  • 简单队列服务SQS
  • 弹性MapReduce服务
  • 内容推送服务CloudFront
  • 电子商务服务DevPay
  • FPS

一、基础存储架构Dynamo

(一)Dynamo概况

在这里插入图片描述

面向服务的Amazon平台基本架构

为了保证其稳定性,Amazon的系统采用完全的分布式、去中心化的架构。

  • 作为底层存储架构的Dynamo也同样采用了无中心的模式
  • Dynamo只支持简单的键/值(key/value)方式的数据存储,不支持复杂的查询
  • Dynamo中存储的是数据值的原始形式,即按位存储,并不解析数据的具体内容

(二)Dynamo架构的主要技术

  Dynamo在设计时被定位为一个基于分布式存储架构的,高可靠、高可用且具有良好容错性的系统。下表列举了Dynamo设计时面临的主要问题及所采取的解决方案。

Dynamo需要解决的主要问题及解决方案
问题采取的相关技术
数据均衡分布改进的一致性哈希算法
数据备份参数可调的弱quorum机制
数据冲突处理向量时钟(Vector Clock)
成员资格及错误检测基于Gossip协议的成员资格和错误检测
临时故障处理Hinted handoff(数据回传机制)
永久故障处理Merkle哈希树

  Dynamo中的存储节点呈无中心的环状分布。包含两个基本概念:preference list 是存储与某个特定键值相对应的数据的节点列表;coordinator 是执行一次读或写操作的节点。通常,coordinator 是 preference list 上的第一个节点。

在这里插入图片描述
1、数据均衡分布的问题

  Dynamo采用了分布式的数据存储架构,均衡的数据分布可以保证负载平衡和系统良好的扩展性。因此,如何在各个节点上数据的均衡性是影响Dynamo性能的关键问题。Dynamo中使用改进后的一致性哈希算法,并在此基础上进行数据备份,以提高系统的可用性。

在这里插入图片描述
(1)一致性哈希算法

  一致性哈希算法是目前主流的分布式哈希表(Distributed Hash Table,DHT)协议之一,于1997年由麻省理工学院提出。一致性哈希算法通过修正简单哈希算法,解决了网络中的热点问题,使得DHT可以真正地应用于P2P环境中。

在这里插入图片描述
  一致性哈希算法除了能够保证哈希运算结果充分分散到整个环上外,还能保证在添加或删除设备节点时只会影响到其在哈希环中的前驱设备节点,而不会对其他设备节点产生影响。

在这里插入图片描述
  一致性哈希算法可以大大降低在添加或删除节点时引起的节点间的数据传输开销。

(2)改进的一致性哈希算法

  Dynamo中引入了虚拟节点的概念。每个虚拟节点都隶属于某一个实际的物理节点,一个物理节点根据其性能的差异被分为一个或多个虚拟节点。各个虚拟节点的能力基本相当,并随机分布在哈希环上。

在这里插入图片描述
  Dynamo将整个哈希环划分成Q等份,每个等份称为一个数据分区(Partition)。在存储数据时,每个数据会被先分配到某个数据分区,再根据负责该数据分区的虚拟节点,最终确定其所存储的物理节点。

数据分区的好处:

  • 减小数据分布不均衡的可能性
  • 添加或删除设备节点时引起较小的数据传输

在这里插入图片描述
2、数据备份

  在Dynamo中,每个数据的副本备份存储在哈希环顺时针方向上该数据所在虚拟节点的后继节点中。数据备份在存储数据的同时进行,会使每次写操作的延时变长。

  Dynamo中对写操作进行了优化,保证一个副本必须写入硬盘,其他副本只要写入节点的内存即返回写成功。每个虚拟节点上实际存储了分配给它以及分配它的前N-1个前驱虚拟节点的数据。

3、数据冲突问题

在这里插入图片描述
  Dynamo选择通过牺牲一致性来保证系统的可靠性和可用性,没有采用强一致性模型而采用了最终一致性模型。由于Dynamo中可能出现同一个数据被多个节点同时更新的情况,且无法保证数据副本的更新顺序,这有可能会导致数据冲突。

在这里插入图片描述
  Dynamo中采用了向量时钟技术(Vector Clock),Dynamo中的向量时钟通过 [node, counter] 对 来表示。node表示操作节点;counter是其对应的计数器,初始值为0,节点每进行一次更新操作则计数器加1。

4、成员资格及错误检测

  由于Dynamo采用了无中心的架构,每个成员节点都需要保存其他节点的路由信息。为了保证每个节点都能拥有最新的成员节点信息,Dynamo中采用了一种类似于Gossip(闲聊)协议的技术。

在这里插入图片描述
  Dynamo中还通过Gossip来实现错误检测任何节点向其他节点发起通信后,如果对方没有回应,则认为对方节点失效。

  为了避免新加入的节点之间不能及时发现其他节点的存在,Dynamo中设置了一些种子节点(Seed Node)。种子节点和所有的节点都有联系。当新节点加入时,它扮演一个中介的角色,使新加入节点之间互相感知。

在这里插入图片描述

  • 自底向上每一层代表一次随机通信
  • 第一层节点1将信息交换给节点2
  • 第二层节点1和2同时开始随机选择其他节点交换信息
  • 直到N个节点全部传遍

在这里插入图片描述
结论:Dynamo中的节点数不能太多;Amazon采用了分层Dynamo结构来解决该问题。

5、容错机制

(1)临时故障处理机制

  为了处理临时失效的节点,Dynamo中采用了一种带有监听的数据回传机制(Hinted Handoff)。当虚拟节点A失效后,会将数据临时存放在节点D的临时空间中,并在节点A重新可用后,由节点D将数据回传给节点A。

在这里插入图片描述
(2)永久性故障处理机制

  Dynamo采用Merkle哈希树技术来加快检测和减少数据传输量。

在这里插入图片描述

二、弹性计算云EC2

(一)EC2的基本架构

  主要包括了Amazon机器映象、实例、存储模块等组成部分,并能与S3等其他Amazon云计算服务结合使用。

在这里插入图片描述
1、Amazon机器映象(AMI)

  Amazon机器映像(Amazon Machine Image,AMI)是包含了操作系统、服务器程序、应用程序等软件配置的模板。当用户使用EC2服务去创建自己的应用程序时,首先需要构建或获取相应的AMI。

在这里插入图片描述
  构建好的AMI分为Amaznon EBS支持和实例存储支持两类。

2、实例(Instance)

  EC2中实例由AMI启动,可以像传统的主机一样提供服务。同一个AMI可以用于创建具有不同计算和存储能力的实例。Amazon提供了多种不同类型的实例,分别在计算、GPU、内存、存储、网络、费用等方面进行了优化。Amazon还允许用户在应用程序的需求发生变更时,对实例的类型进行调整,从而实现按需付费。

  Amazon EC2还为实例提供了许多附加功能,帮助用户更好地部署和管理应用程序。

3、弹性块存储(EBS)

  EBS存储卷的设计与物理硬盘相似,其大小由用户设定,目前提供的容量从1GB到1TB不等。

在这里插入图片描述
  EBS存储卷适用于数据需要细粒度地频繁访问并持久保存的情形,适合作为文件系统或数据库的主存储。快照功能是EBS的特色功能之一,用于在S3中存储Amazon EBS卷的时间点副本。

(二)EC2的关键技术

1、地理区域和可用区域


  EC2系统中包含多个地理区域,而每个地理区域中又包含多个可用区域。为了确保系统的稳定性,用户最好将自己的多个实例分布在不同的可用区域和地理区域中。

在这里插入图片描述
2、EC2的通信机制

在这里插入图片描述
  EC2的实例一旦被创建就会动态地分配公共IP地址和私有IP地址。私有IP地址由动态主机配置协议(DHCP)分配产生。

3、弹性负载平衡

在这里插入图片描述
  弹性负载平衡功能允许EC2实例自动分发应用流量,从而保证工作负载不会超过现有能力,并且在一定程度上支持容错。弹性负载平衡功能可以识别出应用实例的状态,当一个应用运行不佳时,它会自动将流量路由到状态较好的实例资源上,直到前者恢复正常才会重新分配流量到其实例上。

4、监控服务

在这里插入图片描述
  用户只需要选择EC2实例,设定监视时间,CloudWatch就可以自动收集和存储检测数据。

5、自动缩放

自动缩放可以按照用户自定义的条件,自动调整EC2的计算能力:

  • 需求高峰期:确保EC2实例的处理能力无缝增大
  • 需求下降时:自动缩小EC2实例规模以降低成本

自动缩放功能特别适合周期性变化的应用程序,它由CloudWatch自动启动。

6、服务管理控制台

  各项技术通过互相配合来实现EC2的可扩展性和可靠性。

在这里插入图片描述

(三)EC2的安全及容错机制

  安全组是一组规则,用户利用这些规则来决定哪些网络流量会被实例接受,其他则全部拒绝。当用户的实例被创建时,如果没有指定安全组,则系统自动将该实例分配给一个默认组。默认组只接受组内成员的消息,拒绝其他消息。当一个组的规则改变后,改变的规则自动适用于组中所有的成员。

  SSH是目前对网络上传输的数据进行加密的一种很可靠的协议,当用户创建一个密钥对时,密钥对的名称(Key Pair Name)和公钥(Public Key)会被存储在EC2中。

在这里插入图片描述
  EC2引入了弹性IP地址的概念。弹性IP地址和用户账号绑定而不是和某个特定的实例绑定;弹性IP地址和用户账号绑定而不是和某个特定的实例绑定;通过弹性IP地址改变映射关系总可以保证有实例可用。

相关文章:

Amazon云计算AWS(一)

目录 一、基础存储架构Dynamo(一)Dynamo概况(二)Dynamo架构的主要技术 二、弹性计算云EC2(一)EC2的基本架构(二)EC2的关键技术(三)EC2的安全及容错机制 提供的…...

十_信号4-SIGCHLD信号

SIGCHLD信号 在学习进程控制的时候,使用wait和waitpid系统调用何以回收僵尸进程,父进程可以阻塞等待,也可以非阻塞等待,采用轮询的方式不停查询子进程是否退出。 采用阻塞式等待,父进程就被阻塞了,什么都干…...

HCIP的学习(27)

RSTP—802.1W—快速生成树协议 STP缺陷: 1、收敛速度慢----STP的算法是一种被动的算法,依赖于计时器来进行状态变化 2、链路利用率低​ RSTP向下兼容STP协议。(STP不兼容RSTP) 改进点1—端口角色 802.1D协议---根端口、指定端口…...

6. MySQL 查询、去重、别名

文章目录 【 1. 数据表查询 SELECT 】1.1 查询表中所有字段使用 * 查询表的所有字段列出表的所有字段 1.2 查询表中指定的字段 【 2. 去重 DISTINCT 】【 3. 设置别名 AS 】3.1 为表指定别名3.2 为字段指定别名 【 5. 限制查询结果的条数 LIMIT 】5.1 指定初始位置5.2 不指定初…...

Oracle导出clob字段到csv

使用UTL_FILE ref: How to Export The Table with a CLOB Column Into a CSV File using UTL_FILE ?(Doc ID 1967617.1) --preapre data CREATE TABLE TESTCLOB(ID NUMBER, MYCLOB1 CLOB, MYCLOB2 CLOB ); INSERT INTO TESTCLOB(ID,MYCLOB1,MYCLOB2) VALUES(1,Sample row 11…...

C++无锁(lock free)队列moodycamel::ConcurrentQueue

moodycamel::ConcurrentQueue介绍 moodycamel::ConcurrentQueue一个用C++11实现的多生产者、多消费者无锁队列。 它具有以下特点: 1.快的让人大吃一惊,详见不同无锁队列之间的压测对比 2.单头文件实现,很容易集成到你的项目中 3.完全线程安全的无锁队列,支持任意线程数的并…...

python办公自动化——(二)替换PPT文档中图形数据-柱图

效果: 数据替换前 : 替换数据后: 实现代码 import collections.abc from pptx import Presentation from pptx.util import Cm,Pt import pyodbc import pandas as pd from pptx.chart.data impo…...

vue不同页面切换的方式(Vue动态组件)

v-if实现 <!--Calender.vue--> <template><a-calendar v-model:value"value" panelChange"onPanelChange" /></template> <script setup> import { ref } from vue; const value ref(); const onPanelChange (value, mod…...

Linux下Qt Creator无法输入中文(已解决)

1. 首先确保安装了搜狗输入法&#xff0c;且能正常运行。 2.克隆源码到本地。 git clone https://gitcode.com/fcitx/fcitx-qt5.git 3.检查Qt Creator版本&#xff0c;如下图所示&#xff0c;为基于Qt6的。 4. 进入源码目录&#xff0c;建立build文件夹&#xff0c;修改CMak…...

Codeforces 提交Java代码(自己处理输入输出)

示例一&#xff08;A. Watermelon&#xff09; 题目地址 Problem - 4A - Codeforces 题目截图 提交方式 可以提交本地文件&#xff0c;也可以在线提交。我们这里选择在线提交方式&#xff0c;点击上图中的 SUBMIT 按钮&#xff0c;会进入如下界面。 输入Java代码效果如下&a…...

剖析vue中nextTick源码

代码逻辑梳理&#xff1a; callbacks 数组用于存储待执行的回调函数&#xff0c;waiting 变量用于标记是否有待执行的回调函数。 flushCallbacks 函数用于执行所有存储在 callbacks 数组中的回调函数&#xff0c;并在执行完成后将 waiting 设置为 false。 timer 函数根据环境…...

SSM牙科诊所管理系统-计算机毕业设计源码98077

目 录 摘要 1 绪论 1.1研究目的与意义 1.2国内外研究现状 1.3ssm框架介绍 1.4论文结构与章节安排 2 牙科诊所管理系统系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能…...

【C++进阶】深入STL之string:模拟实现走进C++字符串的世界

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;C模板入门 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀STL之string &#x1f4d2;1. string…...

go语言linux安装

下载&#xff1a;https://go.dev/dl/ 命令行使用 wget https://dl.google.com/go/go1.19.3.linux-amd64.tar.gz解压下载的压缩包&#xff0c;linux建议放在/opt目录下 我放在/home/ihan/go_sdk下 sudo tar -C /home/ihan/go_sdk -xzf go1.19.3.linux-amd64.tar.gz 这里的参数…...

vi和vim有什么不同?

vi 和 vim 都是流行的文本编辑器&#xff0c;它们之间有以下主要区别&#xff1a; 历史&#xff1a; vi 是一个非常古老的文本编辑器&#xff0c;最初由 Bill Joy 在 1976 年为 Unix 系统编写。vim&#xff08;Vi IMproved&#xff09;是 vi 的一个增强版&#xff0c;由 Bram M…...

CSS动画效果(鼠标滑过按钮动画)

1.整体效果 https://mmbiz.qpic.cn/sz_mmbiz_gif/EGZdlrTDJa5SXiaicFfsrcric7TJmGO6YddqC4wFPdM7PGzPHuFgvtDS7MIvnLHB4WFaKia0Qh8VCyUaoyHMc2Zltg/640?wx_fmtgif&fromappmsg&tpwebp&wxfrom5&wx_lazy1&wx_co1 网页设计中的按钮不仅是用户交互的桥梁&#…...

数据结构(C):从初识堆到堆排序的实现

目录 &#x1f31e;0.前言 &#x1f688; 1.堆的概念 &#x1f688; 2.堆的实现 &#x1f69d;2.1堆向下调整算法 &#x1f69d;2.2堆的创建&#xff08;堆向下调整算法&#xff09; ✈️2.2.1 向下调整建堆时间复杂度 &#x1f69d;2.3堆向上调整算法 &#x1f69d;2.…...

ChatGLM3-6B部署

ZhipuAI/chatglm3-6b 模型文件地址 chatglm3-6B-32k-int4 量化的模型地址 ChatGLM3 代码仓库 ChatGLM3 技术文档 cpolar http xxx 端口 /anaconda3/envs/chatglm2/lib/python3.8/site-packages/gradio$ networking.py 硬件环境 最低要求&#xff1a; 为…...

代码随想录35期Day54-JavaScript

Day54题目 ### LeetCode739每日温度 核心思想:今天主要是学会单调栈的使用.找到比元素更大的下一个元素,如果比栈顶元素小就入栈,否则就出栈顶元素,当前元素就是比栈顶元素大的"下一个更大的元素". /*** param {number[]} temperatures* return {number[]}*/ var …...

把自己的服务器添加到presearch节点

Presearch is a scam. Before, judging by the price of the token you should have been able to get between $150-$200 after 12-13 months of regular searches. "If you use this service for the next 11 years you will have earned $30!" Presearch大约需要…...

Open3D(C++) OTSU点云二值化

目录 一、算法原理二、代码实现三、结果展示1、原始点云2、二值化本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 最大类间方差法(Between-class scatter method)是一种用于分割的方法,它通过计算图…...

浔川python社获得全网博主原力月度排名泸州地区第二名!

今日&#xff0c;浔川python社在查看全网博主原力月度排名泸州地区时&#xff0c;一看就震惊啦&#xff01; 全网博主原力月度排名泸州地区排名榜单 全网博主原力月度排名泸州地区第二名为&#xff1a;浔川python社。 感谢粉丝们的支持&#xff01;浔川python社还会继续努力&a…...

第二站:Java——集合框架的深邃海洋(续)

### Java——集合框架的深邃海洋&#xff08;续&#xff09; 在我们的Java集合框架探索之旅中&#xff0c;我们已经涉足了基本操作、高级特性&#xff0c;现在让我们深入探讨一些特定场景下的应用和进阶技巧&#xff0c;比如集合的分区操作、分组、并行流的性能考量&#xff0…...

linux系统下,mysql增加用户

首先&#xff0c;在linux进入mysql mysql -u root -p 然后查看当前用户&#xff1a; select user,host from user; 增加用户语句&#xff1a; CREATE USER 用户名host范围 IDENTIFIED BY 密码;...

Java数据结构与算法(最长回文子串中心扩散法)

前言 回文子串是练习数据结构和算法比较好的使用场景&#xff0c;可以同时练习到双指针、动态规划等一些列算法。 实现原理 中心扩散算法实现。这里定义最长回文子串长度的大小为maxLen&#xff0c;起点位置为0. 奇数个数为中心点和偶数个数为中心点分别计算回文长度大小。…...

基于Python网络招聘数据可视化分析系统的设计与实现

基于Python网络招聘数据可视化分析系统的设计与实现 Design and Implementation of Python-based Network Recruitment Data Visualization Analysis System 完整下载链接:基于Python网络招聘数据可视化分析系统的设计与实现 文章目录 基于Python网络招聘数据可视化分析系统的…...

【Linux】Linux工具——gcc/g++

1.使用vim更改信用名单——sudo 我们这里来补充sudo的相关知识——添加信任白名单用户 使用sudo就必须将使用sudo的那个账号添加到信用名单里&#xff0c;而且啊&#xff0c;只有超级管理员才可以添加 信用名单在/etc/sudoers里 我们发现它的权限只是可读啊&#xff0c;所以…...

【惯性传感器imu】—— WHEELTEC的惯导模块的imu的驱动安装配置和运行

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、IMU驱动安装1. 安装依赖2. 源码的下载3. 编译源码(1) 配置固定串口设备(2) 修改luanch文件(3) 编译 二、启动IMU1. 运行imu2. 查看imu数据 总结 前言 WHEE…...

Linux提权一

#信息收集 当前主机的操作系统 hostnamectl cat /etc/*-release lsb_release -a cat /etc/lsb-release # Debain cat /etc/redhat-release # Redhat cat /etc/centos-release # Centos cat /etc/os-release # Ubuntu cat /etc/issue 当前主机的内核版本 hostnamectl uname -a …...

Vue.js中如何实现以列表首列为表头

前言 一般情况table列表的展示&#xff0c;列头都在第一横行&#xff0c;此方法用于列头在第一列的情况。 效果图 核心代码 <template><div><table class"data-table"><tr v-for"(column, columnIndex) in columns" :key"col…...