ABP 多租戶 對應多數據庫 租戶啓動報錯

 

什麼是多租戶?

         「軟件多租戶是指一個軟件體系結構,其中一個軟件實例在一個服務器上運行,併爲多個租戶提供服務*租戶是一組共享具備軟件實例特定權限的公共訪問權限的用戶。 架構中,軟件應用程序旨在爲每一個租戶提供一個包含其數據*,配置,用戶管理,租戶我的功能和非功能屬性的實例共享*多租戶與多實例架構造成鮮明對比,其中獨立的軟件實例運行 表明不一樣的租戶「(維基百科),簡而言之,多租戶是一種用於建立SaaS(軟件即服務)應用程序的技術。數據庫

數據庫和部署體系結構

有一些不一樣的多租戶數據庫和部署方法:安全

一、多個部署 - 多個數據庫

      實際上這不是多租戶,可是若是咱們爲每一個客戶(租戶)運行一個具備獨立數據庫的應用程序實例,則能夠在一臺服務器上爲多個租戶提供服務。咱們只需確保應用程序的多個實例在相同的服務器環境中不會相互衝突。服務器

對於不是被設計爲多租戶的現有應用來講,這也是可能的。因爲應用程序不知道多租戶,建立這樣的應用程序更容易。然而,這種方法存在設置,使用和維護問題。網絡

二、單一部署 - 多個數據庫

      在這種方法中,咱們在服務器上運行應用程序的單個實例。咱們有一個主(主機)數據庫來存儲租戶元數據(如租戶名和子域)和每一個租戶的單獨數據庫。一旦咱們肯定了當前的租戶(例如,從子域或從用戶登陸表單),那麼咱們能夠切換到該租戶的數據庫來執行操做。在這種方法中,應用程序應該在必定程度上被設計爲多租戶,但大部分應用程序能夠保持獨立。咱們爲每一個租戶建立和維護一個單獨的數據庫,這包括數據庫遷移。若是咱們有許多專用數據庫的客戶,則在應用程序更新期間遷移數據庫模式可能須要很長時間。因爲每一個租戶都有獨立的數據庫,咱們能夠將數據庫與其餘租戶分開備份。若是租戶須要,咱們也能夠將租戶數據庫遷移到更強大的服務器上。架構

三、單一部署 - 單個數據庫

      這是最理想的多租戶體系結構:咱們只將具備單個數據庫的應用程序的單個實例部署到單個服務器上。咱們在每一個表(對於RDBMS)中都有一個TenantId(或相似的)字段,用於隔離租戶的數據。
這種類型的應用程序易於安裝和維護,但難於建立。這是由於咱們必須防止租戶讀取或寫入其餘租戶的數據。咱們能夠爲每一個數據庫讀取(選擇)操做添加一個TenantId過濾器。咱們也能夠在每次寫入時檢查它,看看這個實體是否與當前的租戶有關。這是乏味和容易出錯的。可是,ASP.NET Boilerplate經過使用自動數據過濾來幫助咱們。若是咱們有許多擁有大量數據集的租戶,這種方法可能會有性能問題。咱們可使用表分區或其餘數據庫功能來克服這個問題。

四、單一部署 - 混合數據庫

      咱們可能但願將租戶正常存儲在單個數據庫中,但可能但願爲所需租戶建立單獨的數據庫。例如,咱們能夠將擁有大數據的租戶存儲在本身的數據庫中,但將全部其餘租戶存儲在單個數據庫中。

五、多部署 - 單/多/混合數據庫

     最後,咱們可能但願將咱們的應用程序部署到多個服務器(如Web場)以得到更好的應用程序性能,高可用性和/或可伸縮性。這與數據庫方法無關。
 
 我所採用的是單部署多數據庫的形式,主要是爲了數據隔離,我也好維護。可是在多數據庫的時候總是拋出錯誤 (圖1)。最後發現網上說開啓MSDTC服務。

   圖1 報錯工具

   系統開啓MSDTC 服務後、而後使用租戶登陸、發現仍是有問題!性能

  最後問了搞.NET 朋友,說是配置 DTC 安全配置。大數據

  1.   展開-> "應用程序服務器」 -> 「工具」 ->  「組件服務」->右鍵「本地DTC」
  2.   選擇「本地DTC」的「安全選項卡」,作以下設置:

        

 

      (1)選中「網絡DTC訪問」
           (2)在客戶端管理中選中「容許遠程客戶端」「容許遠程管理」
           (3)在事務管理通信中選「容許入站」「容許出站」「不要求進行驗證」
           (4)保證DTC登錄帳戶爲:NT Authority\NetworkService 
           (5)單擊"肯定"。這樣將會提示您"MS DTC 將會中止並從新啓動。   全部的依賴服務將被中止。請按'是'繼續"。單擊"是"繼續。 
       3.關閉網絡防火牆(或者開放相應的端口135或用services.msc打開服務啓動TCP/IP NetBIOS Helper服務)spa

相關文章
相關標籤/搜索