【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

软件持续交付速度提升 40%!DevOps 制品管理有何魔力?

  • 2023-03-09
    北京
  • 本文字数:4009 字

    阅读完需:约 13 分钟

软件持续交付速度提升 40%!DevOps 制品管理有何魔力?

近年来,混合云、多云正逐步成为企业用云的主流模式。据 IBM 的调查报告显示,仅截至 2021 年,采用混合云、多云战略的企业就已经接近 80%。混合云、多云战略的确能够增加企业资源配置的灵活性,但也给持续交付带来了更大的挑战。在软件发布频率持续增长趋势下,如何将版本快速分发到多个环境中去,成为令不少开发者头疼的问题。


近日,亚马逊云科技联合 JFrog 举行 《DevOps 实践:混合云模式下软件单一可信源的建设方法》为主题的 Tech Talk,JFrog (中国)技术总监王青与大家分享了解决该问题的独特思路。


现有的制品库正在阻碍你的快速发布


IDC 研究报告显示,到 2024 年全球 APP 数量将达到 520M;2025 年后,超过 60% 的企业每天都将进行版本发布,甚至更快。在如此之快的版本构建需求下,现有的统一代码库、统一持续集成再进行不同环境分发的制品管理方式往往存在一定的局限性。


研发团队面临着 Nexus 开源版私服宕机无人维护、开源组件漏洞被引入等问题;测试团队无法清晰地了解版本质量信息,同时测试报告也无法准确进行关联;运维团队在面临宕机问题时候缺乏商业技术支持,缺乏高可用和容灾;在此管理模式下,一旦发生问题,安全团队很难快速发现漏洞、对问题进行定位,从而及时响应。



面对诸多问题,王青提出,建立软件单一可信源对于企业来说是至关重要的。单一可信源是指企业内部单一的,合规地存放所有软件的仓库,包括 war 包,Docker 镜像,zip 包等,以及第三方开源组件或者商业软件的授权版本和软件物料清单 (SBOM)。


为什么要建立软件单一可信源


建立唯一可信源的制品管理流程后,只需要不断将版本从开发流水线的 CI 服务器里建立晋级,一路晋级到生产环境的制品库,再由生产环境的制品库推送到多云环境中去。对于大型企业来说,通常会有多种云的技术栈,多种语言包都需要构建。通过制品库统一构建,把版本统一上传到 DEV 本地仓库做本地的集成测试,当开发者测试没有问题后,版本会晋级到 Test 仓库供测试来测,此后版本会进入性能和稳定性检测的环境,最终进入到生产环境的仓库中。



按照这种制品的晋级流程去建设会大大提高软件交付的效率。JFrog Artifactory 遵循的正是这样一套流程。它是支持 29 种语言包的制品仓库,Maven 包、NPM 包、Docker 镜像、ZIP 文件等多种通用文件都可以进行存储。据王青介绍,JFrog 曾有一个国内大型手机制造商客户,每天单集群数据增长 20TB 左右,共有 10 多个集群。JFrog 和他们一起在研发测试区搭建了本地 Artifactory 集群,支持高并发的上传和下载,通过 5-6 个 Artifactory 节点来作为高可用集群提供服务。


这种方案相比传统的需要搭建一个 Nexus 开源版作为 Docker 镜像,再搭建一个 Nexus 开源版作为 Maven 仓库,Maven 仓库可能还要管 NPM 的技术方案,投入人力成本更低且能够提供更高的可用性。对于有多套环境的大型企业来说,软件单一可信源建设的优势就更加明显了,因为多套环境维护成本会线性增长。


混合云模式下单一可信源的建设方法


软件单一可信源的建设有助于企业降本增效,提升软件制品的构建速度,那么,该如何构建软件单一可信源呢?王青谈到了一种区别于传统开源方案的独特方式。


他说,在公司建设软件仓库的单一可信源时,最基本的是要保证它的高可用性。高可用有两层含义,一是零宕机,二是能够支持高并发的负载。Artifactory 对于生产环境的部署,天然的支持私有云和公有云的一键部署,并且提供实时推送功能。相比较来说,Nexus 开源版是没有推送功能的,因此,也就没办法实现将本地构建的版本推送到多个私有云或者多个公有云上去。


假设公司的制品数量级已经达到百万级甚至是千万级,该如何应对这种大规模的读取和写入呢?JFrog 引入了两个概念,一个是读缓存层,一个是写缓存层。这是区别于开源方案的一个很重要的产品功能设计点。Nexus 开源版是没有缓存这个概念的,拉取的时候会去本地查询文件存在与否,这样的问题是,当服务读取操作系统文件的时候,操作系统文件是要耗时的,如果文件块在物理上存储的力度比较分散,实际查询效率会很低。


JFrog 在 Artifactory 服务器上添加了一个叫 SSD 的缓存层,通过这个缓存层能够快速读取一些热数据返回给用户。这个设计遵循的是 LRU 的算法,会保持 500G 左右的热数据。除了读缓存,JFrog 还引入了写缓存。因为在将文件上传到服务器上的时候,是先上传到服务器的某一个目录,再通过一个进程写到存储里,有了这个设计,只要把文件成功上传到目录即可创建成功,大大减少了客户端返回的请求时间, 而后端只需建立一个异步任务,把文件存储进去,再把存储目录删掉即可。为了减少存储的压力,JFrog 还设计了冗余同步,能够让用户去配置冗余数量,如上传一个文件时用户要冗余两份,Artifactory 就会把文件从 a 冗余到 b 去,通过轮询拿到热数据返回,从而提高效率。



综上所述,高可用性是建立软件单一可信源的基石。尤其是当客户的数据量超过几千万时,如果都保存在存储中,查找的效率就会非常低。在存储方面,JFrog 也进行了优化。GIT 文件存储是按照 checksum 的前两位,以目录的方式去存储每一个文件,所以 GIT 能高效地存储代码仓库里面上百万、上千万的文件,依托的是文件索引的设计。当用户寻找某一个文件的时候,它会先以索引的方式定位到文件在哪个目录,在目录里面再去辨别。相当于建立了树状的结构,因此查询效率会更高。当数据量增大后要提升效率肯定还是需要依赖数据结构,通过每种场景应用不同的数据结构提升效率。


完整的高可用服务能够保证制品库建设单一可信源,可信性该如何保证呢?让制品库变得可信就涉及到安全相关的问题。王青说,尤其在面对海外用户时候,面临的最大挑战不是软件发布效率瓶颈,而是安全问题,特别是部署到公有云上的时候。他很形象地比喻,在整个程序的冰山上,代码就是冰山一角,底层有很大的 API 接口、依赖包,还有底层的基础镜像,下面会存在很多开源组件,其中客户提到最多的就是漏洞爆发之后哪些应用将受到什么样的影响,应该修复到哪个版本?


对于上述问题,王青认为,现在开源软件比较多,但真正用起来会存在很多问题。如恶意依赖注入、注入恶意二进制或者代码实现勒索等。为此,JFrog 的产品中特别增加了漏洞扫描的功能。当发现漏洞时 ,JFrog 是如何快速定位,然后下线这些服务的升级版本的呢?这需要精准定位的能力。


传统的扫描会扫出很多漏洞,缺乏跨语言的依赖,比如无法定位到哪一个 Docker 镜像被 Log4j 污染。JFrog 通过 SCA(software component analysis)来进行漏洞扫描,此外还对某些语言包如 Docker 镜像进行密钥探测,包括上下文分析。扫描出漏洞之后,传统的厂商只会告诉用户有哪几个漏洞,而 JFrog 则会告诉你每个漏洞的评分分别是什么以及该漏洞的影响范围。


单一可信源建设要做的不仅仅是扫描,还有治理,对于扫描出的漏洞进行跟踪并精细化管理。安全部门要做的是定义规则,定义策略。公司内部一般有两个概念,一个是漏洞,一个是违规,漏洞是事实,而违规是公司策略。安全部门要定义哪些级别的版本属于违规,而开发者只需要去修复违规就可以了,不用管所有的漏洞。因此,Artifactory 设计了两个维度的管理,一个是根据团队或者软件版本进行扫描,定位到某一个团队。另一个是按照部门去修复,不同部门的安全策略可能是不一样的,所以可以根据不同部门创建 Project 进行扫描和漏洞修复,从而实现有效的漏洞治理。


以上介绍的是在单一私有云或者公有云环境下的处理方式,如果要把私有云的制品同步到公有云上,JFrog 是如何做的呢?王青说,这就涉及到 JFrog 另一个功能——制品的双向同步。通过双向同步能力,能借助于亚马逊云科技的 PrivateLink 开设私有网络。只要开了 Link 之后,私有云的制品仓库就能直接推到云上的 VPC 上去,自动复制到不同的 Region,实现制品液体般的流动。



除制品的双向同步之外,JFrog 还提供统一认证的功能,使云上云下保持一致。通常来说,云上的用户和云下的用户的账号是不能复用的,比如云上用账号 a 登录,云下就要用账号 b,这样用户就需要维护两套账号,导致用的人越多,账号维护的成本就越高。但是,Artifactory 实现了联合身份认证。只要在集群 a 创建用户,它会自动把用户信息同步到集群的每一个节点,用户在云下怎么登录,在云上按照同样的方式登录即可。这个功能特别适合多云环境进行软件制品的传输,能够极大节省公网带宽,提高发布速度,降低成本。


轻松建立可信发布流程的实践案例


某大型跨国银行,需要进行云迁移,实现应用上云。他们采用的方案是本地的关键数据库加上存储,到云上直接使用云数据库加上 Amazon S3 云存储,应用直接迁移到 Amazon EKS,Amazon EKS 的使用极大的降低了运维成本。在整个数据迁移的过程中,JFrog 有专门的工具把本地的 Artifactory 制品通过一个脚本直接传到云上的 Artifactory,这种持续的传输实现了业务的零中断,并能将构建速度提升了 30-40%。



软件制品从本地推到云端会用到一个 VPC 叫 Internal Gateway。此外,亚马逊云科技在 2022 年 re:Invent 上还最新发布了一款名为 Amazon CodeCatalyst 的 DevOps 端到端工具,包含需求设计、issue 管理、构建等一系列功能,用户可以通过  Amazon CodeCatalyst 进行构建,构建完成后把版本上传到某个 Amazon ECS , 并且能够和 Artifactory 制品库进行集成。



集成方式如上图所示,用户的代码 Commit 后到 GIT 仓库就能触发 Amazon CodeCatalyst 构建,构建时,通过 JFrog 的 CLI 命令行工具连接到 Artifactory 做远程依赖 PublicRepo 的下载,下载时会触发漏洞扫描,扫描完成后进行晋级,分发到多种云,用 IoT 设备进行更新。整个编排过程由 Amazon CodeCatalyst 进行负责的,并能够和 Artifactory 无缝集成,从而实现轻松地规划、开发、写作、构建和交付应用程序。


王青在分享中多次强调,对亚马逊云科技技术和服务感兴趣的开发者可参与亚马逊云科技的培训认证活动,亚马逊云科技的整个培训体系建设非常完善、可进入亚马逊云科技开发者社区

2023-03-09 14:394789
用户头像

发布了 56 篇内容, 共 26.1 次阅读, 收获喜欢 43 次。

关注

评论

发布
暂无评论
发现更多内容

《程序员修炼之道》- 务实的哲学(1)

石云升

程序员 28天写作

Postgreshub中文资源网介绍

PostgreSQLChina

数据库 postgresql 开源 软件 开源社区

连肝7个晚上,总结了计算机网络的知识点!(共66条)

我是哪吒

程序员 面试 浏览器 计算机网络 HTTP

七大步骤、备战60天,4面拿下字节跳动offer:时间规划+知识点+画脑图+做笔记+看书+看视频+刷题刷题

Java 程序员 面试

产品思维和产品意识

ALone

高承实:区块链是一个技术结构组织 而不是技术

CECBC

大数据

Vue.js笔试题解决业务中常见问题

我是哪吒

程序员 面试 Vue 大前端

【面试必备】Swift 面试题及其答案

ios swift

目标岗位差异化对比

Geek_6a8931

从根上理解高性能、高并发(六):通俗易懂,高性能服务器到底是如何实现的

JackJiang

网络编程 高并发 高性能 即时通讯

挑战前端知识点HTTP/ECMAScript

我是哪吒

大前端 HTTP ES6

惊呆了!某东Java大咖的MySQL笔记手册流传出来了,胜过看10本书

Java架构之路

Java 程序员 架构 面试 编程语言

图解 | 原来这就是TCP

程序员 网络协议 架构师

品牌升级后,TBase更名为TDSQL和TDSQL-A,CynosDB更名为TDSQL-C

数据君

测试一下

TJJ

懂点EXCEL就行!教你利用Python做数据筛选(上)

智分析

Python Excel 数据清洗

红河州加速区块链等新技术与实体经济的深度融合

CECBC

数字经济

极客时间产品训练营第二周总结

云随心

产品 总结 产品训练营

第二周-作业-胡赵凯

hisun胡

产品经理 产品经理训练营

十年磨一剑,腾讯云数据库品牌重磅升级, “企业级分布式数据库TDSQL”来了!

数据君

极客时间产品训练营第二周作业

云随心

产品 第二周作业 产品训练营

腾讯云数据库品牌升级,大咖解读数据库三大变化

数据君

阿里P8亲测能实战落地的SpringCloud开发笔记已开源

996小迁

Java 程序员 架构 面试 SpringCloud

产品经理训练营第 0 期 第二次作业

孙行者

第0期 产品经理训练营

搞定万亿级MySQL海量存储的索引与分表设计实战

Java架构师迁哥

常见运维监控系统的技术选型

OpsMind

运维 监控系统

用APICloud开发iOS App Clip(苹果小程序)详细教程

YonBuilder低代码开发平台

小程序云开发 大前端 移动开发 APP开发

深圳程序员自谋生路的2020

鸠摩智首席音效师

开源 程序员 在线教育 创业者 深圳

Flink SQL 在字节跳动的优化与实践

Apache Flink

flink

LeetCode题解:389. 找不同,ASCII码求和,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

应对新冠病毒传播-粤政协委员建议构建公共卫生区块链平台

CECBC

区块链 公共卫生

软件持续交付速度提升 40%!DevOps 制品管理有何魔力?_DevOps & 平台工程_张雅文_InfoQ精选文章