【AWS+DaoCloud的应用分享】BootDev如何利用docker在AWS实现超快速自动伸缩

大家都说Docker好用。的确,作为一个用户,说句公道话,使用docker为持续部署带来了意想不到的福音和便捷。

BootDev在设计了一款自动伸缩解决方案,在完善产品的过程中,使用docker,将我们完成Scale Out的进程时间缩短了50%!具体地说,应对无法预测突发流量,只需要5分钟就可以完成扩缩,是正常时间的三分之一~四分之一!妥妥地,毫无压力。

BootDev联动DaoCloud,全面支持AWS中国!


大家都知道,在中国使用Docker Hub受到很多限制,但是好在,中国还有DaoCloud。DaoCloud提供一站式docker管理解决方案,无论你使用的是哪个供应商服务,AWS、阿里云甚至裸机,可以直接通过DaoCloud安装Docker Imagine,DaoCloud提供的UI界面还可以管理自定义images。“Daopull”是DaoCloud为中国特定的互联网环境下顺势推出的docker镜像服务,相当好用。

【AWS+DaoCloud的应用分享】BootDev如何利用docker在AWS实现超快速自动伸缩_第1张图片

在DaoCloud的UI界面下,可以直接管理你自己的Docker Image,包括代码部署和确认container的状态等等。

【AWS+DaoCloud的应用分享】BootDev如何利用docker在AWS实现超快速自动伸缩_第2张图片

当然也可以在上面直接运行docker image

【AWS+DaoCloud的应用分享】BootDev如何利用docker在AWS实现超快速自动伸缩_第3张图片

说了这么多,BootDev设计的自动伸缩解决方案联动DaoCloud(Docker)会产生什么神奇的化学反应?

  1. BootDev可以在任何云上,提供自动伸缩服务,包括AWS、阿里云、其他

  2. BootDev可以运用Docker Images达到更有效的自动伸缩

  3. BootDev在Docker配置最佳参数,优化网站性能,切实为网站主达到既快又省钱的终极目的。

【AWS+DaoCloud的应用分享】BootDev如何利用docker在AWS实现超快速自动伸缩_第4张图片

BootDev和DaoCloud在同一层Stack,可以互相支持对方。通过这种方式,AWS中国以及中国其他的Iaas(Infrastructure) 可以和BootDev&DaoCloud整合。利用DaoCloud的快速部署docker特性,使用BootDev的自动伸缩解决方案和丰富的网站运维经验。


如何在生产环境下运行Docker?

众所周知,Docker用于生产环境主要有两个缺点。一,比起在同一个平台运行源代码,Docker的表现会略逊一筹;二,Docker不适用于有状态的应用。针对刚才说的第一点,BootDev推荐的做法是,针对固定资源在一个虚拟机上运行一个docker。


如何优化性能?

在AWS EC2里部署docker的基本概念,如下图所示:

【AWS+DaoCloud的应用分享】BootDev如何利用docker在AWS实现超快速自动伸缩_第5张图片

每个EC2只包含1个Docker,自动伸缩的过程中,EC2会自动运行“Daopull”,下载Docker Image而不用再装其他东西。

在这个案例中,DaoCloud发挥了什么作用?请看下图。DaoCloud对于核心运行时刻提供支持。


【AWS+DaoCloud的应用分享】BootDev如何利用docker在AWS实现超快速自动伸缩_第6张图片

如何处理状态(State Issue)?

部署新代码时,Docker的运行机制经常会出现一个普遍问题:Docker对于持续部署过程是个非常好的工具,因为他可以确保测试环境中的代码和参数和生产环境中完全一致。但是当你需要更新部署,即便是一小行代码,你也必须新建一个Docker Image,然后重新注册,砍掉原来的docker,生成一个新的。很多应用是状态性的(Stateful),比如用户授权、或者在内存里储存一些用户数据。很多数据会储存在正在运行的docker里,因此用Docker完成部署的过程中,一些登陆用户和数据可能会暂时丢失直到新的数据生成(这个过程涉及到停止和再启动)。但是BootDev的Docker做法是,我们在Docker直接植入DevOps工具(Chef),分离资源,使新的部署不影响现在的使用。

【AWS+DaoCloud的应用分享】BootDev如何利用docker在AWS实现超快速自动伸缩_第7张图片

(图片来源:https://clusterhq.com/2014/08/13/data-focused-docker-clustering/)

这里用了个小窍门,就是把一些像本地储存的数据、缓存等有状态的资源迁移到外部服务设施上。这样,我们就可以利用AWS提供的大把不同架构资源,而且非常容易上手。


除去正常运行的资源,处理代码对于自动伸缩也相当重要。我们要避免的是,类似几行代码变动,却要更新重建整个docker的事。所以,如何用Docker处理储存IO(Input/Output)?BootDev 的Docker+DevOps应用,我们把运行代码分成了三种:(1)静态代码 (2)配置文件(3)数据文件。

静态代码由Git管理,利用DevOps工具,代码更新、恢复rollback的操作都可以在所有分布式节点同时执行。配置文件由docker里面的DevOps工具来管理,因此无论有什么变动,我们只要在文件层面做改动就可以了。最后,数据文件则是由文件分享系统提供服务,BootDev推荐使用GlusterFS。在Docker进程中,挂载点(mount point) 也按量被安装到docker里。下面就是我们的概念图。

【AWS+DaoCloud的应用分享】BootDev如何利用docker在AWS实现超快速自动伸缩_第8张图片

以上就是BootDev,联动DaoCloud在中国地区提供的,快速自动伸缩解决方案。

如果你也对此感兴趣,请联系 [email protected]



你可能感兴趣的:(docker,AWS,亚马逊)