我们的可扩展多区域SaaS部署解决方案
从一个实例到一个全球网络:分发、推广和部署到SaaS

就像许多其他生产DevOps工程团队一样,我们的JFrog团队每天都会在AWS、Azure和GCP上部署几次新版本,覆盖20多个云区域。这个过程过去需要花费我们很多时间,如果与其他团队一起进行维护,甚至可能会失败。
作为我们2021年持续云改进的一部分,我们决定改变我们用于在自己的SaaS环境中处理云部署的单实例设置,这意味着向最终用户部署任何类型的软件版本的SaaS部署。我们想要将我们的软件从一个主要站点分发到大规模的区域,这将需要大量的自动化,并使用一个完整的、经过测试的、可扩展的基础设施。
我们决定“吃自己的狗粮”,并将我们的单实例JFrog Artifactory升级为多实例JFrog平台还设置了分布边缘。
我们的用例
在过去,我们在生产环境中使用一个JFrog Artifactory实例作为我们的私有Docker和Helm注册表,这给我们带来了很多好处。它允许我们存储、共享和部署我们的二进制工件,从一个单一的事实来源到任何JFrog云区域。
多个生产区域的单点故障
这种单实例方法的最大优点在于它的简单性。但是,它是不可扩展的。对于低需求环境,单实例设置可能是最有效的选择,并且配置相对简单,但是当它使用相同的配置同时服务静态和动态内容时,需求就会增长,效率就会降低。此外,使用一个实例会带来潜在的风险,因为它可能导致仅仅一个故障或错误就会导致整个系统停止工作。
此外,在过去,软件常常以版本的形式交付,这些版本相隔几周或几个月发布。每当发布新版本时,操作团队必须手动更新软件。现在一切都改变了。
解决方案
JFrog平台使我们的软件发布从开发人员代码一直到生产的无缝和安全流程成为可能。
我们的构型是多重云并与HA冗余网络架构。这意味着不存在单点故障,只要至少有一个Artifactory Edge节点可以运行,我们的内部系统就可以继续运行。这将我们的正常运行时间最大化到“五个九”可用性。
JFrog Cloud目前处理数百万从我们的云人工边缘到我们的生产运行时集群的下载。没有任何东西是从互联网或其他JFrog服务器传递的。
针对多个生产区域的多实例方法
我们的日常工作流程:Dev2Cloud生产流程
我们对如何在内部向云产品交付新版本实施了严格的前向控制。这里有两个例子:
- 只有研发交付组通过相关的产品CI作业部署和提升版本到边缘和云登台。
- 只有生产交付组通过CI作业提升或降级版本到云生产。推广一个没有部署到边缘的版本将会在设计上失败。
1.软件分发-研发交付组
今天,我们所有的交付团队都知道如何使用可信的、不可变的发布包将他们的发布提升到Artifactory edge。这包括我们自己的内部官方JFrog平台版本和图表依赖,以及外部第三方依赖。

2.软件交付——产品交付组
JFrog分布使我们能够大规模地加速部署和并发下载,并支持高并发下载和验证消费。
我们开发了一个内部部署服务(请参阅上面解决方案部分中图表中的JFrog内部客户端),它负责端到端云的供应、部署和维护。它从DevCenter获取包含Helm图表和码头工人的图片(本质上是部署我们的工作负载)。
无限扩展-网络加速和弹性
在庞大的基础设施足迹、用户或下载高峰之间快速发布软件更新需要DNS解决方案。我们的团队在确保可扩展的HA解决方案方面投入了大量资金,以提高大规模的网络利用率和弹性。在为我们的DNS解决方案探索了几个不同的选项之后,我们决定使用AWS R53作为延迟路由策略(我们的DNS解决方案)。
对于我们的用例,我们有一组软件发布包(Docker镜像和Helm Charts),供不同地区的客户端通过一个端点(延迟路由策略)从一个可用的Artifactory Cloud edge下载。
基于延迟的记录是最佳选择,因为它允许通过应用相关的运行状况检查,以最佳延迟和更少的往返时间将流量路由到边缘。不可知地使用AWS R53,使我们能够获得使用ALIAS记录的优势,这减少了获得最终答案解析的时间,因为权威服务器遍历DNS层次结构并更快地检索最终答案。
结果
在生产环境中运行了将近一年之后,我们可以看到云部署带来的巨大改进。利用JFrog平台,我们能够提高部署速度、治理和网络利用率,从而跨大规模、不可知的基础设施向任何云服务器发布更新。
创建一个免费的JFrog学院今天就开始记账学习吧!
关闭
我们使用多实例方法的经验是非常积极的,因此,如果您愿意做一些额外的初始配置,我们建议您从一开始就使用多实例。
特别感谢为分布式云解决方案的设计和实现做出贡献的每个人。特别感谢Eran Nissan, Eldad Assis, Matan Katz, Asaf Federman, Ronny Niv。还有AWS的一些人。另外感谢我们的CTO、云生产和DevOps团队的其他成员,感谢他们对JFrog分布式云特性、流程和设计决策的支持和帮助!
我们将继续为JFrog Cloud创建更多高级功能,敬请关注我们团队的更多有趣更新。
