IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

环境为王-论贴吧环境解决方案

搜索研发部官方博客 2012-01-29 20:43:25 累计浏览 2,565 次
本机暂存

    摘要

    本文列举了当前贴吧线下环境在使用过程中遇到的几个典型问题场景,针对这些问题,从如何维护环境稳定性以及如何提供更好的环境更新体验两个维度,给出了对应的解决方案。

    通过环境稳定性解决方案,降低了人力的投入,保证了环境的最新,减少了人为因素引入问题,通过技术的手段,保证整个过程自动化、可视化。

    通过更新方案,给予用户更好地更新体验,提升更新效率和速度,降低了执行机与基准环境之间的耦合性。

    关键字

    基准环境 自动化 监控 稳定性 更新

    名词解释

    基准环境:在虚拟机上搭建的一个单机的贴吧全功能环境。该环境包含了贴吧的所有模块,所有模块相关的地址配置(ip、url)均指向本机,是测试开发环境构建的母本。

    执行机:指rd、qa、fe的开发或者测试机。

1.引子

    原图已失效

    贴吧当前有50多套线下环境,环境的快速构建以及环境功能的完备性成为提高效率的一个重要因素。为了达到环境快速构建和可复制的目的,通过借鉴svn的思想,采用环境模板的思路,搭建了一台具备贴吧全功能的使用环境,即“基准环境”,其作为其他执行机的环境构建母本,具有单点更新的特点,极大地降低了环境维护以及构建的成本。

    但随着模块的逐步增加,环境构建复杂度的增大,在使用中逐步出现了以下问题:

1.模块部署基准环境滞后:模块版本迭代很快,新上线模块不能及时更新,影响了开发和测试的效率。

2.基准环境服务异常,缺乏监控:只有当核心服务出现问题时,才能知晓基准环境问题,处于一种很被动的情况。

3.基准环境和执行机耦合度高:基准环境作为所有执行环境的母本,之前设计的构建模式,存在只要基准环境出现异常,就会直接影响所有执行环境的问题。

4.基准环境管理维护缺乏流程规范约束,使用缺乏控制,容易人为引入问题,将问题带入执行机。

    为了解决以上问题,本文将从基准环境稳定性以及环境更新两个维度来进行阐述。

2.方案阐述

    原图已失效

     上图将解决方案划分为两个维度,第一个维度是针对基准环境稳定性的问题,主要解决基准环境上线模块、监控以及服务验证、环境隔离等问题。第二个维度主要解决基准环境和执行机耦合的问题,并阐述提升环境构建效率的方案。

2.1 基准环境稳定性方案

    原图已失效

     为了解决模块部署基准环境滞后、基准环境服务异常,缺乏监控以及基准环境管理缺乏约束的问题,采用上图中提到的三个方面。

2.1.1 构建自动化、管理平台化

    1)构建自动化、确认平台化:

     原图已失效

    自动监控SCMPF的程序变化,主动抓取程序,按照部署路径规范,自动部署最新的模块。在项目上线后,自动更新基准环境,保证环境版本最新。

     程序构建信息的不透明、功能确认环节不可控,加大了环境问题追查的难度。为解决此问题,使用部署信息web管理平台,使得部署信息可视化;通过确认平台,达到及时掌握项目部署效果的目的,能够透明的掌握整个流程。

     2) 配置项监控:

     原图已失效

     由于上线模块会涉及程序以及配置,要达到自动化部署基准环境的目标,需要将线下配置入库svn。为了避免遗漏情况,采取脚本定时进行线下和线上的配置项定时比较,邮件通报比较结果,进行介入跟进。

     3) 线上DB操作监控:

     原图已失效

     脚本定时监控线上存储过程或者表结构的更新,自动dump至基准环境,保证线上和线下DB一致性目的。

2.1.2 监控全面化

    原图已失效

    1)基础监控:

     使用noah,定时采集系统io、内存、idle等数据,出现异常报警,及时掌握基准环境系统状况,及时跟进。

     2)模块监控:

     使用脚本,采用语义监控以及端口监控,定时获取系统服务状况,当出现失败采取报警,便于及时安排模块负责人进行跟进处理。

     3)服务监控:

     结合核心自动化case,根据case执行结果,及时掌握核心服务正确性,确保功能正确性。

2.1.3 操作隔离化

    原图已失效

    环境的使用缺乏隔离,直接可能引入模块搭建混乱、肆意修改配置、文件目录肆意创建、删除等人为问题。为避免以上问题,采用操作隔离化,具体内容如下:

     1) 权限管理:

     ※ 用户权限管理:使用公共账号,类似线上qa账号,提供可读权限,开放部分目录的写权限。

     ※ 目录权限管理:限制目录的权限,针对不同的目录类型,设置不同的rwx权限,避免人为因素随意创建目录文件,删除文件、目录等操作。

     ※ 访问授权管理:收敛授权范围,仅对动态备机进行访问授权,不再开放其他执行机对基准环境的授权。

     2) 文件变动监控:

     通过shell脚本定时监控和统计文件变动情况,便于出现问题后追查问题。

2.2 环境更新方案

    原有方案中基准环境作为所有执行环境更新的源端,所有的更新请求都直接由基准环境响应,使得基准环境与执行机存在严重的耦合性,一旦基准环境出现问题,执行环境功能正确性会受到严重影响。

     为了规避耦合性,使得执行机每次都能获得一个稳定可用的环境版本;同时降低基准环境处理更新请求的负载,因此引入了动态备机与静态备机的概念。动态备机维护着一个稳定的环境版本,静态备机的存在则主要从加快更新响应的温度考虑。

     更新流程也变为如下过程:

     原图已失效

     方案特点:

     1) 执行机与基准环境更新解耦:

     假设基准环境出现问题,不再会直接影响到所有执行机的操作。同时降低基准环境的更新请求负载,保证服务运行稳定。

     2) 环境版本管理:

     动态备机始终维护着一个稳定的基准环境发布版本,一方面保证上游(基准环境)的问题不会带入执行机,保证核心服务正确性;另一方面,假设基准环境宕机,动态备机的存在也能够起到容错的需求。

     3) 更新分流:

     通过更新脚本的分流,能够将不同类型(rd、qa)执行机的更新请求分流至不同备机上,降低同一台机器更新请求量,提高更新请求响应速度,提升更新速度。

     4) 多种更新模式选择:

     更新命令envup,提供各种可选参数,从全局同步、细粒度按目录文件同步,到按照子系统同步,以及高速不带数据等同步方式,给用户多种选择的余地,同时提供更新加锁功能,能够细粒度根据用户配置,不更新配置中的文件或目录。

3 方案收益

    收益主要集中于以下几个方面:

     1) 保证了环境及时更新:

     自动检测SCMPF,只要有程序发布,则能够立即部署至基准环境,快速构建环境,保持基准环境程序版本最新。

     2) 减少人力投入:

     经过半个月左右统计,基准环境自动化上线项目74个,更新模块累计223个,按照1人时/项目计算,则节省74人时,平均每日节省近5人时。

     3) 部署以及确认过程透明化:

     所有信息都能够通过web平台查询,及时知晓上线模块,负责人,功能确认状态等信息,改变了以前无据可循,问题排查困难的情况。

     4) 主动知晓系统状况:

     通过基础监控、服务监控以及模块监控,改变来原有被动知晓系统问题的状态,环境问题及时报警,问题能够得到及时跟进。

     5) 降低基准环境与执行机耦合度:

     降低基准环境不稳定所可能带来的风险,同时通过动态备机一定程度上起到容错的作用。

     6) 更新构建方式及效率的提升:

     ※ 更新方式多样化,通过不同命令参数的组合,适应不同的执行机更新场景;

     ※ 易用性的提升,更新方式灵活配置和选择,降低了qa、rd、fe环境构建的成本,使用意愿大幅提升。从方案实施至今,据统计,更新操作累计已达1000次;

     ※ 构建速度提升,通过更新方案的优化,采用按子系统、不带数据、时间戳对比等方式,将全功能环境的构建时间从原来3小时左右,缩减至30分钟以内,极大提升效率。

by zhangqianqian

同分类推荐文章

  1. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)
  2. WARNING: detected duplicate paths to the same disk导致crs无法正常启动故障解决 (2026-05-24 22:24:49)
  3. Terraform 极简入门:从 AWS-CLI 到基础设施即代码(IaC) (2026-05-20 08:00:00)

查看更多 DevOps 文章 →

建议继续学习

  1. WEB系统需要关注的一些点 (累计阅读 17,947)
  2. 批量添加主机到cacti+nagios的监控报警系统中 (累计阅读 14,855)
  3. 我常用的主机监控shell脚本 (累计阅读 13,305)
  4. Linux命令行里的“瑞士军刀” (累计阅读 11,538)
  5. rsync同步的艺术 (累计阅读 9,522)
  6. Cacti 添加 Apache 监控 (累计阅读 9,142)
  7. 应该知道的Linux技巧 (累计阅读 8,893)
  8. 你可能不知道的Shell (累计阅读 8,242)
  9. 查看 CPU, Memory, I/O and NetFlow (累计阅读 8,036)
  10. 完全用命令行工作 -- 一年后的思考 (累计阅读 7,415)