书名:站点可靠性工程(SRE)实战
ISBN:978-7-115-58406-9
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
著 [印] 佩图鲁•拉吉•切利亚(Pethuru Raj Chelliah)
[印] 什里亚什•奈塔尼(Shreyash Naithani)
[印] 肖伦德•辛格(Shailender Singh)
译 陈英锋
责任编辑 傅道坤
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
读者服务热线:(010)81055410
反盗版热线:(010)81055315
Copyright © Packt Publishing 2018. First published in the English language under the title Practical Site Reliability Engineering.
All Rights Reserved.
本书由英国Packt Publishing公司授权人民邮电出版社有限公司出版。未经出版者书面许可,对本书的任何部分不得以任何方式或任何手段复制和传播。
版权所有,侵权必究。
本书介绍了在应用程序和微服务的开发、交付以及部署过程中用到的知识和工具,并借助于大量的示例和截图详细地呈现了与站点可靠性工程(SRE)相关的所有内容。
本书总计12章,分别介绍了SRE的现状、微服务架构和容器、微服务弹性模式、DevOps即服务、容器集群和编排平台、架构模式与设计模式、可靠性实施技术、实现可靠系统的最佳做法、服务弹性、容器/Kubernetes和Istio监控、确保和增强IT可靠性的后期活动,以及服务网格和容器编排平台等内容。
本书适合对容器、微服务、Kubernetes、Istio等运维技术感兴趣的软件开发运维(DevOps)人员、系统工程师、IT性能专家阅读。本书可帮助他们了解SRE是如何有助于自动化和加速应用程序/服务的设计、开发、调试和部署的。
佩图鲁·拉吉·切利亚(Pethuru Raj Chelliah),在印度移动数字服务提供商Reliance Jio Infocomm(RJIL)公司(位于班加罗尔)的站点可靠性工程卓越中心担任首席架构师。在此之前,他在IBM印度公司的全球云卓越中心(位于班加罗尔)工作了4年,当时的身份是云基础设施架构师。他还曾经长期担任Wipro咨询服务部门的企业架构顾问并持有TOGAF认证,以及在Robert Bosch公司(位于班加罗尔)的企业研究部门担任首席架构师。他拥有17年以上的IT从业经验。
衷心感谢我在RJIL公司的经理Anish Shah先生和Kiran Thomas先生提供的精神支持。感谢我尊敬的同事Senthil Arunachalam先生和Vidya Hungud女士提供的精神支持。感谢我的妻子Sweelin Reena和两个儿子(分别是Darren Samuel和Darresh Bernie)对我的包容。
什里亚什·奈塔尼(Shreyash Naithani),目前是微软研发部的一名站点可靠性工程师。在加入微软之前,他曾在初创公司和中等规模的公司工作过。他从印度旁遮普技术大学获得计算机科学专业的本科文凭,并从印度班加罗尔的高级计算发展中心获得了硕士文凭。他还曾经有过短暂的DevOps工程师(Python/C#语言相关)、工具开发人员、站点/服务可靠性工程师以及UNIX系统管理员的从业经历。在闲暇时间,他喜欢旅游和看电视剧。
感谢我的父母、兄弟和朋友(分别是Nipun Pathak和Sunil Baurai)在我写作本书时给予的帮助和支持。特别感谢Meenakshi Gaur提供的巨大帮助和支持。
肖伦德·辛格(Shailender Singh),首席站点可靠性工程师和解决方案架构师,拥有约11年的IT从业经验,并拥有信息技术和计算机应用两个专业的硕士学位。他曾担任过Linux平台下的C语言开发人员,并几乎接触过从混合云到云托管环境在内的所有基础设施技术。在过去,他曾与麦肯锡、惠普、HCL、Revionics和Avalara等公司合作过,当前他倾向于使用AWS、Kubernetes、Terraform、Packer、Jenkins、Ansible和OpenShift等工具。
图书写作比我想象的更难,也比我想象的更有成就感。如果没有我的妻子Komal Rathore,写作本书几无可能。在写作本书时,她一直在激励和支持我,并希望我能与IT行业的同仁分享我的经验。
潘卡杰·塔库尔(Pankaj Thakur),拥有阿卜杜勒·卡拉姆技术大学的计算机应用硕士学位。该大学的前身是北方邦技术大学(UPTU),是印度久负盛名的大学之一。他在IT领域拥有13年以上的经验和专业知识,曾与全球各地的众多客户合作过。Pankaj对云技术、人工智能、机器学习和自动化拥有浓厚的兴趣。他已经成功地完成了几次云迁移,将单体应用程序转换为微服务架构的程序。他知识渊博,经验丰富,他相信读者会从本书中获益良多,能提高他们的SRE技能。
阿什·库马尔(Ashish Kumar),拥有喜马偕尔邦大学(位于西姆拉)的IT工程学位。他一直从事DevOps咨询,以及基于容器的应用、开发、监控、性能工程和SRE实践等工作。他一直是DevOps和SRE实施的核心团队成员。他热衷于识别繁重的工作并利用软件实践将其自动化。在闲暇时间,他喜欢徒步旅行、玩户外游戏和冥想。
越来越多的企业级应用程序在软件定义的云环境中进行托管和管理。随着云技术以及相关工具的迅速成熟和稳定,将云用作生产和运行各种业务工作负载的一站式IT解决方案正在全球范围内迅速增长。然而,在成功运行云中心(公有云、私有云、混合云和边缘云)方面还有一些关键的挑战。就克服云操作带来的挑战,以及实现云理念最初设想的优势方面,自动化和编排被誉为前进之路。在谈到云时,人们广泛关注的是可靠性(弹性和灵活性)。另一个值得注意的趋势是具有Web规模且支持移动访问的操作、事务和分析应用程序开始出现。因此,尽可能确保数据和进程密集型应用程序的稳定性、容错性和高可用性是至关重要的。可靠性问题正通过前沿技术的巧妙利用而得以解决。
本书阐述并强调了如何融合一系列突破性的技术和工具,以确保最高程度的可靠性。这不仅适用于专业应用程序和个人应用程序,也适用于云基础设施。让我们对可靠系统展开设想,并准备拥抱它吧。
本书旨在帮助软件开发人员、IT专业人士、DevOps工程师、性能专家和系统工程师理解站点可靠性工程(Site Reliability Engineering,SRE)这一新兴领域如何在设计、开发、调试和部署高可靠性应用程序和服务的过程中实现自动化和加速。
第1章,“解密站点可靠性工程范式”,介绍了新的SRE领域,以及对SRE模式、平台、实践、编程模型和流程、支持框架、适当的技术、工具和提示的要求。
第2章,“微服务架构和容器”,介绍了容器化、微服务架构(MSA)以及容器管理和集群等概念,这些概念有助于实现可靠的应用和环境。
第3章,“微服务弹性模式”,介绍了SRE下的DevOps(因为自动化和DevOps在SRE中扮演了重要的作用,所以需要对此进行介绍)。
第4章,“DevOps即服务”,介绍了各种微服务弹性模式,这些模式在本质上支持可靠系统的设计、开发、调试、交付和部署。
第5章,“容器集群和编排平台”,详细介绍前面章节中涉及的技术,以确保SRE的目标。
第6章,“架构模式与设计模式”,解释了架构和设计如何成为服务或微服务开发过程中的最终构件,从而为在云时代实现任何逻辑提供了清晰的方向。
第7章,“可靠性实施技术”,向我们提供了保证,即未来是光明的,我们要对云时代的事物变化感到乐观。
第8章,“实现可靠系统的最佳做法”,介绍了从站点可靠性工程师、DevOps人员和云工程师的专业知识、经验和教育中产生的最佳做法。
第9章,“服务弹性”,介绍了用于容器启用和编排目的的所有平台。
第10章,“容器、Kubernetes和Istio监控”,介绍了如何使用Prometheus和Grafana来监控运行在集群、pod和Kubernetes上的应用程序或服务。
第11章,“确保和增强IT可靠性的后期活动”,介绍了为防止任何灾难而需要执行的各种活动,以充分保证与客户和消费者达成的服务等级协议。
第12章,“服务网格和容器编排平台”,介绍了是什么让多云方法正在获得前所未有的市场份额并赢得大众的认可,以及背后的原因。
本书由异步社区出品,社区(https://www.epubit.com/)为您提供相关资源和后续服务。
作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。
当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,单击“提交勘误”,输入勘误信息,单击“提交”按钮即可。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。
我们的联系邮箱是contact@epubit.com.cn。
如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。
如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给本书的责任编辑(fudaokun@ptpress.com.cn)。
如果您来自学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。
如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。
“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT技术图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。
“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近30年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、AI、测试、前端、网络技术等。
异步社区
微信服务号
为了向客户提供具有竞争力和认知力的服务,全球的企业都在制定战略,以利用IT系统的独特功能。人们普遍认识到,IT是实现业务所需的自动化、扩充和加速的关键因素和重要成分之一。IT领域的进步直接实现了备受期待的业务生产力、敏捷性、经济性和适应性。换句话说,全球各地的企业都期望他们的业务产品、产出和运营能够更加强大、可靠和多样化。这些需求对IT领域产生了直接和决定性的影响,因此,IT专业人员正在努力工作,并进一步扩展,将高度响应、有弹性、可扩展、可用和安全的系统落实到位,以满足企业的不同需求和任务。因此,随着IT领域中各种重要的改进被广泛应用,商业机构和大型企业将努力实现以往难以达到的目标以提高客户的满意度。
现在,人们普遍提倡IT可靠性,IT可靠性反过来又能够实现业务的可靠性。IT可靠性通过精细的流程、集成平台、支持模式、突破性产品、最佳做法、优化的基础架构、自适应功能和架构得以提高。
本章将介绍以下内容:
准确地说,在不断发展的IT组织中,任何站点可靠性工程团队的章程是如何创建高度可靠的应用程序,另一个是如何规划、配置和建立高度可靠、可扩展、可用、性能良好且安全的基础设施来托管和运行这些应用程序。
对于这一新的工程学科,应该为其提供一些背景信息以提高可读性。SRE是一个快速兴起和不断发展的研究和探索领域。SRE领域的市场和思想受到越来越多的关注。企业在理解SRE的战略意义后,可制定并确立可行的战略。
软件应用越来越复杂,但也越来越精密。高度集成的系统是如今的新规范。企业级的应用程序应该与在分布式和不同系统中运行的若干第三方软件组件无缝集成。越来越多的软件应用程序是由一些互动的、变革性的和颠覆性的服务组成的,以一种临时的方式按需提供。多渠道、多媒体、多模式、多设备和多租户的应用正在变得普遍和有说服力。还有企业、云、移动、物联网(IoT)、区块链、认知和嵌入式应用程序托管在虚拟和容器环境中。然后,还有特定行业和垂直行业的应用程序(能源、零售、政府、电信、供应链、公用事业、医疗保健、银行和保险、汽车、航空电子和机器人)正在通过云基础设施设计和交付。
当前有软件包、自主开发的软件、交钥匙解决方案、科学和技术计算服务,以及可定制和可配置的软件应用程序,以满足不同的业务需求。简而言之,有在私有云、公有云和混合云上运行的操作性、交易性和分析性应用程序。随着互联设备、智能传感器和执行器、雾网关、智能手机、微控制器和单板计算机(SBC)的指数级增长,软件支持在边缘设备进行数据分析,以完成实时数据采集、处理、决策和行动。
我们注定要走向实时分析和应用。因此,很明显,软件是有渗透性、参与性和生产性的。在很大程度上,这是个软件密集型的世界。
与快速发展的软件工程领域类似,硬件工程领域也在快速发展。目前,IT基础设施有集群、网格和云。IT基础设施有强大的设备、云端机箱选项、超融合基础设施和用于托管IT平台与业务应用程序的商品服务器。物理机被称为裸机服务器。物理机的虚拟版本是虚拟机和容器。我们正在走向硬件基础设施编程的时代。也就是说,封闭的、不灵活的、难以管理和维护的裸机服务器被划分为多个虚拟机和容器。这些虚拟机和容器具有高度灵活性、开放性、易管理性和可替换性,并且可快速配置、可独立部署、可水平扩展。基础架构的分区和资源调配通过大量自动化工具得以加速,以实现软件应用程序的快速交付。容器、微服务、配置管理解决方案、DevOps工具和持续集成(CI)平台的组合,在促进持续集成、部署和交付方面发挥着非常重大的作用。
全球机构、个人和创新者对云计算技术抱有清晰和自信的态度。随着云环境的逐渐成熟和稳定,构建和交付的云原生应用程序在数量上有了明显的增长,并且有可行的表达方式和方法来随时制作云原生软件。传统的软件应用程序正在经历精心的现代化改造,并被转移到云环境中,以获得云想法最初设想的好处。云软件工程是一个热门领域,吸引了全球众多软件工程师的关注,它包括公有云、私有云和混合云。最近,我们听到了很多有关边缘/雾云的信息。不过,在混合世界中,仍然需要考虑传统的IT环境。
世界各地的开发团队在不同时区工作。由于IT系统和业务应用程序的差异性和多样性,因此,分布式应用程序被认为是未来的发展方向。也就是说,任何软件应用程序的各种组件分布在多个位置,以实现冗余的高可用性。分布式应用程序以容错性、更小的延迟、独立的软件开发以及无供应商作为目标。因此,软件编程模型正在被巧妙地调整,以便它们能在分布式和分散式应用程序时代提供最佳性能。在全球多个时区工作的多个开发团队已经成为这个在岸和离岸开发混合世界的新规范。
随着大数据时代的到来,我们需要通过商品化服务器和计算机的动态池来实现最有用和最独特的分布式计算模式。随着设备数量的指数级增长,设备云离我们并不遥远。也就是说,分布式和分散式设备必然会大量聚集在一起,以形成用于数据捕获、获取、预处理和分析的特定于应用程序的云环境。因此,毫无疑问,未来属于分布式计算。由于我们需要Web规模的应用程序,因此完全成熟和稳定的集中式计算是不可持续的。此外,下一代互联网是数字化、连接设备和微服务的互联网。
数字化和边缘技术带来了许多商业创新和改进。随着企业采用这些技术,我们正在向着数字和智能时代转型。本节将帮助大家理解通过吸收这些开创性和突破性的技术与工具以进行改变的一切东西。
随着大量先进技术的出现,信息和通信技术(ICT)领域正在迅速发展,在该领域中可以方便、优雅地自动执行多项任务。编排技术、工具的成熟度和稳定性必然会将多个自动化任务聚合起来,并使聚合的任务自动化。下面将讨论ICT领域发生的转变和最新趋势。
由于编程语言、开发模型、数据格式和协议等软件技术的异构性和多样性,因此,软件开发和操作复杂性不断提高。有一些突破性的机制可以灵活地开发和运行企业级软件。有一些可以降低复杂性和加速开发的技术,正以迅速和聪明的方式生产出生产级的软件。这些软件正在不断发挥“分而治之”和“横切关注点分离”技术的杠杆作用,并鼓励开发人员开发无风险和未来的软件服务。这些软件正在调用抽象、封装、虚拟化和其他划分方法的潜在概念,以减少软件开发人员的痛苦。此外,还有性能工程和增强方面的问题,正在得到软件架构师的高度重视。因此,软件开发过程、最佳做法、设计模式、评估指标、关键指南、集成平台、框架支持、模板简化和编程模型在这个由软件定义的世界中具有巨大的作用。
因此,数字创新、颠覆和转型方面有几项突破性的技术。首先,物联网范式产生了大量的多结构化数字数据,而著名的人工智能(AI)技术,如机器学习和深度学习等,能够从数字数据中挤出可操作的洞察力。将原始数字数据转换为信息、知识和智慧是实现数字化转型和智能社会的关键。云IT被定位为一流的IT环境,可用于支持和加速数字化转型。
通过数字化和边缘技术,我们的日常用品将被数字化,并加入到主流计算中。也就是说,未来我们将遇到数万亿的数字化实体和元素。随着物联网、网络物理系统(CPS)、环境智能(AmI) 和普适计算技术、工具的快速稳定与成熟,我们正被无数的连接设备、仪器、机器、无人机、机器人、公用事业、消费电子、物品、设备和电器所“轰炸”。现在,随着人们对人工智能(机器和深度学习、计算机视觉和自然语言处理)的空前兴趣和投资,算法和方法以及物联网设备的数据(协作、协调、关联和佐证)经过精心捕捉、清理和处理,可及时提取大量的见解/数字智能。有几种有希望、有潜力、经过验证的数字技术在同步迅速发展,包括各种数据挖掘、处理和分析方法。这些创新和颠覆最终导致数字化转型。因此,数字化和边缘技术与数字智能算法和工具相关联,可以实现和维持数字转型环境(更智能的酒店、家庭、医院等)。可以通过开创性和突破性的数字技术和工具,轻松预测和表达未来数年数字化转型的国家和城市。
云技术正在稳步发展。IT专业人员正在构建和确定协作流程、平台、政策、程序、实践和模式以趋向于云。下文提供了必要的细节。
如今,云应用程序、平台和基础架构越来越受欢迎。云应用程序有两种主要类型。
在各种IT环境中托管、运行的当前应用程序和传统应用程序正在进行现代化的转变,并迁移到标准化和多样化的云环境中,以获得云模式最初表达的所有好处。除了让业务关键型应用程序、传统型应用程序和单体应用程序做好云准备之外,我们还致力于在云环境中设计、开发、调试、交付和部署企业级应用程序,从而获得云基础架构和平台的所有特性。这些应用程序本身“吸收”了云基础架构的各种特性,并且可以自适应地运行。微服务架构(MSA)用于设计下一代企业级应用程序。开发人员巧妙地使用微服务架构将大量的应用程序划分为一系列解耦的、易于管理的细粒度微服务。随着云技术的深入应用,企业IT的每个组件都可作为服务交付。云计算理念为IT行业带来了创新和转型。IT即服务(ITaaS)的日子很快将成为现实,而这得益于云领域中的一系列值得注意的进步和成就。
一个关键因素是拥有可靠、可用、可扩展且安全的IT环境(云环境和非云环境)。如何开发通用的软件包和库,以及如何建立和维护适当的IT基础架构,以成功运行各种IT和业务应用程序,在过去都是老生常谈的事情。而现在,通过云支持技术和工具的智能应用,传统的数据中心和服务器群正在日益现代化。云理念实现了IT的合理化以及IT资源的高度利用和优化。越来越多的大型公有云环境(AWS、Microsoft Azure、Google云、IBM云和Oracle云)包含了数千种设备、高端服务器、存储设备和网络组件,以适应和满足全世界不同的IT需求。政府组织、大型企业、各种服务提供商和机构正在将自己的IT中心授权到私有云环境中。然后,私有云根据需要与公有云的各种功能相匹配,以满足特定需求。简而言之,云平环境被定位为满足我们的专业、社交和个人IT需求的一站式IT解决方案。
正是来自IT行业、全球学术机构和研究实验室的许多参与者的独特贡献,云才变得无处不在。我们拥有大量私有云、公有云和混合云环境。雾/边缘计算的迅速普及促使了雾/边缘设备云的形成,这对以人为中心的实时应用程序的开发做出了巨大贡献。雾/边缘设备计算就是利用大量连接在一起且功能强大的设备形成一种特定用途的设备云和不可知的设备云,以收集、清理和处理来自地面各种物理、机械和电气系统的传感器、执行器、装置、机器、仪器和设备的多结构实时数据。随着数十亿台互连设备的出现,未来的设备集群和云将迎来新的机遇。毫无疑问,云已经渗透到每个行业,云的巨大成功重新定义并复苏了IT现象。很快,云应用程序、平台和基础架构将无处不在。IT将成为第五大社会公用事业。最相关且最重要的挑战是如何在云IT领域实现更深入、更具决定性的自动化。
在云作为最灵活、最具未来感、最出色的IT环境出现以后,人们开始希望能有一个高度自动化和自适应的云中心来托管和运行IT和业务负载,以实现尽可能多的自动化,从而加速云迁移、软件部署和交付、云监控、度量和管理、云集成和编排、云治理和安全等过程。为了实现这些目标,IT领域同时出现了多种趋势和转变。
几年之前,Marc Andreessen曾经撰写过文章“Why software is eating the world”。今天,我们广泛地听到、看到,甚至有时会体验到如软件定义、计算、存储和网络这样的流行词汇。软件无处不在,并嵌入到一切事物之中。毫无疑问,软件是业务自动化和加速器的主要推动者。如今,在其令人难忘和令人着迷的“旅程”中,软件正在渗透到我们日常环境中的每一件有形物质中,将它们转化为连接实体、数字化物体、智能物体和感知材料等。例如,今天的每辆汽车都“塞满”了数百万行代码,以便其在操作、输出和产品中实现优雅的自适应性。
准确地说,随后的时代为知识填充、情境感知、事件驱动、面向服务、云托管、流程优化和以人为本的应用程序奠定了基础。这些应用程序展示了一些额外的功能。也就是说,下一代软件系统必须是可靠、有益、有效的。此外,我们还需要找到合适的流程、平台、模式、程序和实践,以创建和维护高质量的系统。下一代软件系统存在广泛可用的非功能性需求(NFR)、服务质量(QoS)和体验质量(QoE)属性,如可用性、可扩展性、可修改性、可持续性、安全性、可移植性和简单性。每个IT专业人员面临的挑战在于开发的软件是否能够毫不含糊地从本质上保证所有NFR。
此外,借助敏捷编程技术和技巧,可以快速构建软件应用程序。但是它们在集成、测试、构建、交付和部署方面不是自动化的。因此,DevOps、NoOps和AIOps等获得了巨大的优势和突出地位,它们可以为IT管理员带来多种自动化功能。也就是说,这些“新来者”促进了软件设计、开发、调试、部署、交付、下线以及人员之间的无缝和自发同步。配置管理工具和云编排平台的出现使IT基础架构编程成为可能。也就是说,基础架构即代码(IaC)正在促进DevOps的发展。通过配置文件更快地配置基础架构资源,以及在这些基础架构资源上部署软件,是DevOps的核心方面。
这就是DevOps的概念在最近这些日子里开始蓬勃发展的主要原因。DevOps是一个新的想法,在企业和云IT团队中获得了很多的支持。企业利用多种工具集来实现持续集成(CI)、持续交付(CD)和持续部署(CD),从而迎接这种新的变革。准确地说,除了开发企业级软件应用程序和平台外,在自动化工具的帮助下实现和维持虚拟化/容器化基础设施,以确保持续、有保障地向人们提供软件支持的业务功能和通过IT进行辅助的业务功能,才是当前的需求。
前文介绍了要求和挑战。下面看一下如何使用SRE来缩小供需之间的差距。如前所述,通过配置、自定义和组合(编排)来构建软件应用程序的方式正在迅速发展。使用敏捷编程方法更快速地编写软件应用程序是软件构建的另一个令人难以置信的方面。来自产品和工具供应商的各种DevOps工具可以确保持续的软件集成、交付和部署。
业务领域在不断发展,因此IT领域必须精确、完美地响应商业机构不断变化的过程和期望。企业必须在其运营、产品和产出方面具有敏捷性、适应性和可靠性。IT领域中各种重要的改进保障了业务的自动化、加速和增强。
IT敏捷性和可靠性直接保证了业务的敏捷性和可靠性。如前所述,IT敏捷性(软件设计、开发和部署)的目标正在通过更新的技术实现。如今,IT专家正在寻找显著提高IT可靠性的方法和手段。通常,IT可靠性等于IT易伸缩和IT可恢复。
因此,当IT系统具有可恢复性和易伸缩性时,才被称为可靠系统。当IT系统可靠时,IT系统支持的企业可以在交易、行动和决策方面保持可靠,从而激励和启发他们的客户、员工、合作伙伴和最终用户。
下面是可能遇到的一些挑战。
响应式编程和事件驱动架构是为了清楚地说明敏捷编程、DevOps和SRE之间的差异。前面提到,未来有几个关键的挑战。SRE技术、工具和技巧具有战略意义,有助于提高IT的可靠性、健壮性和回报性。
前文讨论了云支持和云原生应用程序以及它们如何托管在底层云基础架构上以完成服务交付。应用程序的功能非常强大。但是,非功能性要求,例如应用程序的可伸缩性、可用性、安全性、可靠性、性能/吞吐量、可修改性等,正在被广泛使用。也就是说,开发高质量的应用程序对IT专业人员来说是一个真正的挑战。要将各种NFR纳入到云应用程序中,可使用多种设计、开发、测试、部署技术、技巧和模式。有一些最佳做法和关键准则可以用于开发高扩展、高可用、高可靠的应用程序。
另一个挑战是建立和维持高能力、高认知的云基础架构,以展现可靠的行为。高弹性、强大且通用的应用程序和基础架构的组合可实现高度可靠的IT,以满足业务的生产力、经济性和适应性等需求。
在了解了战术和战略意义及价值之后,企业开始有意识地接受开创性的云范式。也就是说,各种传统IT环境正在逐步支持云,以获得宣称的业务、技术和使用优势。但是,仅云计算并不能解决每个业务和IT问题。除了建立针对特定目的和不可知的云中心,云基础架构还有很多事情要做,才能实现业务敏捷性和可靠性。云中心运营流程需要改进、集成和编排以达到优化组织流程的目的。每个云中心的运营都需要精确定义和自动化,以实现IT敏捷性的真正含义。借助于灵活可靠的云应用程序和环境,应用程序业务能力和价值必将显著提升。
我们知道,软件可靠性对于数字时代软件工程的持续成功至关重要。但是,这实现起来并不容易。由于软件套件的复杂性不断提高,确保软件的高可靠性变得非常困难且耗时。业内相关人员已经提出了一些有趣和鼓舞人心的想法来实现可靠的软件。主要有下面两种方法。
在开发可靠的软件包时,还需要考虑下面这些因素。
下面详细讨论这些。
任务关键型应用程序和通用应用程序将使用广受欢迎的MSA模式来开发。开发人员正在使用MSA范式有意识地废除单体应用程序,而且这对用户和程序开发人员来说非常正确且紧密相关。微服务是用于开发下一代应用程序的新构建块,它是一种易于管理、可独立部署、可水平扩展,而且相对简单的服务。微服务具有可被公开发现、可网络访问、可互操作、由API驱动、可组合、可替换以及高度隔离等特性。以下是MSA的一些优点。
采用快速、成熟和稳定的微服务架构,对业务和IT团队还有其他好处。工具生态系统正在崛起,因此微服务的实现和参与也得以简化。自动化工具可以简化并加快微服务的构建和运营。
Docker的理念震撼了软件世界。Docker通过容器化实现了一系列进步。软件可移植性的要求长期以来一直存在,现在可以通过开源的Docker平台得以解决。托管了各种微服务的Docker的实时弹性使得业务关键型软件应用程序的实时可扩展性成为容器化迅速普及的关键因素和原因。微服务和Docker的交叉为软件开发人员以及系统管理员带来了范式转换。Docker的轻量级特性以及与Docker平台相关的标准化打包格式在稳定和加速软件部署方面发挥了很大作用。
容器是一种打包软件的方法,它可以在任何操作环境中启用软件所需的配置文件、依赖项和二进制文件。容器有如下重要的优点。
容器还有其他重要的优点。有些产品和平台可以促进容器化和虚拟化的快速融合,以满足新兴的IT需求。
最近IT领域的一个范式转变是出现了用于灵活托管和运行微服务的容器。由于容器的轻型特性,因此配置容器可以用闪电般的速度完成。此外,微服务的水平可伸缩性可通过其托管环境(容器)轻松实现。因此,微服务和容器的组合为软件开发和IT操作带来了许多好处。单个物理机器中可以有数百个容器。
著名的链接(linkage)有助于在一台机器中拥有多个微服务实例。通过Docker主机上容器之间的相互通信,多个微服务实例可以找到彼此,以组成更大、更好的业务和流程感知的组合服务。因此,容器化空间的所有进步都对微服务工程、管理、治理、安全、编排和科学产生了直接和间接的影响。
容器化云环境的关键技术驱动因素如下。
容器化云环境的挑战如下。
MSA需要创建和聚合几个细粒度且易于管理的服务,这些服务具有轻量级、可独立部署、可水平扩展、容易移植等特点。容器为加速构建、包装、传输、部署和交付微服务提供了理想的托管和运行时环境,此外还提供了其他好处,比如工作负载隔离和自动化生命周期管理。随着更多的容器(微服务及其实例)被置入每台物理机器中,容器化云环境的运营和管理复杂性更高。此外,多容器应用程序的数量正在迅速增加。因此,需要一个标准化的编排平台以及容器集群管理功能。Kubernetes是目前流行的容器集群管理器之一,它由几个架构组件组成,包括Pod、标签、复制控制器和服务。下面来看一下。
Kubernetes促进了应用程序和数据容器在复合服务开发中的快速扩展,并加快了容器化时代的进展。传统和现代的IT环境都在采用这种划分技术,以克服虚拟化技术的一些关键挑战和问题。
API网关和管理套件:这是另一个引入可靠客户端和服务交互的平台。API网关的各种特性和功能如下。
用于微服务弹性的服务网络解决方案:分布式计算是运行Web规模的应用程序和进行大数据分析的发展方向。在面向客户的应用程序中,各种应用模块(微服务)可以进行横向扩展,其生命周期也可以单独进行管理,因此IT资源的分布式部署(可高度编程和可配置的裸机服务器、虚拟机和容器)得到了业内人士的坚持。也就是说,我们必须实现对IT资源和应用程序的分布式部署进行集中管理的目标。这种类型的监控、测量和管理是必需的,可以确保对应各种设备和组件进行主动、及时的故障预测和纠正。换句话说,在分布式计算时代,实现弹性目标非常重要。策略的制定和执行是引入一些特定自动化的可靠方法。有一些特定于编程语言的框架可以将额外的代码和配置添加到应用程序代码中,以实现应用程序的高可用性和容错性。
因此,在微服务领域拥有与编程无关的弹性和容错框架是至关重要的。服务网格是创建和维持弹性微服务的适当方式。Istio是一个业界知名的开源框架,它提供了一种创建服务网格的简便方法。图1.1所示为传统的基于ESB工具、面向服务的应用程序集成与基于轻量级、弹性微服务的应用程序交互之间的区别。
图1.1
服务网格是一种软件解决方案,用于建立从各种参与服务的网格。服务网格软件可以建立和维持服务间的通信。服务网格是一种基础设施解决方案。我们来看下面这些情况。
也就是说,核心和公共网络服务正在通过服务网格进行识别、抽象和交付,这可以让服务开发人员专注于业务功能。特定于业务的功能与服务有关,而所有水平的服务(技术、网络通信、安全、中介、路由和过滤)都在服务网格中实现。例如,断路器模式如今在服务代码中得以实现。现在,这种模式正在通过服务网格解决方案来实现。
服务网格适用于多种语言。也就是说,可以使用任何编程和脚本语言对服务进行编码。此外,服务网格还有几种文本和二进制数据传输协议。微服务在与其他微服务交互时,必须先与服务网格交互以启动服务通信。这种服务到服务的网格通信可以发生在所有的标准协议上,例如HTTP1.x/2.x、gRPC等。可以使用任何技术实现编写微服务,而且编写的微服务仍然可以使用服务网格。图1.2所示为服务网格在使微服务具有弹性方面的贡献。
图1.2
最后,将弹性微服务组合起来,就可以生成可靠的应用程序。因此,所有参与的微服务的弹性构成了高度可靠的应用程序。
渐渐地,世界被连接起来,并以软件为基础。我们经常听到、读到和体验到软件定义的计算、存储和网络能力。日常环境中的物理、机械、电气和电子系统都被精心地“塞进”了软件,使其在行动和反应中变得灵巧,有意识,有适应性,有表达力。在产生和维持受数字影响与变革的社会方面,软件注定要发挥重要作用,新一代软件支持系统的一个突出特点是通过一种或多种方式始终保持响应性。也就是说,它们必须得到正确的响应。如果一个系统没有响应,则另一个系统必须正确且快速地响应。换言之,如果系统出现故障,替代系统必须做出响应。
这通常称为系统弹性。如果由于用户和数据负载过重而导致系统压力过大,则必须配置其他系统以响应用户的请求,确保不会出现任何响应变慢和发生故障的情况。也就是说,对于当今的软件系统来说,自动扩展是一个重要的属性,而且与企业和用户相关。为了使系统具有弹性,产生消息驱动系统是关键的决策。消息驱动系统称为响应式系统。我们在这里解释一下系统弹性背后的概念。
可扩展的应用程序可以自动扩展,从而可以持续运行。在某一时刻,可以有更多的用户访问该应用程序。尽管如此,该应用程序必须不断进行交易,并能恰当地处理流量峰值和流量下降。通过仅在需要时添加和删除虚拟机、容器,可扩展应用程序可以执行其被分配的任务,而不会出现任何响应变慢或发生故障的情况。通过动态配置额外资源,可扩展应用程序的利用率是最佳的。可扩展应用程序支持按需计算。可能有许多用户请求应用程序的服务,也可能有更多的数据被推送到应用程序中。容器和虚拟机是应用程序组件的主要资源和运行时环境。
通过服务网格可以实现可靠的系统。这是产生可靠系统的另一种方法。响应式系统是基于广为流传的响应式声明的一个新概念。用于构建可行的响应式系统的响应式编程模型和技术当前有多种。
如前所述,任何软件系统都包含多个模块。此外,多个组件和应用程序需要可靠地相互交互以完成某些复杂的业务功能。在响应式系统中,各个系统都是智能的。然而,关键的区别是各个系统之间的相互作用。也就是说,响应式系统单独运行但协同行动以实现预期结果的能力明显有别于其他系统。响应式系统架构允许多个单独的应用程序共存与合并,并对其周围环境做出自适应的响应。这意味着它们可以根据用户和数据负载、负载均衡进行扩展或缩小,并智能地执行操作,以实现其敏感性和迅速响应。
我们可以使用经过验证的响应式编程模型、模式和平台以响应式方式编写应用程序。但是,为了快速合作以满足不断变化的业务需求,还需要更多的工作。简而言之,实现响应式系统并不容易。响应式系统通常根据广受欢迎的响应式声明文件进行设计和建造。该声明文件明确规定并促进了响应性、可恢复、易伸缩和消息驱动的体系结构的建设。微服务和基于消息的服务交互越来越成为具有灵活、可恢复、易伸缩和松耦合等特征的系统广泛使用的标准。毫无疑问,这些特征是响应式系统的核心概念。
响应式编程是异步编程的一个子集。这是一种新兴的范式,新信息(事件和消息)的可用性推动了处理逻辑的发展。传统上,一些操作是通过基于控制和数据流的执行线程来激活和完成的。
响应式编程独特的编程风格在本质上支持将问题分解为多个不连续的步骤,并且每个步骤都可以以异步和非阻塞的方式执行。然后,可以组合这些步骤以产生一个复合工作流,且该工作流的输入和输出可能是无限的。异步处理意味着在将来某个时间对传入的消息或事件进行处理。事件创建者和消息发送者无须等待处理和执行完成,即可继续履行其职责。这通常被称为非阻塞执行。执行的线程不需要竞争共享资源即可立即完成任务。如果资源不能立即可用,则线程不需要等待不可用资源,而是使用其各自的资源继续处理其他任务。关键是它们可以在特定时间点等待特定任务的适当资源时,不间断地完成工作。换句话说,在当前工作完成之前,它们不会阻止执行线程执行其他工作。它们可以在资源被占用时执行其他有用的工作。
将来,软件应用程序必须具有敏感性和响应性。因此,未来派和以人为中心的应用程序必须能够接收要自适应的事件。事件捕获、存储和处理对于企业、嵌入式和云应用程序变得越来越重要。响应式编程正在成为生成事件驱动的软件应用程序的一个重要概念。事件既有简单的也有复杂的。事件主要是以流的形式连续传输的,因此事件处理功能被称为流式分析。有几种流分析平台,例如Spark Streams、Kafka Streams、Apache Flink、Storm等,它们都可用于从流数据中解析可操作的见解。
在越来越受事件驱动的世界中,EDA和编程模型获得了更多的市场份额和关注。因此,响应式编程是一项宏伟的举措,旨在为具有无阻塞场景的异步流处理提供标准解决方案。响应式编程的主要优点包括提高多核和多处理器硬件上计算资源的利用率。响应式编程有几个事件驱动编程库、中间件解决方案、支持框架和架构,可以每秒捕获、清理和处理数百万个事件。用于促进事件驱动编程的流行库包括Akka Streams、Reactor、RxJava和Vert.x等。
响应式编程与响应式系统:响应式编程和响应式系统之间存在巨大差异。如前所述,响应式编程主要是事件驱动的,而响应式系统是消息驱动的,专注于创建易伸缩和可恢复的软件系统。消息是沟通和协作的主要形式。分布式系统通过发送、接收和处理消息进行协调。消息本质上是定向的,而事件不是。消息有明确的方向和目的地;事件是其他人可以清晰地观察并采取行动的事实。消息传递通常与发送方异步,并且与读是分离的。在消息驱动的系统中,可寻址的收件人等待消息到达;在事件驱动的系统中,消费者与事件来源和事件存储相集成。
在响应式系统中(尤其是使用响应式编程的响应式系统)存在事件和消息。消息是一种很好的交流工具,而事件是明确表示事实的最佳选择。消息应该通过网络传输,并形成分布式系统中通信的基础。消息传递用于跨网络桥接事件驱动的系统。因此,事件驱动编程是分布式计算环境中的简单模型,但分布式计算环境中的消息传递并非如此。消息传递必须做很多事情,因为分布式计算存在一些限制和挑战。也就是说,消息传递必须解决诸如部分失败、故障检测、丢弃/重复/重新排序的消息、最终一致性以及管理多个并发现实等问题。这些语义和适用性的差异对应用程序设计具有强烈的影响,包括易伸缩性、可恢复性、移动性、位置透明性和分布式系统的管理复杂性等。
响应式系统完全符合响应式声明(易伸缩性、响应性、可恢复和消息驱动),响应式声明是由一组IT产品供应商设想和发布的。当前正在制订和确定各种架构设计和原则,以建立最现代化的认知系统,这些系统天生就能够满足当今复杂而精致的要求。对于响应式系统功能来说,消息是最理想的信息交换单元。这些消息在应用程序之间创建了一种时间边界。消息使应用程序组件能够在时间(这允许并发)和空间(这允许分发和移动)上解耦。这种解耦功能有助于各种应用服务之间的隔离。这种解耦最终确保了易伸缩性和可恢复性,这是生产可靠系统最重要的需求。
弹性是指在系统发生故障时的响应能力,并且是系统固有的功能特性。弹性能力要比容错能力更重要,后者指的是应用程序可以进行优雅降级。弹性指的是从任何失败中完全恢复。弹性使系统能够进行自我诊断和自我修复。此属性需要对组件进行隔离和遏制,以避免故障传播到相邻组件。如果允许错误和失败级联到其他组件,整个系统注定会失败。
因此,设计、开发和部署具有弹性、自我修复能力系统的关键是允许主动发现和遏制任何类型的故障,将其编码为消息,并发送到管理程序组件。这些可以从安全级别进行监控、测量和管理。在这里,消息驱动是最大的推动者,从紧耦合系统向转向松散和轻耦合系统是前进的方向。通过较少的依赖性,可以找出受影响的组件,并且可以将错误的传播“扼杀”在萌芽状态。
弹性是指负载下的响应能力。系统可以突然被许多用户使用,或者有成千上万的传感器和设备将大量的数据注入到系统中。为了解决这种用户和数据的意外激增,系统必须通过添加额外资源(裸机服务器、虚拟机和容器)自动扩展或缩小规模。云环境天生就能够根据不同的资源需求进行自动扩展。此功能使系统以优化的方式使用其昂贵的资源。当资源利用率上升时,系统的资本和运营成本将急剧下降。
系统需要具有足够的适应性,以便在无须任何手动干预、指导和解释的情况下,进行自动缩放、状态和行为复制、负载均衡、故障转移和升级。简而言之,通过信息传递设计、开发和部署响应式系统是当务之急。
到目前为止,本章主要关注的是从应用程序方面来确保IT的可靠性。但是,底层IT基础架构可以发挥至关重要的作用。我们拥有集群、网格和云,以实现基础架构级别的高可用性和可扩展性。云被认为是实现数字创新、颠覆和转型的最佳IT基础设施。为了简化、优化和加速云的设置与维护,当前出现了许多可用于重复和例行的云调度、软件部署、云执行和管理化的工具。自动化和编排正被认为云时代的前进方向。运行云中心的大多数手工操作都是通过脚本和其他方法精确定义和自动化的。随着系统、数据库和中间件的数量增多,管理云环境的网络和存储专业人员已大幅减少。云IT的总体拥有成本(TCO)正在下降,而投资回报率(RoI)正在增加。传统IT环境使用云的成本优势非常明显。云计算通常被称为大型机和现代计算之间的结合,并以获得高性能和成本优势而闻名。面向客户的应用程序具有不同的负载,非常适合公有云环境。全球企业正在制定多云战略,以便在不依赖于任何供应商的情况下采用这种独特的技术。
然而,为了获得急需的可靠性,我们还有很长一段路需要走。自动化工具、策略和其他知识库、由人工智能启发的日志和操作分析、通过机器和深度学习算法和模型获得预防性、预测性和规定性维护的能力、大量可重复使用的弹性模式以及先发制人的监控,是前进的方向。
弹性应用程序通常具有高度可用性,即使在出现故障时也是如此。如果单个应用程序组件/微服务存在任何内部或外部攻击,则应用程序仍可运行并提供其分配的功能,而不会出现任何延迟或停止。高度可靠的IT基础架构可以识别故障并将其遏制在组件中,以便应用程序的其他组件不受影响。通常,应用程序组件的多个实例在不同的分布式容器或VM中运行,因此一个组件发生故障对应用程序来说无关紧要。此外,应用程序的状态和行为信息存储在不同的系统中。任何弹性应用程序都必须有相应的设计和开发,以便在任何情况下都能运行。不仅是应用程序,还需要智能地选择和配置底层IT或云基础架构模块,以支持软件应用程序独特的弹性目标。首要的是充分利用分布式计算模型。部署拓扑和架构必须有目的地使用各种弹性设计、集成、部署和模式。此外,根据基础设施科学家、专家、架构师和专业人员的建议,应采用以下提示和技巧。
因此,可靠的软件应用程序和基础设施在推出可靠的系统方面相得益彰,从而保证了可靠的业务运营。
总之,可以总结为以下内容。
无服务器计算允许构建和运行应用程序和服务,而无须考虑服务器计算、存储设备以及阵列和网络解决方案。无服务器应用程序不需要开发人员调配、扩展和管理任何IT资源,可以为几乎任何类型的应用程序或后端服务构建无服务器应用程序。云服务和资源提供商正在关注无服务器应用程序的可扩展性,它们密切监控任何负载峰值并迅速采取行动。开发人员无须担心其基础架构部分。也就是说,开发人员只关注业务逻辑和委派给云团队的IT功能即可。这种极大降低开销的方式使设计人员和开发人员能够减少浪费在IT基础设施上的时间和精力。开发人员通常可以专注于其他重要要求,例如弹性和可靠性等。
当通过自动化来获得大量无服务器应用程序时,容器的迅速普及就有用了。也就是说,我们可以快速开发和部署功能,而无须担心资源的调配、调度、配置、监控和管理。因此,FaaS近来获得了很大的发展。我们正朝着NoOps迈进。也就是说,大多数云操作通过大量技术解决方案和工具实现自动化,这种转变对于机构、个人和创新者来说非常便利,可以快速部署和交付他们的软件应用程序。
在成本方面,用户必须为使用的容量付费。通过自动和动态资源调配,资源利用率显著提高。同时,成本效率得到充分实现,并传递给云用户和订购者。
准确地说,无服务器计算是自动化计算和分析的另一个附加抽象。
如前所述,软件工程领域正在经历许多干扰和转变,以应对硬件工程领域中的转变。当前,在软件工程领域有敏捷、代理、组合、面向服务、多语言和自适应编程风格。在撰写本书时,软件工程领域正在加速利用有能力的开发框架来构建响应性和认知应用程序。在基础架构方面,我们拥有强大的云环境作为托管和运行业务工作负载的一站式IT解决方案。尽管如此,通过减少管理员的人工干预、解释和参与,以实现人们所希望的云操作时仍然存在许多重大挑战。已经有几项挑战通过突破性的算法和工具实现了自动化。但仍有一些空白需要利用强大的技术解决方案来填补。这些众所周知且广泛使用的挑战包括动态和自动化的容量规划与管理、云基础设施调配和资源分配、软件部署和配置、修补、基础设施和软件监控、测量和管理等。此外,如今的软件包经常被更新、修补并发布到生产环境中,以满足客户、消费者新兴和不断变化的需求。同时,应用程序组件(微服务)的数量也在快速增长。简而言之,必须通过大量的自动化工具来确保IT敏捷性。在SRE的全面支持下,运营团队必须预想并保护高度优化和有组织的IT基础设施,以成功、明智地托管并运行下一代软件应用程序。准确地说,当前的挑战是云操作的自动化和编排。云必须通过自助服务、自我配置、自我修复、自我诊断、自我防御和自我管理才能成为自主云。
新兴的SRE领域被认定为可行的前进方向。对系统软件工程有特殊爱好的新一代软件工程师被认为最适合归类为SRE领域。这些技术娴熟的工程师将培训软件开发人员和系统管理员,使他们能够敏锐地实现高性能、高可靠性的软件解决方案、脚本和自动化工具,从而快速设置和维护高可靠性、动态、响应性和可编程的IT基础设施。SRE团队真正关心的是任何使复杂软件系统以无风险和连续的方式在生产中工作的事情。简而言之,站点可靠性工程师是软件工程师和系统工程师的结合。由于云中心无处不在,可满足全球的IT需求,因此“站点”一词代表了云环境。
SRE通常关心基础设施编排、自动化软件部署、适当的监控和警报、可扩展性和容量评估、发布过程、灾难准备、故障转移和故障恢复功能、性能工程和增强(PE2)、垃圾回收器调整、发布自动化、容量提升等。SRE通常也会对良好的测试覆盖率感兴趣。站点可靠性工程师是专门研究可靠性的软件工程师。SRE有望将成熟、有前景的计算机科学、工程原理应用于企业级、模块化、Web规模和软件应用程序的设计与开发。
SRE负责确保云IT平台和服务的系统可用性、性能监控和事件响应,他们必须确保进入生产环境的所有软件应用程序完全符合一系列重要要求,例如图表、网络拓扑图、服务依赖性详细信息、监视和日志记录计划、备份等。一个软件应用程序可能完全符合所有功能要求,但还有其他来源可能造成系统的中断。可能存在硬件降级、网络问题、资源使用率高或应用程序响应缓慢等问题,这些可能随时发生。站点可靠性工程师需要极其敏感。SRE的有效性可以作为平均恢复时间(MTTR)和平均失效时间(MTTF)的函数来测量。换句话说,SRE必须保证在故障发生时系统功能的可用性。同样,当系统负载急剧变化时,系统必须具有扩缩容的固有潜力。
软件开发人员通常开发应用程序的业务功能,并对从头开始创建的功能或由不同的、分布式的和分散的服务组成的功能进行必要的单元测试。但他们并不总是专注于创建和合并代码以实现可伸缩性、可用性、可靠性等。另一方面,系统管理员负责设计、构建和维护组织的IT基础设施(计算、存储、网络和安全性)。系统管理员确实尝试通过调整基础设施的规模和提供其他基础设施模块(裸机[BM])服务器、虚拟机[VM]服务器和容器)来实现这些QoS属性,从而权威地解决任何突然涌入的用户和更大的负载。如前所述,DevOps的核心目标是在运营和开发团队之间建立健康和有效的关系。开发人员和运营人员之间的任何间隙与摩擦应该最早由站点可靠性工程师识别和消除,以便在任何机器或集群上运行任何应用程序,而无须进行任何调整。最关键的挑战是如何确保NFR/QoS属性。
SRE解决了管理员和DevOps专业人员不能解决的一个非常基本但重要的问题。必须确保基础设施的易伸缩性和可恢复性,以保证应用程序的可扩展性和可靠性。必须通过对业务应用程序和IT服务的实时监控以及为客户提供舒适的使用,来保证业务连续性和生产效率。仅通过基础设施优化来满足已确定的NFR概念既不可行也不可持续。NFR必须通过熟练地使用应用程序源代码本身中的所有相关代码片段来实现。简而言之,任何应用程序的源代码都必须知道并且能够轻松地吸收底层基础设施的容量和能力。也就是说,我们注定要进入基础设施感知的应用程序的时代,而另一方面,我们正朝着应用程序感知的基础设施迈进。
这就是站点可靠性工程师该做的工作,他们将协助开发人员和系统管理员通过软件定义的云环境开发、部署和交付高度可靠的软件系统。站点可靠性工程师将一半的时间花在开发人员身上,而另一半时间则花费在运营团队上,以确保急需的可靠性。站点可靠性工程师设置了清晰且以数学建模为基础的服务等级协议(SLA),为软件应用程序的稳定性和可靠性设置了阈值。
站点可靠性工程师具有很多技能。
此外,站点可靠性工程师还具备下述能力并将自己定位为单一联系点(SPOC)。
对于站点可靠性工程师来说,确保软件应用程序的稳定性和最长的正常运行时间是首要任务。但是,他们应该有能力承担责任并以自己的方式编写代码,从危险、障碍中解脱出来。这些事情无法添加到开发团队的待办事项列表中。站点可靠性工程师通常是对系统、网络、存储和安全管理充满热情的软件工程师。他们必须拥有独特的开发和运营实力,并且非常熟悉各种脚本语言、自动化工具和其他软件解决方案,以便快速自动化IT运营、监控和管理的各个方面,尤其是应用程序性能管理、IT基础设施编排、自动化和优化。虽然自动化是站点可靠性工程师的关键能力,但他们应该能自学并获得经验,以获得以下技术和工具的专业知识。
随着IT被公认为最伟大的自动化技术,因此业务主管对IT持有更高的认识和热情,他们可以利用IT领域的成果和进展来引导着他们的公司朝着正确的方向和目标前进。随着IT应用程序、平台和基础设施的普及,每个公司,无论规模大小,都必须拥有相匹配的IT环境。而它们现在面临的挑战是,如何确保IT具有高度的弹性、可用性和安全性,以对业务运营产生积极的影响。因此,SRE的新概念横空出世,并通过大量的协作和执行得到了精心维护。SRE无疑是一项新的企业范围内的规划,而且在战略上也是合理的,因此全球范围内的各行各业都以后该使用SRE,因为它足够可靠,可以让客户从中受益。
下一章将介绍各种新兴的概念,比如容器化、微服务架构、容器管理和集群。