分享
邵海杨(又拍云运维总监)
整理
蘭星西北
TechMinds是又拍云主办的高端技术领导人私享会系列活动,先后在深圳、广州、北京、上海成功举办,凭借私密的分享环境、高质量的对话嘉宾、前沿的行业和技术话题,又拍云TechMinds已经成为技术圈子中非常受欢迎的“思想汇”活动。10月25日,又拍云TechMinds首次进入杭州,就“高效运维路在何方”的交流主题展开了激烈的讨论。
又拍云运维总监邵海杨在TechMindsNo.5中根据自己10余年的研发、运维经验并结合又拍云的实际情况,总结并分享了DevOps的“八荣八耻”、HerkuPaaS的12要素宣言。
△又拍云运维总监邵海杨
以下是邵海杨分享的全文:
今天我讲的是DevOps的八荣八耻,和后面HerkuPaaS的12要素宣言相呼应,大家可以一起对照的来看,这其实是一个互相印证的过程。
DevOps这个思想提出来已经五六年了,一直都是呼声很高,落地很难,为什么呢?这可能与各个公司的业务情况和技术发展路线有或多或少的关系,比如说创业的最早技术合伙人是运维出身或者技术出身,但是水平不高,为了公司持续发展,引入新鲜血液时,就会存在技术的先进性跟解决遗留烂摊子的矛盾。又或者业务本身偏向于用户,导致技术被边缘化,产品又没有好的架构,限制了快速发展等;所以,DevOps的推进一定要自上而下,凭借挑战自我,颠覆传统的勇气才能去落实。
DevOps的八荣八耻
以可配置为荣,以硬编码为耻
△以可配置为荣,以硬编码为耻
做过开发的朋友都知道,程序跟变量分离会出现单独的配置文件,所以运维要像开发学习,学会把软件和配置分离。
又拍云第一个版本自动化运维时,我们把所有的硬参数配置到upyun.cfg,如上图。它的好处在于,只要编写一个config函数,就可以把这种文本的运行方式,变成右边nginx所能运行的格式。并且可以用同样一份配置去适用不同的后端软件,如用haproxy替换nginx,只要重新写一下config函数即可,运维和开发仍然可以使用同一份参数。
本地配置的文本格式有txt、ini、cfg,但是这些格式都没有没有硬性要求,如ini在php里用的多一点,cfg在mysql里用的多一些。一般配置的文件里面会包括开关变量,调试参数、可变参数、权重,以及关联上下游的参数,这些都可以放在配置里面,通过程序生成程序的方式完成。
第二代就不再使用它了。我们现在使用Yaml来定义配置文件,通过它动态生成配置文件,这两者的思路是相同的,都是通过程序生成程序。除此之外,现在也有一些更加流行的技术,比如通过etcd或者是consul来实现服务的自动发现、自动注册。
以互备为荣,以单点为耻
△以互备为荣,以单点为耻
互容互备一直是优良架构的设计重点。
又拍云早期做架构设计,使用了LVS+Keeplived+VRRP做转换,这样可以方便负载均衡,动态升级,隔离故障。现在的又拍云第二代,已经在部分大节点使用OSPF和Quagga做等价路由的负载均衡和冗余保障。
Nginx可以加Haproxy或LVS做负载均衡。MySQL可以做主从切换,或者是MMM的高可用成熟解决方案。我们的消息队列之前用rabbitmq做,现在主要是redis和kafka集群化,其中kafka已经迁到了Mesos容器平台里。
服务的自动发现、注册,我们可以使用consul、etcd、doozer(Heroku公司产品),还有zookeeper。主要区别是算法不一样,zookeeper用的是paxos算法,而consul用的是raft算法。目前看来consul比较流行,因为consul的自动发现和自动注册更加容易使用。etcd主要是CoreOS在主推,CoreOS本身就是一个滚动发布的针对分布式部署的操作系统,大家可以去