Docker
软件开发平台,APP被打包到Containers的容器之中,可以跑在任意OS上。
- 几秒内快速的扩缩容易。
- 将app打包在Docker容器中,EC2实例上运行app会更简单。
- Docker镜像被存储在Repositories 中。
- 可以在Docker Hub上找到各个系统支持的镜像。
- AWS ECR存放自己私有的镜像。
下图是传统app架构,右边是Docker app架构。
Docker的app使用更加简单,而且不占用资源。ECS 就是启动Docker实现的功能。
ECS
ECS -> Elastic Container Service
ECS 注意点
- 使用前要自己提供和维护infrastructure(EC2实例)
- AWS自动启动和停止Containers
- 集成了ALB(Application Load Balancer)
架构如下图所示: 提前创建好EC2实例, 每个实例里面有着Container,当创建了新的Conrainer时,ECS会自动帮我们放到正确的实例中。
考点::如果要在AWS中使用Docker请使用ECS。
Fargate
应用场景:
- 在AWS上启动Docker Containers
- 不需要提前创建任何基础架构infrastructure
- Serviceless
- AWS 根据每个Conainers 需要的CPU和RAM规格来运行
ECR
ECR -> Elastic Container Registry
因为AWS上需要存储Docker镜像,这样ECS和Fragate服务才能使用这个镜像进行运行,所以需要注册表。 ECR 就是AWS上的一个私有镜像注册表。
Serverless 无服务
- 不需要管理服务器就可以实现服务,只需要部署代码和功能就行而不需要管理服务器。
- 无服务不是没有服务器,背后还是会有服务器来处理功能,但是作为使用者我们不需要管理服务器。
AWS无服务功能
- S3
- DynamoDB
- Fragate
- Lambda
Lambda
Lambda是无服务一种,执行虚拟方法,而不需要服务器来管理,适用于较短的执行时间,需要使用时才会运行。 特点
- 根据请求和使用时间进行付费。很长的免费使用时间。
- 时间驱动,只有触发事件时才会执行。
- 每个函数可以获得10Gb的RAM。
- 通过CloudWatch进行监控。
考点:Lambda最多运行15分钟
支持的语言
- Node.js
- Python
- Java 8之后
- C#(.Net Core)
- Golang
- C#/Powershell
- Ruby
- Custom Runtime API
Lambda Contain Image
允许你在Lambda上运行实例的Docker容器,但是这些容器映像必须实现Lambda运行时API。
但是ECS和Fargate是运行Docker容器的首选项。
使用用例:
1.无服务器的缩略图处理
用户上传图片到S3,通过Lambda进行数据的处理->将图片缩略图存放到S3,将数据信息存放到DynamoDB。
2.CRON Job
每周或每天有计划的执行某个脚本,
定价
- 前100w次请求是免费的
- 之后每一百万次请求收取0.2$
- 前40wGbRAM 秒的运算时间是免费的
- 之后每60万GB 秒收取 $1
API Gatway
应用场景:将API公有出去,使得用户可以通过互联网访问。 如图:用户的请求API到API网关,API网关将请求到Lambda,Lambda进行函数的调用。
注意点
- 完全是无服务的
- 支持RESTful APIs和WebSocket API
- 有一定的安全性,支持身份验证,API throttling, API keys, monitoring……
Batch
完全托管的批处理服务。可以非常轻松的在AWS上运行十万个批处理作业。
批处理作业:有开始和结束的作业,区别于持续性的作业。
需要将批处理作业提交到队列之中,然后会自动处理批处理作业。
推荐使用EC2实例或者Spot实例进行处理。
和Lambda的区别:
| Lambda | Batch |
|---|---|
| 无服务 | 依赖于EC2实例 |
| 最多运行15分钟 | 没有时间限制 |
| 内存存在限制 | 依赖于EC2的存储 |
Lightsail
相对独立的服务,和AWS没有一个很好的集成。
借助Lightsail 可以获取虚拟服务器,存储,数据库,网络。 使用简单,适用于没有经验的人去使用。
应用场景:
- 部署简单的网络应用或者网站
高可用性,但是无法自动扩展。