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