理解百度整体运维技术,数据库运维技术,掌握效率云设计理念及实践
该部分分为3个部分,分别是数据库、效率云和运维,其中效率云有三个实验
➢DBA服务故障主要两类:
➢DB故障人工恢复时间为5min+,且受熟练程度限制
难点:
➢主库故障识别:
原因较多,表征也不同,难覆盖全,容易误判
➢故障恢复:
各个节点均带数据与状态
从库拉取执行主库二进制日志保持数据同步
除快速恢复外,还需保证数据一致、可靠
➢MySQL故障
●Down - 无法连接
●假死 - 无法操作
●反复故障 - 频繁切换
➢故障机器故障
●磁盘故障 - 内存正常
●机器Down - Standby异常
●机器假死 - Standby正常
➢网络故障
●批量机器故障 - 多机器故障
➢网络脑裂
●半同步、分布式:部署策略规避
●异步复制: 存在
➢思路
分布式-致性协议
➢解决方案:
第三方仲裁机制
机房级别检查
说明:此方案是让业务进行写入MQ通过DTS同步组件进行多地域数据同步,再基于MQ进行数据的分发
问题:需要业务进行改造,成本较高
说明:此方案架构是通过Reader对Redis进行两地的数据同步,每个需要同步的地域都需要有一个对应的Reader来接收数据
问题:可扩展性差,压力随着同步地域数增加而线性增加
处理方案:
引入消息中间件进行多地域数据分发,架构清晰各地域解耦合
业务支持:
数据基于业务拆分(单元化)
业务篇:
表设计类:
DML操作类:
同步状态监控: SHOW SLAVE STATUS
性能监控:
SHOW GLOBAL STATUS
事务监控: SHOW ENGINE INNODB STATUS
DevOps ( Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障( QA )部门]之间的沟通、协作与整合。
它是一种重视"软件开发人员( Dev)"和"IT运维技术人员( Ops )”之间沟通合作的文化、运动或惯例。透过自动化"软件交付"和"架构变更”的流程,来使得构建、测试发布软件能够更加地快捷、频繁和可靠。
它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作
原则:代表性及问题性的一个定点词,行事所依据的准则
概念: 是人类在认知过程中,从感性认识上升到理性认识,把所感知的事物的共同本质特点抽象出来,加以概括,是自我认知意识的一种表达,形成概念式思维惯性
产品:
价值流:
DevOps概念中的价值流通常指的是:功能从代码提交到生产环境中经历的一系列事件。
在DevOps组织中,团队按纵向组织,以便能够对所交付的产品和服务全权负责。端到端的负责意味着团队自己负责提供给客户的服务的质和量。
实施地图: 我现在在哪里,目标是什么,如何实现
iCafe产品文档:
https://cloud.baidu.com/doc/XLY/s/Kjwvy8ld2
STEP1: 打开icafe,添加一个一级分类(SCENARIO)
下图是用户故事地图的初始状态,用户可以在**“切换看板”**位置新建一个产品的地图,或在多个看板之间切换;鼠标hover到一级分类,二级分类上会出现操作的"+";您可以通过右侧的高亮显示来设置一系列特定的卡片显示为不同颜色,方便您后续的关注。
首先我们添加第一个场景: 用户注册
STEP2: 添加一个二级分类(FEATURE),添加USERSTORY卡片
现在,我们添加了第一个用户场景–用户注册;在这个场景下再添加两个主要的feature: 产品的landing页和注册页面,当鼠标hover到feature下面的空白时,就会显示新建卡片的选项,用户可以添加一系列具体的卡片;用户可以直接拖动卡片上下移动在同一个feature内调整优先级,也可以左右拖动将user story在不同的feature之间调整
STEP3: 进一步编辑一张USER STORY卡片
用户可以通过双击已经建好的卡片进行更详细的编辑:
用户故事地图的操作简单,但是操作背后需要团队的多个角色通过充分的讨论和沟通才能制订出真正映射用户体验过程的地图。
STEP1: 进入到卡片设置页面
看板设置的入口在项目设置—卡片设置
用户可以管理项目中的任务类型,也可以通过点击类型后面的扳手按钮设置该种卡片的价值流图,点击Story卡片的扳手图表,进入Story类型卡片的配置界面
STEP2: 定义结构化的字段
进入到配置界面,用户可以自定义一系列字段(如下图)
用户可以配置两种字段,共享字段或自定义字段;共享字段为当前主账号下所有项目共享的字段,一旦设置,其它项目的管理员也可以使用;自定义字段只能在当前项目内生效
STEP3:配置字段的价值流
根据理论篇的实例中,我们新建了调研, 待需求设计,需求设计,待开发,开发中,待测试,测试,待上线,上线字段。其中所有等待状态用来标识那些上一阶段完成,但尚未进去到下一阶段的卡片,当用户看到在这些阶段中堆积了卡片的时候,应当意识到有浪费正在发生;
在状态页面建立一系列流转阶段后,现在看起来顺序是乱的,没关系,我们点击"所有状态管理"对价值流图进行排序
STEP4: 调整状态之间的流转状态
点击所有状态管理,拖动状态以调整顺序,刷新页面后新的顺序生效
完成配置后现在点击左侧导航栏的"迭代管理",点击右上角的看板,刚才您的配置就已经生效了。如下图的示例所示,通过设置缓冲区,我们可以非常直观的发现有3个需求等待产品设计,而真正开始设计的需求,只有一个。在两个阶段之间,一定发生了浪费导致需求无法快速流动;
STEP5: 为项目新建一个计划
通过左侧icafe计划跟踪返回到迭代管理页面,点击左侧新建计划进入到计划管理界面;
用户可以选择建一个多层级的项目计划,当用户不选择任何父计划的时候,当前计划就是一个整体计划,可以包含多个子计划;另外用户可以开启计划范围变更的通知功能,当产品经理向计划中增加卡片时,接收人可以立即收到邮件通知
LAST STEP: 将卡片拖动到计划中
直接拖动卡片丢到计划中,完成Backlog->计划的安排
iCode产品文档:
https://cloud.baidu.com/doc/XLY/s/Ijwvy8h4n
STEP1: 进入ICODE
从项目首页点击“进入iCode”按钮。
STEP 2:点击“新建代码库”按钮
STEP 3:输入代码库名称
代码库名:JavaDemo
STEP 4:设置代码库类型
我们在此选择“私有”,填写代码库介绍后点击确认完成代码库新建
STEP 5:点击确定按钮完成创建并进入代码库
STEP 6:设置HTTP密码
注意:使用Git连接到iCode代码库时,如需输入密码,请使用本步骤设置的密码!注意:使用Git连接到iCode代码库时,如需输入密码,请使用本步骤设置的密码!
STEP 2:为子用户ICODE分配可读权限
① 点击“可读权限”页签 ② 选择“成员”类型 ③ 选择子用户“icode” ④ 点击“添加”按钮
如果当前已经安装Git,请直接进入Step 3。
STEP 2:下载并安装GIT
① 如果您当前没有安装Git在浏览器中访问Git官网下载链接:https://git-scm.com/downloads
② 点击下载按钮,下载安装包并完成安装 ③ 如果下载没有开始,可以点击手动下载链接
STEP 3:再次检查GIT版本是否已经安装
STEP 1:下载代码库
① 创建开发目录,执行命令mkdir icode_starter && cd icode_starter
② 下载范例代码到本地,执行命令git clone https://gitee.com/devopssa_devopssa/javademo.git
STEP 2:将下载好的范例代码导入到ICODE代码仓库
① :进入代码仓库首页,复制场景2脚本 ② :将第一条脚本改为cd gs-spring-boot/
③ :执行脚本
④ :刷新代码仓库页面查看代码是否已经成功导入
iPipe产品文档:
https://cloud.baidu.com/doc/XLY/s/Jjwvy8a16
① 进入提交规则设置界面
② 勾选提交代码必须经过评审选项,强制要求每次向远程仓库提交的变更必须要评审通过才能合入
③ 勾选开启iPipe流水线检查选项,启用机器评审
④ 勾选一次只能提交一个commit选项,强制每次向远程仓库提交的变更中只能包含一次本地仓库提交
⑤ 点击“保存”按钮
STEP 1:进入持续集成界面
首先保证你的项目已经开启了ipipe服务,通过左侧导航的ipipe进入持续集成页面, 点击屏幕中央的新建流水线
STEP 2:选择监听的代码库
设置流水线名称为“评审流水线”,创建一个流水线的标识ID之后,点击蓝色的”+代码库/分支”按钮,选择代码库,目前效率云支持用户通过icode代码库或github上的代码库建立流水线:
选择icode或github代码库
在今天的实验里我们选择icode上现有的代码库,如上图所示, 找到我们在上一讲建立的代码库 javademo,在下面的分支里选择master, 消息类型选择change触发: 在这里,我们将代码push 之后,真正入库前的事件定义为change;而对应的, merge代表代码入库后触发;
现在关闭弹窗,继续完成后续的设置:
① 触发方式选择“代码库变更自动触发”,也就是说当代码提交评审时,若符合监听分支规则,则流水线自动触发执行。
② 阻塞构建选项选择“不阻塞构建”,也就是说可以多个流水线触发消息可以同时启动多条流水线实例,无需排队等待上一次执行完成。
③ 任务超时时间留空,表示无超时
STEP 3:添加“构建”阶段
① 点击加号按钮开始添加流水线执行的阶段:
② 阶段名称输入“构建”
③ 点击“添加新任务”开始为阶段添加具体的执行任务。
添加一个iscan代码扫描任务
④ 选中“iScan代码扫描”
⑤ 点击“添加” 按钮,所有设置采用默认即可;
⑥ 我们再来添加一个新任务(并行)按钮
⑦ 选择“Maven构建”
⑧ 点击添加按钮
⑨ 命令输入如下脚本,其他字段保留默认值: mvn clean install package set -x mkdir output mv ./target/spring-jsp-static-resource-0.0.1-SNAPSHOT.war ./output/
暂时不用理会制品打包上传和制作Docker镜像功能,我们点击页面最下面的确定,完成change流水线的配置。
② 修改代码第19行内容,将put方法里name的值改成”Your name”
③ 保存文件
STEP 2:提交变更到本地仓库
① 执行命令git add . ,将变更添加到暂存区。
② 执行命令git commit -m "Change the return value"将代码提交到本地仓库,-m参数用于指定提交变更的说明信息“Change the return value”
STEP 3:将本地仓库推送到ICODE进行评审
① 尝试执行命令“git push”将本地仓库变更推送到远程仓库
由于之前在icode的提交规则中启用了“提交代码必须经过评审”选项,因此服务器提示禁止直接推送,必须使用git push origin HEAD:refs/for/master方式提交代码评审。
② 按提示提交代码评审执行命令git push origin HEAD:refs/for/master
③ 在icode界面中点击“代码评审”
④ 你已经可以看到刚刚提交的代码评审了, 点击这条记录可以看到”持续集成”部分显示0/1条流水线已经完成,说明我们刚才配置的change流水线已经生效,等待2-3分钟,构建完成后的效果如下一张图-change流水线执行完毕
Change流水线在执行中
Change流水线执行完毕
STEP 4:查看流水线执行情况
① 点击流水线名称的链接,进入流水线执行结果页面:
② 点击iScan代码扫描任务,点击页面下方的具体信息,可以查看本次代码静态扫描的结果,结果众包括本地变更的代码行数,缺陷数,缺陷的具体分布和位置
③ 现在点击左侧ipipe的链接,现在我们可以看到右侧的页面上已经有了构建记录:
① 进入提交规则设置界面 ② 启用必须有评审人+2选项 ③ 启用禁止发起人自己+2 ④ 点击保存按钮
STEP 2:进行评审
① 使用你在第一章节里建立的子账号登录 ② 进入代码评审界面 ③ 点击进入刚刚提交的评审 ④ 点击WebController.java,查看该文件的变更情况 ⑤ 在变更后的代码行双击,添加代码行级别的评论 ⑥ 输入评论内容 ⑦ 点击保存按钮
⑧ 点击“打分/评论”按钮 ⑨ 打分选择“+2” ⑩ 编写评论 ⑪ 点击发表按钮
DevOps = Development Operations
代码准入:
Unit Test
设定代码单测覆盖率标准,代码合入前必须达到要求
云端编译
使用云端编译工具进行代码编译,编译通过才能合入代码库
增量静态代码扫描
进行增量静态代码扫描,发现并修复所有高危漏洞
CodeReview
每次提交内容需要同行做Code Review后,才能合入代码库
编码规范
进行编码规范检查,必须符合规范的代码才能合入代码库
增量源码安全扫描
进行增量源码安全扫描,发现并解决所有安全漏洞
上线原则:
基础原则:无损上线,上线变更不能停服务
原则一:坚持持续发布
原则二:坚持全量部署
原则三:分级发布、灰度部署
总结:
DevOps涉及研发、运维、质量保障三方面的沟通、协作和整合
可以缩短软件发布周期,提升软件质量、安全性,以及快速获取产品开发反馈的能力
DevOps包括代码开发、代码准入、程序测试,版本发布,监控,完善、生产上线六个方面
AIOps即智能运维,AI + Ops将人工智能应用于运维领域,基于已有的运维数据,通过机器学习的方法来进一步解决自动化运维没办法解决的问题
需要具备的知识:
总结:
DevOps在运维侧的高阶实现,是自动化运维的下一发展阶段
涉及行业领域知识、运维领域知识、机器学习知识三方面的知识
AIOps的指导原则:书同文,统运维描述;车同轨,统运维方法;行同论,统一运维模式
挑战:
在保障服务质量的前提下,减少成本,提高运维效率
智能运维场景概览:
智能运维工程思想:
运维工程研发框架:
百度AIOps故障管理解决方案概览:
什么是故障自愈?
答:通过自动化、智能化处理故障节省人力投入,通过设定的处理流程提高故障处理可靠性,同时降低故障时间,为业务可用性保驾护航
容器混布调度
目的
方法
百度运维的历史回溯: