服務多個 Web 服務實例
我們正在 Python 上建構基於 API 的 Web 解決方案,該解決方案將傳遞給個人客戶。每個客戶都將擁有一個單獨的數據集。
目前,為每個客戶部署一個應用程序 + 數據庫的實例並不是問題,但是隨著更多客戶的出現,這將成為一場噩夢:想像一下數百個這樣的實例和管理費用。顯然,解決方案應該變得更加“中心化”。
但是,數據非常敏感,因此我們不能將所有內容都保存在單個數據庫中:洩露的伺服器和數據庫密碼將導致所有數據洩露。這種風險是不可接受的。
開發分佈式 API 伺服器平台時需要考慮哪些正確的技術?哪些智能實踐將使解決方案更加“集中”,以便我們擺脫那麼多實例但仍然保持數據隔離?
簡而言之,AWS + Cloudformation + Ansible(或其他一些 CM 軟體)。
使用 cloudformation,您可以定義您的“具體細節”基礎架構——網路、伺服器、RDS 實例等,並以可靠、可重複的方式部署此基礎架構。將為每個客戶部署一次相同的 cloudformation 清單。
部署基礎架構後,使用配置管理系統來配置伺服器、部署程式碼等。我們正在使用 Ansible,我發現它在競爭中遙遙領先(Puppet、Chef、Saltstach、等)就易用性和靈活性而言。Ansible 是一個 python 項目,作為一個 python 商店,你很容易上手。
此外,考慮看看您是否能夠使用 AWS 的 Elastic Beanstalk 部署您的應用程序。如果這是可能的,它將使您不必處理部署、伺服器升級和擴展。
如果您擔心保持客戶與伺服器實例 1:1 的比例,請考慮使用 Docker 在單個伺服器上部署應用程序的多個實例。這將允許在應用程序實例之間進行合理數量的隔離,同時仍然可以相當容易地以受控方式進行部署。