第四章 可調式多租戶軟體框架使用探討
4.4 效能測試
稱,框架會依指定的Tenant-Entity 名稱,將其 Repository 指定給 repo。
程式碼4.11 AutoImplementRepositoryActionFilter 指定使用 Entity
4.3 View
框架提供將租戶客製化View 存於資料庫內,當 Controller 使用 PrivateView 方法套用 View 時,框架會先優先選擇租戶客製化 View 來套用,若租戶沒有客製化 View 則套用 公用View。
客製化 View 的原始碼與 ASP.NET MVC 通常使用的 View 做法可以說是相同,但 由於Tenant-Entity 執行時期才產生,所以 View 宣告 Entity(Model)型態的部分依然是 使用dynamic。但由於 dynamic 無法使用 lambda,所以無法使用 HtmlHelper 的 DisplayFor()、LabelFor()及 EditorFor()等等這些支援使用 lambda 的方法,所以須改用 Display()、Label()或 Editor()等等這些弱型別的方法。
4.4 效能測試
本研究提出之框架使用了Emit、Reflection 及 Dynamic 等技術,讓使用框架開發的應用 程式可以客製化Entity,帶來了彈性,相對的也會造成效能降低。本節將對本框架使用 的主要技術,造成的效能降低進行測試研究,以了解需要多少效能來換取彈性。
4.4.1 測試環境
本框架模擬實作部分,參考中央研究院的研究成果系統之功能實作,並建立數個租 戶,表示中央研究院內的各研究單位(所/中心)。為測試不同的綱要映射技術,將資訊
‧
所設定為使用Universal Table Layout,另將語言所設定為使用 Private Table Layout,以 下將稱之為MTA 組與 MTA Private 組。另使用單純的 ASP.NET MVC 與 Entity
Framework 建立一個相同功能規格之研究成果系統作為基準,以下將稱之為 Not MTA 組。由於Not MTA 組也是使用 Code-First 來建立資料庫與資料表,故其資料綱要可以 與MTA Private 組視為相同。因此 MTA Private 組與 Not MTA 組的測試數據將不受資料 綱的差異影響,最具比較意義。
以下將使用Visual Studio Enterprise 2015 中的效能測試工具進行測試。基於測試案 例主要針對框架使用的動態技術帶來效能降低進行測試,比對各組織間的相對差距,
為了降低網路、資料庫等其它不相關因素所帶來的影響,測試採用單機,並且資料量 維持一筆,以降低資料庫在量大資料筆數時會帶來的效能差距。在資料量大的狀況 下,不僅不同的資料綱要之間資料筆數與效能的差異為正相關。另外由於多租戶系統 為了可能需要租戶分離到不同主機或合併到同一個主機,最適合使用Guid 作為 Key,
但Guid 有相對的缺點,因為 Guid 並不像識別值增量(IDENTITY)這種循序式資料值一 樣,後來的資料值必定會大於之前的資料值。MS SQL Server 資料表的索引會有一個是 Clustered Index,決定資料表儲存資料的實際順序,這索引一般會設定在 Key。然而這 種Clustered Index 最適合有序的資料值,MS SQL Server 的索引使用 B-Tree 資料結構 作為搜尋,這種資料結構使用Guid 時很容易導致索引破碎(Index Fragment),而降低些 許效能。在使用Guid 的系統中,DBA 通常需要定時執行 Index Rebuild,因為 Guid 新 舊值間屬於無序資料值,降低效能的狀況也隨之不穩定。因此在各組效能差異非常逼 近的實驗中,執行連續新增、連續刪除或大量資料中查詢、修改的測試實驗中,會讓 實驗數據失去意義。
‧
本小節使用Visual Studio Enterprise 2015 中的 Web 效能測試,來了解各組在效能在 CRUD 上的差異:
第一次 第二次 第三次 第四次 第五次 平均
Create 0.032 0.038 0.034 0.038 0.027 0.0338 Delete 0.031 0.028 0.024 0.036 0.029 0.0296 Update 0.019 0.021 0.023 0.031 0.032 0.0252 Select 0.027 0.027 0.036 0.026 0.028 0.0288
表4.1 Not MTA CRUD Web 效能測試報告
第一次 第二次 第三次 第四次 第五次 平均
Create 0.032 0.034 0.033 0.037 0.027 0.0326 Delete 0.037 0.033 0.034 0.031 0.029 0.0328 Update 0.021 0.035 0.024 0.033 0.031 0.0288 Select 0.027 0.022 0.029 0.031 0.033 0.0284
表4.2 MTA Private CRUD Web 效能測試報告
第一次 第二次 第三次 第四次 第五次 平均
Create 0.033 0.034 0.038 0.029 0.031 0.033 Delete 0.028 0.031 0.028 0.031 0.03 0.0296 Update 0.026 0.037 0.028 0.026 0.029 0.0292 Select 0.029 0.032 0.029 0.028 0.026 0.0288
表4.3 MTA Universal CRUD Web 效能測試報告
Create Delete Update Select
Not MTA MTA Private MTA Universal
‧
Not MTA 29,660 30,351 30,051 30,384 31,431 151,877
Private MTA 30,262 29,305 29,646 30,426 30,013 149,652 1 : 0.985
Universe MTA 29,621 29,011 29,031 31,101 30,349 149,113 1 : 0.981
表4.4 壓力測試報告