java工程積累——saas之multi-tenancy解析

來源:互聯網
上載者:User

標籤:java   saas   

        最近做的項目涉及到比較深入的一部分,就是定義客戶關係,在我們的商討中,我們決定,採用服務商的模式,就是我們是基礎服務商,由客戶組合服務,向客戶提供雲端式端的服務支援!這就自然引出了以下概念:


saas百科:         SaaS是Software-as-a-Service(軟體即服務)的簡稱,隨著互連網技術的發展和應用軟體的成熟, 在21世紀開始興起的一種完全創新的軟體應用模式。它與“on-demand software”(按需軟體),the application service provider(ASP,應用服務提供者),hosted software(託管軟體)所具有相似的含義。它是一種通過Internet提供軟體的模式,廠商將應用軟體統一部署在自己的伺服器上,客戶可以根據自己實際需求,通過互連網向廠商定購所需的應用軟體服務,按定購的服務多少和時間長短向廠商支付費用,並通過互連網獲得廠商提供的服務。使用者不用再購買軟體,而改用向供應商租用基於Web的軟體,來管理企業經營活動,且無需對軟體進行維護,服務提供者會全權管理和維護軟體,軟體廠商在向客戶提供互連網應用的同時,也提供軟體的離線操作和本機資料儲存,讓使用者隨時隨地都可以使用其定購的軟體和服務。對於許多小型企業來說,SaaS是採用先進技術的最好途徑,它消除了企業購買、構建和維護基礎設施和應用程式的需要。


那麼,問題來了,怎麼針對不同的使用者提供一種高效,安全的基礎資料服務呢?本著我們想到的問題,肯定有人遇到過的原則,我們搜尋到了一個解決方案:


多租戶(multi-tenancy)

  意指在其中一個應用程式的運行執行個體同時服務多個用戶端(租戶)體繫結構。這是非常常見的SaaS解決方案。


關於多租戶的實現,大概有三種:“N個租戶N個資料庫”,“N個租戶1個資料庫N個Schema”,“N個租租戶1個資料庫1個Schema”


1.分離資料庫(Separate Databases)

“N個租戶N個資料庫”

每個租戶的資料儲存在一個物理上獨立的資料庫執行個體。JDBC串連會特別指出每個資料庫。一個通用的應用程式的方法是定義一個JDBC串連池,當前登入的使用者關聯的"租客標識符"來選擇JDBC串連.
好處:可以輕鬆地擴充應用程式的資料模型(稍後討論)以滿足住戶的個別需求,而且在失敗時從備份恢複租客的資料是一個相對簡單的過程。
壞處:導致更高的裝置成本,以及維護和備份租客資料方面的成本。
相對較高的硬體,維護成本使它適合於願意額外支付增加的安全性和可定製性的客戶。例如,在銀行或病歷管理等領域的客戶往往有很強的資料隔離的要求,甚至不得不不為每個租客提供具有其自己單獨的資料庫。


2.共用資料庫,彼此獨立的Schema(Shared Database, Separate Schemas)“N個租戶1個資料庫N個Schema”
每個租客有它自己的表,可以理解為為每個租客分表.每個租客在共用資料庫中具有其自己單獨的一組表.當客戶第一次訂閱該服務時,資源撫平子系統為租客建立一組離散的表,並將它與租客的Schema關聯。您可以使用 SQL 建立命令建立一個架構,並授權使用者帳戶來訪問它。應用程式然後可以建立和訪問表內的租戶的架構使用SchemaName.TableName公約:
CREATE TABLE ContosoSchema.Resumes (EmployeeID int identity primary key,Resume nvarchar(MAX));
建立Schema後,它是作為租客帳戶的預設Schema設定:
ALTER USER Contoso WITH DEFAULT_SCHEMA = ContosoSchema
租客帳戶可以訪問其預設架構內的表,只是通過指定TableName,而不是使用SchemaName.TableName.這種方式,一組 SQL 陳述式可以給所有的租客使用來訪問其自己的資料,例如:SELECT * FROM Resumes

優點:

        這樣是容易實現的一種方法,租戶可以與單獨的資料庫方法一樣擴充資料模型。(建立的表但一旦不符合需求,租客可添加,修改表)

        這種方法提供了中等程度的邏輯資料隔離安全,雖然比不上作為一個完全獨立的資料庫,但卻可以在每個資料庫伺服器支援大量的租戶。

缺點:

        資料出現故障時是難以恢複某租客。如果每個租客有其自己的資料庫,則還原單個租戶的資料意味著簡單地從最近的備份還原資料庫。而這個方法則意味著用備份的資料還原整個資料庫,而不管在同一資料庫上的每個租客的資料是否遭到損失。因此,要還原單個客戶的資料,資料庫管理員可能需要將資料庫還原到一個臨時的伺服器,然後將客戶的表匯入到生產伺服器上 — — 一個複雜和可能很耗時的任務。



3.共用資料庫,共用Schema(Shared Database, Shared Schema)“N個租租戶1個資料庫1個Schema”
這個方法就是最簡單的一種了.每個表使用租客的一個標識符.所有租戶都共用一組相同的表,一個租客 標識符ID 將每個租客與它擁有的行相關聯.

優點:

        最低硬體和備份成本,因為它允許每個資料庫伺服器服務更多的租戶。然而,因為多個租戶共用相同的資料庫表,這種方法可能會導致安全問題,你必須努力確保租戶始終不能訪問其他租戶的資料,即使在發生意外。

缺點:

        對於租客還原資料的過程是類似於共用架構方法,要重新插入臨時資料庫單個行到生產資料庫中。如果有非常大量的受影響的表中的行,這可能導致效能明顯降低資料庫服務的所有住戶。共用架構方法能夠用少量的伺服器,服務一大批租戶和潛在客戶,如果他們願意用更低的費用擷取安全性.

每次CRUD都需要使用對應租客 標識符ID.SQL變得複雜.


總結:

        SaaS的概念在很久以前,是我們通過部署N個程式來完成的為多個使用者服務,但是在咱們程式的維護上,增加了太多的成本,本著硬體能解決的問題,軟體都能解決,有了這個概念,實際這不是全新的概念,而是為瞭解決一組問題而提出的解決方案!今天咱們充足了彈藥,在下一篇部落格,咱們一起將它實現吧!

java工程積累——saas之multi-tenancy解析

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.