运维人员对公司互联网业务所依赖的基础设施、基础服务、线上业务进行稳定性增强,进行平常巡检发现服务可能存在的隐患,对总体架构进行优化以屏蔽常见的运行故障,多数据中接入提升业务的容灾能力,经过监控、日志分析等技术手段,及时发现和响应服务故障,减小服务中断的时间,使公司的互联网业务符合预期的可用性要求,持续稳定地为用户提供服务。ios
运维工做分类数据库
运维的工做方向比较多,随着业务规模的不断发展,越成熟的互联网公司,运维岗位会划分得越细。当前不少大型的互联网公司,在初创时期只有系统运维,随着 模、服务质量的 要求,也逐渐进行了工做细分。通常状况下运维团队的工做分类(见图1-1)和职责以下。安全
系统运维性能优化
系统运维负责IDC、网络、CDN和基础服务的建设(LVS、NTP、DNS);负责资产管理,服务器选型、交付和维修。详细的工做职责以下:服务器
IDC数据中心建设网络
收集业务需求,预估将来数据中心的发展规模,从骨干网的分布,数据中心建筑,以及Internet接入、网络攻击防护能力、扩容能力、空间预留、外接专线能力、现场服务支撑能力等方面评估选型数据中心。负责数据中心的建设、现场维护工做。架构
网络建设负载均衡
设计及规划生产网络架构,这里面包括:数据中心网络架构、传输网架构、CDN网络架构等,以及网络调优等平常运维工做。运维
LVS负载均衡和SNAT建设工具
LVS是整个站点架构中的流量入口,根据网络规模和业务需求,构建负载均衡集群;完成网络与业务服务器的衔接,提供高性能、高可用的负载调度能力,以及统一的网络层防攻击能力;SNAT集中提供数据中心的公网访问服务,经过集群化部署,保证出网服务的高性能与高可用。
CDN规划和建设
CDN工做划分为第三方和自建两部分。创建第三方CDN的选型和调度控制;根据业务发展趋势,规划CDN新节点建设布局;完善CDN业务及监控,保障CDN系统稳定、高效运行;分析业务加速频道的文件特性和数量,制定最优的加速策略和资源匹配;负责用户劫持等CDN平常故障排查工做。
服务器选型、交付和维护
负责服务器的测试选型,包含服务器整机、部件的基础性测试和业务测试,下降整机功率,提高机架部署密度等。结合对公司业务的了解,推广新硬件、新方案减小业务的服务器投入规模。负责服务器硬件故障的诊判定位,服务器硬件监控、健康检查工具的开发和维护。
OS、内核选型和OS相关维护工做
负责总体平台的OS选型、定制和内核优化,以及Patch的更新和内部版本发布;创建基础的YUM包管理和分发中心,提供经常使用包版本库;跟进平常各种OS相关故障;针对不一样的业务类型,提供定向的优化支持。
资产管理
记录和管理运维相关的基础物理信息,包括数据中心、网络、机柜、服务器、ACL、IP等各类资源信息,制定有效的流程,确保信息的准确性;开放API接口,为自动化运维提供数据支持。
基础服务建设
业务对DNS、NTP、SYSLOG等基础服务的依赖很是高,须要设计高可用架构避免单点,提供稳定的基础服务。
应用运维
应用运维负责线上服务的变动、服务状态监控、服务容灾和数据备份等工做,对服务进行例行排查、故障应急处理等工做。详细的工做职责以下所述。
设计评审
在产品研发阶段,参与产品设计评审,从运维的角度提出评审意见,使服务知足运维准入的高可用要求。
服务管理
负责制定线上业务升级变动及回滚方案,并进行变动实施。掌握所负责的服务及服务间关联关系、服务依赖的各类资源。可以发现服务上的缺陷,及时通报并推动解决。制定服务稳定性指标及准入标准,同时不断完善和优化程序和系统的功能、效率,提升运行质量。完善监控内容,提升报警准确度。在线上服务出现故障时,第一时间响应,对已知线上故障能按流程进行通报并按预案执行,未知故障组织相关人员联合排障。
资源管理
对各服务的服务器资产进行管理,梳理服务器资源情况、数据中心分布状况、网络专线及带宽状况,可以合理使用服务器资源,根据不一样服务的需求,分配不一样配置的服务器,确保服务器资源的充分利用。
例行检查
制定服务例行排查点,并不断完善。根据制定的服务排查点,对服务进行按期检查。对排查过程当中发现的问题,及时进行追查,排除可能存在的隐患。
预案管理
肯定服务所需的各项监控、系统指标的阈值或临界点,以及出现该状况后的处理预案。创建和更新服务预案文档,并根据平常故障状况不断补充完善,提升预案完备性。可以制定和评审各种预案,周期性进行预案演练,确保预案的可执行性。
数据备份
制定数据备份策略,按规范进行数据备份工做。保证数据备份的可用性和完整性,按期开展数据恢复性测试。
数据库运维
数据库运维负责数据存储方案设计、数据库表设计、索引设计和SQL优化,对数据库进行变动、监控、备份、高可用设计等工做。详细的工做职责以下所述。
设计评审
在产品研发初始阶段,参与设计方案评审,从DBA的角度提出数据存储方案、库表设计方案、SQL开发标准、索引设计方案等,使服务知足数据库使用的高可用、高性能要求。
容量规划
掌握所负责服务的数据库的容量上限,清楚地了解当前瓶颈点,当服务还未到达容量上限时,及时进行优化、分拆或者扩容。
数据备份与灾备
制定数据备份与灾备策略,按期完成数据恢复性测试,保证数据备份的可用性和完整性。
数据库监控
完善数据库存活和性能监控,及时了解数据库运行状态及故障。
数据库安全
建设数据库帐号体系,严格控制帐号权限与开放范围,下降误操做和数据泄露的风险;增强离线备份数据的管理,下降数据泄露的风险。
数据库高可用和性能优化
对数据库单点风险和故障设计相应的切换方案,下降故障对数据库服务的影响;不断对数据库总体性能进行优化,包括新存储方案引进、硬件优化、文件系统优化、数据库优化、SQL优化等,在保障成本不增长或者少许增长的状况下,数据库能够支撑更多的业务请求。
自动化系统建设
设计开发数据库自动化运维系统,包括数据库部署、自动扩容、分库分表、权限管理、备份恢复、SQL审核和上线、故障切换等功能。
运维研发
运维研发负责通用的运维平台设计和研发工做,如:资产管理、监控系统、运维平台、数据权限管理系统等。提供各类API供运维或研发人员使用,封装更高层的自动化运维系统。详细的工做职责以下所述。
运维平台
记录和管理服务及其关联关系,协助运维人员自动化、流程化地完成平常运维操做,包括机器管理、重启、更名、初始化、域名管理、流量切换和故障预案实施等。
监控系统
负责监控系统的设计、开发工做,完成公司服务器和各类网络设备的资源指标、线上业务运行指标的收集、告警、存储、分析、展现和数据挖掘等工做,持续提升告警的及时性、准确性和智能性,促进公司服务器资源的合理化调配。
自动化部署系统
参与部署自动化系统的开发,负责自动化部署系统所须要的基础数据和信息,负责权限管理、API开发、Web端开发。结合云计算,研发和提供PaaS相关高可用平台,进一步提升服务的部署速度和用户体验,提高资源利用率。
运维安全
运维安全负责网络、系统和业务等方面的安全加固工做,进行常规的安全扫描、渗透测试,进行安全工具和系统研发以及安全事件应急处理。详细的工做职责以下所述。
安全制度创建
根据公司内部的具体流程,制定切实可行,且行之有效的安全制度。
安全培训
按期向员工提供具备针对性的安全培训和考核,在全公司内创建安全负责人制度。
风险评估
经过黑白盒测试和检查机制,按期产生对物理网络、服务器、业务应用、用户数据等方面的整体风险评估结果。
安全建设
根据风险评估结果,加固最薄弱的环节,包括设计安全防线、部署安全设备、及时更新补丁、防护病毒、源代码自动扫描和业务产品安全咨询等。为了下降可能泄露数据的价值,经过加密、匿名化、混淆数据,乃至按期删除等技术手段和流程来达到目的。
安全合规
为了知足例如支付牌照等合规性要求,安全团队承担着安全合规的对外接口人工做。
应急响应
创建安全报警系统,经过安全中心收集第三方发现的安全问题,组织各部门对已经发现的安全问题进行修复、影响面评估、过后安全缘由追查。
运维工做发展过程
早期的运维团队在人员较少的状况下,主要是进行数据中心建设、基础网络建设、服务器采购和服务器安装交付工做。几乎不多涉及线上服务的变动、监控、管理等工做。这个时候的运维团队更多的属于基础建设的角色,提供一个简单、可用的网络环境和系统环境便可。
随着业务产品的逐渐成熟,对于服务质量方面就有了更高的要求。这个时候的运维团队还会承担一些服务器监控的工做,同时会负责LVS、Nginx等与业务逻辑无关的4/7层运维工做。这个时候服务变动更多的是逐台的手工操做,或者有一些简单批量脚本的出现。监控的焦点更多的在服务器状态和资源使用状况上,对服务应用状态的监控几乎不多,监控更多的使用各类开源系统如Nagios、Cacti等。
因为业务规模和复杂度的持续增长,运维团队会逐渐划分为应用运维和系统运维两大块。应用运维开始接手线上业务,逐步开展服务监控梳理、数据备份以及服务变动的工做。随着对服务的深刻,应用运维工程师有能力开始对服务进行一些简单的优化。同时,为了应对天天大量的服务变动,咱们也开始编写各种运维工具,针对某些特定的服务可以很方便的批量变动。随着业务规模的增大,基础设施因为容量规划不足或抵御风险能力较弱致使的故障也愈来愈多,迫使运维人员开始将更多的精力投入到多数据中心容灾、预案管理的方向上。
业务规模达到必定程度后,开源的监控系统在性能和功能方面,已经没法知足业务需求;大量的服务变动、复杂的服务关系,之前靠人工记录、工具变动的方式无论在效率仍是准确性方面也都没法知足业务需求;在安全方面也出现了各类大大小小的事件,迫使咱们投入更多的精力在安全防护上。逐渐的,运维团队造成以前提到的5个大的工做分类,每一个分类都须要有专精的人才。这个时候系统运维更专一于基础设施的建设和运维,提供稳定、高效的网络环境,交付服务器等资源给应用运维工程师。应用运维更专一于服务运行状态和效率。数据库运维属于应用运维工做的细化,更专一于数据库领域的自动化、性能优化和安全防护。运维研发和运维安全提供各种平台、工具,进一步提高运维工程师的工做效率,使业务服务运行得更加稳定、高效和安全。
咱们将运维发展过程划分为4个阶段,如图所示。
手工管理阶段
业务流量不大,服务器数量相对较少,系统复杂度不高。对于平常的业务管理操做,你们更多的是逐台登陆服务器进行手工操做,属于各自为战,每一个人都有本身的操做方式,缺乏必要的操做标准、流程机制,好比业务目录环境都是各式各样的。
工具批量操做阶段
随着服务器规模、系统复杂度的增长,全人工的操做方式已经不能知足业务的快速发展须要。所以,运维人员逐渐开始使用批量化的操做工具,针对不一样操做类型出现了不一样的脚本程序。但各团队都有本身的工具,每次操做需求发生变化时都须要调整工具。这主要是由于对于环境、操做的规范不够,致使可程序化处理能力较弱。此时,虽然效率提高了一部分,但很快又遇到了瓶颈。操做的质量并无太多的提高,甚至可能由于批量执行而致使更大规模的问题出现。咱们开始创建大量的流程规范,好比复查机制,先上线一台服务器观察10分钟后再继续后面的操做,一次升级完成后至少要观察20分钟等。这些主要仍是靠人来监督和执行,但在实际过程当中执行每每不到位,反而下降了工做效率。
平台管理阶段
在这个阶段,对于运维效率和误操做率有了更高的要求,咱们决定开始建设运维平台,经过平台承载标准、流程,进而解放人力和提升质量。这个时候对服务的变动动做进行了抽象,造成了操做方法、服务目录环境、服务运行方式等统一的标准,如程序的启停接口必须包括启动、中止、重载等。经过平台来约束操做流程,如上面提到的上线一台服务器观察10分钟。在平台中强制设定暂停检查点,在第一台服务器操做完成后,须要运维人员填写相应的检查项,而后才能够继续执行后续的部署动做。
系统自调度阶段
更大规模的服务数量、更复杂的服务关联关系、各个运维平台的林立,原有的将批量操做转化成平台操做的方式已经再也不适合,须要对服务变动进行更高一层的抽象。将每一台服务器抽象成一个容器,由调度系统根据资源使用状况,将服务调度、部署到合适的服务器上,自动化完成与周边各个运维系统的联动,好比监控系统、日志系统、备份系统等。经过自调度系统,根据服务运行状况动态伸缩容量,可以自动化处理常见的服务故障。运维人员的工做也会前置到产品设计阶段,协助研发人员改造服务使其能够接入到自调度系统中。
在整个运维的发展过程当中,但愿全部的工做都自动化起来,减小人的重复工做,下降知识传递的成本,使咱们的运维交付更高效、更安全,使产品运行更稳定。对于故障的处理,也但愿由过后处理变成提早发现,由人工处理变成系统自动容灾。