Web 應用程序部署:為所有客戶或每個客戶自己的一個版本
我有一個關於軟體部署的一般性問題。在工作中,我們設計了一個通過 Web 瀏覽器使用的 CRM。最近有人告訴我,每個特定的客戶都有自己的伺服器(雖然這些伺服器歸我公司所有,但它們不是他們的,也不在他們的辦公室裡)。
這讓我有點困擾。在我看來,當一個人在設計一個 Web 應用程序時,他必須牢記他將能夠為他的所有客戶端維護一個“軟”執行(不是在談論複製或負載平衡),也許不同的數據庫用於每個,但一個應用程序……它特別有助於維護和讓每個人都保持最新的更新檔和升級。我錯了嗎 ??能否通過資源幫助我更好地理解這個問題(我必須缺少正確的關鍵字才能自己找到它們)。我實際上不明白他們為什麼要在“每個人一個集中式 Web 應用程序”和“每個人一個分佈式桌面應用程序”之間經歷“第三種方式”。
謝謝 !
這取決於方法。維護與當今技術相同的數千台伺服器要容易得多(用於作業自動化的工具,例如我們的 docker、puppet、chef、ansible 等 - 數百台)。
為每個客戶配備一台伺服器使您能夠更準確地為每個客戶規劃資源,並讓他們為實際使用的資源付費。它還使您的問題更小,這也有一些優勢。
想像一下,您將在一個數據庫上擁有 1000 個客戶,總共有 2TB 的數據。您的開發人員必須完美地編寫 SQL 查詢才能擁有足夠快的數據庫。對於每個客戶的小型數據庫,這個問題要小得多。
另一個需要考慮的問題可能是安全性。如果您必須在應用程序級別上區分您的客戶,您的開發人員必須非常小心他們選擇的數據。如果每個客戶都有一個數據庫,那麼洩露其他客戶數據的機會就會更小。
另一方面,為所有客戶提供單一實例使您能夠在客戶之間共享資源並節省一些硬體費用。
所以,這個決定應該在項目開始時做出,在列出優點和缺點之後。我還建議創建一些原型,這樣您就知道部署過程、數據庫遷移等對您來說不是問題。
根據我的經驗,如果您可以處理管理多個實例,我個人建議為每個客戶創建一個實例。