极牛技术实践分享活动
极牛技术实践分享系列活动是极牛联合顶级VC、技术专家,为企业、技术人提供的一种系统的线上技术分享活动。
每期不一样的技术主题,和行业专家深度探讨,专一解决技术实践难点,推进技术创新,每周三20点正式开课。欢迎各个机构、企业、行业专家、技术人报名参加。
嘉宾介绍
代闻,亚马逊AWS解决方案架构师,负责基于AWS的云计算方案架构的咨询和设计,同时致力于AWS云服务在国内的应用和推广,在大规模后台架构、物联网应用、媒体行业转型、企业混合IT和自动化运维等方面有着普遍的设计和实践经验。在加入AWS以前,在思科中国担任系统工程师,负责方案咨询和架构设计,在企业私有云和基础网络方面有丰富经验。曾任IBM中国软件开发中心软件工程师,从事企业软件和移动平台的开发工做。
在不少企业中,应用程序发布是一项涉及多个团队、压力很大、风险很高的活动。然而在具有DevOps能力的组织中,应用程序发布的风险却很低。目前开发人员对于DevOps的认识深浅不一,本期请到了亚马逊架构师代闻来为咱们实例解析DevOps。
01/DevOps简介和适用场景
DevOps是一个软件开发的方法,目的是为了提升内部运维能力,也就是说,DevOps是运维的一个方式,只不过经过软件实现了更高的自动化。DevOps一词,Dev是形容词,Ops是主体,DevOps的兴起,并非技术人员自娱自乐,而是业务需求推进的结果。
传统的瀑布式开发,周期长,风险大;如今的初创公司推崇的是敏捷开发、快速迭代
可是敏捷开发仅解决了软件开发的问题,若是集成、部署、平台搭建没有作相应的调整,Ops将会是整个流程的短板。
固然,这里面涉及到另外一个话题,就是微服务。当软件开发的各个团队负责各自服务,彼此经过约定接口调用实现松耦合,软件集成和部署就能够细化到各个服务,而后经过工具和平台实现持续的集成、部署、平台构建,平台的敏捷程度就会大大提高。其中,经过代码、脚原本加速集成、部署和平台构建的过程,能够成为DevOps。
DevOps须要关注的方面不少,主要有两个重点:
第一,文化和组织
关于DevOps文化和组织,听起来比较虚,但倒是DevOps应用的核心。
传统公司里,开发和运维之间有既成组织架构的界限,向DevOps转型须要付出不少努力
初创公司负担少,更容易接受DevOps。
DevOps要求开发和运维之间互相协做,以业务为共同目标,实现快速迭代,平台的feature从设计、开发到交付的整个流程,都有担任ops角色的同事(也可能兼开发)参与,确保程序在设计初始就已经考虑到基础架构的优化,以及后续的内部OP事宜。
同时,担任DevOps角色的同事的技能要比以往更多一些,除了基本的服务器、网络、存储知识,还须要有代码或脚本能力。
综合下来,能够看到三种模式:
1)开发兼运维:这是在初创公司最多见的模式,5人如下的团队不少是这样的;
2)每一个产品团队有OP同事,但没有运维Team。这是开始发展的公司,须要有专人作OP,可是op仍是在研发的team;
3)独立的OP Team,适用于已经有必定规模的公司。好比,在AWS的用户里,我常看到80人以上的技术团队,一半都会有考虑将基础架构管理独立出来。
但不管哪一种模式,都要求Ops同事除了基本系统管理之外,可以有脚本或代码的能力,可以有基于云作平台架构的能力。
云计算将最底层的数据中心运维作完了,基于云作DevOps和架构设计也就成了天然而然的事情。好比,在猎豹移动,海外运维团队10人如下,管理着上万的VM,以及各种平台服务,DevOps是必须的。
另外,若是组织发展壮大后,在DevOps过程里有一些须要仲裁的事情(如上线时间和方式),或者有些标准须要制定(如版本、平台环境等),建议有一个技术委员会(若是组织小,也许就一两我的)来做仲裁。在Netflix,这个委员会叫CORE Team,你们能够Google如下Re:invent 2015大会上Netflix的分享。
第二,工具和平台php
既然DevOps是以软件开发的方式来解决运维自动化,先看看软件开发的工具和平台。首先最底层的Platform就是服务器和操做系统,操做系统有API是一切的基础,而后操做系统的API包装成系统编程的SDK,再而后才有高级语言和解释型语言运行的框架,最上面一层是代码,同时,代码也能够越过封装,经过Native调用的方式来调用更底层的接口。
02/AWS DevOps介绍java
公有云对DevOps的支持,实际上是一个原理。以AWS为例,Platform就是底层的基础设施,AWS经过技术平台实现了基础设施虚拟化,并提供API,这是最核心的部分,没有API,一切无从谈起。这个API就是Restful API,这也是Amazon Web Services的由来,由于Restful API就是web services,AWS作了不少的工做,把restful API包装成java、python、php、ruby等sdk,到这里已经能够经过编程的方式控制基础设施了,可是为了更加易用,AWS提供了各种的service来做为自动化框架,如基于Chef的opsworks,快速部署的Elasticbeanstalk,将基础设施代码化的cloudformation等。
经过这一层的搭建,用户只须要在配置文件或模板或脚本里指定资源,就能够完成部署和控制,由于Framework具有执行和验证的逻辑。python
这是使用python sdk (名字叫boto)启用二次
启用EC2的代码
逻辑和行文须要本身控制,已经很好用了,好比你要启用20台,每台的参数可能会有不一样,就能够经过写python脚本的方式,快速搭建,可是行文是本身控制的。git
这是一个cloudformation模板,里面也是启用一个instance,可是,这里面只有资源描述,具体的操做逻辑是cloudformation这个服务来进行的。
经过框架服务,在自动化的基础上,能够进一步实现标准化。web
这个图是AWS的DevOps服务在开发运维整个生命周期的支持状况。
三个黄色的框,分别是CodeCommit、CodePipeline和CodeDeploy。
CodeCommit是一个托管的Git仓库,用于托管代码,好处是AWS托管服务,高可用,彻底支持git。
CodePipeline是一个集成编译和测试的工做流服务,能够联合源代码仓库、编译服务器(如genkins)、部署服务(如codedeploy)工做,将部署流程可视化,并能管理复杂的条件分支。
CodeDeploy是一个代码部署服务,经过在EC2虚拟机上部署Agent,能够实现分批和滚动部署,并能够经过配置文件实现部署先后的检测和验证脚本执行。
以上三个工具均可以和第三方工具集成,在部署(deploy)、平台构建(Provision)和监控(Monitor)方面,AWS服务不少。
Cloudformation实际上是经过json描述的模板来实现基础架构的搭建,你能够把cloudformation模板也存入Git仓库,每一次基础设施修改都是经过修改cloudformation模板,而后应用来改动(cloudformation能够本身判断差异和资源依赖,实现最小化变动范围)。而后再存入git的时候,在注释中写明更改起因。cloudformation能够作到基础架构代码化,很是重要。
监控方面,Cloudwatch能够监控AWS各种服务的数据,好比EC2的CPU、网络、存储IO,ELB的链接数、排队数、溢出数,数据库服务的IO、延迟等等。
AWS Opswork和ElasticBeanstalk都是完整覆盖三个阶段的服务,不一样之处是,Opswork偏运维,控制粒度细,基于Chef来实现平台和应用部署,基于AWS API来实现底层搭建。
熟悉Chef的同窗会很容易喜欢上Opsworks。
ElasticBeanstalk更加适合研发背景多一些,或者不喜欢作不少运维工做的同窗,ElasticBeanstalk能够自动化搭建底层基础设施和平台环境(如tomcat、python、ruby等),同时,ElasticBeanstalk的命令行能够和git 命令协同工做,git commit以后,一条eb deploy命令能够完成部署。可是ElasticBeanstalk的平台环境版本不能够随意修改,对底层资源的修改也须要修改经过elasticbeanstalk来做。
ECS全程EC2 Container Services,是AWS的docker 集群管理服务,这里就不详细展开了。
值得一提的时,ElasticBeanstalk和ECS也能够联动,若是ElasticBeanstalk提供的环境不能知足要求,你能够把你的自定义环境打包到docker Image,ElasticBeanstalk支持docker部署。
03/猎豹DevOps案例分享
最后,分享一下猎豹DevOps的一些状况。
各项服务的频繁开启与维护: 自动化运维开发
代码快速迭代: 基于ansible的发布配置管理
各业务成本控制: 基于tags的成本核算
服务性能监控: zabbix监控
上面四项是猎豹移动在海外运维中遇到的问题的解决办法。
猎豹移动增加很是迅猛,如今使用了几乎全部的AWS商用Region以服务全球用户。docker
这是内部运维平台的架构图,基于Boto(aws api的python sdk)来构建,猎豹本身开发了一个资源申请流程系统,内部用户能够在网页上申请资源,后台经过boto来控制aws资源
此外,更复杂的一些运维和部署,经过ansible来作。
对于初创公司,能够经过sdk控制,也能够经过aws命令行来实现自动化。Ansible也是一个很是不错的工具,不须要agent,支持aws api.数据库
这是ansible快速部署ebs存储卷的一个例子。
总结下要点:
首先,DevOps是个方式,要创建正确的文化,开发与运维互相协做,运维技能须要从单点系统扩展到架构设计和脚本自动化。
第二,选用正确的平台和工具,诸如SDK、运维框架等平台和工具,尽可能选用已有和比较成熟的,而后直接使用或进行二次开发。但即便二次开发,也是结合业务流,而不是从新作已有平台的事情。
第三,完整考虑各个环境,包括开发、编译、测试、集成、部署、平台构建、监控等,从软件设计之初就考虑到最终的基础架构支持和优化部署,经过微服务演化加速继承和部署,DevOps在其中相当重要。
第四,从哪里上手?第一步,AWS命令行和SDK(好比基于python的boto或boto3);第二步,使用AWS基础设施服务,如cloudformation;第三步,结合使用场景使用高级服务,如ElasticBeanstak、Opsworks等提升运维规范和敏捷度,CodeCommit、CodePipeline、CodeDeploy优化CI/CD流程。
04/Q&A
Q1:在 DevOps 环节中是否须要专门的安全人员?如何解决安全问题?
安全是贯彻始终的,在初创公司,最好是你们造成安全意识,使用工具、平台和服务,也都积极了解安全方面的功能和保障。在AWS上作DevOps,要留意数据存储和传输时候加密,数据的访问权限设置,部署避免使用静态秘钥绑定等等。
Q2:Devops只适用于敏捷开发团队,仍是也使用其它开发周期?
若是不作敏捷开发,那么DevOps更多的是自动化部署、下降人为错误、提升运维标准化方面。好比,虽然研发依然是瀑布式开发,可是运维Team内部能够作自动化,基础架构代码化,可是有业务驱动的话,动力通常更强,对不对。
Q3:国内团队如何选择选择云厂商?
AWS的API和SDK是最全面的,在一个比较全面的平台上能够专一本身的平台构建。首先,AWS的基础服务功能很全面,好比VPC,如今尚未看到一个级别的;第二,AWS的PaaS服务能够简化运维,如数据分析类(EMR、Redshift、Kinesis)、数据库类(RDS、DynamoDB);第三,在同一平台上向先驱学习,好比Netflix、SuperCell、小米、猎豹、MobiVista、Camera360等等。
你们Google一下Netflix的OSS,有不少开源的好工具,便于你们在AWS上自动化运维、作大数据分析、提升架构可靠性。
Q4:如何利用 Docker 实现 DevOps 自动化、作好应用持续集成、持续交付有什么好的案例。
Docker革命性地改变了开发和部署,改变了持续集成和交付的流程,研发和运维之间的交付从代码编程了DockerImage(或者Code+DockerFile),运维只须要关注底层资源自动化。可是,DockerImage封装的平台环境要有内部的标准,虽然隔离后能够多环境,但多环境仍是要有标准,方便管理。
另外,底层平台的自动化依然须要编程或脚原本实现自动化提供,这点没有变。
如今业界有一个误区,就是把Docker的集装箱特性和高动态特性没有分场景去谈,若是是你本身用,更可能是关注Docker的集装箱特性,若是你是用Docker作一个PaaS,那才须要关注和实如今集群里提供高动态。
*此分享由亚马逊的代闻在极牛线上技术分享群里所分享
【下期重磅预告】
下周三(9.20)咱们邀请了腾讯云的三位技术大牛共同进行线上分享!
<讲师群>
张浩-腾讯云产品经理
闫二辉-腾讯云资深存储架构师
周维跃-腾讯云资深研发工程师
<主题>
腾讯云分布式高可靠消息队列CMQ架构最佳实践
有意加入的技术朋友,请在极牛公众号(ji-niu)里回复“技术分享”。编程