Redis內存數據庫在Exchange會議室的應用(轉)

本文論述了現有Exchange會議室應用現狀和不足之處,並詳細介紹了Redis內存數據庫在Exchange會議室的應用,並給出了一種高性能的應用架構及採用關鍵技術和關鍵實現過程,最終實現大幅改進系統性能和改善用戶體驗,併爲其餘信息系統的優化提供了有效參考。html

1、Redis內存數據庫簡介數據庫

Key-Value 存儲系統是當下比較流行的話題,尤爲在構建諸如搜索引擎、即時通信、P2P、遊戲服務器、SNS等大型互聯網應用以及提供雲計算服務的時候有着大量的實際應用。編程

Key-Value 存儲系統更加註重對海量數據存取的性能、分佈式、擴展性支持上,並不須要傳統關係數據庫的一些特徵,例如:Schema、事務、完整SQL查詢支持等等。windows

Redis是一個Key-Value存儲系統,也稱內存數據庫。和Memcached相似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)和zset(有序集合)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操做,並且這些操做都是原子性的。在此基礎上,Redis支持各類不一樣方式的排序。與Memcached同樣,爲了保證效率,數據都是緩存在內存中。區別的是Redis會週期性的把更新的數據寫入磁盤或者把修改操做寫入追加的記錄文件,而且在此基礎上實現了master-slave(主從)同步。緩存

2、Redis內存數據庫的應用現狀分析服務器

(一)Redis適用的一些場景架構

一、取最新N個數據的操做;併發

二、排行榜應用,取TOP N操做;框架

三、須要精準設定過時時間的應用;asp.net

四、計數器應用;

五、Uniq操做,獲取某段時間全部數據排重值;

六、實時系統,反垃圾系統;

七、Pub/Sub構建實時消息系統;

八、構建隊列系統;

九、緩存。

(二)Redis在新浪微博的典型應用分析

      目前全球最大的Redis用戶是新浪微博,在新浪有200多臺物理機,400多個端口正在運行着Redis, 有+4G的數據跑在Redis上來爲微博用戶提供服務。

      在新浪微博Redis的部署場景不少,大概分爲以下的2種:

第一種是應用程序直接訪問Redis數據庫

    

圖一 應用程序直接訪問Redis

     第二種是應用程序直接訪問Redis,只有當Redis訪問失敗時才訪問MySQL

    

圖二 應用程序直接訪問Redis失敗時訪問MySQL

(三)Exchange會議室應用現狀分析

     目前公司會議室申請已在Outlook中進行操做,已實現會議室申請自動化的功能(無需人工干預),且已有一年多的累計會議室數據,但在Outlook日曆中會議室查看或查詢存在嚴重缺陷,如沒法查看會議申請人或參與人的部門及申請時間等信息,沒法進行彙總統計和數據導出等,致使沒法進行會議室分析與考覈。因爲Outlook的會議室存儲在Exchange的專用數據庫中,且Exchange的專用數據庫與通用的關係型數據庫如Oracle、Ms SQL Server、MySQL等有很大的不一樣,它沒有通用的驅動程序或API接口,不過微軟提供了基於.Net技術的專用API接口能夠經過編程方式訪問Exchange會議室數據。

     因爲公司已實行windows域管理,且Exchange郵件服務器與域進行了集成和綁定,也就是說會議室申請人的電子郵箱與windows活動目錄的用戶的電子郵箱屬性一一匹配的,且活動目錄的用戶存在組織架構的屬性(如部門、科室、組等信息),這就爲會議室查詢的二次開發集成創造了必要條件。

同時經過專用的API接口進行二次開發查詢在性能方面存在很大瓶頸,特別是跨月查詢的時候,耗時較長(可能會形成系統假死現象),用戶體驗差。

    目前會議室能夠提早7天申請,但對於會議室申請的歷史發生數據不會作任何變動操做,所以對於歷史發生數據能夠定時同步到緩存中,本文采用把會議室歷史發生數據定時同步到Redis中,爲了提升計算性能,同時把Windows活動目錄中的全部在職用戶信息也同步到Redis中,並給出了一個高性能的應用架構,有效的解決了系統性能問題和數據歷史存檔問題(如採用實時事務查詢機制,一旦某會議室刪除,將致使其全部數據丟失,沒法進行查詢),不只大大提升了用戶體驗,並且爲會議室分析與考覈提供了平臺。

3、Redis內存數據庫在Exchange會議室的應用

(一)總體應用架構

 

 

 

 圖三 Redis內存數據庫在Exchange會議室的總體應用架構

  根據以上的會議室應用現狀分析,該架構的核心是把歷史發生的會議室申請數據定時同步到Redis內存數據庫中,對於如今和將來時間的會議室數據(目前能夠提早7天申請數據)則經過專用接口在Exchange會議室數據庫實時查詢,根據用戶選擇查詢時間,系統自動判斷訪問哪一個數據庫或進行數據合併(歷史數據與如今或將來時間的數據),經過減小訪問Exchange會議室數據庫以提升查詢性能,從而大大改善用戶體驗,經過與Windows活動目錄的用戶的集成,爲會議室分析和考覈提供數據支持。

(二)關鍵技術簡介

      一、ServiceStack.Redis驅動

         ServiceStack.Redis是最受歡迎的開源C#驅動之一,用於訪問和讀取Redis,它封裝了大量方法和對象,這樣使二次開發至關容易,如提供了基本KEY/VALUE鍵值對操做、存儲對象、存儲表格對象、使用客戶端連接池模式提高連接速度等。

         本文采用了ServiceStack.Redis進行二次開發,經過二次開發的接口把Exchange的會議室和Windows活動目錄的全部在職用戶數據同步Redis中,同時對於歷史會議室數據提供查詢接口。

      二、Microsoft.Exchange.WebServices類庫

         Microsoft.Exchange.WebServices類庫是微軟官方提供的專門訪問Exchange郵件服務器的API,如能夠根據此類庫編程實現讀取會議室數據、郵件、聯繫人、日程等,能夠根據須要進行定製開發以知足不一樣的應用需求。

   本文主要使用此類庫讀取會議室的數據,並結合SystemComponent.ADHelper類庫讀取會議申請人和參與人的部門信息。

     三、SystemComponent.ADHelper類庫

        SystemComponent.ADHelper類庫是本人爲BPM項目開發的操做windows活動目錄(組織單位、組、用戶)的通用類庫,能夠進行復用,目前在BPM項目中已有普遍應用。

       本文主要使用此類庫根據電子郵箱得到會議申請人和參與人的所屬部門信息。

   四、Quartz.NET做業框架

     Quartz.NET是一個開源的做業調度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#寫成,可用於winform和asp.net應用中。它提供了巨大的靈活性而不犧牲簡單性。可以用它來爲執行一個做業而建立簡單的或複雜的調度。它有不少特徵,如:數據庫支持,集羣,插件,支持cron-like表達式等等。 

   本文主要使用此做業框架進行定製開發同步程序,實現定時同步Exchange會議室數據到Redis中,並在Windows服務中運行(實現自動化做業,無需人工干預)。

(三)關鍵實現過程

      一、定時同步Exchange會議室數據和Windows活動目錄的全部在職用戶到Redis中

         主要經過以上的關鍵技術進行二次開發和整合成Windows服務程序,開發完成的程序文件列表以下圖:

 

 圖四 定時同步Exchange會議室和windows活動目錄用戶程序文件列表

         在Windows中部署後的服務以下圖:

 圖五 定時同步Exchange會議室和windows活動目錄用戶到Redis服務

          該服務的配置文件(定義了數據同步的週期、須要同步的會議室、活動目錄的用戶路徑等信息),以下圖:

圖六 定時同步Exchange會議室和windows活動目錄用戶到Redis服務配置文件

 經過在Redis配置文件設置Redis持久化,即Redis異步把內存中數據寫入到本地Redis數據庫中(dump.rdb),本文配置了天天凌晨4點自動同步一次昨天的Exchange會議室數據到Redis中,以下圖:

 

                    圖七 Redis持久化

   持久化的好處在於即便重啓Redis服務器,內存數據也不會丟失(Redis服務會根據本地Redis數據庫自動加載到內存中),所以大大提升了系統可靠性和可用性,並且可移植性好(只要拷貝dump.rdb文件就能夠移植到其餘Redis服務器中使用)。

  二、定製開發的會議室查詢助手

      經過進行定製開發的會議室查詢助手,從Redis內存數據庫中讀取會議室歷史數據(數據不會發生變動),從Exchange會議室數據庫中讀取提早申請的會議室數據(數據可能隨時都會發生變動),經過兩部分的數據組合,一方面提升了系統性能,另外一方面保證了數據的準確性,該工具主界面以下圖:

   圖八 客戶端Outlook會議室報表查詢助手
   系統能夠根據會議時間段和會議室列表條件進行查詢,同時支持以所見所得的方式導出爲Excel文件,便於二次處理(統計分析、考覈),以下圖:

 圖九 導出後Outlook會議室報表查詢

 

 爲了方便全員共享和查詢,除了提供客戶端查詢工具外(主要面向會議室管理員和績效考覈人員),能夠二次開發在企業門戶中進行展示,以下圖:

                       圖十 企業門戶Outlook會議室報表查詢

(四) 實際應用效果分析

     以惠普Z600工做站電腦進行測試爲例,具體硬件信息以下圖:

    

                 圖十一 惠普Z600工做站電腦硬件信息

Redis內存數據庫與直接讀取Exchange會議室數據的性能對比分析,以下圖:

   

              圖十二 Redis內存數據庫與Exchange會議室數據庫讀取性能分析

      從圖十二能夠看到,讀取Redis內存數據庫均在0.5秒左右,會議時間段的長短對Redis性能影響微小,而對於Exchange會議室數據庫的會議時間段長短影響則巨大,二者性能相差幾十倍到幾百倍不等。採用Redis內存數據庫不管是性能,仍是用戶體驗都很是好,所以採用Redis內存數據庫是一個較好的解決方案。

 4、總結

本文提出了一種基於Redis內存數據庫在Exchange會議室應用的解決方案,並給出了相應的關鍵技術和實現過程,最後對應用效果進行了分析。該解決方案在功能、性能等方面能較好地知足最終用戶和管理的需求,在系統架構上很是靈活,可擴展性和可移植性好,開發組件很是容易進行復用。

對於須要高性能、高併發的應用場景和其餘相關信息系統的優化提供了有效參考,能夠按照本文提出了一種基於Redis內存數據庫的應用架構進行優化和改善。

 

轉載自處:http://www.cnblogs.com/nbpowerboy/p/4322724.html

相關文章
相關標籤/搜索