UDN-企业互联网技术人气社区

板块导航

浏览  : 1294
回复  : 0

[教程技巧] 云端基于Docker的微服务与持续交付实践(上)

[复制链接]
白青青的头像 楼主
发表于 2016-7-9 10:56:14 | 显示全部楼层 |阅读模式
本帖最后由 白青青 于 2016-7-9 11:02 编辑

  日程

  大家好,我演讲的主题是《云端基于Docker的微服务与持续交付实践》,我主要分几点来介绍:

  Docker与微服务

  云端生产环境部署

  应用Docker化改造

  持续交付流程实践
2.png

  交付方式变革改变了全球经济格局

  很多人都是拿集装箱的故事开始的,我也不例外。一百年前,一个叫做集装箱的东西,改变了全球定律,现在在跨国贸易的90%的货物都是通过集装箱来运输的。

  一个不起眼的单,一个交付上的改变,就可以改变整个经济。

  Docker在这个时代就是改变整个软件交付的变革,现在几乎在所有的运维或者架构上都在用Docker进行交付,为什么?
2.png

  Docker in Alibaba

  阿里巴巴Docker的使用无处不在,2011年,淘宝开始采用容器技术,配合阿里内部自身的一些架构,极大地提高了开发和运维的效率,使得整个开发效率变得更高。在“双11”这样的大促中,发挥了巨大的作用。
2.png

  阿里百川是一个面向移动平台的电商PaaS,它利用Docker可以支持不同的编程环境,让用户可以快速应用软件在线上运行。

  基于阿里的实践,我们从去年开始在公共云计算平台上推行了容器服务,大家可以不用关心Docker底层的技术,网络存储、资源管理等等不用关心,大家只用关心自己Docker的应用部署就可以了。

  同时,Docker在很多领域都会发挥着巨大的作用。

  比如前一段时间谷歌的AlphaGo,其实背后计算很重要的一个框架就是深度学习框架,搭建一个深度学习框架是一个非常复杂的学习,你要配置相应的深入计算框架的各个软件。

  可是在阿里提供给客户的服务,大家只要用Docker镜像就可以快速地在一组HPC的机器搭建起来,你可以按需地获得深度学习所需要的计算能力,也许你也有一天可以开发一款进行PK。

  其实Docker在阿里巴巴的使用无所不在,你能想象,像阿里这么庞大的一个系统,包含了虚拟化、数据库、大数据、网络,这么庞大的系统,几百个组件,我们现在对它Docker处理,加速它开发运维以及输出的速度。

  我们可以把整个阿里云在几个小时之内就搭建起来。所以说,Docker已经彻底地改变了我们对软件交付和运维的一些场景。

  为什么Docker这么重要?

  加速应用交付,缩短梦想距离

  我们谈互联网公司,互联网公司的核心竞争力是什么?

  就是效率,就是看你能不能最快速度地推出产品,最低的成本,最快的地迭代。
2.png

  而在十年前我们的软件开发是什么样的?

  我们的应用是一个整体式的应用,它是由大的团队来开发,这个团队分为开发团队和运维团队,开发团队有前端团队、后端团队、数据库团队,这些团队可能因为业务需求互相扯皮,到最后使整个软件开发迭代的速度极为缓慢。

  在传统企业迭代的周期在半年到一年,这个速度远远不能满足业务方的需求,同时更苦逼的是我们运维人员,直到最后一刻,软件人员讲解马上要上线,把一堆安装脚本给运维人员,让运维人员去安装和部署,去保证它的高可用。

  大家能想象吗?这样的事情怎么可能发生!

  所以说,大家顶着一个巨大的挑战:

  第一个就是变化缓慢,在互联网时代谁变得慢,谁就死得快;

  第二,为了保证这样大型的整体应用,它非常难伸缩,通常为了适应大的流量,我们只能增加新的CPU等方法来扩展。

  大家都知道,如果要保证线性计算性能的增长,可能需要花费的代价更高。另外,整个系统持续运营能力也是不好的,越大越不稳定,其中一个组件坏掉,就会产生雪崩效应,整个系统就会宕掉。

  这个过程非常痛苦,阿里经过这样的过程,现在的互联网公司包括阿里都已经演变成如下的结构。

  底层是一个基于云服务或者虚拟化的计算架构,每个业务比如电商,可以有用户管理、商品管理,我们的购物车、导购、广告。

  这些都是不同的模块,每个模块是由一个小组,每个图片都可以独立部署,组件之间是通过标准化的协议互相通信。

  只有这样才能保证速度,才能保证在竞争中我们能够活下来。

  Docker 与虚拟化技术

  Docker的出现进一步地推动这件事,Docker是一种轻量级的操作系统虚拟化方案,更加敏捷地进行交付。

  Docker本身具有良好的可移植性,这一点更为重要,我们能够在开发、测试、生产中用统一的方法、统一的介质来交付软件。

  想象一下,如果是在一个混合云场景,比如说“双11大促”,很多现在的计算力已经移到公有云上,因为是按需分配,很快地可以把应用扩展到整个数据中心。
2.png

  结合Docker容器和虚拟化技术

  很多人说“Docker革了虚拟化的命”,我们认为Docker和虚拟化在很多程度上也是互补的。

  Docker技术依然有本身的限制,比如Docker在系统的安全隔离方面做得并不好,像虚拟化这些Docker不能做,目前一个最成熟的方案是把虚拟化的技术和容器技术结合在一起。

  在公有云上非常不建议大家采用多租户的方式,因为有大量的安全漏洞。

  Cloud Native Computing

  随着微服务和容器技术的发展,在去年谷歌牵头成立了一个Cloud Native Computing基金会。

  它定义了未来的原生应用的一些基本要素和框架,以微服务架构以容器方式交付,支持DevOps,这个平台是动态自己管理的,不是手动的。
2.png

  为什么做这件事?

  我们要以持续发展的眼光来看,单体应用早晚会碰到天花板,它的复杂性、可伸缩性一定撞到墙。

  所以,我们才采用微服务,微服务不是免费的午餐,它带来好处的时候也带来复杂性,以前我运维一个应用,现在要运维几十个服务。

  以前也有同事跟我说是二十个服务,分解成微服务之后是将近四百个,他的管理数量多了一个量极。

  如何让服务和服务之间监控它的健康状况?

  一旦一个服务挂掉,我们要对它进行隔离、熔断、降级,然后我们怎么对这个微服务进行版本更新,保证以前的产品不会受到中断?

  这些都是巨大的影响。

  这些事情如果让人手动来做的话,肯定不行,一定要用平台、用自动化的方式。所以,这就是为什么大家在强调需要一个平台来支撑。

  云端漫步:开始 Docker 之旅

  其实在云上使用服务器并不复杂,大家已经非常习惯于在自己的开发、测试、数据中心使用Docker技术,但是在云上大家为什么不呢?

  大家觉得要虚拟机、配各种东西很麻烦,但是其实不是这样的。
2.png

  Docker在2014年底推出了Docker Machine,利用Docker Machine就可以快速地在云上创建一个Docker的云环境。

  要做的事情很简单,下载Docker Machine之后寻找云的供应商的驱动,比如现在的阿里云、亚马逊、Aure这样的一些Driver,通过Driver,通过命令行就可以在上面部署我的容器化应用,非常简单。

  生产环境中使用Docker

  但是如果真的在云上、在生长环境选Docker,你要面临的挑战远不仅如此。

  一个Docker的实力肯定不够,一定是一个集群,这个集群怎么管理,网络怎么桥接,存储怎么办,如何进行资源调度,怎么安排,这是一个非常复杂的事情。

  为了这件事,很多互联网企业都提供了所谓的产品,我找几个给大家介绍一下。

  Docker Cloud,Docker在去年11月收购了tutum.co在今年2月份推出了Docker Cloud,它基本上提供了Docker自身原生的一个编排的API

  亚马逊在2014年11月份推出了 EC2 Container Service,它最早是基于一个自己的私有API提供了容器描述的服务,但是在去年逐渐开始支持更加广泛的Docker,来描述一个组合的容器化应用。
2.png

  谷歌的Compose template,它也是在2014年7月开源的,它是集成了以前的很多思想,相应的一些调度的很多历史。推出来之后得到很大的欢迎,但是它提供了一套自己特有的对容器化应用抽象。

  容器集群管理 - Docker Swarm

  为了更好地阐述我们的一些内容,我今天会介绍一下阿里容器服务。阿里容器服务为了解决用户在开发、测试环境无缝迁移,我们完全兼容了Docker原生编排方案。

  Docker原生编排方案包括哪些内容?

  首先是Docker Swarm,它是一个很精巧的设计,我能不能把一组Docker engine变成一个虚拟的Docker engine,我都向这一个虚拟的Docker engine下发指令,由它的控制节点真正调动到一个实际的节点来执行。
2.png

  它的架构非常简单,在每台节点上只需要一个Docker engine之后再安装一个Agent就好了,Agent通过上报就能够实现一个机器的自动注册,通过这个功能上面有一个节点能够发现里面的节点信息,就能够自动地构建集群。

  它是一个非常精巧的抽象,因为它几乎99%地支持了所有Docker原生的API。

  它带来两个好处:

  它可以和现在三方所有和Docker连接的工具集成在一起,不做任何改变;

  它有另外一个好处是提供了一个可以插拔的架构,比如说它的调度器、存储和网络都可以非常容易地进行扩展。

  另外它有一个很大的缺点:

  Swarm和Docker一样,它本身的抽象基本单位是容器,并没有站在服务的角度去思考。

  容器编排 - Docker Compose

  Docker Compose源于Docker的一次收购,Docker Compose是描述如何将一组容器和这个容器相关的资源组合在一起。

  比如我们拿Wordpress来举例,然后Mysql,一个简单的编排模板就可以把它描述出来,通过Wordpress镜像在一起,通过链接连接到Mysql,通过volume来创建。

  通过这种方式可以非常优雅地描述一组容器是怎么关联工作在一起的,而且通过一键就可以把整个应用站启动起来。如果我们对它进行一些伸缩的话,也非常简单。
2.png

  优点

  简单好用,便于开发。它是一个非常好的开发工具,在Docker的开发社区中已经有超过70% 的人在使用Docker Compose进行镜像开发。

  扩展了对网络、存储的支持。不但可以描述和容器,还可以描述容器和它对应的基础资源的一些关联。

  不足

  面向开发和部署,不支持自动化运维。比如说,怎么跟运维进行监控,是不是能够进行弹性收缩,它都没有做,因为它本身就是一个开发工具。

  阿里容器服务

  我们理想中的一个容器开发平台是什么呢?

  我们的阿里云容器服务提供的一个能力,首先底层是公共云计算平台或者企业的专有云。在此之上是容器层,除了Docker之外,Docker仓库,还有相应的存储和网络。
2.png

  原生的Docker是远远不够的,它提供了相应的机制,我们也建议这种机制把云端的块存储、对象存储、网络存储都能够非常容易地集成进来。

  在容器层之上就是集群管理和调度层,我们做了大量的优化和改进,比如说刚才大家谈到一个应用,我们要保证它的迁移,我们要做那么多事情,我们不能保证它不宕掉,我们能够保证什么呢?

  我们能够保证资源调度,哪怕一个数据中心断电,一个地区的数据中心断电,也可以保证资源调度。

  另外,在容器编排的角度,我们怎么很容易地把一个服务暴露出去,很容易地对容器进行日志采集和监控?我们做了大量的扩展,依然可以做到非常好的容器应用的管控。

  在此之上就是我们的服务层,阿里本身的微服务架构做了很久,在开源界是非常流行的,我们把这些经验都内化到我们的支持能力中来。

  其中的一个很大关键是如何做服务的发现、服务的路由,我们扩展了很多,通过BNS发现,通过负载均衡来实现服务节点之间的动态的负载均衡,通过这些东西,让您的微服务做得很好。

  在服务层之上就是接入层,让Web应用可以非常容易地接入到你的自身应用上。

  这是我们整个容器平台的核心,但是大家知道,一个不开放的平台是远远不够的,因为容器不能解决所有的问题,容器一定要跟现有企业的应用或者云服务打通。

  我们做了很好的集成能力,能够非常容易地跟云服务集成,我们能够跟第三方工具集成,把容器这个技术融合到您自己开发的流程中,同时我们提供云管控。

  管控能力,除了自身接入我们的云监控日志之外,实际上我们整个系统里所有的管控框架都是可以随便扩展的,因为我们认为一个不够开放的平台基本上就是耍流氓,容器不是你的信息孤岛,一定要跟现有的IT管控结合在一起。

  我们也提供了很多范例怎么利用开源的框架,迅速地搭建一个您自己需要的云监控的能力,这些我们在后面的文档中有一些示例,大家可以去看。

原文作者:易立 来源:高效运维

相关帖子

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部