持续集成简称CI,是软件的开发和发布标准流程的最重要的部分
作为一个开发实践,在C中可以通过自动化等手段高频地去获取产品反馈并响应反馈的过程
简单的来说,持续集成就是持续不断地(一天多次)将代码合并(集成)到主干源码仓库,让产品可以快速迭代,同时保持高质量
代码每次通过集成到主干之前,必须通过自动化测试,以便快速发现和定位错误
持续集成并不能消除错误,而是让它们非常容易发现和改正
缩减开发的周期,快速迭代版本
(尽早的持续集成,尽早进入迭代之中,尽早的暴露出问题,尽早解决,尽量在规定的时间内完成任务)(四尽早一尽量)
自动化流水线操作带来的高效
(CI的精髓在于持续,持续意味着自动化)
(自动化验证代码变更的过程,可以在软件开发的早期发现缺陷和与其他代码、组件的集成问题)
随时可部署
(高频率的集成可以尽可能地保证随时部署上线,缩短开发复杂软件的市场交付时间)
极大程度避免低级错误
(减少大量内容合并到主干分支的请看看,避免代码合并冲突和无法预料的行为)
低级错误:编译错误,安装问题,接口问题,性能问题等
迁移遗留代码到现有CI系统,需要的投入通常爱预料之外
在文化和组织上如果没有采用敏捷原则或DecOps的工作方式,那么很可能没有持续不断的提交,那么CI的存在意义不大
随着业务增长、工具的更替、技术的演进。CI系统也必然随之改动,往往会导致阶段性的不稳定和人力物力的耗费
如果CI的基本设定不到位,开发流程将会增加特别的开销
CI流程的触发方式
跟踪触发式:在每次提交到源码版本管理系统时触发
计划任务:预配置好的计划
手动:无论是通过CI服务器的管理界面还是脚本,用户可以手工执行CI工作流
代码审核
可在持续集成服务器里使用代码分析工具(例如Sonar)来执行自动代码审查
自动代码审查通过后,可发起一个人工代码审查,揪出那些自动审查无法找出的问题,即验证业务需求,架构问题,代码是否可读,以及是否易于扩展。
可灵活配置代码审核策略,例如:如果某些人没有审查代码便阻止对主干分支的任何提交。
最常用的工具是Gerrit
持续交付简称CD或CDE,是一种能够使得软件在较短的循环中可靠的发布的软件工程方法
与持续集成相比,持续交付的重点在于 交付,其核心对象不在于代码,而在于可交付的产物。
由于持续集成仅仅针对于新旧代码的集成过程执行来了一定的测试,其变动到持续交付后还需要一些额外的流程
持续交付可以看作为是持续集成的下一步,它强调的是,不敢怎么更新,软件是随时随快可以交付的
有图可看出,持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实的运行环境的[类生产环境]中
持续交付永爱确保让代码能够快速、安全的部署到产品环境中,它通过将每一次改动都会提交到一个模拟产品环境中,使用严格的自动化测试,确保业务应用和服务能符合预期
持续交付和持续集成的好处非常相似:
快速发布。能够应对业务需求,并更快地实现软件价值
编码→测试→上线→交付的频繁迭代周期缩短,同时获得迅速反馈
高质量的软件发布标准。整个交付过程标准化、可重复、可靠
整个交付过程进度可视化,方便团队人员了解项目完成度
更先进的团队协作方式。从需求分析、产品的用户体验到交互、设计、开发、测试、运维等角色密切协作,相比于传统的瀑布式软件团队,更少浪费
持续部署 意味着:通过自动化部署的手段将软件功能频繁的进行交付
持续部署是持续交付的下一步,指的是代码通过审批以后,自动化部署到生产环境。
持续部署是持续交付的最高阶段,这意味着,所有通过了一系列的自动化测试的改动都将自动部署到生产环境。它也可以被称为“Continuous Release”
持续化部署的目标是:代码在任何时候都是可部署的,可以进入生产阶段。
持续部署的前提是能自动化完成测试、构建、部署等步骤
注:持续交付不等于持续集成
与持续交付以及持续集成相比,持续部署强调了通过 automated deployment 的手段,对新的软件功能进行集成
持续部署的目标是:代码在任何时刻都是可部署的,可以进入生产阶段
有很多的业务场景里,一种业务需要等待另外的功能特征出现才能上线,这是的持续部署成为不可能。虽然使用功能切换能解决很多这样的情况,但并不是没每次都会这样。所以,持续部署是否适合你的公司是基于你们的业务需求——而不是技术限制
持续部署主要的好处是:可以相对独立地部署新的功能,并能快速地收集真实用户的反馈
敏捷开发就是一种以人为核心、迭代循环渐进的开发方式。
在敏捷开发中,软件仙姑的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。
简单的说就是把一个大的项目分为多个相互联系,但也可以独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态
敏捷开的就是一种面临迅速变化的需求快速开发的能力,要注意一下几点:
敏捷开发不仅仅是一个项目快速完成,而是对整个产品领域需求的高效管理
敏捷开发不仅仅是简单的快,而是短周期的不断改进、提高和调整
敏捷开发不仅仅是一个版本只做几个功能,而是突出重点、果断放弃当前的非重要点
敏捷开发不仅仅是随时增加需求,而是每个迭代周期对需求的重新审核和排序
1、组织建设
也就是团队建设,建立以产品经理为主导,包含产品、设计、前后台开发和测试的team,快速进行产品迭代开发;扁平化的团队管理,大家都有共同目标,更有成就感;
2、敏捷制度
要找准适合自身的敏捷开发方式,主要是制定一个完善的效率高的设计、开发、测试、上线流程,制定固定的迭代周期,让用户更有期待;
3、需求收集
这个任何方式下都需要有,需求一定要有交互稿,评审通过后,一定要确定功能需求列表、责任人、工作量、责任人等;
4、工具建设
是指能够快速完成某项事情的辅助工具,比如开发环境的一键安装,各种底层的日志、监控等平台,发布、打包工具等;
5、系统架构
略为超前架构设计:支持良好的扩容性和可维护性;组件化基础功能模块:代码耦合度低,模块间的依赖性小;插件化业务模块:降低营销活动与业务耦合度,自升级、自维护;客户端预埋逻辑;技术预研等等;
6、数据运营与灰度发布
点击率分析、用户路径分析、渠道选择、渠道升级控制等等
敏捷开发技术的12个原则:
1.我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。
2.即使到了开发的后期,也欢迎改变需求。
3.经常性地交付可以工作的软件,交付的间隔可以从几周到几个月,交付的时间间隔越短越好。
4.在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。
5.围绕被激励起来的个人来构建项目。
6.在团队内部,最具有效果并且富有效率的传递信息的方法,就是面对面的交谈。
7.工作的软件是首要的进度度量标准。
8.敏捷过程提倡可持续的开发速度。
9.不断地关注优秀的技能和好的设计会增强敏捷能力。
10.简单使未完成的工作最大化。
11.最好的构架、需求和设计出自于自组织的团队。
12.每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。
特点:
个体和交互胜过过程和工具
可以工作的软件胜过面面俱到的文档
客户合作胜过合同谈判
响应变化胜过遵循计划
优势总结:
敏捷开发确实是项目进入实质开发迭代阶段,用户很快可以看到一个基线架构班的产品。敏捷注重市场快速反应能力,也即具体应对能力,客户前期满意度高
适用范围:
项目团队的人不能太多
项目经常发生变更
高风险的项目实施
开发人员可以参与决策
劣势总结:
敏捷开发注重人员的沟通
忽略文档的重要性
若项目人员流动太大,维护的时候很难
项目存在新手的比较多的时候,老员工会比较累
需要项目中存在经验较强的人,要不然大项目中容易遇到瓶颈问题
open-falcon是小米的监控系统,是一款企业级、高可用、可扩展的开源监控解决方案
公司用open-falcon来监控调度系统各种信息,便于监控各个节点的调度信息。在服务器安装了falcon-agent自动采集各项指标,主动上报
强大灵活的数据采集
(自动发现,支持falcon-agent、snmp、支持用户主动push、用户自定义插件支持、opentsdb data model like(timestamp、endpoint、metric、key-value tags) )
水平扩展能力
(支持每个周期上亿次的数据采集、告警判定、历史数据存储和查询 )
高效率的告警策略管理
(高效的portal、支持策略模板、模板继承和覆盖、多种告警方式、支持callback调用 )
人性化的告警设置
(最大告警次数、告警级别、告警恢复通知、告警暂停、不同时段不同阈值、支持维护周期 )
高效率的graph组件
(单机支撑200万metric的上报、归档、存储(周期为1分钟) )
高效的历史数据query组件
(采用rrdtool的数据归档策略,秒级返回上百个metric一年的历史数据 )
dashboard(面向用户的查询界面,可以看到push到graph中的所有数据,并查看数据发展趋势 )
(对维度的数据展示,用户自定义Screen)
高可用
(整个系统无核心单点,易运维,易部署,可水平扩展)
开发语言
(整个系统的后端,全部golang编写,portal和dashboard使用python编写。 )
Open-Falcon支持系统基础监控,第三方服务监控,JVM监控,业务应用监控
基础监控指的是Linux系统的指标监控,包括CPU、load、内存、磁盘、IO、网络等,
这些指标由Openfalcon的agent节点直接支持,无需插件
第三方服务监控指的是一些常见的服务监控,包括Mysql、Redis、Nginx等
OpenFalcon官网提供了很多第三方服务的监控插件,也可以自己实现插件,定义采集指标。而采集到的指标,也是通过插件先发送给agent,再由agent发送到OpenFalcon。
JVM监控主要通过插件完成,插件通过JVM开放的JMX通信端口,获取到JVM参数指标,并推送到agent节点,再由agent发送到OpenFalcon。
业务应用监控就是监控企业自主开发的应用服务
主要通过插件完成,插件通过JVM开放的JMX通信端口,获取到JVM参数指标,并推送到agent节点,再由agent发送到OpenFalcon。
常见的OpenFalcon包含transfer、hbs、agent、judge、graph、API几个进程
以下是各个节点的数据流向图,主数据流向是agent -> transfer -> judge/graph:
SNMP:简单网络管理协议,是TCP/IP协议簇 的一个应用层协议,由于SNMP的简单性,在Internet时代得到了蓬勃的发展 ,1992年发布了SNMPv2版本,以增强SNMPv1的安全性和功能。现在,已经有了SNMPv3版本(它对网络管理最大的贡献在于其安全性。增加了对认证和密文传输的支持 )。
一套完整的SNMP系统主要包括:管理信息库(MIB)、管理信息结构(SMI)和 SNMP报文协议
作为运维人员,我们很大一部分的工作就是为了保证我们的网络能够正常、稳定的运行。因此监控,控制,管理各种网络设备成了我们日常的工作
优点:
简单易懂,部署的开销成本也小 ,正因为它足够简单,所以被广泛的接受,事实上它已经成为了主要的网络管理标准。在一个网络设备上实现SNMP的管理比绝大部分其他管理方式都简单直接。
好处:
标准化的协议:SNMP是TCP/IP网络的标准网络管理协议。
广泛认可:所有主流供应商都支持SNMP。
可移植性:SNMP独立于操作系统和编程语言。
轻量级:SNMP增强对设备的管理能力的同时不会对设备的操作方式或性能产生冲击。
可扩展性:在所有SNMP管理的设备上都会支持相同的一套核心操作集。
广泛部署:SNMP是最流行的管理协议,最为受设备供应商关注,被广泛部署在各种各样的设备上。
MIB
管理信息库MIB:任何一个被管理的资源都表示成一个对象,称为被管理的对象。
MIB是被管理对象的集合。
它定义了被管理对象的一系列属性:对象的名称、对象的访问权限和对象的数据类型等。
每个SNMP设备(Agent)都有自己的MIB。
MIB也可以看作是NMS(网管系统)和Agent之间的沟通桥梁。
MIB文件中的变量使用的名字取自ISO和ITU管理的对象表示符命名空间,他是一个分级数的结构
SMI
SMI定义了SNNMP框架多用信息的组织、组成和标识,它还未描述MIB对象和表述协议怎么交换信息奠定了基础
SMI定义的数据类型:
简单类型(simple):
Integer
:整型是-2,147,483,648~2,147,483,647的有符号整数
octet string
: 字符串是0~65535个字节的有序序列
OBJECT IDENTIFIER
: 来自按照ASN.1规则分配的对象标识符集
简单结构类型(simple-constructed ):
SEQUENCE
用于列表。这一数据类型与大多数程序设计语言中的“structure”类似。一个SEQUENCE包括0个或更多元素,每一个元素又是另一个ASN.1数据类型
SEQUENCE OF type
用于表格。这一数据类型与大多数程序设计语言中的“array”类似。一个表格包括0个或更多元素,每一个元素又是另一个ASN.1数据类型。
应用类型(application-wide):
IpAddress
: 以网络序表示的IP地址。因为它是一个32位的值,所以定义为4个字节;
counter
:计数器是一个非负的整数,它递增至最大值,而后回零。在SNMPv1中定义的计数器是32位的,即最大值为4,294,967,295;
Gauge
:也是一个非负整数,它可以递增或递减,但达到最大值时保持在最大值,最大值为232-1;
time ticks
:是一个时间单位,表示以0.01秒为单位计算的时间;
SNMP报文
SNMP规定了5种协议数据单元PDU(也就是SNMP报文),用来在管理进程和代理之间的交换。
SNMP协议之所以易于使用,这是因为它对外提供了三种用于控制MIB对象的基本操作命令。它们是:Get、Set 和 Trap。
Get:管理站读取代理者处对象的值
Set:管理站设置代理者处对象的值
Trap: 代理者主动向管理站通报重要事件
SLA(服务等级协议):是关于网络服务供应商和客户之间的一份合同,其中定义了服务类型、服务质量和客户付款等术语
一个完整的SLA同时也是一个合法的文档,包括所涉及的当事人、协定条款(包含应用程序和支持的服务)、违约的处罚、费用和仲裁机构、政策、修改条款、报告形式和双方的义务等。同样服务提供商可以对用户在工作负荷和资源使用方面进行规定。
KPI(关键绩效指标):是通过对组织内部流程的输入端、输出端的关键参数进行设置、取样、计算、分析,衡量流程绩效的一种目标式量化管理指标,是把企业的战略目标分解为可操作的工作目标的工具,是企业绩效管理的基础。
KPI可以是部门主管明确部门的主要责任,并以此为基础,明确部门人员的业绩衡量指标,建立明确的切实可行的KPI体系,是做好绩效管理的关键。
KPI(关键绩效指标)是用于衡量工作人员工作绩效表现的量化指标,是绩效计划的重要组成部分
手机扫一扫
移动阅读更方便
你可能感兴趣的文章