专栏名称: 亚马逊云科技
亚马逊AWS的公众号,第一时间获取关于AWS国内外服务的资讯。AWS中国(北京)区域由光环新网运营。
目录
相关文章推荐
混沌学园  ·  混沌进入3.0时代:永远和创业者在一起 ·  19 小时前  
学习曾国藩  ·  余生,最高级的活法,就12个字! ·  6 天前  
学习曾国藩  ·  一个人有没有本事,看这三个细节就知道了! ·  3 天前  
混沌学园  ·  创新者的必赢之战 混沌学园六期开启 ·  3 天前  
51好读  ›  专栏  ›  亚马逊云科技

大咖专栏 | Amazon ECS打造容器化的SaaS应用

亚马逊云科技  · 公众号  ·  · 2017-07-10 19:17

正文

报名有奖

现在报名并邀请两位朋友参加 AWS 技术峰会2017北京 就能获得价值50美元AWS全球服务抵扣券多邀多得,上不封顶!活动详情请查看微信文末活动说明。

大咖专栏

大咖专栏主要刊登亚马逊AWS诸位大咖亲自撰写的Blog,内容涉猎广泛,话题讨论前沿,且与实战紧密相连。我们非常欢迎小伙伴们在评论区留言,与大咖互动交流!


今天为大家撰文的大咖,是我们的AWS解决方案架构师——杨历老师。

杨历

AWS解决方案架构师

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


概述

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

容器技术改造的难点

1.技术的复杂性

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

·

容器资源编排调度 

·

服务的自动发现及注册

·

容器的监控及报警

·

容器的扩展及收缩

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

2.Docker编排框架的选型

许多人认为容器技术的价值在编排层,目前在容器的编排框架上主要的流派正在上演 “三国演义”包括,Google Kubernetes、Apache Mesos、Docker  DockerSwarm。


Kubernetes、Mesos是目前市场上比较成熟的解决方案,占有较大的市场份额。DockerSwarm的优点是与Docker平台中的许多功能的集成,因为它平滑地内置于Docker平台中。 上述三个编排框架都开放源代码,用户只需为技术支持服务付费。


除了这些标准外还有许多初创公司也推出了自有的编排框架, 如Rancher使用Java语言开发了Cattle,它是Rancher实现的自有的一套基于Docker的编排引擎。众多的开源或自有的编排框架在不断发展,演进。这给客户的技术平台选型也带来极大的挑战。


Amazon ECS

为了降低容器平台生产部署的复杂性,Amazon ECS提供了一个平台来管理Docker容器。


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定义如下:

[ec2-user ecs-demo-php-simple-app]$ cat Dockerfile

FROM ubuntu:12.04

 

# Install dependencies

RUN apt-get update -y

RUN apt-get install -y git curl apache2 php5 libapache2-mod-php5 php5-mcrypt php5-mysql

 

# Install app

RUN rm -rf /var/www/*

ADD src /var/www

 

# Configure apache

RUN a2enmod rewrite

RUN chown -R www-data:www-data /var/www

ENV APACHE_RUN_USER www-data

ENV APACHE_RUN_GROUP www-data

ENV APACHE_LOG_DIR /var/log/apache2

 

EXPOSE 80

 

CMD ["/usr/sbin/apache2", "-D",  "FOREGROUND"]

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

docker run -it 772041933387.dkr.ecr.us-east-1.amazonaws.com/web-app:v1 /bin/bash


    Alias /app1/ "/usr/share/app1/"

   

        Options Indexes MultiViews FollowSymLinks

        AllowOverride None

        Order deny,allow

        Allow from all

   

 

 

    Alias /app2 "/usr/share/app2/"

   

        Options Indexes MultiViews FollowSymLinks

        AllowOverride None

        Order deny,allow

        Allow from all

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

/               返回的页面标题就是Simple PHP App      模拟应用3

/app1      返回的页面标题就是Simple PHP App1   模拟应用1

/app2      返回的页面标题就是Simple PHP App2   模拟应用2

提交更改

docker commit 004af40f591b 772041933387.dkr.ecr.us-east-1.amazonaws.com/web-app:v1

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

docker push 772041933387.dkr.ecr.us-east-1.amazonaws.com/web-app:v1


在接下来的内容里,我们会介绍:


2. 创建服务

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


请感兴趣的小伙伴点击“阅读原文

或扫描/长按识别下方的二维码

阅读完整版文章

One More Thing...

微信积分邀请有奖活动正在火热进行中!

邀请三位好友关注AWS官方微信

即可兑换价值50美元AWS全球服务抵扣券一张!


请在AWS微信内回复“邀请码”参加活动!