本篇文章将为您介绍什么是单储存库(monorepo),它与单体(Monolith)有何不同,单储存库有什么优势,以及为什么像谷歌这样的公司会选择使用单储存库。

什么是单存储库?

单储存库是一个在90年代末或2000年代初被创造出来的术语,用于描述一种将多个项目存储在一个版本控制存储库中的配置。这些项目可以是毫无关联且截然不同的。

使用单存储库有很多重要的原因:

  • 它创造了一个单一的事实来源;
  • 更容易共享代码;
  • 更容易重构代码。

单储存库与单体的区别

单存储库是一个包含独立项目的庞大代码库,而单体是一个服务或一组服务,专用于单一的数据集(或项目),这个数据集可以有许多子项目。但是,通常情况下,我们认为单体是一个包含相关数据的单一实体。

在这里提到的“单体”(monolith)指的是单体应用程序,它是作为单个服务设计的单层应用程序。您可以在一个单储存库中管理一个单体,但也可以将一个单体分成多份,在多储存库中管理。相反的是,一个单存储库不能存储在单体应用程序中,而是通常将单存储库与微服务一起使用。

本篇文章将专注于讨论单存储库。

单存储库vs.多存储库

单存储库将所有需要的代码放在一个储存库中,而多代码库通常为每个项目创建一个代码库。项目越多,代码库越多。

单储存库通常适用于以下情况:

透明度

在单存储库中,由于许多项目对许多人可见,因此带来了更多的可追溯性和安全特性。

协作

单存储库让协作变得更容易。这是因为每个人都可以访问代码、文件和资产,开发人员可以共享和复用资产。

速度

使用单存储库可以帮助您加速开发。例如,您可以进行最小单位的更改(一个操作即可跨多个项目进行更改)。

多存储库通常适用于以下情况:

如果需要来自多个储存库的数据,多储存库的配置会使问题复杂化。从许多不同的服务器中收集准确数据的协调工作将是非常具有挑战性的。使用多储存库解决方案,为了获得正确的数据,需要连接多个代码库,就像在高峰时段合并到10车道高速公路上一样,确保安全合并的关键是协调。

Git项目

在Git中管理大规模的单存储库是行不通的。随着存储库变得越来越大,Git中的单存储库会变成一个巨大的问题。因此,如果团队使用的是Git,那么最好使用多储存库。

开源或第三方项目

在某些版本控制系统中,如果要使用开源项目或与第三方团队合作,您可能需要使用多储存库。这样您就可以确保第三方开发人员只能访问他们正在处理的项目。

(当然,在Perforce的版本控制系统Helix Core中,您在单存储库/多存储库中都能实现这一点。您甚至可以在单储存库中将权限限制到文件级别。同时,你还可以通过Helix4Git将Git项目集成到流水线中。)

单存储库是一个明智的选择吗?

对于许多公司来说,使用单储存库是个不错的选择。您可以将每个团队的所有源代码(一级其他文件/数字资产)保存在一个存储库中。这样可以更轻松地与所有人共享,并保持着单一的事实来源。

在每次提交后,所有开发人员都能查看并使用新代码,这样的话,当许多开发人员在单一代码行上工作时,就能避免繁琐的合并操作了。

以下是一些您应该考虑使用单存储库的原因:

  • 您需要单一的事实来源;
  • 您希望轻松共享和复用代码;
  • 您希望可见性来管理依赖项(例如,如果您进行更改,还会影响哪些内容?);
  • 您希望进行最小级别的更改(例如,一个操作跨多个项目进行更改);
  • 您希望团队进行更多协作;
  • 您希望进行大规模更改(例如代码重构)。

如果决定使用单储存库,那么您和一些领先公司做出了同样的选择,比如谷歌。

使用单存储库会面临什么挑战?

单储存库的理念是在一个代码库中进行协同工作,对于代码库中的任何数据几乎没有限制。这听起来很好,但随着单储存库变得越来越大,客户可能需要等待更长的时间才能得到响应。虽然将所有数据放在一个地方的想法很诱人,但如果需要等待几分钟甚至几小时才能得到响应,这样的单数据库又有什么用呢?

单储存库对DevOps工具链来说是最具挑战性的。长时间的等待会导致队列拥堵,而任何的错误都会加剧问题。

如果长时间的等待和队列堵塞还不够具有挑战性,那么一个包含了数十年历史记录和文件的单储存库呢?它的巨大规模可能会超过单个磁盘驱动器的容量。您可能会拥有多个TB级别的数据,并且许多工具会创建超大的文件。

因此,长期使用单存储库的话,存储方面可能会很昂贵,特别是如果您需要长时间保留数据。解决此问题的方法之一是创建可分布在许多服务器上的单个数据集。这样,您仍然可以在单一的数据源下控制单一的事实,但数据可以通过复制策略放在离用户更近的地方。

通过以这种方式分布数据,用户不需要获取整个代码库树。Perforce Helix Core的技术能够在单一的事实来源中提供数据的子储存库视图。

示范案例:谷歌为什么使用单存储库?

谷歌是众多使用单存储库的公司中,比较著名的一家。

谷歌很早就决定使用单存储库,并随着公司的发展不断扩大规模。到了2015年,谷歌的单存储库已经包含了:

  • 86TB数据;
  • 2亿行代码;
  • 9万个特殊源文件。

那么,为什么谷歌选择并坚持使用单存储库呢?因为使用单存储库是开放和协作文化的关键。

Salesforce、Facebook和Twitter等公司也以使用单存储库而闻名。

当然,如果您选择了使用单存储库,就需要使用支持单存储库的版本控制软件,例如Perforce Helix Core。

使用Perforce Helix Core作为单存储库的版本控制

使用Perforce Helix Core作为单存储库的版本控制系统有许多优势,以下是四个主要的优势:

强大的性能

Perforce Helix Core是一个强大的版本控制系统,特别适合大规模高性能的需求。

使用Perforce Helix Core作为单存储库的版本控制时,它可以处理:

  • 从10个用户到1000个用户,都不在话下(甚至是身处不同地理位置的团队);
  • 无限数量的文件;
  • PB级别的数据。

精细的控制

Perforce Helix Core提供对大型数据集的细粒度控制,包括用户,项目,文件,地理位置,网络和实用程序(服务)等多个方面。通过在DevOps工具链中部署Perforce Helix Core的边缘(edge)服务器、Helix Core代理、Helix Core代理服务器和工具集成,用户可以在分支级别对行为进行隔离,并获得对共享责任的可见性。

此外,您可以使用Perforce Streams在分支级别上隔离用户行为,但您依旧可以了解到跨分支开发时的每个人该分担哪些责任。

高度的安全性

Perforce Helix Core是很安全的,并且它还具有可定制的安全性控制。您可以使用多因素认证(MFA)等身份验证措施,并可以在文件级别设置访问控制。

这些安全权限能够帮助您在单储存库上与第三方开发人员合作。

灵活性

Perforce Helix Core具有高度的灵活性, 您可以使用Perforce Streams来定制和自动化团队的工作流程。

这有助于团队在单存储库上更好地协作。

开发人员可以获得快速反馈和更快的构建速度。从而减少处理工具和流程的时间,更多地专注于提供价值。

开始使用Perforce Helix Core

Perforce Helix Core为您的所有项目提供了一个单一的事实来源,并为您的团队提供了强大的功能、精细的控制、高度的安全性和灵活性。

文章来源:https://bit.ly/3GJw2vg

解析单存储库:定义、优势与挑战相关推荐

  1. 代码字体mono_如何构建代码存储库:Multi,Mono或Organic?

    代码字体mono by Chetan Sharma 由Chetan Sharma 如何构建代码存储库:Multi,Mono或Organic? (How to Structure Code Reposi ...

  2. IDEA使用git出现SSH:无法解析主机名XXX:名称或服务未知无法从远程存储库读取错误

    IDEA使用git出现SSH:无法解析主机名XXX:名称或服务未知无法从远程存储库读取错误这个也是大家经常出现的一个错误,今天就分享一下如何进行配置 你在IDEA中进行pull或者push的时候会出现 ...

  3. Day08、BeautifulSoup解析库,MongoDB存储库,requests-html请求库

    一.解析库之bs4 ''' pip3 install beautifulsoup4 # 安装bs4 pip3 install lxml # 下载lxml解析器 ''' html_doc = " ...

  4. 如何确定最初克隆本地Git存储库的URL?

    几天前我从GitHub上撤了一个项目. 我已经发现GitHub上有几个叉子,我忽略了我最初采用的那个. 如何确定我拉出的哪个叉子? #1楼 打印任意命名的远程提取URL: git remote -v ...

  5. 通过委托增强Spring数据存储库

    我最近写了几篇有关Kotlin代表团的文章. 通过这样做,我实现了一种将其应用于Spring Data存储库的有用方法. 这将使Spring Data在提供定制路线的同时继续散布一些魔力. 这篇文章中 ...

  6. Ceph学习——Librbd块存储库与RBD读写流程源码分析

    Librbd是Ceph提供块存储的库,它实现了RBD接口,基于LIbrados实现了对RBD的基本操作.Librbd对于元数据的相关操作是通过cls_rbd实现的.cls_rbd是Cls的一个扩展模块 ...

  7. Spring Data Redis存储库

    8. Redis存储库 使用Redis存储库允许在Redis哈希中无缝地转换和存储域对象,应用自定义映射策略并利用二级索引. Redis存储库至少需要Redis Server 2.8.0版. 8.1. ...

  8. CodeGen准备存储库

    CodeGen准备存储库 CodeGen几乎总是与提供用于生成源文件的元数据的存储库结构一起使用,并且许多令牌需要使用存储库结构. 基本要求是有一个结构定义,并且该结构定义包含一个或多个字段定义.有些 ...

  9. Subversion存储库中“分支”,“标记”和“主干”的含义是什么?

    我已经在Subversion(我猜通用存储库)讨论中看到了很多这样的话. 在过去的几年里,我一直在为我的项目使用SVN,但我从未掌握过这些目录的完整概念. 他们的意思是什么? #1楼 现在这就是软件开 ...

最新文章

  1. 废掉一个程序员最好的方法,让他忙碌着,忙碌到没时间思考
  2. Linux 操作系统原理 — 多处理器架构
  3. scrapy获取a标签的连接_python爬虫——基于scrapy框架爬取网易新闻内容
  4. Mysql多表关联删除操作
  5. 二进制算法——模二运算
  6. SpringBoot微服务项目打包流程
  7. A. One-dimensional Japanese Crossword
  8. 计算机软件工程课程设计感想,软件课程设计心得体会.docx
  9. css——样式化区块——背景
  10. 【UOJ#60】【UR #5】怎样提高智商
  11. 基于Android的驾校预约管理系统
  12. 激光 pm2.5传感器 攀藤科技 stm32 调试通过
  13. nafxcw.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined问题解决
  14. The Black Tux | IT桔子
  15. vlookup匹配值不唯一_十大Vlookup常见错误!
  16. 数据交易相关法规比较研究
  17. C#利用绝对值打印菱形
  18. 【JavaWeb-遇错】继承或者实现Servlet相关时总是报红或者包导不进来
  19. 宋晓丽竟是地产富翁千金 与俊男刘涛地下情多年
  20. 深度学习--大黄蜂预测

热门文章

  1. SEM推广及广告投放数据分析及可视化
  2. 5分钟带你快速了解:SEO到底是什么?
  3. OCX控件的注册卸载,以及判断是否注册
  4. 《实战Java高并发程序设计》.pdf
  5. 学位论文和论文的区别是什么?
  6. Python PEP
  7. pkpm弹性时程分析计算书怎么出_【原创总结】结构菜鸟浅谈为何进行弹性时程分析(附操作详图)...
  8. ubuntu:“NMI watchdog: BUG: soft lockup-CPU#0 stuck for 22s“
  9. AD9361 官方例程详解(一)
  10. [LeetCode] 230. Kth Smallest Element in a BST