持续集成简称CI,是软件的开发和发布标准流程的最重要的部分python
做为一个开发实践,在C中能够经过自动化等手段高频地去获取产品反馈并响应反馈的过程golang
简单的来讲,持续集成就是持续不断地(一天屡次)将代码合并(集成)到主干源码仓库,让产品能够快速迭代,同时保持高质量sql
代码每次经过集成到主干以前,必须经过自动化测试,以便快速发现和定位错误编程
持续集成并不能消除错误,而是让它们很是容易发现和改正后端
缩减开发的周期,快速迭代版本安全
(尽早的持续集成,尽早进入迭代之中,尽早的暴露出问题,尽早解决,尽可能在规定的时间内完成任务)(四尽早一尽可能)服务器
自动化流水线操做带来的高效网络
(CI的精髓在于持续,持续意味着自动化)架构
(自动化验证代码变动的过程,能够在软件开发的早期发现缺陷和与其余代码、组件的集成问题)app
随时可部署
(高频率的集成能够尽量地保证随时部署上线,缩短开发复杂软件的市场交付时间)
极大程度避免低级错误
(减小大量内容合并到主干分支的请看看,避免代码合并冲突和没法预料的行为)
低级错误:编译错误,安装问题,接口问题,性能问题等
迁移遗留代码到现有CI系统,须要的投入一般爱预料以外
在文化和组织上若是没有采用敏捷原则或DecOps的工做方式,那么极可能没有持续不断的提交,那么CI的存在乎义不大
随着业务增加、工具的更替、技术的演进。CI系统也必然随之改动,每每会致使阶段性的不稳定和人力物力的耗费
若是CI的基本设定不到位,开发流程将会增长特别的开销
CI流程的触发方式
跟踪触发式:在每次提交到源码版本管理系统时触发
计划任务:预配置好的计划
手动:不管是经过CI服务器的管理界面仍是脚本,用户能够手工执行CI工做流
代码审核
可在持续集成服务器里使用代码分析工具(例如Sonar)来执行自动代码审查
自动代码审查经过后,可发起一我的工代码审查,揪出那些自动审查没法找出的问题,即验证业务需求,架构问题,代码是否可读,以及是否易于扩展。
可灵活配置代码审核策略,例如:若是某些人没有审查代码便阻止对主干分支的任何提交。
最经常使用的工具是Gerrit
持续交付简称CD或CDE,是一种可以使得软件在较短的循环中可靠的发布的软件工程方法
与持续集成相比,持续交付的重点在于 交付,其核心对象不在于代码,而在于可交付的产物。
因为持续集成仅仅针对于新旧代码的集成过程执行来了必定的测试,其变更到持续交付后还须要一些额外的流程
持续交付能够看做为是持续集成的下一步,它强调的是,不敢怎么更新,软件是随时随快能够交付的
有图可看出,持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实的运行环境的[类生产环境]中
持续交付永爱确保让代码可以快速、安全的部署到产品环境中,它经过将每一次改动都会提交到一个模拟产品环境中,使用严格的自动化测试,确保业务应用和服务能符合预期
持续交付和持续集成的好处很是类似:
快速发布。可以应对业务需求,并更快地实现软件价值
编码→测试→上线→交付的频繁迭代周期缩短,同时得到迅速反馈
高质量的软件发布标准。整个交付过程标准化、可重复、可靠
整个交付过程进度可视化,方便团队人员了解项目完成度
更先进的团队协做方式。从需求分析、产品的用户体验到交互、设计、开发、测试、运维等角色密切协做,相比于传统的瀑布式软件团队,更少浪费
持续部署 意味着:经过自动化部署的手段将软件功能频繁的进行交付
持续部署是持续交付的下一步,指的是代码经过审批之后,自动化部署到生产环境。
持续部署是持续交付的最高阶段,这意味着,全部经过了一系列的自动化测试的改动都将自动部署到生产环境。它也能够被称为“Continuous Release”
持续化部署的目标是:代码在任什么时候候都是可部署的,能够进入生产阶段。
持续部署的前提是能自动化完成测试、构建、部署等步骤
注:持续交付不等于持续集成
与持续交付以及持续集成相比,持续部署强调了经过 automated deployment 的手段,对新的软件功能进行集成
持续部署的目标是:代码在任什么时候刻都是可部署的,能够进入生产阶段
有不少的业务场景里,一种业务须要等待另外的功能特征出现才能上线,这是的持续部署成为不可能。虽然使用功能切换能解决不少这样的状况,但并非没每次都会这样。因此,持续部署是否适合你的公司是基于大家的业务需求——而不是技术限制
持续部署主要的好处是:能够相对独立地部署新的功能,并能快速地收集真实用户的反馈
敏捷开发就是一种以人为核心、迭代循环渐进的开发方式。
在敏捷开发中,软件仙姑的构建被切分红多个子项目,各个子项目的成果都通过测试,具有集成和可运行的特征。
简单的说就是把一个大的项目分为多个相互联系,但也能够独立运行的小项目,并分别完成,在此过程当中软件一直处于可以使用状态
敏捷开的就是一种面临迅速变化的需求快速开发的能力,要注意一下几点:
敏捷开发不只仅是一个项目快速完成,而是对整个产品领域需求的高效管理
敏捷开发不只仅是简单的快,而是短周期的不断改进、提升和调整
敏捷开发不只仅是一个版本只作几个功能,而是突出重点、果断放弃当前的非重要点
敏捷开发不只仅是随时增长需求,而是每一个迭代周期对需求的从新审核和排序
一、组织建设
也就是团队建设,创建以产品经理为主导,包含产品、设计、先后台开发和测试的team,快速进行产品迭代开发;扁平化的团队管理,你们都有共同目标,更有成就感;
二、敏捷制度
要找准适合自身的敏捷开发方式,主要是制定一个完善的效率高的设计、开发、测试、上线流程,制定固定的迭代周期,让用户更有期待;
三、需求收集
这个任何方式下都须要有,需求必定要有交互稿,评审经过后,必定要肯定功能需求列表、责任人、工做量、责任人等;
四、工具建设
是指可以快速完成某项事情的辅助工具,好比开发环境的一键安装,各类底层的日志、监控等平台,发布、打包工具等;
五、系统架构
略为超前架构设计:支持良好的扩容性和可维护性;组件化基础功能模块:代码耦合度低,模块间的依赖性小;插件化业务模块:下降营销活动与业务耦合度,自升级、自维护;客户端预埋逻辑;技术预研等等;
六、数据运营与灰度发布
点击率分析、用户路径分析、渠道选择、渠道升级控制等等
敏捷开发技术的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报文),用来在管理进程和代理之间的交换。
get-request操做:从代理进程处提取一个或多个参数值。
get-next-request操做:从代理进程处提取紧跟当前参数值的下一个参数值。
set-request操做:设置代理进程的一个或多个参数值。
get-response操做:返回的一个或多个参数值。这个操做是由代理进程发出的,它是前面三种操做的响应操做。
trap操做:代理进程主动发出的报文,通知管理进程有某些事情发生。
SNMP协议之因此易于使用,这是由于它对外提供了三种用于控制MIB对象的基本操做命令。它们是:Get、Set 和 Trap。
Get:管理站读取代理者处对象的值
Set:管理站设置代理者处对象的值
Trap: 代理者主动向管理站通报重要事件
SLA(服务等级协议):是关于网络服务供应商和客户之间的一份合同,其中定义了服务类型、服务质量和客户付款等术语
一个完整的SLA同时也是一个合法的文档,包括所涉及的当事人、协定条款(包含应用程序和支持的服务)、违约的处罚、费用和仲裁机构、政策、修改条款、报告形式和双方的义务等。一样服务提供商能够对用户在工做负荷和资源使用方面进行规定。
KPI(关键绩效指标):是经过对组织内部流程的输入端、输出端的关键参数进行设置、取样、计算、分析,衡量流程绩效的一种目标式量化管理指标,是把企业的战略目标分解为可操做的工做目标的工具,是企业绩效管理的基础。
KPI能够是部门主管明确部门的主要责任,并以此为基础,明确部门人员的业绩衡量指标,创建明确的切实可行的KPI体系,是作好绩效管理的关键。
KPI(关键绩效指标)是用于衡量工做人员工做绩效表现的量化指标,是绩效计划的重要组成部分