云原生敏捷运维从入门到精通
上QQ阅读APP看书,第一时间看更新

前言

最近几年,我们时时刻刻都能够感受到互联网发展给我们带来的冲击,我们衣食住行的方方面面都受到互联网的影响。例如,如果想买衣服,我们不需要去大型购物商场,只需要坐在电脑前,在各大购物网站浏览选购、下单,然后坐等快递送货上门即可;晚上回到家肚子饿了,又不想出门吃饭,那么可以拿出手机,在大众点评或美团上下单,很快就有送餐员上门服务;要买房子或者租房子,我们可以在网上查看选择符合条件的房源,然后再实地考察,这样可以节省大量的时间;出门吃饭或者购物,自己开车有时候不方便停车,打开手机,在滴滴出行输入目的地址,很快就有司机来接你;出门逛街的时候,完全不需要带上钱包,因为商店甚至街头小贩都支持微信或者支付宝结算,非常方便。

在享受生活工作的方便之余,作为技术工作者,有时我们也会思考在背后支撑这些场景的技术——云计算。

通常,云计算具有如下特征。

● 计算资源可以根据需要进行自动扩展。大家都知道,在双11购物节,网上购物的交易量是平时的数十倍甚至数百倍,要应付如此庞大的交易量,相应的计算资源也需要根据需要进行扩充。根据过去的经验,扩充计算资源可能需要数月的时间,包括资源规划、硬件采购、软件部署等步骤,但是利用云计算技术,计算资源可以在数分钟、甚至数秒内得以扩展。

● 计算资源是按需付费的,通常是按分钟计费的,有消息称某些云服务商未来将提供按秒计费的能力。

● 计算资源可以在不同的用户之间共享,这就意味着电商的冗余计算资源在销售淡季可以用于出租。

那么,在云端进行软件开发有什么特点呢?

在传统的软件发布模式下,用户需要下载软件安装包,将其安装部署到自己的主机上,然后才能使用。但是在云端模式下,一旦软件部署到云端,所有用户都可以使用它,而不需要用户进行任何部署操作。也就是说,软件的部署升级控制权是属于云端软件开发者的,而不是软件的使用者。这可以带来一个好处,那就是软件的开发者可以根据需要主动升级云端的软件。例如,在软件中发现一个安全漏洞,原来的做法是软件开发者在下载页面提供补丁下载,然后通知用户,要求用户下载并安装,但是如果用户因为某种原因忽略了这个通知,那么用户因为没有主动升级补丁,仍然会受到安全漏洞的威胁;而在云端,软件开发者也同时充当软件维护者的角色,他们可以主动升级补丁以保证用户不受高危漏洞的威胁。另外,假设存在一个很严重的漏洞,如果按照原来的模式,只是通知用户下载补丁并修复漏洞,很多情况下用户会选择性地忽略这些问题,从而造成某些关键特性不可用,降低用户的满意度;而在云端,软件开发者可以主动升级软件,也就不存在这样的问题。

但是软件开发者在云端主动升级软件会带来另外一个问题,那就是如果新的补丁中引入了新的问题,怎么办?

有三种解决办法:

● 采取严格的质量保证流程,在发布每次新版本时都进行充分的测试,但是这只能阻止大部分问题,而无法完全避免新问题的出现。

● 采取比较保守的升级策略,或者按照需要进行升级。也就是说,如果用户的应用需要特定的功能,而老的版本不支持,那么就必须升级,但这样做只能延缓新问题被发现的时间。

● 采取比较激进的升级策略,只要有新版本发布,一律升级到最新的版本,同时加快新版本的迭代速度。例如,一个星期或者两个星期一个迭代,当迭代周期足够短的时候,大量用户还没有意识到问题的存在,问题就已经被修复了。

解决方案2是不值得推荐的,因为它只是规避问题,而没有解决问题。解决方案1和3都可以一定程度地解决问题,但是它们都需要快速的迭代周期来提高用户的满意度。如何提高迭代的速度?答案是采用敏捷的方法配合高度的自动化。敏捷方法的特点就是微迭代,每个迭代周期很短,发布的内容很少,但都是经过充分测试的发布版本。假设发布周期为一周,在这一周时间里,整个软件生命周期的各个步骤一样都不能少,包括软件设计、编码、单元测试、编译、部署、端到端测试等。怎么才能做到这一点呢?答案是充分自动化。这就引入了持续集成和持续发布的概念。所谓持续集成,就是利用一套自动化工具,在每天的特定时间将当天入库的代码进行集成、编译、测试,保证当前的最新版本是可以发布的版本。所谓持续发布,就是在持续集成结果没问题的情况,根据软件发布的要求,自动发布最新的软件到生产环境,保证生产环境是最新的版本,从理论上应该可以实现每天或者更短时间一个发布。

工欲善其事,必先利其器。掌握好的工具和方法可以使我们在工作和竞争中掌握先机。本书的目的是向读者讲解和展示原生云上基于产品生命周期的持续集成和持续部署交付的原理和流程步骤,并提供一系列工具、代码和相关镜像来构建企业原生云的持续集成和持续部署交付产品。其中重点讲述和展示了产品需求分析和竞争对手产品分析、产品项目Redmine的构建和管理、驱动代码GitLab的构建及与GitHub的集成、满足持续质量保证的Jenkins集群定制、基于Kubernetes集群的端到端产品自动测试和基于Kafka和Streaming技术的实时预警、基于历史日志存储的ELK日志分析,在本书最后还向读者介绍了Devops和AIops的行业案例和最新技术进展。

本书有助于读者了解和掌握基于云原生应用和产品的项目流程设计和运维的全过程。同时本书还提供了一系列实用设计文档模板、简洁完备的源代码和即插即用的可执行容器镜像,读者可在理解本书图文的基础上直接上手参与实际项目。

本书文字部分重点讲述原生云Devops的原理和流程,图示部分涉及各章核心流程。各章代码提供重点代码讲解,完整代码在GitHub和机械工业出版社计算机分社官方微信订阅号“IT有得聊”上提供下载。各章运行环境提供开箱即可用的docker镜像,并在Docker Hub上提供下载。

本书主要适合读者对象包括:云平台产品设计开发运营人员;企业传统应用的云迁移项目实施人员;企业信息部门决策人员;大学及研究机构的相关研究人员和在校学生等。

本书的代码已经共享到GitHub,地址是https://github.com/cloudAgileOps/cloudagileops,读者可以随时下载并使用。

在本书的编写过程中,我要特别感谢我的两位同事兼朋友——张乐和侯皓星,他们承担了本书编写的大量工作,正是他们的加倍努力,才使本书的问世成为可能。下面是整个编书团队的简单介绍:

王宇,西安交通大学博士毕业,拥有17年行业经验,目前是思爱普中国研发中心西安分公司高级开发经理,主要从事数据库云服务的开发运维管理工作。

张乐,西安交通大学硕士研究生毕业,拥有10年以上行业经验,目前是思爱普中国研发中心西安分公司的高级开发工程师,主要从事数据库云服务的开发运维工作。

侯皓星,西安交通大学硕士研究生毕业,拥有8年以上行业经验,目前是思爱普中国研发中心西安分公司的高级开发工程师,主要从事数据库云服务的开发运维工作。

如果读者能从本书获得某些帮助和启迪,我们将不胜荣幸和欣慰。

王宇

2019/6/5 晚