第二章:在云中计算
1.多租户:在虚拟机之间共享底层硬件
2.隔离:多个EC2实例共享一台物理服务器,但彼此是隔离开来的,意味着绝对安全
3.EC2配置:Window,Linux,内部业务应用程序,Web应用程序,数据库,第三方软件
垂直缩放:为服务器添加更多的CPU和内存,随时可以增大或减小服务器端计算资源
4.EC2实例系列
通用型:平衡的资源,多样化的工作负载,Web服务器,代码存储库
计算优化型:计算密集型任务,例如:游戏服务器,高性能计算(HPC),科学建模
内存优化型:内存密集型任务
加速计算型:浮点数计算,图形处理,数据模式匹配,这类实例使用的是硬件加速器
存储优化型:本地存储数据的高性能
在咖啡店实例中,收银员==内存优化型EC2实例,咖啡师==计算优化型EC2实例,咖啡拉花师==加速计算型EC2实例
5.EC2购买选项
按需付费:按照实际需求付费,无需预付款
Savings Plans:提供很低的EC2价格,需要在1-3年内保持稳定的使用量,最高可节省72%的计算使用费
预留实例:适用于稳定状态工作负载或使用量可预测的工作负载,最高可以提供75%的折扣,但需要承诺1-3年使用期
Spot实例:可以请求获得限制的EC2计算容量,最好可以享受90%的折扣,亚马逊云科技可以在需要使用时随时回收该实例,提前两分钟发出警告
专用主机:专供于一个人的EC2的物理主机
6.可扩展性和弹性
如果一个服务端宕机了,我们将服无法接收请求,直达另外一个实例运行起来,我们可以使用与创建原始服务器相同的编程方法来创建第二个服务器
7.纵向扩展和横向扩展
纵向扩展:正在运行的计算机添加更多的计算能力
横向扩展:扩展更多的服务器以接收请求
Amazon EC2 Auyo Scaling 可以根据需求添加实例,不再需要实例的时候停用实例
8.当多个EC2实例都运行同一个程序来达到相同的业务目标时,一个请求进来,这个请求如何知道要往哪个EC2实例呢?怎么确保工作负载均匀地分布在各个EC2实例之间?而不是只有一个实例提供支持,其他实例闲置在旁呢?
负载均衡器:是一个应用程序,接收请求并将请求路由到实例进行处理
正确的分配流量:高性能,经济高效,高可用性,可自动扩展
9.Elastic Load Balancing(ELB):
托管服务,它旨在解决问题负载均衡方面的无差别的繁重工作,ELB是一个区域性的服务,在区域级别运行,而不是在单独的EC2实例上运行,具有高可用性。
ELB还可以自动扩展,随着流量的增长,可以处理额外的吞吐量。
EC2队列进行扩展时,随着每个实例的上线,Auto-Scaling服务会告知ELB实例已经准备好处理流量,可以开始了。集群缩减时,ELB首先会停止所有新流量,留下被缩减的实例,同时等待该实例上现有的请求完成,然后排干,一旦完成上述工作,那么Auto-Scaling就会在不影响现有客户的情况下终止实例。
ELB是区域性服务,它是一个单一的URL,每个前端实例都会使用它,ELB将流量引导至最少未完成请求的后端,后端进行扩展时,一旦新实例准备就绪,只需通知ELB,就可以开始工作,前端与后端分离开来,实现解耦架构
10. 消息和收发队列
在咖啡店的案例中,收银员接收订单,用笔写在纸上,将订单交给咖啡师,咖啡师开始制作咖啡,接到下一个订单时,重复流程。如果咖啡师在忙或休息,收银员就无法接收订单,直到咖啡师准备好才能接单。这个案例说明了咖啡师和收银员不同步时,这个流程就会降低服务质量,导致接收订单的速度变慢,最终根本无法完成订单。 一个更好的流程是将某种缓冲区或队列引入系统,收银员会将订单张贴在某种缓冲区,而不是直接交给咖啡师,这个缓冲区就像一个订单处理板,这种将消息放入缓冲区的概念称为消息收发和队列。
紧密耦合的架构:如果单个组件发生故障或变化会导致其他组件,甚至整个系统出现问题。例如咖啡师和收银员直接交流的情况
松散耦合的架构:如果一个组件发生故障,由于它是孤立的,因此不会导致整个系统出现级联故障
Amazon Simple Queue Serivce(SQS)和 Amazon Simple Notification Serivce(SNS)则是形成中间的缓冲区
11.无服务器:无法查看或访问底层基础设施
Amazon Lambda就是一种无服务器计算服务,利用Lambda,只需要将代码上传到Lambda引擎中,然后为这段代码配置一个触发行为就可以了,Lambda可以自动实现扩展和高可用,专用于较短时间运行的流程,最长可以运行15分钟,适合快速处理,比如Web后端请求
如果需要访问底层环境并且对于可移植性有所要求的话,可以使用亚马逊云科技的容器服务,比如Amazon Elastic Container Service(ECS)或者Amazon Elastic Kubernetes Service(EKS),这两项服务全都是亚马逊云科技的编排工具
容器:一种代码程序包
Amazon Fargate:是一种支持ECS和EKS的无服务器计算平台
12.计算服务
(1)托管传统应用程序,对操作系统的完全访问权限,比如Linux,Windows,可以使用EC2
(2)托管短时间运行的函数,面向服务的应用程序,事件驱动型应用程序,无需预置或管理服务器,可以使用Amazon Lambda
(3)在亚马逊云科技上运行基于Docker容器的工作负载,可以使用ECS或EKS,可以选择EC2环境,但需要自己管理,或者选择Amazon Fargate这种无服务管理的计算环境