多区域软件开发 | 原创,AI翻译

Home 2025.07.13

对于国际公司来说,通常会有服务于多个地区用户的项目,比如新加坡、香港、英国、美国和中国。

我曾参与过一些服务于多个地区用户的项目。在后端项目中,正确处理这一点并不容易。

对于渣打银行,有SC Mobile India和SC Mobile Hong Kong等应用;对于麦当劳,有麦当劳中国和麦当劳美国等版本;对于星巴克,有星巴克美国和星巴克中国。本质上,他们为不同国家提供了各自的应用。通常,中国用户和国际用户的登录方式不同。除了使用手机,中国用户通常还可以通过微信登录,而国际用户可以通过Facebook、Google或Apple登录。

这些应用可能使用不同的后端服务器,并有一些不同的功能,但它们保持了相同的设计语言。这样做可能是错误的。在最初几年,这看起来简单或可行。但十年后,他们会发现这非常痛苦。维护成本或同步成本、测试成本——有大量的重复工作。

然而,对于Facebook、Google或Apple Pay来说,情况相对简单。有人可能会说它们不是金融应用;它们有需要遵守的合规规则。这并不属实。合规通常意味着数据库服务器、数据库,或者政府部门或审计公司需要检查或审计的某些数据。然而,其他工作是相同的。软件非常灵活。我们应该让代码在同一个仓库中,应该使用数据源配置来托管不同地区的数据,尽可能共享相同的代码、相同的设计、相同的工作流和相同的测试。

Apple Pay就是一个很好的例子。App Store也是一个很好的例子。它们也服务于每个国家。

在大型科技公司中,可能有一些项目使用大陆来划分,比如亚洲和太平洋地区、北美。这些也是如此。

在进行多地区开发时,首先要了解什么是不同的,什么是必须遵守的合规要求,以及如何尽可能减少重复工作。

对于文本转语音,Google Cloud需要训练不同的语言。他们为其提供了不同的模型和不同的语言。对于语言,语言之间的差异在于它们的发音和字符外观。前者意味着在使用Google Cloud进行文本转语音时,我们需要使用不同的模型。对于字符外观,这意味着在进行PDF生成时,我们需要注意字体选择。

在多地区项目中,在Spring Boot项目中,我们可以使用其别名和不同的对象初始化来实现这一点。我们可以智能地使用属性或YAML配置。我们可以将所有基于地区的不同逻辑放入特定的模块或类中。

对于代码托管,不同国家的不同分支看起来一开始很容易,但几年后你就会知道这有多痛苦。你需要为其他地区进行git cherry-pick。你需要在另一个分支中重新测试。每次进行任何小的更改,你都需要将其同步到分支。随着时间推移,如果我们不努力减少代码或逻辑差异,多个地区或国家之间的代码差异会变得足够大,以至于无法修复。

好消息是,现在AI可以帮助我们重构或编写更好的代码,或者修复多地区代码设计问题。无论错误有多大,当我们修复它时,它都是一个小错误。

不仅是编码、部署和发布维护,还有可扩展性。考虑如何添加一个新国家或地区。这需要多大的努力?如果是最小的或仅涉及一些配置,那么我们的设计是优秀的。如果需要几个月,这也是可以接受的。如果需要几年,我们还会继续吗?

在殷望的文章《On Linux,Windows And Mac》中,他提到一位Adobe设计师告诉他,他们花了两年时间将Photoshop从Windows迁移到macOS。

支持一个新地区是否需要两年的适应?对于一些项目,可能需要。这是一个关键的设计考虑。

世界正在变得更加互联。无论我们最初针对哪个国家或地区,我们都必须考虑其他地区。最好从一开始就做好。对于已建立的国际公司,建议从一开始就为至少两个国家或地区开发软件产品。从一开始就保持多地区的思维。如果我们有更多的工程资源,我们可以支持更多的国家或地区。


Back Donate