2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

Amazon EC2 Container Service 打造容器化的 SaaS 应用

  • 2019-11-14
  • 本文字数:3074 字

    阅读完需:约 10 分钟

Amazon EC2 Container Service打造容器化的SaaS应用

概述

在 SaaS 化应用的改造中,容器技术的应用越来越广泛。相对于传统的虚拟机模式,容器化模式的隔离技术“更轻量”,“ 更快速”,“ 更便捷”. 目前业界越来越广的使用“容器”技术用于应用的微服务化改造,将自己产品的一些服务“微服务”化,构建基于云平台的 SaaS 化应用。

容器技术改造的难点

1. 技术的复杂性


容器技术应用的难点在于生产环境的实施及部署, 一般需要解决


  • 容器资源编排调度

  • 服务的自动发现及注册

  • 容器的监控及报警

  • 容器的扩展及收缩


这只是解决的部分问题,用户还必须去解决生产环境部署中怎样实现高可用部署及与公有云平台的集成问题。这使得 Docker 的生产化部署变得困难。


2. Docker 编排框架的选型


许多人认为容器技术的价值在编排层,目前在容器的编排框架上主要的流派正在上演 “三国演义”包括,Google Kubernetes、Apache Mesos、Docker DockerSwarm. Kubernetes,Mesos 是目前市场上比较成熟的解决方案,占有较大的市场份额。DockerSwarm 的优点是与 Docker 平台中的许多功能的集成,因为它平滑地内置于 Docker 平台中。上述三个编排框架都开放源代码,用户只需为技术支持服务付费。除了这些标准外还有许多初创公司也推出了自有的编排框架, 如 Rancher 使用 Java 语言开发了 Cattle,它是 Rancher 实现的自有的一套基于 Docker 的编排引擎。众多的开源或自有的编排框架在不断发展,演进。这给客户的技术平台选型也带来极大的挑战。

Amazon EC2 Container Service(ECS)

为了降低容器平台生产部署的复杂性,Amazon ECS 提供了一个平台来管理 Docker 容器。Amazon ECS 是一项高度可扩展的高性能容器管理服务,您将不再需要安装、运维、扩展自己的群集管理基础设施。只需进行简单的 API 调用,您便可以启动和停止支持 Docker 应用程序,查询群集的完整状态,使用各种熟悉的功能,包括安全组、Elastic Load Balancing、EBS 卷和 IAM 角色。您可以使用 Amazon ECS 根据您的资源需求和可用性要求在您的群集中安排容器的置放。您还可以集成自己的或第三方的计划程序,以满足业务或应用程序的特定要求。Amazon EC2 Container Service 没有任何附加费用。您只需为您创建的用于存储和运行应用程序的 AWS 资源 (例如 EC2 实例或 EBS 卷) 付费。Amazon ECS 的介绍,请参阅:https://aws.amazon.com/cn/documentation/ecs/


让我们来先看一个简单的 Docker 应用场景



客户有多套应用系统部署在云端,采用虚拟机隔离的方式,每套系统独占虚拟机资源,造成资源利用率不高。希望通过微服务化改造来提高云资源的利用效率及应用部署的敏捷性。改造的方法是从系统架构上分离应用层,使用 Docker 来封装应用层工作负载。采用 Docker 封装是微服务化改造最便捷的一种方式,因为对原有系统的代码修改少。降低了改造,迁移的成本。



将 WEB,APP 层直接封装成 Docker 容器运行。前端通过负载均衡传入流量,并负载均衡到 Docker 集群上。 需要实现服务的自动发现及注册,两级(Docker, EC2)自动扩展/收缩及容器的监控及报警。


下面我们就来介绍一下基于 Amazon ECS 的实现方法。

1. 应用层的封装

ECS 提供了 ECR(存储库),具有与 Docker HUB 一样的镜像存储管理功能.我们准备一个镜像来演示我们的应用层封装,这是一个 Apache 服务器的镜像,Dockerfile 定义如下:



为了模拟三个不同的应用,我们对 Apache 服务器的配置做小小的更改:




在配置文件中新加了两个目录: app1, app2.并更改目录的初始页面的标题为目录名,这样当访问



提交更改



将镜像 Push 到 ECR 存储库,就得到了我们封装的应用层镜像



2. 创建服务

ECS 有几个比较重要的概念。 任务, 服务, 集群


  • 任务就是您的应用程序的蓝图,是一个最基本的功能单元,包括构成应用程序的一个或多个容器,比如我们的案例中,封装的 Apache 镜像就是一个任务只包含了一个容器,但在实际案例中任务可能会有一个或多个容器,比如 WEB 容器,APP 容器,它们共同组成一个任务。

  • 多个在一个容器实例或跨主机容器实例运行的任务就构成了服务,服务更像是一个应用的集群,ECS 可以与 ALB 集成实现服务的自动注册及发现。通过使用动态端口映射选项,我们可以简单地注册一个服务到负载均衡器,而 ECS 透明地管理 Docker 容器的注册和注销。我们还得到了传统负载平衡器的所有特性,如健康检查、连接保持和访问日志等。

  • 集群是 EC2 实例的逻辑分组。Amazon ECS 从您指定的注册表中下载容器映像,并在集群内的容器实例上运行这些映像。



我们首先创建任务:


由于我们通过不同的 URL 路径来区分不同的应用,这里只需要创建一个任务定义

col 1

任务定义名称: taskweb


任务角色:


网络模式: 桥接


约束:


容器定义:


容器名称: dockerweb


映像: 772041933387.dkr.ecr.us-east-1.amazonaws.com/web-app:v1


内存限制:512M


端口映射: 主机端口:0 容器端口:80 协议:tcp


命令: /usr/sbin/apache2,-D,FOREGROUND



然后创建集群:

col 1

集群名称: erp


实例配置:


预配置模型: 按需实例


EC2 实例类型: m4.large


实例的数量: 4


EC2 Ami Id: amzn-ami-2016.09.g-amazon-ecs-optimized [ami-275ffe31]


EBS 存储: 22


密钥对: martin


联网:


VPC: martin


子网: Pub1


Pub2


安全组: ECSSG


容器实例 IAM 角色: ecsInstanceRole



创建负载均衡的 ALB

col 1

名称: albdocker


模式: 面向 internet


IP 地址类型: ipv4


侦听器: http:80


可用区


VPC: martin


AZ: pub1


pub2


分配安全组: ecssg


目标组名称: targetweb


协议: HTTP


端口: 80


运行状况检查


协议: HTTP


路径: /index.php


目标组名称: targetapp1


协议: HTTP


端口: 80


运行状况检查


协议: HTTP


路径: /index.php


目标组名称: targetapp2


协议: HTTP


端口: 80


运行状况检查


协议: HTTP


路径: /index.php



在集群中创建代表不同应用的服务:

col 1

服务名称:srvweb


任务定义: taskweb:8


集群: erp


任务数: 2


任务放置模板: AZ 均衡放置


可选配置: Elastic Load Balancing


ELB 名称: albdocker


目标组名称: targetweb


路径模式: /


运行状况检查路径: /index.php


服务名称:srvapp1


任务定义: taskweb:8


集群: erp


任务数: 2


任务放置模板: AZ 均衡放置


可选配置: Elastic Load Balancing


ELB 名称: albdocker


目标组名称: targetapp1


路径模式: /


运行状况检查路径: /index.php


服务名称: srvapp2


任务定义: taskweb:8


集群: erp


任务数: 2


任务放置模板: AZ 均衡放置


可选配置: Elastic Load Balancing


ELB 名称: albdocker


目标组名称: targetapp1


路径模式: /


运行状况检查路径: /index.php


创建完服务后,srvapp1, srvapp1, srvweb 已经自动完成在 ALB 的注册



实现了如下的架构:



集群的状态如下:



现在我们已经实现了微服务化的改造,通过不同的 URL 就可以访问运行在 Docker 集群上不同的应用程序。


3. 自动扩展/收缩及监控,报警

还有两级(Docker,EC2)自动扩展/收缩及容器的监控及报警的功能怎么实现呢? ECS 集成了 Auto Scaling, Cloudwatch。在集群和服务中都有 Autoscaling 组,只需要简单配置就可以了,如下图:



看看是不是很简单呢?除了我们可以通过 Portal 来实现外,ECS 还提供了 API 接口。那还等什么,赶紧去试试吧!


作者介绍



杨历,AWS 解决方案架构师负责 AWS 中国合作伙伴生态系统的技术支持工作,致力于为合作伙伴提供 AWS 云计算方案架构的咨询和设计,上云迁移, 应用优化,培训等服务。在高可用,灾备解决方案,大规模并发应用架构,自动化运维,RDBMS,数据仓库,数据集成等方面有着广泛的设计和实践经验。在加入 AWS 之前曾在 Oracle 研发中心,Oracle 中国,微软中国担任研发工程师,资深技术顾问等工作。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/amazon-ecs-build-saas-application/


2019-11-14 08:00841

评论

发布
暂无评论
发现更多内容

邀请函 | 2024年数据技术嘉年华集结号已吹响,期待您参会!

墨天轮

数据库 oracle postgresql MySQL 运维 国产数据库

AI云增强升级!还原生动人像,拍出质感照片

HarmonyOS SDK

HarmonyOS

ETL数据仓库的使用方式

RestCloud

数据仓库 ETL 数据集成

shopee商品列表数据接口丨关键词搜索shopee商品数据采集

tbapi

Shopee shopee商品列表数据接口 shopee商品数据采集

探索比特币现货 ETF 对加密货币价格的潜在影响

TechubNews

2024年数字化转型风口趋势大赏

伤感汤姆布利柏

人工智能 AI 低代码 数字化

NFTScan 入选 CMC 全球 Top10 新手工具榜!

NFT Research

NFT NFTScan nft工具

快手商品数据采集接口

tbapi

快手 快手商品详情数据接口 快手商品数据采集 快手商品列表数据接口

低代码开发如何助力数字化企业管理系统平台构建

不在线第一只蜗牛

低代码 数字化 企业转型 数字转型

第五代英特尔至强处理器以强大性能,助力千行百业应用创新

E科讯

全球能源网络 Starpower:Solana 与 IoTeX 加持,万亿美元市场的 Web3 力量

TechubNews

#Web3

Tomcat 下部署若依单体应用可观测最佳实践

观测云

tomcat

牛刀专业低代码平台开发实战—三会议案

牛刀专业低代码

低代码 起步牛刀低代码 牛刀低代码 牛刀专业低代码 牛刀低代码paas平台

数字化转型解锁企业高效协作与管理优化的新篇章!

聚道云软件连接器

案例分享

亚洲唯一!京东荣获2024年度Gartner供应链技术创新奖背后的创新探索

京东零售技术

算法 供应链

AIGC 周报(2.19~2.25)

AIGC Weekly 周报

人工智能 AI AIGC GPT

Go workspace的使用

fliter

大厂经验谈之OKR目标管理

巫山老妖

Amazon EC2 Container Service打造容器化的SaaS应用_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章