大家好。我希望你一切安好,平平安安。我是Salesforce的Navin。我的同事Chekri和我在这里讨论JFrog Artifactory以及它是如何在Salesforce中使用的。在Salesforce中,Artifactory不仅仅是一个二进制存储库,支持我们大规模的CA系统和开发人员——我们还使用Artifactory的复制作为主要的分发机制,将工件在全球范围内传输到我们所有的生产数据中心,但在讨论细节之前,让我先谈谈Salesforce是什么。
Salesforce是当今市场上排名第一的CRM平台。Salesforce 20年前在旧金山的一间小公寓里成立,在过去的20年里,Salesforce已经发展壮大,在28个不同的国家拥有67个办事处。Salesforce建立在三个核心差异化的基础上。第一,基于云的多租户解决方案。二、订阅式商业模式。第三,关注慈善事业。
Salesforce在过去的20年里做得很好,在我们所属的社区里做得很好。我们的核心价值观推动我们在20财年的收入达到171亿美元。
根据福布斯,我们是世界上最具创新力的公司。我们在《人物》杂志最关心的50家公司中排名第一。我们也在《巴伦周刊》最可持续发展公司的名单上。我们在慈善、文化和创新方面一直处于领先地位。我们的111模式是为我们服务的社区贡献1%的时间,1%的股权和1%的产品,20多年来,这转化为寻找和志愿工作时间3.1亿美元的赠款,超过45,000个非营利机构和教育机构免费使用我们的产品。现在,让我们看看Salesforce生命中的24小时。
Salesforce为数万亿的B2B和B2C交互提供支持。从金融服务到制造业,从医疗保健到零售,Salesforce改变了企业。这一转变的中心是一支工程师大军,他们正在赋予这一转变以力量。我团队的使命就是为这群工程师提供最好的体验。我的团队所支持的角色是开发人员。
开发人员可以来自产品工程、基础设施工程、数据库工程、质量工程和/或安全工程。对于所有这些人,我们想要的工具可以被认为是一个单一的真相来源,可以管理一个工件的生命周期,也可以使我们能够在多个基材上部署,并提供适应多种推出策略的灵活性。这些是对工具的需求但是什么因素决定了我们选择的工具呢?是Salesforce开发人员构建工件并在全球范围内每天多次部署的增长和规模。开发人员经验对我们来说非常重要。开发人员应该关注核心功能,而不应该担心部署策略或基板。工件的安全性、遵从性和安全传输非常重要。
工件的可用性和全球范围内的一致性对于Salesforce的成功至关重要。因此,考虑到所有这些重要因素和我们开发社区的需求,我们选择了JFrog的Artifactory作为我们的解决方案。Artifactory的性能在我们的研发环境中至关重要,Artifactory的复制能力对我们在全球的部署至关重要。
Chekri将详细介绍我们的运营规模,以及如何在Salesforce中设置Artifactory的系统架构概述。好了,现在,让我们详细了解在选择像JFrog Artifactory这样的工具来支持我们的用例时对我们重要的因素。在Salesforce中,我们有200多个Artifactory部署实例,这200个实例支持研发环境、DMZ环境和生产环境。生产实例分布在全球各地,支持Salesforce在全球所有数据中心的部署。在所有这200个实例中,我们每天看到9200万个请求。
这些请求是看跌请求,然后是获取请求,它们是帮助请求,所有类型的请求包括这9200万。我们支持Docker,我们支持RPM和通用回购类型。每天,我们通过Artifactory的复制在全球传输4TB数据。Salesforce每天要进行20,000个构建,以支持工程生态系统。在这20,000个工件中,每天大约有150个工件在生产中得到推广和使用。当工件在全球运输时,复制是非常关键的。终端用户的体验无论他是在北美还是在亚太地区都应该是一致的。因此,如果复制不起作用,或者有基于位置的延迟,这不是一个适合我们的解决方案。这就是Salesforce目前的运营规模。另一个重要的事情是安全。 According to our security, R&D environments and production environments should be isolated. They cannot communicate with each other.
研发环境只能发起与任何其他环境的一次通信——这是受控的。另一方面,生产环境也是隔离的,只能以一种方式进行通信,启动应该是从生产环境到另一个不同的环境。所以现在,研发环境和生产环境应该发起呼叫,但它们不能相互交谈。这就是为什么我们有一个DMZ环境,我将在下一张幻灯片中讲到。但是,安全的另一个方面是我们为政府客户提供的支持。政府的环境,在物理上和逻辑上都应该是孤立的。现在,我们有了这个生成工件的研发数据中心,但需要进入政府环境。将工件推到政府环境中只是对Artifactory的一次彻底复制。这就是安全性的主要目标和要求。现在我们有多种推出策略。 Apart from the roll-out strategy, there’s one thing that we are very distributed across the globe and across different substrates. So we have bare metal first party data centers, and we have public cloud solutions as well. So our roll-out strategy should accommodate whether it’s a bare metal first party data center, or it’s a public cloud data center.
这是一个要求。第二个需求是金丝雀部署。金丝雀部署非常有趣,它只适用于我们以代码形式进行的基础设施更改。因此,我们的基础设施构件将被部署到一个金丝雀环境中,并在一到两周内进行大的测试,然后再将更改扩展到所有其他生产数据中心。
因此,这些数据中心应该是隔离的,不应该影响我们的客户,但应该服务于类似的流量。另一个方面是交错发布。因此,Salesforce并不想在所有数据中心进行大范围的测试。他们想尝试特定数据中心的特定功能或特定产品。所以,数据中心可以在亚太地区,可以在北美,也可以在亚太地区和北美。因此,我们应该有一种机制,能够将工件仅推出到产品团队所需的数据中心。
因此,Artifactory提供的回购级复制支持这一点,这有助于我们实现交错发布。另一方面是基于地理位置的发行。这对我们来说很重要,因为我们不想在发布的时候影响到客户,这是一个重要的时刻。所以我们想在非高峰时段发布。基于地理位置,比如在亚太地区,我们在亚洲的非高峰时段进行,在北美,我们在北美的非高峰时段进行。所以这是关于推出策略,接下来是开发者体验。对我们来说,确保我们的开发人员专注于核心功能,而不是被所有的推出策略、部署基板等等所困扰是非常重要的。因此,我们希望通过不担心这些事情来为我们的开发人员提供最好的体验。所以我们也有不同的客户群。所以我们需要支持不同类型的包。 And we were looking for a tool that can do that and Artifactory was one of the tools that we really liked the extensive support for different packet types.
在Salesforce,在过去的6-7年里,微服务有了增长。它呈指数级增长,每个人都开始转向微服务,我们有一个庞然大物,但新的功能是作为微服务构建的,所以每天20,000个部署或构建都来自这些微服务。正如我提到的,每天有150个促销活动。因此,我们如何持续整合,如何持续交付,对我们来说是一个重要的方面或因素。
这些因素帮助我们决定什么是适合我们的工具。我们选择了JFrog的Artifactory,主要是因为它不仅是一个二进制存储库,而且是一个工具,可以帮助我们实现我们的推出策略,我们的安全需求,我们的规模,以及可以帮助我们在全球范围内分布我们的工件的复制。下一张幻灯片基本上是关于我们如何设置Artifactory的功能概述,这样它就可以解决我们必须坚持的所有需求。在屏幕的左边,你可以看到第一个是工程师。
工程师对Artifactory进行读写。他们构建生成工件的代码,但他们也读取由其他平台团队构建的工件。所以一个典型的用例是工程师在工件之上构建,他检入他的代码,CI系统拾取该代码并使用代码中的新更改构建一个新的工件,该工件将被推回Artifactory。在研发环境中,每天大约有20,000个构建被读写到Artifactory中。因此在构件构建之后,团队决定何时发布该构件。因此,如果一个团队决定发布一个工件,那么我们将重新生成一个由我们的安全系统签名的工件。
我们的安全系统不仅验证,而且还验证一些必须进行的基本验证。因此,一旦我们的安全流程完成了验证和验证,工件就被签名了。现在,工件已经准备好了。团队可能还没有准备好将工件投入生产,他们希望在特定的时间对其进行计时,他们可能有特定的推出策略,他们可能只想在金丝雀中部署,并查看特定的更改是否如预期的那样运行。这就是晋升过程的关键所在。因此,产品基础架构团队一旦生成并签署了一个工件,就会创建一个触发推广过程的PR。
现在,在推广过程中,它提醒我们,什么是团队所选择的推出策略,并且基于该推出策略,工件被移动到Artifactory内的不同回购点。我将在下一张幻灯片中讨论我们与Artifactory一起使用的所有不同类型的回购,但现在让我们假设推广过程是将工件从一个回购中的研发环境移动到另一个回购中。现在,Artifactory中的每个回购都有一组特定的复制属性,我们在Salesforce中大量使用它。
在深入研究复制之前,我想回顾一下,我在上一张幻灯片中谈到的安全问题。正如我提到的,研发环境不应该与生产环境通信,生产环境也不应该与研发环境通信。类似地,研发环境只能发起对话,生产环境也只能发起对话。因此,我们需要一种不同类型的复制来支持这个用例。因此,同时监听研发和生产的环境就是我们的DMZ环境。因此,研发环境采用per repo复制,机制为push复制。
它将工件推入DMZ Arftifactory实例。一旦工件进入DMZ环境,它将驻留在生产数据中心调用的调用中。生产如何调用调用?目前,我们有一种机制用于基于时间的设置的复制。因此,每个生产数据中心都会周期性地从DMZ中的Artifactory提取工件。因此,正如我所提到的,研发环境中的回购级复制设置有助于执行转出策略,而推送复制有助于将工件从研发转移到DMZ。生产数据中心上基于Chron的复制允许我们定期从DMZ提取工件,一旦工件移动到生产数据中心,就会有一个进程触发所有应用服务器,与Artifactory对话,获取工件并进行部署。因此,这就是整个端到端流程,工件如何在R&D中生成、如何移动到DMZ以及如何移动到生产中。
因此,Salesforce内部的部署有很多逻辑和策略,有很多团队很多工程团队,需要不同的灵活性和不同的推出策略。因此,Artifactory的拉式复制、推式复制、基于事件的复制、基于时间的复制在我们的基础设施中被大量使用。所以,Artifactory帮助我们的规模是惊人的,我们真的很感激我们所得到的所有支持,以及Artifactory在这个产品上所做的不断升级和功能增强,以帮助和扩展到Salesforce这样的客户。下一张幻灯片是我们在全球范围内部署的系统架构。在右边,你可以看到生产数据中心。
所以我们有多种不同的生产数据中心,我们有多种基材,例如,在我们的第一个数据中心中有裸露的金属实例。我们在一些地理位置有公共云存在,我们需要尊重该位置所要求的安全合规。我们处于HA和非HA模式,原因是政府数据中心的要求,我们应该在应用程序级别上也有一个隔离,所以这将限制我们拥有一个公共数据库和公共存储。与此同时,我们也有老化的数据中心,不支持某些基础设施。所以我们也需要为这些数据中心提供服务。
因此,当我们寻找能够解决许多问题的工具时,支持HA和非HA模式也是Artifactory的一个关键方面。所以现在在左手边,在左手上方有不同的CI系统。它是微服务,它是整体,基础设施CI,数据库CI,包过程和推广过程。因此,所有这些都与artfactory的PtoP实例和Dev实例交互。因此,PtoP实例实际上是生产的路径,因此生成并签名的任何工件都将进入PtoP Artifactory。
由于PtoP Artifactory是以HA模式建立的,具有公共数据库和共享存储。因此,开发人员与R&D Dev实例交互,这个主要用例将是一个阅读。所以我们也有一个远程存储库,我们使用远程存储库,我们使用本地存储库,我们使用虚拟存储库。我们使用远程存储库的原因是,任何为发布而构建的工件都应该对我们的开发人员用例可用。
因此,打包过程希望将工件推到P2P,该工件将通过研发开发环境提供给我们的工程师。然后我们使用本地存储库,基本上是我们可以写入的任何存储库,主要是在P2P中,大部分是本地存储库。我们有虚拟仓库。我们使用虚拟存储库的原因基本上是为了能够在不知道完整回收的实际路径的情况下查询工件。
所以我们把东西组合在一起,这样消费者就不必担心在哪里找到特定的工件。现在,研发环境(P2P)拥有一个可以部署的工件,并根据转出策略将其推到DMZ环境。现在,该推送是基于事件的,因此一旦工件被签名和提升,它就会被推送。在生产端,我们使用拉复制,拉复制是基于时间的,它周期性地触发并从Artifactory中提取工件。现在,本地应用程序服务器、基础设施服务器或数据库服务器从生产数据中心的本地Artifactory提取工件,并根据升级过程(同样是生产数据中心)定期部署工件。
所以我们在Artifactory的经验以及我们需要为Salesforce的需求规模提供的支持是巨大的。因此,Artifactory一直是改善我们开发人员体验的关键,也支持我们在全球不同基底上的推出战略,从安全角度来看,Artifactory的复制确实支持我们的需求。
因此,总的来说,Artifactory是Salesforce内部非常适合的工具,它是我们向生产数据中心交付工件的主要工具之一。所以,总的来说,我们从JFrog那里得到的支持是令人惊讶的,我们期待着更多的功能,我们也在推动路线图上的一些边界。我们希望我们的伙伴关系将继续下去,我们将共同取得成功。感谢大家听我的演讲,我希望本文中的一些输入能够在您在自己的环境中部署Artifactory时引发一些新的想法。非常感谢,如果你们有任何问题,我们都愿意回答。