写点什么

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:00686

评论

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

Ubuntu 20.04网卡命名规则

百度搜索:蓝易云

9月7-8日,Rust China Conf 2024 来啦!

Mike Tang

开源 rust 上海 rust conf rust开发者大会

前波士顿咨询Platinion董事总经理陈果加入望繁信科技

望繁信科技

流程挖掘 流程资产 流程智能

AI+营销:AI赋能企业大客户经营更高效、更智能

用友BIP

JNPF再进化,低代码革命让数字化无处不在

不在线第一只蜗牛

低代码

论低代码平台在业务系统中的多种应用形态

快乐非自愿限量之名

低代码 业务开发

合资新能源价值新标准 MAZDA EZ-6领衔亮相2024成都国际车展

Geek_2d6073

In-depth analysis IPQ5332 vs IPQ9570 WiFi7 motherboard CPU

wifi6-yiyi

源于清华的开源时序数据库IoTDB刷新世界纪录

Apache IoTDB

视频云流化是什么?有哪些好处

3DCAT实时渲染

云流化 云流化PaaS平台 实时渲染云流化

数博会 | 百度智能云千帆大模型数据安全解决方案获优秀科技成果

百度安全

php出现SSL certificate problem: unable to get local issuer certificate的解决办法

百度搜索:蓝易云

shell脚本嵌套和case语句

百度搜索:蓝易云

免费高效!3步实现Llama3模型远程访问与协作

贝锐

AIGC Llama3 贝锐

智谱清言 App 面向 C 端开放 AI 视频通话服务;谷歌 GameNGen:神经网络驱动的实时游戏引擎丨RTE 开发者日报

声网

AI自动化副业创收班手把手带你提升副业收益

霍格沃兹测试开发学社

打造高效农业项目 10款农业建设管理系统购买指南

爱吃小舅的鱼

项目管理 农业

揭秘| 用友坚持做大模型的原因

用友BIP

大模型营销战,“砸钱”能缓解商业化焦虑?

趣解商业

百度 腾讯 互联网 大模型

场景题:如何提升Kafka效率?

王磊

【攻略】第三届数据库大赛创新上云性能挑战赛-高性能分析型查询引擎赛道-冠军

阿里云天池

体验了下豆包MarsCode编程助手,惊艳到我了!

左诗右码

AI

一站式解决方案:10款项目型企业系统选购指南

爱吃小舅的鱼

项目管理

你知道的项目型企业管理系统,这10款值得推荐

爱吃小舅的鱼

项目管理 企业管理

人社大赛算法赛场解题思路分享+冠军+破灭刀锋

阿里云天池

多链钱包系统开发(开发原理)丨多链钱包开发源码模式

V\TG【ch3nguang】

天翼云HBlock:打造高效、安全、可扩展的云存储体验

百里丶落云

磁盘 数据库· HBlock #天翼云 #HBlock

10款科研项目经费管理系统解析,助你了解项目管理

爱吃小舅的鱼

项目管理 科研项目 费用管理

【Git】删除本地分支;报错error: Cannot delete branch ‘wangyunuo-test‘ checked out at ‘XXX‘

百度搜索:蓝易云

用友YonData如何刷新企业数据管理与应用新高度?

用友BIP

最高等级!腾讯云AI代码助手获中国信通院代码大模型评估4+级

Geek_2d6073

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