3

作为个搞运维的,我竟一点都不了解 SRE ……

 2 years ago
source link: https://dbaplus.cn/news-149-4404-1.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

作为个搞运维的,我竟一点都不了解 SRE ……

矢量比特 2022-04-10 10:05:00

关于SRE和运维体系的文章很多,但大多数学院风浓厚,本文试着从一个出身运维一线SRE管理者的角度进行总结阐述,给你一份可实操接地气的运维体系,所有感悟来自小米和新浪的多年运维实战,希望对你有所启发。

在面向大型、复杂互联网系统的治理时,尤其离不开SRE,当体量上来后,系统的用户量、模块、调用链、指标、主机、域名、4/7层、日志等等都会到一个巨大的级别,甚至还要继续增长,如何保证运维架构的合理、资源和服务管理的有序,如何经营好这些资源,用最低的成本保障好系统的质量、做好Ops,这是一个巨大的挑战,理论上开发只要管好代码,其他之外的事情都应该要SRE承担起来的。

很多人对SRE的理解是不全面的,停留在对原始运维的认识上,认为运维只是打杂的,是开发的跟班,外加背锅侠,但随着全球大型互联网系统的出现,系统的用户量、资源、技术栈都在成指数级别的增加,带来的是系统运行环境和系统本身复杂程度的骤增,量变产生质变,以用户稳定性为目标,业务对资源的规划管理周转效率、持续集成上线效率、质量管理效率等提出了全新的要求,这也就倒逼了运维在业务、人员素质、技术上的革新,产生了SRE工程师。

可以试着想想,同样是管理服务器,管理1台和管理1万台分布在全球的混合云能是一个样子么?分析1秒/M和1秒/T的实时数据,同样是分析,能是一个样子么?所以说,体量和复杂度上不来,是体现不出技术价值的,因为根本遇到不到瓶颈,同样,SRE就是过来用技术、运营手段,从稳定性视角给大型互联网在线系统做熵减的。

SRE在国内现在也叫应用运维,是面向用户稳定性的,也就是说对用户的服务质量负责,这也给了SRE更高的要求,要有全局视角,要对系统的全生命周期进行管理,把质量和成本工作做到前面,需要一系列的流程.制度.规范和一系列的工具提高管理、质量、自动化效率。今天来理一下SRE的工作体系,希望你对SRE有一个全面的认识。 

图片

我把大型互联网系统的全生命周期拆解成了5个阶段,分别是代码编写、资源规划、系统上线、运行保障、系统下线,每个阶段SRE要做的事情做了灰色框框的标注,其中有些SRE和开发的边界是存在灰色地带的,怎么分工视具体情况来定,但至少SRE都要参与,最下面支撑层是运维的制度、流程、规范,然后是DevOps运维自动化工具。下面我们来拆开揉碎了说一下。

一、代码编写阶段

代码编写阶段,SRE的主要工作是搭建和维护代码管理系统,为CI/CD做好准备,目前最常用的就是GitLab了。

二、资源规划阶段

1、方案评估

根据需求规划系统的基础资源,包括机型(或容器规格)、机房、资源数量、存储、4/7层接入方案、域名证书以及是否用CDN等。

2、资源申请

将评估后的资源各自走审批流程。

3、资源管理

对业务使用的海量主机、容器、域名、证书、LB、CDN、存储、网络、专线等资源进行管理,体量上来后一定要建设CMDB用系统管,各类信息做到可快速检索,一般大厂存储、CDN、网络、专线都有专门团队负责,SRE只要管好自己业务的使用即可,强调一点,资源一定要制定一套科学的命名规则。

4、权限管理

大型系统人多、环境复杂,SRE需要对权限做详细的规划,制定SRE、开发序列对应每种资源新手和老工程师的权限规则,理想情况开发只要管好代码即可,任何prod环境操作都只能由SRE处理,开发是不允许有root权限的,开发和测试环境视情况处理,所有操作做好审计方案。

5、资源操作

因为面向的是大型互联网系统,要保障对海量资源进行高效批量的操作,就需要借助一些技术工具了,比如主机操作类似ansilbe、saltstack,为了安全管理也要结合安全跳板机的使用,容器、LB、证书签发等也都有对应的技术方案,这些是需要SRE来Ops的。

三、系统上线阶段

1、环境规划

一个成体系的系统一般会有4套环境:开发环境(dev)、测试环境(stag)、预发布环境(prew)、生产环境(prod),环境之间相互独立,视情况做网络隔离,我在新浪碰到了几次开发同学把测试环境的数据发布到了生产环境,造成很差的用户体验,所以规划的时候,低安全等级的网络到高安全等级加墙还是有必要的,SRE提前把环境规划好、上线流程制定好,会减少很多变更类故障。

2、环境搭建

主机环境配置,看似有了公有云、容器后,只要把镜像做好,这块工作要简单很多,但其实也不然,首先相对云主机而言,物理机的性能高成本低,量能跑起来的前提下用物理机最划算,所以公有云一般作为弹性资源;二是经过论证,不是所有的服务都适合上容器,所以现实情况还是会有大量的物理机运维,各种装包、配置、内核和系统调优、维修、过保机器替换等,反而是在原来的基础之上增加了打容器镜像的工作,这就是实际情况,环境搭建、系统调优、软件包升级的工作量还是很大,而且这块工作经常会出现各种奇葩的事情,特别是搭建GPU机器学习的环境,不是这个库不对那个依赖版本不对的,一搞就是半天,不过从趋势上看这块工作我觉得会越来越标准化。

接入层配置,包含从域名、证书、解析、负载均衡4/7层、后端这一套配置流程,其中4/7层选择、调度策略、连接数是否够用等等都是需要根据具体业务情况制定技术方案。

3、CI/CD

协同开发制定CI/CD的技术方案,为Dev提供部署系统(大厂有专门团队研发),制定上线审批流程,按理生产环境的上线应由SRE操作,但因为开发和SRE的数量差距大,成长期的系统迭代又快,由谁上线就视情况处理了,我们这处理方式是牵涉到代码变更的上线由开发操作,其余的迁移扩缩容等由SRE处理。

四、运行保障阶段

SRE是质量担当,面向的就是用户稳定性,所以系统运行保障是SRE工作最重的阶段,也是占用精力、工作量最大的部分,在大型互联网系统的背景下,每一块要做深、做透都是一个很大的主题,针对此阶段可以看一下博文《大型系统的运维要从哪些方面抓起——全面质量管理》,质量越好,意味着故障越少,下面就从故障全生命周期的角度对这块的工作做个梳理。

图片

1、故障前——目标:减少问题流入“故障中”

1)变更管控

故障不是无缘无故的就生发了,很多发生在于变化,变化当中很大的一个又是迭代上线,从每年故障的历史数据看,有很大一部分故障都是由于上线变更造成的,所以SRE要严格管控变更,制定各种情况下的流程制度规范,做好质量的运营工作。

2)容量管理

服务的扩缩容会一直持续到产品下线,容量的管理关乎到质量和成本,很多时候对于容量是模糊和缺失的,具体表现就是发生了容量故障、看到了cpu和内存报警了才想到扩容,公司要优化成本抓机器使用达标率才知道缩容,基本是被动的,而且没有量化数据,SRE需要主动的将容量管理起来,容器场景下可能要高效很多,但依旧是需要持续管理、动态规划的。

3)灾备建设

灾备意味着做多保险,合理的灾备可以保障在故障出现时,快速进行业务切换,保障用户的可用性,所以SRE一定要协同开发对业务做好灾备建设。一般而言灾备分为热备和冷备,冷备是指准备好资源平时空放,只有故障时才用一下,造成很大的资源浪费,所以一般能做热备的就不做冷备。从内容上讲,SRE要做的灾备分为接入层灾备、机房灾备、主机灾备、数据灾备,另外灾备和成本是一对矛盾平衡。

4)业务巡检

巡检是SRE一定要重点投入的工作,它的意义在于发现潜在的问题,将尚未形成故障的问题提前暴露,提前解决。巡检分为对机器业务指标的巡检,机器指标类似CPU、内存、IO、网络等,业务指标类似ERROR、QPS、时延等等,在做决策时机器和业务指标要结合使用,因为SRE和开发的视角不同,可以各自都做,即使有部分重合,那也没关系,另外巡检一定要根据业务流做到全链路、全模块。

5)活动重保

重大活动的重点保障是SRE没有任何疑义要承担起来的工作,要拉通各个部门,制定详细的重保方案,每次重保要当成一个独立的项目来做,有开始有结束做到闭环。

6)故障演练

SRE要牵头主导业务上的故障演练,周期性的针对各种场景做一下预演,一来检验下系统的真实容灾情况,二来要锻炼一下SRE的预案执行能力,如果有问题就倒逼各方改造,切忌不要找存在感,把演练变成真的故障,要提前制定好技术方案,找用户量少的时间段操作。

7)日志管理

大型系统下的日志是海量的,要在日志标准化的同时,特别注重技术方案,对日志进行科学合理的采集、管理、使用,在分工上,像系统、Nginx类的日志肯定是要SRE处理的,至于代码的埋点日志等看具体情况怎么分工合作,像小米有数据工厂的团队,SRE只要关注怎么使用就可以,不用自己维护、搭建、研发大数据相关的东西。

8)技术调优

SRE是需要参与和主导各种技术调优工作的,要时刻为了自己所管业务的优秀用户体验而努力,我把调优分为系统和架构调优两块,系统调优包括像各种内核参数、各种系统应用的参数优化等等,架构调优更偏业务,像为了保障小爱南方用户的体验,SRE主导了小爱南方用户架构调优,牵头对小爱后端架构进行梳理、分级、结构化,抽象出了语音接入层概念,并与开发同学达成共识,对架构进行了优化改造。

9)服务管治

我认为,服务是大型互联网场景下SRE的重要管理单元,特别是大型系统在微服务的设计理念下,服务众多、开发人员庞大加之人员变动快,如何从运维的准入开始将庞大的服务档案信息管理好,是非常重要而且需要下大功夫的,档案信息包含了该服务的功能简介、负责人、域名、部署情况、机房分布、主机信息、核心监控指标、服务分级等等,对于需要交给SRE运维的服务,由开发人员提出运维准入申请,定义好服务级别(不同的级别代表了不同的SRE参与程度和系统的重要程度),审批通过后按照约定好的SLA进行运维,而SRE需要从服务的维度,将服务相关的信息串联管理了起来,以便遇到问题可以快速的查看使用。

10)Oncall管理

Oncall对于SRE应该都不陌生,SRE这个工作是下班不下岗的,需要对稳定性做到7*24小时的负责,想要睡个好觉,就得把服务稳定性做上去,否则半夜或者休息日处理问题,不能怨别人,Oncall分为告警值班和日常工单两部分,告警值班要遵循“接告警、助排查、勤通告、做闭环”的原则,日常工单包含了开发和其他各种部门的咨询、业务需求,不限于漏洞修复、主机迁移、服务升级、网络割接、等保评审等等。

2、故障中——目标:快速发现故障,止损

1)监控告警

监控告警是SRE的基础工作,既要提供技术方案又要做好监控告警的配置管理。告警作为故障的第一事件,一定要围绕3个点准、少、快,准是告警的信息准,少是告警的数量少都是收敛后的有效告警,快指的是告警的实效性高速度快;告警要根据事件的影响程度分级,告警短信和邮件里尽可能携带更多的判断信息,做的好的甚至可以做一下故障参考预判。大型互联网系统一定要注重「生死告警」的使用。

2)故障定位

SRE需要寻找各种办法缩短故障定位(SRE做的是宏观定位,能为预案提供决策即可)时间,只有故障快速定位到了,才能为下一步预案执行提供依据,减小故障影响时间。在大型互联网系统下故障定位是最难做的,因为系统模块多、模块间的关系依赖复杂,故障瞬间大量告警蜂拥而至,要通过现场分析告警、监控图定位到哪个模块、哪个机房出问题耗费时间太长了,在这一阶段我们总结的最佳实践是建设链路架构监控,链路是表达服务、关系、核心指标最好的技术方案。

3)预案执行

故障期间,所有前面的工作都是为了这最后一步做准备——预案执行,预案执行才是真正止损恢复业务的,SRE作为Ops是预案的主要执行方,所以一是要将各种场景下的预案尽可能准备好,二是要尽可能依靠工具提高预案的执行效率。

3、故障后——目标:消灭同类故障

1)故障复盘

故障管理是整个故障的善后工作,追责任的部分除外,那他的意义就是防止同类故障再次发生。故障复盘一般会以复盘会的方式约所有相关方进行全过程回顾,最后形成的文档叫“故障报告”,故障复盘会也是最考验SRE软能力的一个场景,特别是SRE牵头主导组织的,一定要引导大家解决问题,不要变成一场甩锅大会,分析好故障原因,制定好后续的改进措施。

五、系统下线阶段

系统下线阶段的主要工作就是资源释放,不仅仅要释放服务器,关联的域名、LB、ACL等等资源要全部释放,干干静静的来、干干静静的去。

以上基本就是SRE在产品全生命周期里的工作内容了,期间每个点都可以结合自动化运维的新技术去做创新、提效,在整个产品周期里,SRE需要有质量、成本、运营意识,要有自动化、服务思维,真正把运维的产品作为自己owner的产品去做,写到这里,希望对你有所帮助。

图片

作者丨矢量比特 来源丨公众号:运维网咖社(ID:ShiLiangBit) dbaplus社群欢迎广大技术人员投稿,投稿邮箱:[email protected]


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK