前言

在校学习阶段,大多是本地搭建环境、单机开发、本地数据库自测、文件本地存储运行,只聚焦业务功能编码,不用考虑多人协作、环境隔离、配置统一管理、线上数据库安全操作、静态资源云端存储、服务注册配置等工程化问题。

而在企业生产开发环境中,整套研发流程高度工程化、平台化:依托 DevOps + CI/CD 流水线完成代码自动化构建、测试与版本发布;通过 DMS 规范线上数据库变更操作与权限管控;借助 Nacos 实现微服务配置统一管理、服务注册与发现;利用 OBS 对象存储 统一托管业务图片、附件及前端静态资源等文件。

由于部分内容涉及深层运维底层原理,本文仅对实习工作中实际接触到的企业开发、运维类工具进行概念梳理,便于后续复习复盘、工作查阅复用。

DevOps 开发运维一体化

DevOps简介

DevOps中的Dev指的是Development(开发),Ops指的是Operations(运维),用一句话来说,DevOps就是打通开发与运维的壁垒,实现开发与运维的一体化。

早期软件交付需经历:开发 — 测试 — 运维上线全流程,开发者才能拿到程序运行结果、进行反馈与调试。DevOps 让开发者在交付软件的同时,自主完成生产环境的构建、测试与运行,该理念旨在把开发、测试、运维全流程打造成闭环,可极大提高开发效率。
DevOps能力环
实现DevOps需要以下工具:

代码管理(SCM):GitHub、GitLab、BitBucket、SubVersion
构建工具:Ant、Gradle、maven
自动部署:Capistrano、CodeDeploy
持续集成(CI):Bamboo、Hudson、Jenkins
配置管理:Ansible、Chef、Puppet、SaltStack、ScriptRock GuardRail
容器:Docker、LXC、第三方厂商如AWS
编排:Kubernetes、Core、Apache Mesos、DC/OS
服务注册与发现:Zookeeper、etcd、Consul
脚本语言:python、ruby、shell
日志管理:ELK、Logentries
系统监控:Datadog、Graphite、Icinga、Nagios
性能监控:AppDynamics、New Relic、Splunk
压力测试:JMeter、Blaze Meter、http://loader.io
预警:PagerDuty、pingdom、厂商自带如AWS SNS
HTTP加速器:Varnish
消息总线:ActiveMQ、SQS
应用服务器:Tomcat、JBoss
Web服务器:Apache、Nginx、IIS
数据库:MySQL、Oracle、PostgreSQL等关系型数据库;cassandra、mongoDB、redis等NoSQL数据库
项目管理(PM):Jira、Asana、Taiga、Trello、Basecamp、Pivotal Tracker

详细介绍可参考:
https://zhuanlan.zhihu.com/p/562036793
https://cloud.tencent.com/developer/article/2520705

CI\CD

CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法,是DevOps最核心的自动化落地手段

  • CI(持续集成,Continuous Integration):开发者提交代码,自动触发构建、单元测试、代码扫描,尽早发现集成问题。

    多位开发者同时开发,合并冲突是很磨人的重复工作(该部分主要解决多分支的合并,与多分支的并行运行)
    CI在代码提交时会执行以下步骤:

    1. 开发者push代码,触发CI服务;
    2. CI 服务器自动拉取最新代码并自动构建,如mvn package,有语法错误则返回失败通知;
    3. 自动执行测试命令,测试不通过,拒绝合并;
    4. 尝试合并代码,冲突部分需开发者手动修复冲突后重新提交
    5. 全部通过,自动合并代码,多分支并行运行会合并成临时分支
  • CD(持续交付、部署,Continuous Delivery、Deployment):在 CI 基础上,将通过测试的制品(Jar / 镜像)自动打包、入库,持续交付支持随时手动部署到生产,持续部署则在此基础上全自动发布到生产环境,无需人工干预。

    持续交付指经过CI验证的代码归档到仓库中,建立了一个可随时部署到生产环境的代码库。
    持续部署指将应用自动发布到生产环境(通常将JDK、项目Jar、依赖库等打包为容器镜像部署)。

整个CI/CD过程如下图:
CI/CD过程

一站式平台

云效是阿里的企业级DevOps平台,是开箱即用的 DevOps 全链路工具链,覆盖「需求→开发→测试→发布→运维」,主要功能界面如下:
阿里云效
有关介绍可见阿里官方文档:什么是云效

该平台大致构成如下:
云效平台构成

笔者就开发工作使用感受而言,DevOps的核心就是Git+流水线:
类似Git的功能负责管理代码,流水线负责一键完成部署运行。

总结

  • DevOps 是一种理念与工作模式,打通开发、测试、运维的部门壁垒与流程割裂,开发者可快速将程序部署上线,获得反馈;
  • CI\CD是DevOps落地的具体方案,通过持续更新,持续交付 / 部署,把传统大版本迭代拆解为小步快跑、高频迭代的交付模式;
  • 主流一站式 DevOps 平台有阿里云效、腾讯 CODING、ONES 等;若需高度定制化,可基于 Jenkins 串联各类工具自主搭建。

DMS 数据管理服务

基础定义

DMS 即 Data Management Service(数据管理服务)
管理多个数据库集合,包括MySQL、SQL Sever、Redis等,无需使用多个连接工具如NavicatRedis Desktop等。

相关详细介绍可见:DMS管理系统是什么

使用中最直观的感受是该系统提供了数据库的权限管理,不允许用户任意执行增删改操作,可设置敏感操作的审批,下图是阿里DMS系统的部分功能:
阿里DMS系统

核心能力

  1. 统一连接入口
    • 一套系统登录,切换所有库,无需本地装客户端、配本地连接串,企业内网 / 外网均可访问。
  2. 精细化权限管控
    • 库级、表级、字段级权限
    • 区分查询 / 导出 / 新增 / 修改 / 删除 / DDL 建表权限
    • 禁止普通用户直连生产库高危操作
  3. SQL 审核与流程审批
    • 普通 DML 增删改、大批量更新、删表、清空表强制走审批流
    • 自动 SQL 语法校验、慢 SQL 预判、索引合理性检测
    • 开发提交→DBA / 负责人审批→自动执行 / 定时执行
  4. 数据安全能力
    • 敏感数据字段脱敏(手机号、身份证、银行卡查询自动打码)
    • 数据导出限流、导出水印、导出日志溯源
    • 操作全程日志审计:谁、何时、执行什么 SQL、结果是什么
  5. 研发提效功能
    • 在线 SQL 编辑器、执行历史、收藏 SQL
    • 表结构设计、批量建表、数据对比、库表同步
    • 数据变更回滚方案自动生成
    • 批量数据导入导出
  6. 运维管控能力
    • 实例会话监控、锁等待查询、慢日志查看
    • 数据库会话查杀、风险 SQL 拦截
    • 生产库只读模式一键开启
  7. 协同办公
    • 开发、测试、DBA、运维共用同一平台,操作留痕,权责清晰,告别本地私连数据库乱象。

与本地客户端的区别

本地客户端 (Navicat 等)DMS 数据管理服务
个人自由操作,无管控统一权限 + 审批,强约束
无审计、出事无法溯源全操作日志审计
无脱敏,敏感数据明文查看自动数据脱敏
多库多工具杂乱一站式统一管理
适合本地测试正式环境、生产环境首选

Nacos

动态命名与配置服务(Dynamic Naming and Configuration Service),主要功能为服务注册和配置中心。
服务注册:提供服务间的调用查询功能,具体包括服务注册、服务发现、健康检查和负载均衡。
配置中心:统一管理配置文件,具体包括集中管理配置、动态刷新配置、版本管理、权限管理等。

有关Nacos的学习后续值得单独发一篇文章,具体文档可到官网查看:https://nacos.io/docs/latest/overview
Nacos技术架构图
使用Nacos管理配置的方式如下:
nacos配置中心

OBS与LTS

OBS 对象存储服务

OBS指对象存储服务,结构化、结构化数据使用关系型或非关系型数据库存储,各类二进制实体文件,普遍交由 OBS 存储。

该服务可以理解为企业内共用的硬盘,各类实体文件存储在该服务上,便于人员调用。

华为云提供的OBS服务示例图如下:
对象存储服务
相比普通共享网盘,OBS更侧重海量文件、高并发、互联网 / 云架构,支持权限、生命周期、跨区域、防盗链等企业级能力

LTS 云日志服务

自有基建的大厂通常会采用 Grafana+Loki 的方式管理日志,中小公司为了减少开发运维成本,上云的服务通常会购买云服务厂商提供的日志服务,比如华为云的LTS:
云日志服务
程序执行的log、debug等信息可在此处查看,检索语法支持SQL。

总结

相比个人开发本地编码、本地运行、控制台查看日志、直接执行 sql 语句的方式,企业为了规范权限和流程,使用 DevOps 实现代码上线发布,DMS 保护数据安全,LTS 存储日志,Nacos 统一管控全环境配置与微服务注册发现,OBS 集中托管项目图片、附件、前端静态资源等二进制文件。整套工具链各司其职,补齐了单机开发缺失的工程化、安全性、可运维能力。

使用基础设施后的开发流程为:

  1. 代码提交后由 CI/CD 流水线自动化完成编译、校验、打包与部署,规避人工打包、手动上线带来的失误;
  2. 数据库操作依托 DMS 落地权限隔离与变更审批,杜绝随意删改生产数据引发的故障;
  3. 配置不再散落在项目本地配置文件中,通过 Nacos 云端统一维护,支持配置动态生效、多环境隔离;
  4. 各类业务文件脱离本地磁盘存储,接入 OBS 实现云端统一存取、权限管控与资源防盗;
  5. 应用运行日志统一归集至 LTS 平台,告别服务器逐台查看日志的低效排查模式。

整套系统实现了开发、测试、运维流程标准化,降低线上故障发生率,也方便团队多人协同开发、问题快速溯源排查,是从个人单机开发转向企业工业化项目研发最核心的基础设施支撑。

更多推荐