多地區軟件開發 | 原創,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可以幫助我們重構或編寫更好的代碼,或修復多地區代碼設計問題。無論錯誤有多大,當我們修復它時,它都是一個小錯誤。

不僅是編碼、部署和發布維護,還有擴展性。考慮如何添加一個新國家或地區。這需要多大的努力?如果這是最小的或僅涉及一些配置,那麼我們的設計是很棒的。如果需要幾個月,這也是可以接受的。如果需要幾年,我們還會繼續嗎?

在尹旺的文章《關於Linux,Windows和Mac》中,他提到一位Adobe設計師告訴他,他們花了兩年時間將Photoshop從Windows遷移到macOS。

支援一個新地區是否需要兩年的適應?對於一些項目,可能需要。這是一個關鍵的設計考慮。

世界變得越來越互聯。無論我們最初針對哪個國家或地區,我們都必須考慮其他地區。最好從一開始就做對。對於已建立的國際公司,建議從一開始就為至少兩個國家或地區開發軟體產品。從一開始就保持多地區的思維。如果我們有更多的工程資源,我們可以支援更多的國家或地區。


Back Donate