| 名称 | 水平分辨率 | 垂直分辨率 | 像素 | 纵横比 | 备注 |
|---|---|---|---|---|---|
| SQCIF | 128 | 96 | 12288 | 4-3 | Sub Quarter CIF |
| QQVGA | 160 | 120 | 19200 | 4-3 | Quarter-QVGA |
| QCIF | 176 | 144 | 25344 | 11-9 | Quarter CIF |
| QVGA | 320 | 240 | 76800 | 4-3 | Quarter Video Graphics Array |
| CIF | 352 | 288 | 101376 | 11-9 | Common Intermediate Format |
| DCIF | 528 | 384 | 202752 | 11-8 | Double CIF |
| VGA | 640 | 480 | 307200 | 4-3 | Video Graphics Array |
| half D1 | 704 | 288 | 202752 | 22-9 | half D1=2×CIF |
| 4CIF | 704 | 576 | 405504 | 11-9 | D1 |
| HD | 1280 | 720 | 921600 | 16-9 | High-definition television 720P |
| SXGA- | 1280 | 960 | 1228800 | 4-3 | |
| SXGA | 1280 | 1024 | 1310720 | 5-4 | Super eXtended Graphics Array |
| full HD | 1920 | 1080 | 2073600 | 16-9 | full High-definition television 720P |
| 2K | 2048 | 1080 | 2211840 | 17-9 | |
| QXGA | 2048 | 1536 | 3145728 | 4-3 | Quad eXtended Graphics Array |
| WQHD | 2560 | 1440 | 3686400 | 16-9 | Wide Quad High Definition |
| WQXGA | 2560 | 1920 | 4915200 | 4-3 | Wide Quad eXtended Graphics Array |
| UHD-4K | 3840 | 2160 | 8294400 | 16-9 | |
| DCI-4K | 4096 | 2160 | 8847360 | 17-9 | |
| UHDTV | 7680 | 4320 | 33177600 | 16-9 | |
网络摄像机常见的智能功能
随着安防芯片技术提升,各种智能算法越来越多,也越来越普及。下面是常见的一些安防摄像机的智能功能。
音频异常侦测
支持音频异常侦测的摄像机,通过设置音频异常侦测,可在音频异常时进行报警。摄像机带有音频功能,接入拾音器。一般支持音频输入异常,或者声音陡降或者陡升。
虚焦侦测
虚焦侦测可侦测网络摄像机显示的图像是否清晰,并做相应的报警联动。比如在视频图像上显示镜头失焦。
场景变更侦测
场景变更侦测功能用于侦测监控场景是否发生变更,并做出相应报警联动。
人脸侦测
人脸侦测功能可用于侦测视频画面中出现的人脸,并标记出来,或者单独存储。
人脸比对
(拌线)区域入侵侦测
(拌线)区域入侵侦测功能可以侦测视频中是否有物体进入到设置的区域,根据判读结果联动报警。
越界侦测
越界侦测功能用于检测是否有物体跨越设置的警戒面,根据判断结果联动报警。
进入区域侦测
进入区域侦测功能用于侦测是否有物体进入设置的警戒区域,根据判断结果联动报警。
离开区域侦测
离开区域侦测功能用于侦测是否有物体离开设置的警戒区域,根据判断结果联动报警。
徘徊侦测
徘徊侦测功能可侦测目标在规则区域内徘徊并超过设定的时间阀值后,根据判断结果联动报警。
人员聚集侦测
人员聚集侦测功能可侦测在设定的区域内的人员的密度超过设定的阀值后,根据判断结果报警联动。
快速移动侦测
快速移动侦测功能对非法追跑,道路超速等现象进行事件监测,对快速移动的现象进行监测。当发生快速移动时设备发出报警,通知布防主机有快速移动现象产生,使相关人员可以提前预警。
停车侦测
停车侦测功能用于检测所设置区域的非法停车现象,该功能使用于高速,单行道等道路上的非法停车检测。
物品遗留侦测
物品遗留侦测功能用于检测所设置的特定区域内是否有物品遗留,当发现有物品遗留时,相关人员可快速对遗留的物品进行处理。
物品拿取侦测
物品拿取侦测功能用于检测所设置的特定区域内是否有物品被拿取,当发现有物品被拿取时,相关人员可快速对意外采取措施,降低损失。物品拿取侦测常用于博物馆等需要对物品进行监控的场景。
防破坏侦测
防破坏报警功能可实时检测设备自身运动时出现震动异常产生报警联动,或者受到外界晃动或破坏时,自动产生报警联动。
人数计数(热点图)
过线计数用于监控及统计指定区域内目标进入和离开的数据信息。过线计数功能可广泛应用于出口,入口等物体流动量较大的地方。
道路监控
道路监控功能可实现对城市道路上的机动车或非机动车与行人迅速排查和全方位监控。
移动侦测
移动侦测功能可实现对指定区域移动物体的检测,判断,实现联动报警功能。
视频遮挡侦测
视频遮挡侦测功能可监测视频画面是否被遮挡,实现报警联动。
自动追踪
当有物体触发追踪规则时,设备将自动追踪该目标。
安防视频监控P2P穿透原理及解决方案
近年来,随着网络带宽、计算机处理能力,芯片技术水平的提升以及存储容量的迅速提高,以及各种视频智能分析技术的出现,视频监控系统的优势愈发明显,其高度的开放性、集成性和灵活性为视频监控系统和设备的整体性能提升创造了必要的条件,同时为整个安防产业的发展提供了更加广阔的发展空间。然而,目前国内网络环境比较复杂,运营商众多,同时各单位内部网络结构较为复杂、公网静态IP地址有限等因素限制了采用IP直连方式来连接设备功能的实现,外网访问变得困难。同时采用传统动态域名解析(DDNS)方式,配置复杂,成功率低。随着消费类摄像机以及智能手机的普及,如何更好,更方便的远程访问摄像机视频成为行业重要的一个需求。摄像机能否支持远程访问,支持手机访问,P2P穿透的解决方案是其中最重要的一个要素。
P2P访问的工作原理
P2P穿透即点对点穿透(peer to peer),是指前端设备通过一定的处理方式后,主动与请求客户端直接建立连接发送媒体流。
当前安防视频监控系统中的P2P主要工作原理是在前端设备中移植进一个P2P穿透辅助程序,P2P穿透辅助程序将向服务器注册该设备,服务器也可以由此来识别设备是否在线。同时P2P穿透辅助程序将与服务器进行必要的信息交换来实现网络分析和连接建立功能。
摄像机P2P穿透的工作原理如下所示:
P2P访问的核心是NAT穿越
NAT的穿越并非安防监控领域的技术,是目前VOIP以及即时通信等产品的基础性技术,目前来讲已经比较成熟,且有完整的技术标准RFC,同时也有众多的实现方案,包括许多已经得到广泛应用的开源项目。
简单来讲,实现NAT的穿越是可能的,成功的概率也比较高。UDP的协议进行数据传输穿透NAT的成功率比较高,接近100%,TCP则存在一些情况无法实现穿越,主要受限路由器的端口映射机制。
要实现NAT穿越,需要有穿越控制服务器部署在互联网(有固定的域名或者IP),由该服务器来协助网络摄像机和客户端来实现NAT穿越。有些服务器还能在TCP不能穿越的情况下,实现RELAY(数据中继转发)的功能,以确保二者之间能实现数据通信。
由于NAT穿越控制服务器不同于安防监控系统中的媒体转发服务器,主要进行信令交互,不转发媒体数据,在协助打通数据通道之后,对应的网络摄像机和客户端就不会再占用服务器带宽和处理能力了,因此一台穿越控制服务器可以接入数量庞大的网络摄像机和客户端(例如有P2P方案厂家宣传在全球部署超过50台服务器,接入了超过1000万台设备。)。
网络摄像机和客户端之间的访问机制
通常网络摄像机都有唯一ID,并通过该ID注册到穿越控制服务器。客户端要访问对应的网络摄像机时,也需要先注册到穿越控制服务器,并提交对应 网络摄像机的ID,由穿越控制服务器查找对应的网络摄像机,并协助网络摄像机和客户端之间进行NAT穿越,最后打通一个点对点的数据传输通道。之后,二者 即可进行正常的媒体和信令交互了。
为实现更加有效的管理,服务器可对设备接入进行认证。此外,如果设备ID过长,也可以为设备建立别名,客户端访问时用设备别名作为参数,服务器来查找对应设备。
数据传输机制
网络摄像机和客户端之间的数据传递包括有媒体流,信令流等。信令流数据量较小,媒体流数据量加大,而且需要有较好的实时性。
如果媒体流和信令流分开传输,需要打通多个通道,增加了复杂性和出错可能,同时增加了服务器的负担。
前面也讲过,UDP协议能有比较好的NAT穿透性,也比较适合媒体流的传输,但可靠性较差,不宜传输信令。为减轻服务器负担(避免TCP无法穿 透需要转发),提高穿透成功率,建议只打通一个UDP通道,利用该UDP通道封装媒体和信令流,在应用层加以区分,哪些是媒体流,那些是信令流。
由于UDP传输信令可靠性极差,即使是传输媒体数据,在互联网环境下肯定会出现丢包的情况,仍然会出现图像花屏或者解码出错的情况,因此必须要解决此问题。
好在利用UDP协议进行可靠的数据传输的需求早就存在,并有了比较好的解决方案,那就是通过UDP协议在应用层实现数据的缓冲,序列化,重传,可靠性控制和拥塞控制。
如果上述三个问题都已解决,则网络视频监控的P2P方案已经基本实现,剩下的就是产品化的问题。
目前P2P方式远程访问摄像机,有3种主要方式。电脑PC网页端访问,PC电脑客户端访问,手机app访问。
PC访问网络摄像机。
PC访问网络摄像机,可以先访问一个网页,传入网络摄像机的序列号。
网页加载一个控件,该控件通过NAT穿越控制服务器和该序列号对应的网络摄像机实现NAT穿透后,通过可靠的UDP传输信令和媒体数据。控件提供视频浏览,对讲,云台控制,参数查询设置等功能。
如果用PC客户端访问,则不需要加载控件,只需要输入网络摄像机对应的系列号。
手机访问网络摄像机。
手机由于平台的不同,需要单独开发对应的客户端或者插件以实现和PC访问类似功能。但原理是一样的,都需要通过NAT穿越控制服务器和该序列号对应的网络摄像机实现NAT穿透后,通过可靠的UDP传输信令和媒体数据。由于开源的NAT穿越库是可以移植的,在LINUX,WINCE,IOS,Android,Sbrian等都可以实现同样的NAT穿越功能。
P2P穿透限制
1.由于P2P穿透成功后是设备与客户端2者直接进行通信的,因此,访问设备的数量会影响用户的观看体验。不同的厂商对于设备的访问限制处理都不一致:有的厂商是做了访问数量限制,限制访问数为1-3个,那边前3个用户访问设备时可以进行实时预览操作。而超过这个数量的用户将无法进行实时预览,这样的操作是为了保护每个访问设备的用户都可以正常的观看到设备图像,保证图像质量。
2.P2P穿透的成功率。一般来说,P2P穿透不可能100%成功。有些厂家给出的是95%,99%,90%等等的穿透成功率。在穿透不成功的情况下,可以采用流媒体转发的方式来访问摄像机。这样对中间流媒体转发平台要求就比较高了,有些厂商为了节省服务器及带宽资源,对通过转发访问的方式做了些限制,例如通过转发只能访问摄像机的子码流。
P2P穿透访问应用
下图是某个P2P方案商的P2P平台运用

常见的P2P物联网平台
常见的智能摄像头P2P平台
| 名称 | 手机app | 电脑客户端 | 网页端 | 备注 |
|---|---|---|---|---|
| 品牌 | ||||
| 海康 | iVMS-4500 | iVMS-4200 | ||
| 海康萤石 | 萤石云视频 | 萤石工作室 | 萤石云 | |
| 大华 | DMSS/Easy4ip等 | SmartPSS | 手机app众多 | |
| 大华乐橙 | 乐橙-LeChange | 乐橙PC客户端 | ||
| 智诺 | Vss Mobile | IMS300 | vssweb | |
| OEM | ||||
| 雄迈 | XMeye | CMS/VMS | XMeye | |
| 雄迈超级看看 | 超级看看/iCsee | CMS/VMS | XMeye | |
| 天视通 | seetong | UC2 | seetong | |
| 九安 | 易视云/VR CAM | Eseecloud | DVR163 | |
| 中维尚维 | nvsip | CMS | nvsip | |
| 宏视 | V380 | NVCMS | ||
| 技威 | 有看头/yoosee | CMS | ||
| 普维 | 小末/showmo | |||
| IPC365 | ||||
| 第三方平台 | ||||
| 大拿 | danale | DanaCMS | 官网url | |
| 浪涛 | goolink/anycam/V9 | goolink | 官网url | |
| 华科大 | umeye | cms | umeye1/2/3 | 官网url |
| TUTK |
p2pcamlive P2PViewCam |
P2Pcamweb | 官网url | |
| 悠络客 | 安眼/云镜/悠络客 | 官网url | ||
| 威威 | PPVIEW | PPVIEW | 官网url | |
| 众云 | 众云 | 官网url | ||
| 国外品牌 | ||||
| canary | canary | canary | ||
| dropcam | Dropcam/Nest | Nest home | ||
| 互联网品牌 | ||||
| 小米 | 米家 | |||
| 小蚁 | ||||
| 百度 | 爱耳目 | |||
| 网易 | 网易青果 | |||
| 360 | 360智能摄像机 |
HTTP / 3用UDP替换TCP以提高网络速度,可靠性
为站点和服务获得HTTP / 2的性能和安全性优势意味着进行体系结构更改,因为它颠覆了用于提高网站性能的分片等原则; 这可能就是为什么只有大约35%的网站目前使用HTTP / 2。
HTTP / 3加倍,提供非常相似的功能,但用UDP替换TCP。这一次可能需要对网络基础设施进行更根本的改变,以便利用比较差的连接和移动网络更好的性能,但对于大多数开发人员来说,这种改变将是透明的。
HTTP / 3是该协议的第三个主要版本,它包括TLS 1.3和一种称为QUIC(Quick UDP Internet Connection)的新传输协议; 根据最初由Google设计的2013协议,现在有多个贡献者和公司通过互联网工程任务组(IETF)参与其中。
不可靠是一个机会
放弃HTTP一直用于UDP的TCP连接并不像看起来那么奇怪。U有时会扩展为“不可靠”而不是用户数据报协议,因为它不保证消息传递或数据包顺序。但是对于今天的网络,这实际上是一个提高HTTP / 2引入的多路复用连接性能的机会。“凭借HTTP / 3,我们将在同一个旧的不可靠互联网之上构建一个新的可靠协议,” Cloudflare首席技术官John Graham-Cumming告诉New Stack。
HTTP / 2通过在同一连接上发送多个HTTP请求,允许应用程序同时处理请求,从而更好地利用网络带宽。但只有在网络运行良好时才能实现这些收益。“你可以最大限度地提高吞吐量和带宽,因为TCP可以达到它可以达到的最大速度,并且所有并行连接都能以最快的速度运行,”Graham-Cumming说。
这很好,直到网络连接出现打嗝,例如网络拥塞或移动网络上从一个小区移动到另一个小区并且数据包丢失。“TCP保证发送数据包的顺序是应用程序接收的顺序 – 所以如果你错过了,那么一切都必须停止,直到特定数据包被重新传输。如果将多个请求复用到单个TCP连接上,则所有这些请求都必须停止并等待,即使丢失的数据包可能只影响其中一个。
Graham-Cumming解释说,这种“线路阻塞问题”是TCP固有的问题,使用UDP通过允许应用程序控制数据包的重传来修复它。“它可以说’数据包丢失,但它只影响这一个数据流,而其他数据流可以继续运行’。”这使得QUIC 在恶劣的网络条件下更加强大。
HTTP / 3的连接迁移提议可以扩展在不同网络之间移动的稳健性,例如从Wi-Fi到移动宽带,这通常会因为IP地址的变化而破坏网络连接。“通过此提议,您和服务器之间的标识符将不是IP地址,而是协议本身内的标识符。这样您就可以在新网络上自动重启整个连接,这样您就可以无缝地从Wi-Fi转移到移动连接。原始互联网的一些假设是,存在相当固定的连接,我们现在正在进入一个非常移动的异构世界。“
Graham-Cumming解释说,HTTP / 3还直接集成了TLS,QUIC对数据包传输的额外控制也具有优势。“当事情通过互联网发送时,它们会被分解成数据包; 在TLS中,有一个传输数据缓冲区的概念。如果你想要真正有效率,你想要把所有这些事情排好; 这是一个请求,我将对它进行加密并通过互联网进行传输,以便一次性收到所有这些请求,并且不会分成较小的数据包,其中一些不会被延迟。如果您控制所有级别,如果您只是假设互联网是一种不可靠的发送数据包的方式,那么您可以控制发送内容的顺序,您可以控制加密它们的方式以及这些加密块如何传输。“
与HTTP服务器的初始连接将更快,因为HTTP / 3取出了通常需要建立连接的往返之一安全解释说,Mozilla首席工程师Martin Thomson是QUIC规范的编辑之一。
“使用TCP和TLS,连接设置以TCP握手开始:客户端发送SYN,服务器响应SYN + ACK,客户端使用ACK完成。然后在发送任何请求之前有一个TLS握手 – 它需要另一个类似的三个消息交换。QUIC在大多数情况下将其压缩到单个交换。一个关键特性是0-RTT,允许客户端立即发送请求; 这是TCP和TLS的一个选项,但你仍然需要等待TCP握手完成。“
默认安全
集成TLS还可以提高安全性,因为身份验证和加密是由网络协议提供的,而不是像TLS这样的高级协议提供的 – 而且在HTTP / 3中内置了TLS,使用它也不是可选的。Graham-Cumming指出:“业界正试图在默认情况下保证一切安全。” 当站点使用HTTPS时,浏览器现在会在站点没有加密连接时向您发出警告,而不是显示锁定。HTTP / 3和QUIC是这个方向的另一个举措。
“更多的QUIC是加密的,”汤姆森解释道。这包括攻击者可能尝试使用的元数据。“除了一些有助于将数据包识别为QUIC数据包的比特之外,未加密的QUIC数据包的唯一部分是连接的不透明标识符。这包括TCP和TLS无法保护的内容,例如确认(’我从你那里得到5个字节’)。“
Thomson还认为加密实际上将简化部署QUIC。将新协议部署到需要更新的防火墙,路由器,NAT和其他网络设备上的复杂性阻碍了在浏览器中 创建新的,更有效的传输协议和延迟采用TLS 1.3的努力。“这是部署QUIC的可能性的一部分。互联网往往会干扰新的协议,加密将保护QUIC免受干扰。“
他坚持认为,这是UDP是一个不错的选择的另一个原因。“新的协议不能直接部署在IP之上,如TCP或UDP,因为这需要更新的互联网。考虑更换或升级每个想要使用此新协议的房屋中的每个路由器的前景。UDP在这种情况下是理想的,因为它做得很少。它非常轻巧,因此我们可以在顶部构建所有必要的部件。UDP的主要缺点是已经显示阻止或降级UDP的少量网络。在极少数情况下,我们有HTTP / 2可以依靠。“
当用户访问站点时,他们的初始连接将通过HTTP或HTTP / 2,服务器将提供HTTP / 3作为替代; 了解提供该连接的标头的浏览器将记住它以供下次访问,但较旧的浏览器和设备将继续使用旧协议。格雷厄姆 – 卡明预测说:“我们预计HTTP / 2和1.1将会存在很长时间。”
网络变化
HTTP / 3可能有它的名字,但它仍在开发中; Graham-Cumming表示,情况稳定前几个月。尽管有一些HTTP / 3端点可用于测试Cloudflare等服务,但Facebook和Litespeed 已经证明了 2018年11月的HTTP / 3实现之间的互操作性,浏览器和Web服务器还没有支持HTTP / 3(Chrome的实验支持除外)对于谷歌的原始版本的QUIC)。
一旦他们这样做,服务提供商和托管公司将遵循,但可能需要更新旧的网络设备。“对于UDP的NAT遍历并不像TCP那样发达,一些家庭路由设备会假设UDP用于流媒体视频,而不是网络,”Graham-Cumming说。
Thomson说,如果你托管自己的网络服务器,你还有更多工作要做。“服务器管理员会发现QUIC需要的不仅仅是软件升级。启用UDP将需要网络和负载平衡基础架构的新支持。“网络运营商可能需要研究可以在软件中实现的更智能的第4层负载平衡解决方案,如Facebook的Katran项目。
但由于HTTP / 3旨在解决HTTP / 2的问题,因此对HTTP / 2进行的优化(如域分片的更改)将在可用时自动应用。如果是这样的话,Graham-Cumming希望它能够推动网络的发展。“我们希望的是更快的网络下载和API。它应该使互联网更加可靠和快速,并且希望对于开发者来说,我们可以获得更丰富的API和Web应用程序,因为我们可以通过这种新协议更多地依赖互联网。
https://thenewstack.io/http-3-replaces-tcp-with-udp-to-boost-network-speed-reliability/
Jenkins与持续交付的诸多问题
如果您使用软件,您可能已经意识到软件交付的实践在今天远非完美。查看我们上个月关于自世纪之交以来软件开发演变的文章,原因有些。在那篇文章中,我们解释了导致我们进入当今软件世界的道路,以及为什么这个世界可能达不到我们的期望。
这篇文章是我们关于进入詹金斯后世界的系列文章的第二篇。在这里,我们更详细地看一下流行的工具和流程,包括但不限于Jenkins,它们阻碍了我们从软件的必杀技。
我们喜欢詹金斯!
需要明确的是,我们并未将Jenkins视为当今软件交付领域的唯一问题。我们实际上认为詹金斯是一个很棒的工具。但是,Jenkins和其他持续集成(CI)服务器并不总是正确使用。软件交付团队倾向于在如何部署Jenkins和类似工具时犯错误。结果,他们采用低效的做法,削弱了他们获得或保持敏捷性的能力,并失去了采用最新技术创新所需的灵活性。
詹金斯的问题
最终,这些问题的根源不是来自特定工具,而是来自文化错误。
问题1:詹金斯插件太多了
插件不一定是坏事。实际上,当它们被正确使用时(这意味着将功能扩展到软件平台所需的核心功能之外),它们就是很好的资源。它们为用户提供了为他们使用的工具添加额外功能的选择,而不需要他们在不希望使用这些功能的情况下将资源专用于这些功能。
但对于Jenkins而言,插件不提供对可选功能的访问,这些功能超出了使用该平台所需的核心功能。相反,Jenkins要求团队使用插件来实现在许多情况下非常基本的任务。
例如,如果你想为Docker环境构建 – 这是一个非常常见的用例 – 你需要一个插件。如果你想从GitHub(另一个非常常见的任务)拉,那么你需要一个插件。如果您需要PAM支持,则需要一个插件。
可以肯定的是,Jenkins的1,500个插件中的许多都提供了并非每个人都需要的功能。它通过插件提供完美的意义,例如,PagerDuty或Azure存储兼容性,因为许多用户可能不需要这些功能。
但是你需要在Jenkins中插件来做任何事情都是有问题的 – 而且这不仅仅是因为它意味着软件交付团队必须花时间安装和配置它们才能开始工作。这里更大的问题是Jenkins的大多数插件都是由第三方编写的,质量各异,可能会在没有通知的情况下失去支持。
构建基于第三方插件的软件交付链并不是确保可用性或稳定性的好方法。
问题2:Jenkins不是为Docker时代而设计的
虽然CI服务器通常是现代DevOps会话的一部分(并且确实是DevOps工程师的许多重要工具之一),但它们实际上是一种相对古老的技术,可以追溯到2000年代中期 – 早在任何人想象容器之前和微服务作为软件部署的首选基础设施。
因此,传统的CI服务器无法帮助团队充分利用Docker容器等下一代基础架构。他们通过多个插件很笨拙地与Docker集成。实际上,Jenkins 在其名称中使用Docker的插件不少于14个。许多用于特定供应商的Docker相关平台,但其中六个用于核心Docker平台。
从许多方面来说,Jenkins与大多数其他CI服务器一样,是在裸机服务器和虚拟机时代构建的。事实上它支持Docker支持。在越来越多的Docker本地环境中,这不是CI服务器运行的好方法。
问题3:Jenkins不能很好地支持微服务
就像Jenkins和大多数其他CI服务器诞生于Docker之前的时代一样,它们也在微服务变得流行之前出现。
当然,有些人在2000年代使用面向服务的架构(SOA),同时Jenkins首次使用。自20世纪80年代以来,微内核等概念就已存在。但是直到Docker出现并使微服务易于实现,实际上已经部署了很少的微服务平台。
所以你可能不会期望Jenkins能够很好地支持微服务 – 事实上,它并没有。Jenkins缺乏对同时集成和测试多个服务的支持。这是微服务环境的基本功能。
除非您计划投资多个管道的开销(每个微服务一个),Jenkins在帮助您开发下一代微服务应用程序方面做得很差。
问题4:CI!= CD
Jenkins和CI服务器的最大问题很可能是软件交付团队有时会将持续集成与持续交付(CD)混为一谈。
事实上,CI和CD是不同的东西。CI是CD流程的一部分,但要实现完整的CD – 这应该是任何旨在优化其工作流程的软件交付团队的目标 – 您需要的不仅仅是CI服务器。
CD还需要将自动释放自动化到您正在使用的环境中,无论是什么。它需要可以自动执行不属于CI服务器范围的软件交付任务的工具,例如步骤。CD需要通信工具和渠道,以使软件交付团队能够无缝协作。
当组织设置CI服务器并立即考虑他们的软件交付现代化工作完成时,他们犯了一个大错误。
改变詹金斯世界的文化
为什么熟练的软件工程团队会犯这样的错误?这并不是因为他们没有智能或无法跟上最新的创新。
相反,问题在于错误的尝试模仿最大,最有效的软件交付操作,如谷歌和Netflix。这些组织着名地利用开源工具链和大型基础架构,构建令人难以置信的敏捷软件交付管道。
是什么使这些公司能够构建这些管道不仅仅是他们部署的工具,还有他们的文化。仅使用与Google相同的工具,您无法像Google一样高效。
较小的组织并不总是意识到这一点。只有当他们拥有正确的文化理念和流程时,他们才能克服像Jenkins这样的工具的局限性,并优化他们的软件交付管道。
没有工具链是完美的,但是当您实施正确的文化时,您可以实现完美的软件交付(或至少接近它)。
如果您的软件交付方法仍然只围绕Jenkins构建,那么您无疑会错失更好的机会。实现这些机会需要文化变革。在本系列的下一篇文章中,我们将研究具有前瞻性思维的公司如何将新工具与新的软件交付文化相结合,以超越我们长期努力解决的以Jenkins为中心的世界的低效率。
https://thenewstack.io/many-problems-jenkins-continuous-delivery/
打击警报疲劳:如何唤醒警报策略
如今,工程团队面临着保持系统平稳运行的必要性。这是因为企业与数字客户体验之间的界限正在缩小 – 当应用程序成为企业时,任何缺乏完美用户体验的东西都意味着要达到顶线。
在这种背景下,声音警报策略现在几乎对每个工程团队都至关重要。根据最近的一项调查,58%的DevOps专业人员报告依靠五个或更多可观察性工具来确定性能问题的根本原因,这意味着他们会针对每个问题对多个位置的数千个警报进行排序以找到答案。由于无法始终监控系统健康状况的各个方面,因此智能警报策略可以帮助团队更有效地运营,并将注意力集中在最需要的地方,从而保持业务平稳运行。
但设置警报并不总是像看起来那么简单。为了做到这一点,团队不仅要应对表面下方存在的庞大复杂性,还要对抗“警报疲劳”,或者在过于频繁时忽略通知的倾向。两种情况下的关键是在节奏和紧迫性之间取得适当的平衡。为了帮助您的团队建立更好的警报策略(并在晚上睡得更好),这里介绍我们如何应对Scalyr的挑战:
警报结构
首先,关于结构的一个词。在最高级别,警报围绕三个关键支柱设计:指标(您要监控的绩效指标),比较报表(即“大于”,“小于”,“等于”)和阈值(关键值为您)想要比较指标)。
例如,要监视CPU使用率的意外峰值,可以设置以下警报:如果过去15分钟内的平均CPU使用率大于过去的24小时平均值,则触发警报。
阈值
创建警报时,通常可以通过建立阈值来启动。可以将三种类型应用于警报:固定,基于状态和历史。
固定阈值,顾名思义,当性能水平超过某个静态预定级别时触发警报。在测量具有硬限制的性能指标(如CPU使用率或硬盘空间)时,这些是设置和最佳工作的最简单阈值。
基于状态的阈值也简单明了。它们识别系统状态的变化 – 例如,“运行”或“停止” – 并且主要用于监视应用程序进程以发生意外停机。
历史门槛稍微复杂一些。也被称为“滑动窗口”,这些阈值将度量的当前值与其过去的值进行比较。换句话说,监视一个特定的时间段(例如15分钟的窗口),随着时钟滴答而继续移动。例如,基于历史阈值的警报可能显示为:如果15分钟的平均CPU使用率大于24小时前15分钟平均CPU使用率的120%,则触发警报。这里的想法是在滤除噪声的同时识别给定度量中的突然尖峰。
在此主题上,在设置警报时包含“宽限期”也很有用。换句话说,添加一个规则,防止警报被触发,除非它被触发持续一段时间。这有助于滤除小的像差并识别长期活动。
度量
一旦确定了阈值,就需要确定支持警报的指标。每种警报策略都需要涵盖五个关键指标类别:容量,带宽,状态,速率和事件参数指标。
容量指标监视具有固定和已知容量的系统组件,例如磁盘空间和可用内存。如果某些东西可以“填满”或“耗尽”,通常用容量指标来衡量。达到容量时,系统会中断,这意味着阈值应设置在最大容量以下。当击中容量的后果具有严重破坏性时,应将阈值设置得特别低。
带宽指标衡量系统内的流量。例如,网络利用率,CPU使用率和磁盘吞吐量。这种类型的系统活动本质上通常是高度可变的,因此请考虑将警报基于移动平均线。例如,您可以将其设置为测量30分钟窗口的平均使用量,而不是通过查看最新测量来监控网络使用情况。
状态度量标准具有用于监视系统状态更改的不同值,例如“正在运行”或“已停止”。这些系统状态度量标准通常与基于状态的阈值挂钩。
费率指标用于衡量某些事件发生的比率。换句话说,在特定时间段内发生的事件的数量。例如,“每秒请求数”,“每秒错误数”,“每分钟登录尝试数”等。对于可预测的指标,历史阈值最好。对于不太可预测的那些,将阈值基于历史高点或低点通常是一种合理的方法。
事件参数度量基于事件的某些可测量属性,例如响应时间或请求大小。该指标通常用于监控和报告某段时间内所有相关事件的平均值。您为事件参数指标设置的阈值与速率指标的阈值类似 – 使用可预测指标的历史阈值,以及不可预测指标的固定阈值。
通知
有了正确的警报阈值和指标,下一步就是构建一个系统,用于在出现问题时接收通知。这一步至关重要。您可以拥有世界上最好的警报参数,但如果警报没有到达您,它们将无法发挥作用。
现代DevOps环境提供了多种选择。例如,现在可以将警报存储在数据库中并通过电子邮件以每日批次,立即通过电子邮件发送,通过SMS或电话发送或其某种组合来发送。诀窍在于确定哪种交互模型最适合您的团队。
一般来说,紧急警报应该是设计中断的。他们需要立即引起你的注意并传达问题的紧迫性。出于这个原因,在相同的度量标准,不同的阈值和不同的通知方法上“堆叠”警报通常也是有意义的。这里的想法是随着问题变得更加紧迫而升级警报。
警报远远超出了眼睛。设置声音警报策略需要考虑三个关键支柱:阈值,指标和通知。随着应用程序正常运行时间成为每个企业的关键任务,现在花时间为您的应用程序环境和团队找出正确的组合可以发挥重要作用。
https://thenewstack.io/fight-alert-fatigue-how-to-wake-up-your-alerts-strategy/
理解CI和CD之间的区别
有关持续集成(CI)和持续交付(CD)的信息很多。多篇博文试图用技术术语解释这些方法的作用以及它们如何帮助您的组织。不幸的是,在某些情况下,这两种方法通常都与特定工具甚至供应商相关联。公司自助餐厅的一个非常常见的对话可能是:
- 您是否在团队中使用持续集成?
- 是的,当然,我们使用X工具
让我告诉你一个小秘密。持续集成和交付都是开发方法。它们与特定工具或供应商无关。即使有工具和解决方案可以帮助你们(比如Codefresh),实际上,公司可以使用bash脚本和Perl单行来实践CI / CD(不是很实用,但肯定是可行的)。
因此,我们不会使用工具和技术术语来解释CI / CD的常见陷阱,而是使用最重要的内容来解释CI / CD:人们!
关于人的故事 – 软件集成的黑暗时代
认识爱丽丝,鲍勃,查理,大卫和伊丽莎白。它们都适用于SoftwareCo Inc.构建SuperBigProject应用程序。Alice,Bob和Charlie是开发人员。大卫是一名测试工程师。伊丽莎白是该团队的项目经理。
开发应用程序的传统方法如下:
Alice,Bob和Charlie都在他们的工作站上处理三种不同的功能。每个开发人员以单独的方式编写和测试代码。他们使用长期运行的功能分支,在合并到生产环境之前存在数周甚至数月。
在某个时间点,伊丽莎白(PM)收集了整个团队,并宣布:“人们,我们需要创建一个版本。请实现它!“
此时,Alice,Bob和Charlie正在争先恐后地将所有三个功能集成到同一个分支中。这是一个非常紧张的时间,因为这些功能以前从未一起测试过。由于错误的假设或环境问题,许多错误和问题突然出现(请记住,到目前为止,所有功能都只是在每个工作站上进行测试,彼此隔离)。
一旦这个高压力期结束,合并后的结果将传递给David,后者将执行额外的手动和自动测试。这段时间也很耗时,因为他可以批准或阻止发布,具体取决于发现了多少关键错误。所有的目光都落在大卫的身上,因为他的测试可以揭示可能会延迟释放的严重问题。
最后,测试结束了,伊丽莎白高兴地宣布该版本已准备好打包并运送给客户。
那么人们如何在这个虚构(但非常现实)的故事中感受到这种感觉?
- Alice,Bob和Charlie(开发)不满意,因为他们总是在即将发布的版本之前了解集成问题。整合期间感觉就像是同时出现多个问题的消防。
- 大卫(测试)不高兴,因为他的工作确实是不平衡的。在等待开发人员完成功能工作的平静时期。然后是测试阶段,当他被工作淹没,必须处理意外的测试场景,每个人都在看他的肩膀。
- 伊丽莎白(管理层)也不高兴。整合阶段是项目的关键路径。这是一个紧张的时期,因为任何意外的问题都会推迟产品的交付。伊丽莎白一直梦想着软件发布没有任何意外,但实际上这种情况从未发生过。估计项目时间表中的整合阶段始终是一个猜谜游戏。
团队中的每个人都不高兴。(顺便说一句,如果您的公司仍在开发这样的软件,请尝试了解此开发工作流程会损害您团队的士气。)
这里的主要问题是每个产品发布时发生的单一 “集成”阶段。这是工作流程的痛点,它可以防止团队发布无压力版本。
将“连续”添加到集成
现在我们已经看到了“集成”的含义,很容易理解“持续集成”的含义。正如谚语所说,“ 如果事情是痛苦的,那就更经常地做。”持续整合本质上是以高频率重复整合步骤以减轻其痛苦。经常这样做的最明显的方法是在每个功能合并之后进行集成(而不是在宣布正式发布之前等待)。
当团队实施持续集成时……
- 所有功能都直接合并到主分支(主线)。
- 开发人员并非孤立地工作。所有功能都是从主线开发的。
- 如果主线是健康的,则认为功能已完成,而如果主线在其自身的单独工作站上工作则不会。
- 测试在功能级别和主线级别自动进行。
这就是持续集成的要点!当然,还有更多的细节(实际上有关于这个主题的整本书)但主要的一点是,不是只有一个紧张的集成期,一切都在同时合并和测试,“整合”一直在发生以连续的方式。
持续集成是开发软件的更好方法(与“普通”集成相比),因为它:
- 减少合并功能时出现的意外数量。
- 解决“我机器上的工作”问题。
- 将测试时段切换为多个时段,其中每个要素逐渐合并到主线中(而不是一次性合并)。
结果是,使用CI工作的团队不是通过过山车生活(平静的开发时期,然后是压力释放),而是通过逐步的方式更好地了解项目的完成程度。
使用CI进行工作是现代软件开发的支柱之一。该技术已被很好地记录并且在此时已知。如果您今天没有在您的软件项目中练习CI,那么您的组织没有任何借口。
软件交付的黑暗时代
现在我们已经看到了“集成”的历史以及持续集成的工作原理,我们可以通过持续交付将其提升到新的水平。
如果我们回到原始故事,我们可以看到与发布方式类似的模式:
执行发布本质上是一个“大爆炸”事件。在认为软件被测试之后,有人负责打包和部署过程。将软件部署到生产也是一个非常紧张的时期,传统上涉及许多手动步骤(和检查表)。部署很少发生(有些公司每六个月部署到今天一次)。在极端情况下,部署发生在ONCE(瀑布式设计方法)。
仅在最终截止日期到来时提供软件会带来与不频繁集成相同的挑战:
- 通常发现生产环境与最后一分钟需要额外配置的测试环境不同。
- 在测试环境中正常工作的功能在生产中被破坏。
- 在发布时尚未准备好的功能根本不会提供给客户,或者他们甚至会进一步推迟发布日期。
- 发布会在开发人员(想要发布新功能)和操作(他们想要稳定性并且不希望一次部署太多新功能)之间产生紧张关系。
你应该能够在这里看到模式。如果我们通过更频繁地减轻“整合”阶段的痛苦,我们也可以为“交付”阶段做同样的事情。
将“连续”添加到交货
持续交付是指尽可能频繁地打包和准备软件(就像它被发送到生产中一样)的做法。最极端的交付方式是在每个功能合并之后。
因此,CD使CI更进了一步。将每个功能合并到主线分支后,不仅会对应用程序进行正确性测试,还会将其打包并部署到测试环境中(理想情况下与生产相匹配)。所有这些都以完全自动化的方式发生。请注意上图中缺少粘贴图(表示手动步骤)。
另请注意,每个新功能都是推动生产的潜在候选者。并非所有候选人实际上都被发送到生产。根据组织的不同,部署到生产的决策需要人为干预。人类只决定释放是否正在生产(但不准备释放本身)。该版本已在测试环境中打包,测试和部署。
持续交付比持续集成更难采用。这样做的原因是,由于每个候选版本都可能达到生产,因此整个生命周期需要自动化:
- 构建应该是可重复的和确定的。
- 所有发布步骤都应该是自动化的(这比听起来更难)。
- 所有配置和相关文件都应存在于源代码管理中(不仅仅是源代码)。
- 应在其自己的测试环境中测试每个功能/发行版(理想情况下以动态方式创建和销毁)。
- 所有测试套件都应该是自动化的并且相对较快(也比听起来更难)。
虽然云无疑可以满足所有这些要求,但软件团队(开发人员和运营人员)需要一定程度的纪律才能真正实现持续交付。
一旦CD到位,释放变得微不足道,因为只需按一下按钮即可执行。每个人(不仅仅是项目经理)都能看到当前的候选版本。当前版本候选版本可能没有所有请求的功能,或者它可能尚未满足所有要求,但就发布过程而言,这并不重要。重要的是,该版本经过全面测试和打包,随时可以发送到生产(如果需要)。任何项目利益相关者都应该能够开绿灯,并立即将产品发布到生产中。
如果您使用的是CD,则软件生命周期可以总结如下:
每个候选发布者总是提前准备好。人类决定是否也会将候选版本推向生产阶段。如果需要在将来召回,那么未达到生产的候选版本仍会存储为工件。
与持续集成一样,如果您想了解所有细节,还有一本关于持续交付的书籍。
奖金:持续部署
CD中的“D”也可以表示部署。这种开发方法建立在持续交付的基础之上,基本上完全消除了所 任何被发现准备好(并通过所有质量和测试门)的候选版本都会立即投入生产。
不可否认,只有极少数公司能够像这样工作。在没有人的情况下直接投入生产不应该掉以轻心,在撰写本文时,许多公司甚至都没有实施持续交付,更不用说部署了。现在应该清楚的是,每种开发方法都需要先前的基础。
在升级之前,您的组织应确保每个基础都非常扎实。在Codefresh,我们看到许多公司试图通过试图在他们的CI / CD管道中窃取他们现有的做法(针对数据中心进行优化)而试图进入云时代,却没有真正理解其中一些做法现在已经过时了。尝试采用持续部署而不首先完全接受持续交付是一场失败的战斗。
查看这些方法涵盖的内容以及CD如何要求CI的另一种方法是下图:
确保以正确的顺序处理每个开发范例。定位持续交付是一个更加现实的目标,也是工具选择丰富的目标
https://thenewstack.io/understanding-the-difference-between-ci-and-cd/
DevOps所需的技能
除了我们最近的博客“ 如何成为一名优秀的DevOps工程师 ”之外,我们还看到一些DevOps领导者分享他们关于成为DevOps专家所需的关键技能的想法,我们在此列出。
了解质量保证流程:质量保证有助于计划和控制开发过程,以防止项目期间和任何中断时出现严重问题。DevOps有志者应该知道如何根据场景进行分析,影响,影响的位置。
有能力的通才系统管理员:需要了解软件的方式和行为,以便部署和解决问题,并且了解多种编程语言是一个额外的加分点,它有助于脚本或日常任务的自动化。
熟练的编程:应该知道如何开发大型,健壮的应用程序,如何编写高质量的代码,使用哪些工具,框架和库,如何有效地克服障碍。
了解SDLC:应该完全了解软件开发生命周期(SDLC)的工作原理,不同的模型,不同模型之间的差异,每个模型的优缺点等。
技术专长:应具备建立DevOps友好基础架构所需的意识和技术专长。
软技能:应该需要软技能来推动业务的广泛采用,从技术到管理的各个层面。
最新:应该是技术上所有新事物的最新版本。接触人工智能和机器学习等趋势是一个额外的优势,因为它们可能会在未来几年对DevOps的未来产生巨大影响。
找到具有上述技能的人是非常困难的。
DevOps更多的是关于我们工作的原则,而不是关于工具或工作角色的原则,这是团队的努力。DevOps是关于预先构建流程的,以便像变更控制这样的东西或多或少地自动化,这意味着工程师可以识别问题并以极快的方式推送修复。雇用聪明的人以正确的工作和学习态度总是好的,而不是按照他们以前做过的事情的清单。显然存在DevOps技能组短缺,但公司可以做的是,构建自己的原则和实践形式,并培训内部员工(系统管理员和软件人员)以相应地学习DevOps技能。
自动化(或其他)快速云部署,亚马逊每11秒发布一次新的软件
您的IT和DevOps团队今天的移动速度有多快?无论答案是什么,可能还不够快。这不仅仅是我的观点 – 全球接受调查的CIO中有近90%认为,无论他们现在发布新产品和服务更新的速度如何,他们都需要在不久的将来更快地将其推出。
这引发了全新的担忧:是否已经推出了新的功能和新功能,以至于IT尚未准备好提出有问题的,错误发布的前景?这些CIO中有四分之三的人似乎也这么认为!
当像亚马逊这样的公司每11秒发布一次新的软件更新时,难怪企业会感受到持续的压力,要求他们踩到天然气并将其保留在那里。但要紧跟这种创新速度更快的压力,并以不损害用户体验的方式这样做,需要进行一些内部创新 – 即通过建立持续创新和持续交付的渠道。
持续的管道使IT和DevOps能够更少地关注日常故障排除,更多地关注大图创新。但是,如果不首先投资自动化,你就无法获得这条管道。
自动化性能反馈
为了使企业能够可靠地为其用户群提供持续创新,而不会让客户体验处于风险之中,他们需要实施一种自动化的,以反馈为中心的文化。这需要通过内部和外部来实现。
赞助商注意

Dynatrace是软件智能的领导者,专为企业云而构建。它是唯一的AI辅助,完整堆栈和完全自动化的智能平台,可为动态,网络规模的混合云生态系统提供深入的洞察力(答案,而不是数据)。这就是全球领先品牌(包括财富100强中的72家)信赖Dynatrace以优化企业云运营,更快地发布更好的软件以及提供完美的用户体验的原因。
例如,当开发人员团队正在开发新功能或服务更新时,需要在公司内部和外部对其进行严格测试。这可以通过A / B测试和早期访问beta周期等手段的组合来实现,以征求早期反馈并将其纳入开发周期。通过在开发早期自动建立对新功能的反馈,您可以将可能不会出现的潜在问题扼杀到过程的后期 – 或者因为反馈迟到而导致整体交付延迟(让您落后一步)您的竞争对手的速度有多快?或者因为这些问题根本没有被发现,您的团队最终会推出一个错误的发布版本。通过在整个技术堆栈中自动执行性能和依赖性分析,
构建一个可靠,一致和自动化的基于事实的反馈循环过程,在发布之前彻底测试新的创新,然后利用额外的反馈,以便将来证明更多的版本,有助于创建一个自给自足的持续创新和交付给您的最终用户。
通过信任建立反馈循环
但要达到这一点,完全需要其他东西:信任。希望创建持续交付模型的IT和DevOps团队需要首先在其组织中培养信任文化。这可能是企业在尝试建立连续管道时面临的最大挑战。
信任是双向的。IT团队需要知道他们可以依赖于每个可以按时,按时,按照用户期望和竞争对手设定的标准交付的高质量,具有发布价值的构建。与此同时,在这些团队中工作的人员也需要接受事情会失败,特别是在CI / CD模型的初始阶段。而且,我们如何应对这些失败和错误至关重要 – 不是惩罚,而是利用它们作为学习经验,继续进一步改进并确保通过自动补救的交付过程 – 排除这些类型的失败从再次发生。
持续集成和交付不仅仅是软件挑战; 他们也是文化挑战。企业 – 无论是在IT还是整个企业 – 都需要敏锐地意识到他们在创建一个培养开发人员信任的环境中的责任,创建强大的自动化反馈循环,从而产生强大,高质量的功能和创新。
可以保持连续的连续管道
提供更好的软件 – 最终用户所需的各种版本和体验以及竞争对手所提供的 – 需要扩展DevOps以便以云的速度移动。这需要自动化。
自动化的持续交付管道使开发人员能够发布新的创新,通过基于事实的反馈循环周期进行测试,不仅速度更快,更一致,而且可以确保性能问题早期得到解决和修复。转变为连续的管道模型是允许创新以当今企业云环境所需的速度发生的,并确保开发人员能够在流程早期识别和修复潜在问题,以便推出新产品或功能正在满足您和您的用户 – 高标准。
在一天结束时,实际上没有办法解决这个问题:如果企业希望能够满足客户的期望,他们的DevOps团队需要投资建立自动化的连续管道。基于反馈回路基础的连续创新模型,能够自动修复性能问题,并以持续交付的节奏交付,是企业以云速度移动的最佳工具。
