当前位置:   article > 正文

云计算学习路线之云上运维(百度云智学院学习笔记)_电子笔记云计算运维

电子笔记云计算运维

理解百度整体运维技术,数据库运维技术,掌握效率云设计理念及实践

该部分分为3个部分,分别是数据库、效率云和运维,其中效率云有三个实验

  1. 数据库
  1. 效率云
  1. 运维

在这里插入图片描述

数据库

百度数据库总述与最佳实践

数据库在百度发展阶段介绍:
在这里插入图片描述

百度数据库运维及Redis异地多活实践

数据库高可用背景

➢DBA服务故障主要两类:

  1. 流量介入层故障: 多入口部署,识别与恢复较容易
  2. DB故障:单点,故障需将从库提升为主库

➢DB故障人工恢复时间为5min+,且受熟练程度限制

难点:
➢主库故障识别:
原因较多,表征也不同,难覆盖全,容易误判
➢故障恢复:
各个节点均带数据与状态
从库拉取执行主库二进制日志保持数据同步
除快速恢复外,还需保证数据一致、可靠

在这里插入图片描述

数据库高可用-业内方案分析- MHA(流程)

在这里插入图片描述

数据库高可用一故障感知

➢MySQL故障
●Down - 无法连接
●假死 - 无法操作
●反复故障 - 频繁切换

➢故障机器故障
●磁盘故障 - 内存正常
●机器Down - Standby异常
●机器假死 - Standby正常

➢网络故障
●批量机器故障 - 多机器故障

在这里插入图片描述

数据库高可用一故障识别

在这里插入图片描述

数据库高可用一故障处理

在这里插入图片描述

数据库高可用一脑裂问题解决

➢网络脑裂
●半同步、分布式:部署策略规避
●异步复制: 存在

➢思路
分布式-致性协议

➢解决方案:
第三方仲裁机制
机房级别检查

在这里插入图片描述

数据库高可用一更多场景解决方案

在这里插入图片描述

异地多活一业内架构1

在这里插入图片描述
说明:此方案是让业务进行写入MQ通过DTS同步组件进行多地域数据同步,再基于MQ进行数据的分发

问题:需要业务进行改造,成本较高

异地多活一业内架构2

在这里插入图片描述
说明:此方案架构是通过Reader对Redis进行两地的数据同步,每个需要同步的地域都需要有一个对应的Reader来接收数据

问题:可扩展性差,压力随着同步地域数增加而线性增加

异地多活一百度架构

在这里插入图片描述
处理方案:
引入消息中间件进行多地域数据分发,架构清晰各地域解耦合

业务支持:
数据基于业务拆分(单元化)

百度数据库运维体系及技术

数据库开发规范

业务篇:

  • 程序端要捕获数据库反馈的错误信息,并打印到错误日志中
  • 尽量使用cache, 读写比高( 10:1),数据量小,如配置表等
  • 尽量避免查询的结果集超出正常的需求,很少人关心10w页以后的数据
  • 尽可能减少表之间的关联,大表/主表尽量做成单表查询
  • 尽量减少distinct, like, group by, order by, union 等
  • 尽量不用子查询,子查询效率极低而且会锁表

表设计类:

  • 表和字段都要有注释
  • innodb表都需要有一个主键,自增型主键统一为id,使用auto_ jincrement
    表的索引不宜过多,一般不要超过7个
  • 一个单表简单查询只能用到一个索引,需要用到多个字段请使用联合索引
  • 单表行数不要超过二千万,超过二千万要考虑分表,提前做好规划
  • 库表设计时请考虑相关数据清理工作,不允许一类表超过亿行

DML操作类:

  • 若引用其它表的字段,该字段的定义要与被引用表字段的类型一致
  • 不建议使用select *,建议select后面加需要的字段
  • 不建议使用多表连接和全表遍历操作,建议通过主键或索引查询
  • 不要在线上数据库进行大的统计查询
  • 大批量insert、update、 delete等操 作需要限速
MySQL运行状态监控

同步状态监控: SHOW SLAVE STATUS

  • slave_ io_ running、 slave_ sql_ running
  • seconds_ behind_ master (秒数)

性能监控:
SHOW GLOBAL STATUS

  • threads_ connected. threads_ locked
  • slow_ queries_ pt
  • com_ reads ( select+query_ hit )、com writes ( insert+replace+delete )
    SHOW FULL PROCESSLIST
  • 长连接: long_query_time

事务监控: SHOW ENGINE INNODB STATUS

  • trx_ max_ active time

效率云

DevOps设计理念与实践

DevOps-软件研发过程的全新协作模式

在这里插入图片描述
DevOps ( Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障( QA )部门]之间的沟通、协作与整合。

它是一种重视"软件开发人员( Dev)"和"IT运维技术人员( Ops )”之间沟通合作的文化、运动或惯例。透过自动化"软件交付"和"架构变更”的流程,来使得构建、测试发布软件能够更加地快捷、频繁和可靠。

它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作

百度DevOps能力的定义一工程能力

在这里插入图片描述
工程能力提升是百度组织能力的变革:
在这里插入图片描述

DevOps原则

原则:代表性及问题性的一个定点词,行事所依据的准则

  1. 价值流动
    让工作能够从开发到运维到客户自左向右快速流动
  2. 反馈
    让反馈在价值流的各个阶段能够自右向左快速持续流动
  3. 持续学习与改进
    形成高度信任、持续实验和承担风险的文化,并从成败中学习
DevOps概念

概念: 是人类在认知过程中,从感性认识上升到理性认识,把所感知的事物的共同本质特点抽象出来,加以概括,是自我认知意识的一种表达,形成概念式思维惯性

产品:
在这里插入图片描述
价值流:
DevOps概念中的价值流通常指的是:功能从代码提交到生产环境中经历的一系列事件。

在这里插入图片描述
松耦合架构:

在这里插入图片描述
端到端的团队:

在DevOps组织中,团队按纵向组织,以便能够对所交付的产品和服务全权负责。端到端的负责意味着团队自己负责提供给客户的服务的质和量。

在这里插入图片描述

实施地图: 我现在在哪里,目标是什么,如何实现

在这里插入图片描述

效率云DevOps实验—用户故事地图实战

iCafe产品文档:
https://cloud.baidu.com/doc/XLY/s/Kjwvy8ld2

实验1: 通过产品规划功能实现用户故事地图

STEP1: 打开icafe,添加一个一级分类(SCENARIO)
在这里插入图片描述

用户故事地图的入口在iCafe-产品规划:
在这里插入图片描述

下图是用户故事地图的初始状态,用户可以在**“切换看板”**位置新建一个产品的地图,或在多个看板之间切换;鼠标hover到一级分类,二级分类上会出现操作的"+";您可以通过右侧的高亮显示来设置一系列特定的卡片显示为不同颜色,方便您后续的关注。

首先我们添加第一个场景: 用户注册

在这里插入图片描述

STEP2: 添加一个二级分类(FEATURE),添加USERSTORY卡片

现在,我们添加了第一个用户场景–用户注册;在这个场景下再添加两个主要的feature: 产品的landing页和注册页面,当鼠标hover到feature下面的空白时,就会显示新建卡片的选项,用户可以添加一系列具体的卡片;用户可以直接拖动卡片上下移动在同一个feature内调整优先级,也可以左右拖动将user story在不同的feature之间调整
在这里插入图片描述

STEP3: 进一步编辑一张USER STORY卡片
用户可以通过双击已经建好的卡片进行更详细的编辑:

在这里插入图片描述

STEP4: 设置卡片显示的颜色高亮
在这里插入图片描述

用户故事地图的操作简单,但是操作背后需要团队的多个角色通过充分的讨论和沟通才能制订出真正映射用户体验过程的地图。

实验2:设置可视化看板,建立团队研发价值流图

STEP1: 进入到卡片设置页面
看板设置的入口在项目设置—卡片设置

在这里插入图片描述

用户可以管理项目中的任务类型,也可以通过点击类型后面的扳手按钮设置该种卡片的价值流图,点击Story卡片的扳手图表,进入Story类型卡片的配置界面

STEP2: 定义结构化的字段
进入到配置界面,用户可以自定义一系列字段(如下图)

在这里插入图片描述

用户可以配置两种字段,共享字段或自定义字段;共享字段为当前主账号下所有项目共享的字段,一旦设置,其它项目的管理员也可以使用;自定义字段只能在当前项目内生效

STEP3:配置字段的价值流

根据理论篇的实例中,我们新建了调研, 待需求设计,需求设计,待开发,开发中,待测试,测试,待上线,上线字段。其中所有等待状态用来标识那些上一阶段完成,但尚未进去到下一阶段的卡片,当用户看到在这些阶段中堆积了卡片的时候,应当意识到有浪费正在发生;

在这里插入图片描述

在状态页面建立一系列流转阶段后,现在看起来顺序是乱的,没关系,我们点击"所有状态管理"对价值流图进行排序

STEP4: 调整状态之间的流转状态
点击所有状态管理,拖动状态以调整顺序,刷新页面后新的顺序生效

在这里插入图片描述

完成配置后现在点击左侧导航栏的"迭代管理",点击右上角的看板,刚才您的配置就已经生效了。如下图的示例所示,通过设置缓冲区,我们可以非常直观的发现有3个需求等待产品设计,而真正开始设计的需求,只有一个。在两个阶段之间,一定发生了浪费导致需求无法快速流动;

STEP5: 为项目新建一个计划

通过左侧icafe计划跟踪返回到迭代管理页面,点击左侧新建计划进入到计划管理界面;

在这里插入图片描述

用户可以选择建一个多层级的项目计划,当用户不选择任何父计划的时候,当前计划就是一个整体计划,可以包含多个子计划;另外用户可以开启计划范围变更的通知功能,当产品经理向计划中增加卡片时,接收人可以立即收到邮件通知

LAST STEP: 将卡片拖动到计划中
直接拖动卡片丢到计划中,完成Backlog->计划的安排
在这里插入图片描述

云上开发实践——导入代码库

iCode产品文档:
https://cloud.baidu.com/doc/XLY/s/Ijwvy8h4n

实验1: 创建代码库

STEP1: 进入ICODE
从项目首页点击“进入iCode”按钮。

在这里插入图片描述

STEP 2:点击“新建代码库”按钮

STEP 3:输入代码库名称

代码库名:JavaDemo

STEP 4:设置代码库类型

我们在此选择“私有”,填写代码库介绍后点击确认完成代码库新建

STEP 5:点击确定按钮完成创建并进入代码库

STEP 6:设置HTTP密码
注意:使用Git连接到iCode代码库时,如需输入密码,请使用本步骤设置的密码!注意:使用Git连接到iCode代码库时,如需输入密码,请使用本步骤设置的密码!

实验2: 添加成员并分配权限

STEP 2:为子用户ICODE分配可读权限

① 点击“可读权限”页签 ② 选择“成员”类型 ③ 选择子用户“icode” ④ 点击“添加”按钮

实验3: 在本机安装GIT

如果当前已经安装Git,请直接进入Step 3。

STEP 2:下载并安装GIT
① 如果您当前没有安装Git在浏览器中访问Git官网下载链接:https://git-scm.com/downloads

② 点击下载按钮,下载安装包并完成安装 ③ 如果下载没有开始,可以点击手动下载链接

STEP 3:再次检查GIT版本是否已经安装

实验4:将范例代码导入到代码库

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

实验1: 开启流水线评审

① 进入提交规则设置界面

② 勾选提交代码必须经过评审选项,强制要求每次向远程仓库提交的变更必须要评审通过才能合入

③ 勾选开启iPipe流水线检查选项,启用机器评审

④ 勾选一次只能提交一个commit选项,强制每次向远程仓库提交的变更中只能包含一次本地仓库提交

⑤ 点击“保存”按钮

实验2: 搭建评审流水线

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流水线的配置。

实验3:完成第一次代码提交

② 修改代码第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的链接,现在我们可以看到右侧的页面上已经有了构建记录:

实验4:完成第一次人工评审

① 进入提交规则设置界面 ② 启用必须有评审人+2选项 ③ 启用禁止发起人自己+2 ④ 点击保存按钮

STEP 2:进行评审

① 使用你在第一章节里建立的子账号登录 ② 进入代码评审界面 ③ 点击进入刚刚提交的评审 ④ 点击WebController.java,查看该文件的变更情况 ⑤ 在变更后的代码行双击,添加代码行级别的评论 ⑥ 输入评论内容 ⑦ 点击保存按钮

⑧ 点击“打分/评论”按钮 ⑨ 打分选择“+2” ⑩ 编写评论 ⑪ 点击发表按钮

运维

从DevOps到AIOps

DevOps

DevOps = Development Operations

  • 缩短软件发布周期
  • 提升软件质量、安全性
  • 快速获取产品开发反馈的能力

代码准入:

Unit Test
设定代码单测覆盖率标准,代码合入前必须达到要求

云端编译
使用云端编译工具进行代码编译,编译通过才能合入代码库

增量静态代码扫描
进行增量静态代码扫描,发现并修复所有高危漏洞

CodeReview
每次提交内容需要同行做Code Review后,才能合入代码库

编码规范
进行编码规范检查,必须符合规范的代码才能合入代码库

增量源码安全扫描
进行增量源码安全扫描,发现并解决所有安全漏洞

上线原则:

基础原则:无损上线,上线变更不能停服务

原则一:坚持持续发布
原则二:坚持全量部署
原则三:分级发布、灰度部署

总结:
DevOps涉及研发、运维、质量保障三方面的沟通、协作和整合
可以缩短软件发布周期,提升软件质量、安全性,以及快速获取产品开发反馈的能力
DevOps包括代码开发、代码准入、程序测试,版本发布,监控,完善、生产上线六个方面

AIOps

AIOps即智能运维,AI + Ops将人工智能应用于运维领域,基于已有的运维数据,通过机器学习的方法来进一步解决自动化运维没办法解决的问题

需要具备的知识:

在这里插入图片描述
总结:
DevOps在运维侧的高阶实现,是自动化运维的下一发展阶段
涉及行业领域知识、运维领域知识、机器学习知识三方面的知识

AIOps的指导原则:书同文,统运维描述;车同轨,统运维方法;行同论,统一运维模式

百度AIOps实践

挑战:
在保障服务质量的前提下,减少成本,提高运维效率

智能运维场景概览:
在这里插入图片描述
智能运维工程思想:
在这里插入图片描述
运维工程研发框架:
在这里插入图片描述
百度AIOps故障管理解决方案概览:
在这里插入图片描述
什么是故障自愈?
答:通过自动化、智能化处理故障节省人力投入,通过设定的处理流程提高故障处理可靠性,同时降低故障时间,为业务可用性保驾护航

百度运维技术综述

空间维度上的资源优化复用

容器混布调度

  • 是虚拟化场景中的一种容器编排调度技术
  • 在多资源维度(CPU/内存/磁盘等)环境下根据服务差异的约束条件进行资源调度

目的

  • Rebalance(负载均衡),消除系统热点
  • Compact(空机归档),使满足需求的机器数量最小

方法

  • 建模成收益与代价(调整成本,如容器迁移的数据量、动作批次)之间的最优化问题

百度运维平台的发展历程:
在这里插入图片描述

高可用性系统的架构与运维实践

百度运维的历史回溯:

  1. 2007 ~ 2012 ,基础运维时代
    主要成果:
    机器管理,服务管理,权限管理
    上线系统 ,数据管理系统 ,监控系统1.0/2.0
    线上任务管理系统,服务寻址服务
  2. 2012 ~ 2014 ,开放运维时代
    主要成果:
    可配置的监控3.0
    升级的上线部署系统Archer
    主要问题:
    垂直场景重复造轮子
    分散的运维知识和数据
  3. 2014 ~现在,智能运维时代
    主要成果:
    智能故障/变更/容量管理
    智能运维客服
    三个核心组件:
    统一的运维知识库
    一致的运维工具开发框架;
    全局可见的算法复用平台

百度智能运维整体框架:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/770863
推荐阅读