当前位置:首页 >业内动态 >游戏动态 > 正文

中小app如何实现自动化app

发布时间: 2018-07-18 15:53:40  浏览次数:

        首先我们把团队定义为(单单指整个IT技术序列的人数)大于5人,及小于20人的团队,定义为中小型app团队。因为这样的app团队,要么是依靠传统的人肉app摸黑过河,要么就是依靠公司的实力购买商业服务,然而即使这样,也未必完全的平台了问题,总结如下:

1.中小型app团队,往往在研发人数上大大受到限制,一般能够投入到自动化研发的资源,不会超过5个。甚至,极个别只有1-2个人。而单凭这么薄弱的开发力量来实现功能复杂的自动化系统,更何况还要应对日益增长的互联网需求,这条道路基本行不通。

2 . 完全的外包商业平台不支持个性化,历史项目未必能直接对接商业平台,需要通过app与app侧均重构以适应商业平台,对接成本甚至高于自建平台,且要高速运行的app侧停下配合也并不靠谱;

3 . 一些商业机密数据的考虑:相关的国际app / 部分app相关数据,这对于安全要求较高的游戏来说,自建平台的可控度更高;

        虽然中小型app各家app情况各异,但总体来说一般都有抽象成可复用的架构体系,这也是商业自动化平台的价值所在,如果团队是 10 人以下且没专职开发人员再且app技术历史债务不重的情况下,选择商业服务也不失为明智之举。

        目前市面上主流各厂的自动化平台一般包含且不限于以下内容:CMDB、配置中心、管控平台、数据平台、CI/CD、作业平台、容器管理、扩容缩容、辅助运营、监控中心 等等。而我们中小app,必须在考虑到自身开发成本的基础上,迅速找出最核心功能,以达到快速落地投入生产环节使用为目的。

        而其中我们建议是--首先瞄准:CMDB(配置平台)和作业平台。这二者一般能够普遍满足中小app的实际需求,在此基础上,再根据自身app需求再考虑开发其他高级扩展功能如 CI/CD、数据分析、app监控、辅助运营等。

 

在什么情况下我们才需要做自动化平台呢?

下面我们列举一个项目背景 。

       随着手游项目的下载,A公司app需求处于一个飞速增长的阶段,在短时间内已经下载到将近数十个项目(含各种渠道、平台、分区),app形态各异,包括页游、手游、站点、app 等,这样众多的项目app管理成本非常高,传统的app管理方式很难高效率、高质量地管理和把控如此多的产品和项目。

        随着安卓版、云、微服务等技术的下载,再加上有众多的云服务提供商(阿里云、腾讯云、UCloud等),应用程序的底层运行环境愈发多样化,各种app对象都需要通过一个平台进行统一的操作和管理。

        为了应对以上问题并高质量完成app保障服务,我们必须做到:    

        1) 通过平台统一管理所有app对象,对项目组、对app部门的所有操作都程序固化

        2)实现所有项目的持续app、自动化部署、项目组自助操作以提升发布效率和降低故障率;      

        3)有一个完善的配置中心为所有app自动化的底层数据和配置基础,驱动所有app脚本、工具、组件正常运行;  

 

如何达成目标  

        明确了目标之后,你会发现这三个目标正好对应三个app术语:标准化、流程规范化和 CMDB。  

        标准化:从主机名、IP、操作系统、文件目录、脚本,甚至到软件安装目录,参数,配置文件等等一系列app对象都制定标准规范,app部门和app部门都遵守同一套标准,在平台历史遗留问题时也基于这套标准去建设统一的平台。    

        流程规范化:这是在基于标准化的基础上,开展的一系列细节规范操作,主要是涉及程序文件打包、开发测试线上环境管理、发布流程等多部门协作的规范,必须落实到程序固化或者文档固化,只有统一规范的约束了人为开发流程,才能打造 Dev 和 Ops之间的标准交付环境。  

        CMDB:这是一切app自动化体系建设的基石,其它如配置管理、作业app、资产管理等需要基于 CMDB 才能形成体系,构建完善的app对象生命周期和操作闭环。  

        在此我们应该将系统的设计初衷,设定为开放型,扩容性能强大的app思路。首要考虑提供一整套接口界面与其他任何需要信息的系统进行对接,将信息从一个统一的、标准的源头输出给各垂直或水平app功能系统,而app需要做的就是维护 CMDB 本身基础数据的完整性、准确性,CMDB 与各流程系统、垂直功能系统结合之后实现信息数据一处变更,处处同步。

 

一个机器下架的操作:

传统方式:通过 SSH 登录到该机器,关闭所有app程序,关机,在控制列表删除该 IP,下架,登录资源管理系统删除该机器信息。

自动化方式:在 CMDB 中编辑其状态,系统自动调用底层工具关闭服务、关机,并自动将机器信息在 CMDB 中更新状态

区别: 传统方式各个步骤都是非原子性,每一步都可能有错漏的问题,如忘记删除控制列表 IP 或者忘记更新资源管理系统信息,app流程无法达到操作闭环。而真正的自动化方式是应该需要达到操作闭环,无需人工干预。

 

如何设计

CMDB 的设计有一个最大的误区是想建立一个大而全的属性表,恨不得想把全部app对象的全部属性都找出来。而往往从零散的app对象来拼凑 CMDB 基本都是吃力不讨好的,因为这样的设计方式根本没有从app出发。真正能平台app问题的CMDB必须回到app上面来,从核心的三层关系开始组CMDB,这三层概念从大到小分别是:app、集群、模块(游戏游戏术语一般叫项目、分区、服务)。

设计思路应该是这样的,当下app的app--它有哪些集群?集群下有哪些模块?模块下有哪些机器?机器有哪些属性?各种属性之间有什么关联关系?

通过这样的思维方式慢慢把真正的 CMDB 组织起来......

当然,app对象远不止那么少,还需要大家根据自家app多多挖掘,这个过程比较艰辛,但不需要一步到位,先确定好核心对象,再慢慢完善补充其他对象。

 

配置项属性

我们把 CMDB 的某个对象称为配置项,一个典型的配置项如一台主机、一个域名、一个 IP 。

举个例子,一台主机,其属性获取的三种方式:  

agent 获得:如cpu、memery、disk、ethX 之类的硬件信息,一般用 python psutil 模块可以获取大部分所需要的属性;  

云服务商api:有部分属性不能通过 agent 获得的如 EIP、Region、Zone 等,如果不是用云主机的就不需要这一部分;    

手工维护:有些属性不能自动获取,只能通过人工录入,不过这类属性还是尽量越少越好;    

由点到面可以看出,配置项的属性类别基本可以分成三类:

人工录入 : 自动化系统所需的app - 集群 - 模块关系,每台主机运行什么服务等等。

外系统 API: 需要通过云服务商 API、Zabbix API、K8s API、其他app系统 API 等途径。

自发现: 机器内部获得,如 python psutil、puppet fact、ansible setup 等途径。

了解属性类别可以帮助我们更好更快地完善配置项的各种属性自动获取机制,尽量避免人工干预。

 

再聊聊主机

主机是一个承上启下的核心对象,在它身上有很多属性会被各种功能所使用,所以我们要先理清它和其他对象的关联关系。

这里的 app - 集群- 模块 - 主机 属于物理概念,是机器所在的物理层次关系,因为机器必然伴随着app、网络、光纤之类的硬件概念,虽然说是物理层次,但是你用云服务的话,就不存在主机这个实体。

而服务是机器的一个app属性,一个机器可以对应多个服务,作为服务的下一级别是进程,比如一个 web 服务会有 nginx、tomcat等若干个进程,定义一个服务则需要与之关联的进程,进程的主要属性会有进程名称、起停命令、占用端口等。

 

作业平台  定义  

作业是对app所有操作的抽象定义,任何一个app操作都可以分解成具体的操作步骤以及操作对象。它不仅仅是 一系列命令、文件分发的有序组合。并且作业步骤可以由“ 命令”、“文件分发” 以及 “app对象” 组成;

举一个相对复杂的操作过程,如更新代码并重启服务:

1 . 对 web:关闭 tomcat (/home/tomcat/bin/shutdown.sh)

2 . 对 server:关闭app主进程 (/home/server/bin/stop.sh)

3 . 对 web:分发新的站点文件 (scp xxx yyy)

4 . 对 server:分发服务端文件 (scp xxx yyy)

5 . 对 web:启动 tomcat (/home/tomcat/bin/startup.sh)

6 . 对 server:启动app主进程 (/home/server/bin/start.sh)

可以看出,流程包含了一系列 “对象”-“操作”  的有序的命令以及文件分发的集合。“对象”可以是一个组、一个或者多个 IP,在app命令时候可以在系统的页面动态指定目标对象。

作业定义时有各种增删改查操作,每个app过的作业需要记录app人、app时间、结束时间、关注值等信息。

 

app顺序  

作业需要按顺序app,当一个步骤成功后才能app下一个步骤,如果app失败需要停止运行作业,并保留app的各种日志。

比如一个作业定义如下:

对 web 组(3 台机器):app stop tomcat;

对 server 组(4 台机器):app stop server;

对 app 组(2 台机器):app stop app;

app细节是第一步对 web 组的 3 台机器同时发起 stop tomcat 命令,等待 3 台机器全部关注结果后,如果结果关注 0 表示命令app成功,这时候才继续进行第二步对 server 组的流程。如果第一步关注结果不为 0,则提示流程app失败,提示需要人工检查,终止后面的流程。

 

主要对象

下面可我们对作业平台的主要对象进行简单阐述。

作业这个概念的提出,即可以将app下载的各种“变更”、“发布”、“故障处理”等零碎操作分解成一个个可复用、可扩展、可app的独立操作命令,那么最终平台化的自动调度将成为可能。

我们甚至可以借鉴市面上一些知名的自动化平台及操作页面进行开发设计,当然每个app具体app形态决定了必然会有差异化的需求,简单列举一下常见的需求:

a) 作业权限系统,不同角色用户可操作不同级别的作业;

b) 作业运行前确认,比如某测试同事启动作业,需要对应主程或者主策划确认才启动;

c) 等待确认超时时间,比如等待 30 分钟,未确认则取消启动;

d) 作业异常关注则报警通知到app组以及对应项目的相关人员;

e) 灰度app,按作业的设置,先在测试服运行,再到正式服;

f) 作业配置克隆,快速搭建新的项目的作业配置;

g) 差异化需求的开发可以在后期慢慢迭代改进。

h) 作业app情况分析,以节约人力预估。

 

        因为作业平台是一个让app定制各种线上操作,封装任意能通过脚本完成的功能,可以供自己或者项目组自助使用,普通操作无需app组人员干预,(通常只有app异常才会需要app人员介入。)从而大幅度的提升app价值,实现无人化值守的,平台人力app重复劳动,被动救火的根本问题。

        且作为自动化平台的核心功能,我们可以有效的评估其利用效率,假如平台每月app作业的总次数为 N,每次预计节约人力资源 15 分钟(0.25 小时),则每月总节约人力为 0.25*N 小时,假设 N 为 1000,则每月节约app部门 250 个小时的人力资源。

 

作业异常分析

        作业平台可以让app人员解放了很多劳动力,但我们不能保证每个作业都能正常运行,因此我们可以为异常的原因打上标签,根据错误原因输出关键字匹配自动分类或者人工归类,然后统计各种异常情况的比例,再重点分析并处理异常比例高的情况,找出这类异常情况的原因来降低app故障率。

 

总结  

        app自动化平台的建设本质是app团队服务化游戏的变现过程,它让我们从大量重复无规律的人肉操作中解放出来,专注于app服务质量的提升。由于文章篇幅所限,未能和大家全面介绍整个自动化平台的设计思路,按系统的核心程度来划分,最核心的是 CMDB 和作业平台,当完成这两部分之后,次核心的CI/CD、数据平台、监控平台也可以投入开发,后面的运营辅助、故障自愈、智能扩容缩容甚至 AiOps 等也需要 DevOps 团队继续探索。

万博体育竞技qy288千亿国际网址万博体育竞技