49彩票集团首页-49彩票集团官网|官网首页

49彩票集团让大家拥有最好的账号使用功能,49彩票集团是为大家带来更加方便的使用途径,是因为在49彩票集团娱乐的玩家们越来越多,发展成为最受欢迎的网上体育娱乐公司。

应用运维主要是对线上业务系统的运维,慢慢的

2020-04-03 作者:计算机网络   |   浏览(153)

作者介绍

CMDB和运维自动化

IT运维,指的是对已经搭建好的网络,软件,硬件进行维护。运维领域也是细分的,有硬件运维和软件运维

硬件运维主要包括对基础设施的运维,比如机房的设备,主机的硬盘,内存这些物理设备的维护

软件运维主要包括系统运维和应用运维,系统运维主要包括对OS,数据库,中间件的监控和维护,这些系统介于设备和应用之间,应用运维主要是对线上业务系统的运维

这里讨论的主要是软件运维的自动化,包括系统运维和应用运维的自动化

为什么需要运维自动化,运维自动化需要哪些工具,CMDB在运维自动化中的作用是怎样的呢 ?

导语

白海强(花名:普智),目前在蘑菇街平台技术部从事应用运维体系和其它建设工作,与团队一起推进业务应用运维标准化及自动化系统的建设。在加入蘑菇街之前在淘宝任职,负责淘宝商品详情等业务的运维工作。

一. 传统运维痛点

先来看一下传统运维的痛点

6月23日,蘑菇街技术专家蒋志强在GITC全球互联网技术大会上发表了题为《持续集成和发布在美联的实践》的演讲,介绍了蘑菇街和美丽说合并成立的美联发布系统的演进和特色。

演讲大纲:

1.1 日常工作繁琐

日常运维工作是比较繁琐的,研发同学会经常需要到服务器上查日志,重启应用,或者是说今天上线某个产品,需要部署下环境。这些琐事是传统运维的大部分工作

演讲嘉宾介绍

蘑菇街技术架构及运维演进应用运维体系建设思路应用运维自动化实践过程蘑菇街技术架构及运维演进导购期(2011-2012)

1.2 应用运行环境不统一

在部署某应用后,应用不能访问,就会听到开发人员说,在我的环境运行很好的,怎么部署到测试环境后,就不能用了,因为各类环境的类库不统一

还有一种极端情况,运维人员习惯不同,可能凭自己的习惯来安装部署软件,每种服务器上运行软件的目录不统一

49彩票集团 1

2011年蘑菇街上线时,它的主要业务是分享社区,就是买家买了商品以后,把这个商品分享出来给大家。2012年开始转型商品导购,早期业务比较简单,相对设备比较少,基本上是一套业务代码。运维都是由具体的开发同学自己去管理的,根本不需要专业的运维人员。

1.3 运维及部署效率低下

想想运维人员需要登陆到服务器上执行命令,部署程序,不仅效率很低,并且非常容易出现人为的错误,一旦手工出错,追溯问题将会非常不容易

蘑菇街

转型期(2013-2014)

1.4 无用报警信息过多

经常会收到很多报警信息,多数是无用的报警信息,造成运维人员经常屏蔽报警信

另外如果应用的访问速度出了问题,总是需要从系统、网络、应用、数据库等一步步的查找原因

发布作为应用上线前的最后一个步骤,一直以来都是运维做的比较频繁也是风险比较高的操作,发布系统不仅要做到提升发布效率,更重要的是保障发布过程中系统的稳定,减少因发布导致的故障。本次演讲主要包括三个部分。一是发布系统的演进,二是美联发布系统的实践之路,三是发布系统的特色。

从2013年开始,我们开始自建电商平台,从下单到支付整条链路开始自主建设。业务发生了变化,但是整个架构没有太大的变化,只是把中间层,数据层脱离出来了。设备增加了不少,从原来个位数增加到三位数了,还有网络设备了。业务这一块是开发自己维护,运维这边主要建设了一些初级版的服务器管理系统、发布系统、监控系统。

1.5 资产管理和应用管理混乱

资产管理,服务管理经常记录在excel、文本文件或者wiki中,不便于管理,老员工因为比较熟,不注重这些文档的维护,只有靠每次有新员工入职时,资产才能够更正一次

49彩票集团 2

社交化电商(2015-至今)

二. 自动化运维平台应该有哪些特性

针对传统运维的痛点,我们可以知道自动化运维需要支持哪些功能

智能运维 系统做决策

2015年整个业务开始发生变化了,集团开始从原来的PHP开发,逐步转向了Java开发,从原来主站一套单一业务套代码拆分成各个子业务系统,整个架构发生改变。流量入口我们分成两块,无线端和PC端二块接入。MWP为无线网关。其他PC端的流量通过代理层分发到各个不同的子业务系统,部分系统实现前后端分离服务化,最底层为数据层。从原来业务再新加业务需求,逐渐演变成拥有目前1300多个应用系统。

2.1 标准化一切

运维自动化最重要的就是标准化一切

  1. OS的选择统一化,同一个项目使用同样的OS系统部署其所需要的各类软件
  2. 软件安装标准化,例如JAVA虚拟机,php,nginx,mysql等各类应用需要的软件版本,安装目录,数据存放目录,
    日志存放目录等
  3. 应用包目录统一标准化,及应用命名标准化
  4. 启动脚本统一目录和名字,需要变化的部分通过参数传递
  5. 配置文件标准化,需要变化的部分通过参数传递
  6. 日志输出,日志目录,日志名字标准化
  7. 应用生成的数据要实现统一的目录存放
  8. 主机/虚拟机命名标准化,虚拟机管理使用标准化模板
  9. 使用docker比较容易实现软件运行环境的标准化

发布系统主要可以分成三个阶段,首先就是人肉运维,什么都要靠自己。然后进化到自动化运维。自动化运维分两个阶段,首先是使用一些开源的工具,搭建一套运维体系、运维工具。但是随着公司业务的继续发展,慢慢的会发现,虽然开源软件功能非常强大,但这些用开源软件搭建的运维工具不一定能适应公司自己的需求。但是如果要进行二次开发或者功能的增加,成本也很大,因为不了解它具体的实现逻辑。慢慢的就会进入到一个自研运维系统的过程。

业务快速发展对我们运维带来的挑战:

2.2 资产管理系统(CMDB)

CMDB是所有运维工具的数据基础

如果用开源工具(openstack,jenkins,ansible,saltstack,zabbix)来搭建自动化运维平台,如何将各个工具之间的数据统一起来就非常重要,如果这些工具的数据不统一记录,那么意味着每增加一台服务器,需要将这个服务器的数据在所有的工具系统中增加一遍,那么这些数据的统一就需要CMDB,那么如何获取和更新CMDB中的数据呢,API无疑是一种非常好的方法

另外现在越来越多的公司选择将自己的服务器迁移到云上,云其实就是虚拟化的一种高级应用,这些公有云(阿里云,腾讯云,aws等)、私有云(openstack,Vmware等)都拥有比较完备的资源管理的API,这些API也就是构建一个云服务器的CMDB的基础。自动化运维平台可以基于这些云平台的API来管理和维护服务器、存储、网络、负载均衡等资源。

通过API对资源的操作需要日志记录,以备后续操作审计。

最后,智能运维,我个人理解,智能运维跟自动化运维最大的区别就是,智能运维可以自动做一些决策。自动化运维,所有的操作还是要手动触发,但是智能运维,系统会自动对各种数据进行分析,做出合适的决策。

第一:1300多个应用如何进行管理,这是一个大的问题。不同业务如何区分?业务肯定要部署在具体服务器上面,不同业务部署不同服务器,业务和服务器之间的对应关系如何管理?还有业务部署环境,不同的业务运行的环境有可能存在差异的,所以我们需要把业务与环境之间的对应关系也要管理起来。

2.3 集中化批量运维工具

当你维护的服务器从几台,到几十台,再到几百台,集中化运维就势在必行了。现在有不少开源的集中化批量运维工具,比如puppet、chef、ansible、saltstack。

我们主要使用ansible和saltstack,这两个系统都是python写的,而且现在大多数运维人员都有一定的python开发能力,这两个工具提供的API或者SDK来来实现更为复杂的功能

举个最简单的例子,应用扩容。虽然现在有一套比较完善的扩容系统,但是还是需要由PE自己去决定扩容的时间和台数。但如果是智能运维,把智能的扩容系统做好以后,系统就可以自己根据监控的数据或者其他系统的数据,自动的决策是否需要进行扩容。当然,这是我们的目标,我们正在朝这个目标努力。

第二:早期业务之间可以依赖简单应用代码之间内部的调用,拆分演变成应用与应用之间的依赖关系,如何管理业务之间的上下游依赖?如何快速定位排查问题?这对我们排查工具带来了挑战和要求。

2.4 持续集成和部署工具

集成和部署工具,一般用jenkins的比较多,把打好的包发布至各台服务器,可以通过批量运维工具或者自定义脚本,软件应用从立项开始就需要定义好业务线,项目等,如果某个项目对,服务器的资源需求增多,只需要在对应的项目集群中增加对应的资源,这些需要和CMDB联系起来

软件发布包括文件的上传、分发、版本管理、回滚等各种操作,推荐使用SVN或者GIT对打包好的文件进行管理,然后通过脚本在各台服务器上进行发布操作,利用SVN或GIt来完成文件的上传、分发、版本管理、回滚等各种操作,这些操作对需要进行日志记录,需要在记录中来确保

另外使用docker镜像来进行持续交付会更加高效,因为docker镜像可以轻松解决环境依赖的问题

49彩票集团 3

我们带着这些问题看一下运维体系建设的思路。

2.5 监控及应用性能分析工具

资源性能监控和应用性能监控,有很多重叠的地方,如CPU或者内存的使用率增高往往和应用的性能有关

常使用开源资源监控系统有Zabbix、Nagios,OpenFalcon,这些软件主要是服务器的资源性能监控(例如CPU,磁盘、网络、内存等)和服务软件的性能监控(例如JAVA虚拟机,中间件,数据库等)

APM关注于对应用程序内部及应用程序之间调用的性能分析,比如能精确定位到某应用的URL的访问速度快慢,SQL执行速度的快慢,这可以帮助开发和运维人员定位程序的应用性能瓶颈

蘑菇街技术架构演进

应用运维体系建设思路运维核心理念

2.6 日志集中分析工具

应用系统的问题定位方式,主要就是日志分析。但是随着业务和服务器的增长,日志的分析定位也会比较困难,系统一旦出故障,发生哪个应用,引用所在服务器以及应用的代码。日志集中分析和APM一起使用,同时可以根据CMDB中记录的应用服务相关信息,应用定位问题会更加高效。

蘑菇街创业初期的技术架构,开发语言用了PHP,运行环境用了非常流行的四件套:Liunx、PHP、MySQL、Nginx。技术架构很简单的分成三层,用的基本上全是开源。只支持PHP的发布。PHP发布,整个逻辑比较简单,只需要把代码打包放到服务器上解压。有了这个发布系统,至少可以做到可以选择需要发布的文件,并且知道需要发布的这个文件的版本号是多少。把运维从发布上解放了出来。这个过程中参与发布的主要是开发而不是运维。

运维工作围绕这四个主题展开的:

2.7 安全漏洞扫描工具

安全漏洞更多的是安全工程师的来做,运维工程师更多是去解决这些漏洞,关于安全漏洞扫描如何与CMDB结合起来使用,可以使用提供API的漏洞扫描工具,针对CMDB中记录中对安全要求很高的应用来进行扫描。

中期,蘑菇街从一个单纯的导购网站变成了一个电商的平台。作为一个电商平台,就必须要有的详情页、购物车、下单、支付这些子系统,包括一系列用来支撑的后台的运营系统和基础服务。臃肿的PHP工程在一个代码仓库里面,如果把这么多电商业务都放在PHP这一个仓库里面的话,上百个开发对于同一个仓库进行开发,不可想象。所以要把业务进行拆分,JAVA服务化。

稳定性。保证业务稳定快速地发展;成本。成本涉及到两块:人力成本和系统资源成本,我们期望以最小的成本创造最大生产价值;效率。运维工作自动化,提高工作效率,减少成本;安全。

三. 资源管理系统的功能

从上面可以知道,所有的运维工具都离不开CMDB的支持,那么CMDB应该有哪些数据,可以实现什么样的功能,如何确保CMDB的准确性 ?

我们把应用逐渐拆成JAVA一个一个的服务化。为了适应这个需求,就有了第一版的JAVA的发布系统。JAVA的发布系统和PHP有很大的不同,PHP只要解压,而JAVA还要重启容器,这就涉及到在重启之前要关闭报警、切走流量,否则应用一重启一发布,就会收到一大堆的报警短信,影响用户的访问,这些都是不可接受的。发布系统的发布逻辑就会有很多的步骤。

我们日常运维工作都是围绕这四块展开的,系统建设的时候也是围绕这四个主题展示;这四块主题优先等级我个人认为是:安全第一,如果系统存在安全问题,那肯定是第一时间处理;其次是稳定性、成本、效率。以上个人对运维的理解。

3.1 CMDB管理什么数据

  1. 用户信息管理,记录测试,开发,运维人员的用户表
  2. 业务信息线管理,需要记录业务的详情
  3. 项目信息管理,指定此项目用属于哪条业务线,以及项目详情
  4. 应用信息管理,指定此应用的开发人员,属于哪个项目,和代码地址,部署目录,部署集群,依赖的应用,软件等信息
  5. 集群信息管理,指定集群属于哪个项目,以及集群的Level(开发,测试,生产)
  6. 主机信息管理,包括云主机,物理机,主机属于哪个集群,运行着哪些软件,主机管理员,连接哪些网络设备,云主机的资源池,存储等相关信息
  7. 主机信息变更管理,主机的一些信息变更,例如管理员,所属集群等信息更改,连接的网络变更等
  8. 网络设备信息管理,主要记录网络设备的详细信息,及网络设备连接的上级设备
  9. IP信息管理,IP属于哪个主机,哪个网段, 是否被占用等

数据库表如下图所示:

49彩票集团 4

cmdb 数据库表2.PNG

但是随着时间的进步,公司业务持续的发展,蘑菇街和美丽说合并,虽然两家都是电商公司,但是在底层的运维基础上,还是有比较大的不同。多了很多不同类型的应用,这些应用都要纳入到发布的管理里面来。

应用运维系统架构

3.2 基于CMDB实现哪些功能

基于CMDB,可以实现采集资源信息自动化,软件安装自动化,应用部署自动化,告警信息更加详细准确,应用关系拓扑图,网络拓扑图更加清晰,这些工具对运维会有很高的价值

在公司业务层面上,基于CMDB我们也可以做很多事情,最直接的就是IT资源的成本控制,另外还有集群容量弹性缩扩容,应用平台的稳定性,应用的持续交付等功能

49彩票集团 5

基于运维需求,我们逐步建设起目前的运维体系的架构。从最底层看,第一层基础的硬件环境,如IDC/服务器/网络设务。第二层为业务需要的底层基础服务,如DNS、NTP、YUM源、LVS等;第三层针对这些系统资源管理平台,虚拟化平台,DNS管理系统等。上面三层针对业务的,有我们应用管理系统、服务器管理系统、DBMS等;还有常用的系统,像发布系统、部署系统之类的。最顶层是开放给业务开发使用的统一运维平台。这些系统并不是说在我们建设当中一下就能建设好的,而是根据我们日常操作当中运维的需要逐步搭建而成。

3.3 确保CMDB数据的准确性

CMDB存储管理企业IT架构中设备的配置信息,它是所有的应用运行和应用交付的提供相关的资源的数据基础,所以保证CMDB数据的准确性显得非常重要

想要确保CMDB的准确性,根据自己各个公司的业务不同,来制定CMDB数据的录入流程必不可少

我们如何确保CMDB的数据准确性,公司所有的IT应用(数据库除外)全部运行在VMware虚拟机中

  1. 硬件设备的资产管理,在采购服务器或者网络设备后,需要将相关的设备手工录入CMDB系统,并且指定连接的上级网络设备,负责人
  2. 服务器需要安装的VMware软件后,通过Vcenter来管理虚拟机
  3. 新项目确立,申请服务器资源时,需要填写业务线,开发人员,git库, 测试人员,应用依赖的相关环境等详细信息,CMDB系统会关联相关的数据
  4. 运维人员在分配IP,主机名等相关信息后,将开发,测试,生产等服务器记录入CMDB, 且关联相关的数据
  5. 创建虚拟机时使用标准的模板,自动化创建,初始化虚拟机,包括安装salt客户端,监控客户端
  6. 在准备开发环境时,编写salt SLS文件,存入git库,方便安装测试和生产环境
  7. 49彩票集团,创建jenkins job,实现自动化部署及自动化打包的相关部分的定义

我们的CMDB还有哪些不足:

  1. 网络关系拓扑图没有在CMDB中显示
  2. 没有实现应用关系拓扑图,希望可以通过APM工具来完善
  3. 资源监控做的不够到位,造成资源浪费,以及Vcenter虚拟机分配不合理
  4. 没有实现应用集成部署流水线
  5. 系统告警后,没有自动化处理相关的事件,更多的是在用人工解决
  6. CMDB没有提供API,提供给别的系统调用

发布系统的构建之路

应用标准化规范-思路

首先要做运维工具,最重要的一点就是要把标准化做好。标准化跟发布相关的,主要有两点,一个是基础环境,和基础环境的配置需要标准,OS、JDK、TOMCAT等等。另外,应用要支持标准。为了支持这些标准化的落地,有一个应用的配置管理中心会管理应用最基础的信息,人员角色、应用类型、启停的命令、软件包的信息。虽然在应用规范里面定义了这个应用的一些启停的命令是有标准和默认的模板的,但是为了兼容性更好,功能更强大,我们开放了自定义的功能,它是可以修改默认的。如果是完全标准的应用,可以不做任何的修改可以用。

如果一个系统业务要接入进来,第一步要做的是标准化。按照我们规范进行改造,符合我们要求才能接入进来。不然1300多个应用没有一个统一接入标准,让我们去做适配打造运维相关的系统,那是不可能的。我们总体的思路,先标准、后接入,只有按标准改造了,业务开发才能方便地使用我们的运维系统。

发布系统的依赖是什么?如下图所示。

应用标准化规范-范围

49彩票集团 6

标准化到底要做哪些事情呢?主要分成三块:

架构主要是两块,一块是前端的,发布流程的控制、用户的界面等,下面是Python写的Worker,用于构建、部署,中间通过MQ进行解耦的操作和任务队列,中间通过DB进行数据的交换。

基础环境。基础环境里面规范有哪些呢?我们可以分为两块:硬件、软件。硬件我们规范了使用的服务器硬件配置规格,目前虚拟机规格分成三类:2核4G内存的,4核8G内存的,8核16G内存的;目前要求都使用的是虚拟机。软件方面我们主要规范部署需要的软件的版本、管理方式和部署目录;应用配置。这里规范了应用部署目录、应用包名和应用配置等。技术架构。规范了业务对基础组件使用姿势,如流量接入层、ZK、Kafka等。应用标准化规范-内容

研发流程,首先是发布的流程,先线下进行发布,然后预发进行发布,最后到线上进行发布的时候,之前还有Beta发布,确认没问题了才最终进入线上的发布。线上的发布和预发的逻辑是一致的,但是从预发到线上就比较不一样了,会有一个Check List检查,只有通过了才允许进入线上发布。提交完以后会有一个审批流程,审批流程会根据时间的不同、硬件的不同,发布流程不一样。

接下来看一下具体的标准化定义内容。整个运维标准化体系是我们运维部牵头搞的。主要是刚才讲到的内容,定义了具体我们使用的应用和基础服务的接入、目录的规范。旁边可以看一下应用的管理规范,详细定义应用名命名规范、应用包名规范、应用目录、部署目录等内容,形成文件,在整个集团各个部门里面传达执行。

默认主干都是Master。假如有一个需求需要进行开发,就会从Master拉出一个开发分支,进行需求的开发。开发完成后上线,开发系统就会从Master上拉出一个release分支进行发布,最后合并到Master,完成代码合并操作。

应用标准化规范文档-实例

新建变更操作也是在发布系统中完成的,我们希望开发可以不直接操作gitlab,因为操作gitlab风险比较大。另外,我们提供了两种变更创建的方法,一种是新建分支,还有一种是导入分支,从现有的开发分支中再创建一个分支出来,这时候可以用导入变更的功能。

我们按照开发语言不同,应用服务对服务器的部署环境要求也不同;我们先后制定Java版、PHP版、GO版和Node.js版等。每个版本的规范里面都基本上定义了这些内容:

而集成,部署环境有三个,线下、预发、线上。中间发布的基础的信息,下面是发布的过程,大致可以总结成三个,一个是代码合并,一个是编译构建,第三是部署。对于特殊的应用类型,可能中间还会多几个其他的操作,比如Docker的发布,那么就在编译构建完成以后,多加入一个Docker镜像的构建完成。如果带有前端的文件,在代码合并之后会有合并前端的操作。

第一:目录:基础软件部署目录和版本要求;

最下面一个是集成区,一个是待集成区。集成区就是当前发布,待集成区就是变更开发完成以后,提交发布就在待集成区,可以随时加入集成区也可以随时退出来。

本文由49彩票集团发布于计算机网络,转载请注明出处:应用运维主要是对线上业务系统的运维,慢慢的

关键词: