基于消息的應用程序并不是一個新概念,但一直以來,從頭編寫這樣的應用程序都相當困難。我將在一系列三篇文章中討論一個建立異步消息應用程序的新平臺,本文為第一篇,我將在其中說明基于消息的應用程序這一概念,以及一個建立包含在sql server 2005中的這些應用程序的新型基礎程序。
基于消息的應用程序介紹
處理消息的應用程序是大體上會成功的應用程序。實際上,大多數(shù)大型應用程序都應用了某種類型的消息處理。這種處理可能相當簡單,例如,把一個文件放在網(wǎng)絡共享中,以便另一個應用程序能夠處理這個文件;之后,你就可以檢查網(wǎng)絡共享,看文件是否得到處理。
雖然這不是一個非常復雜的消息應用程序,但其背后的概念是一樣的:提交一條消息,應用程序執(zhí)行其工作。然后,再檢查看是否收到確認消息已得到處理的信息。這種處理方法擁有許多獨特的優(yōu)點:
延期處理:有時候,要想在給定的時間處理某個任務的所有工作是不切實際的。許多時候,當你的應用程序能夠處理的任務達到一個瓶頸點時,最好把剩下的任務交給另一個應用程序進行處理。
在線購買機票就屬于這種情況。當你到一個網(wǎng)站購買機票時,你輸入諸如出發(fā)城市、到達城市、旅行日期和隨行乘客人數(shù)之類的信息。在你輸入信用卡信息后,你將收到一封確認電子郵件。在后臺,某種類型的消息已被提交給另一個執(zhí)行請求的服務進行處理。如果不能滿足訂票請求,你收到的電子郵件就會說明這一點。
這種處理的好處在于它減輕了后臺數(shù)據(jù)庫系統(tǒng)堵塞的壓力。而且,如果要求顧客長時間等待網(wǎng)站的確認,大多數(shù)顧客都會感到非常不滿。另外,如果所有處理任務都在一個單功能事務中完成,就可能發(fā)生嚴重的死鎖情況,從而負面影響在網(wǎng)站上購買機票的顧客的購買體驗。
分布式處理:一般來說,最好盡可能迅速地處理一項任務。但是,有時候很難確定有多少待處理的任務、完成這些任務需要耗用多少資源。下面我們看一個這種處理的實例。
超市中有許多結賬通道。通道的數(shù)量一般根據(jù)超市的資源來配備。有時,例如星期六下午,結賬通道變得十分擁擠,顧客必須排隊等候。只要超市的資源沒有耗盡,超市就能分配更多收銀員給顧客結賬。這樣既可加快結賬速度,又不至于影響超市的總體運作。
同樣的道理,消息應用程序也以相似的方式運作。如果你的應用程序充滿了待處理的請求,通常應該增加另外一條處理隊列來緩解系統(tǒng)的總體處理壓力。
微軟消息隊列
現(xiàn)在你可能已經(jīng)體會到基于消息的應用程序帶來的價值,你也許想知道為什么你沒有經(jīng)常聽說這種應用程序。主要的原因在于,開發(fā)這種應用程序是一個非常困難的任務。如果你計劃編寫自己的基于消息的應用程序,你要用大部分時間來開發(fā)處理消息的基礎架構。
好消息是,你不再需要開發(fā)自己的消息基礎架構。微軟消息隊列(msmq)提供一個開發(fā)這類應用程序的框架。它使得應用程序可以在不同種類的網(wǎng)絡間進行通信,并且需要保證消息傳送(guaranteed message delivery)、路由和可配置安全。msmq應用程序一般在以visual basic、c#或c++編寫的應用程序中開發(fā),不過也可以用其它程序語言編寫。這些應用程序在處理通常需要幾步完成的任務時表現(xiàn)優(yōu)異。這時,一個任務的每個步驟需要邏輯到達任務的下一個步驟,如一個業(yè)務工作流應用程序。
數(shù)據(jù)庫——不再只是用于存儲數(shù)據(jù)
過去20年來,我們對關系數(shù)據(jù)庫系統(tǒng)的依賴程度顯著增加。最初,存儲數(shù)據(jù)并對數(shù)據(jù)進行某種處理,是建立商業(yè)關系數(shù)據(jù)庫系統(tǒng)的主要目的。隨著關系數(shù)據(jù)庫系統(tǒng)的發(fā)展,其功能和復雜性的變化,它的主要用途已由單一數(shù)據(jù)存儲轉變?yōu)楦又髁鞯纳虡I(yè)智能目的、更加復雜的etl處理、數(shù)據(jù)報告、數(shù)據(jù)通知;在sql server 2005中,它甚至已具備編寫在數(shù)據(jù)庫引擎中執(zhí)行的.net clr語言代碼的能力。因此,完全可以肯定地說,數(shù)據(jù)庫引擎已不再僅用于數(shù)據(jù)存儲。
service broker
微軟認為,允許你在數(shù)據(jù)庫內建立基于消息的應用程序,這樣才有意義。service broker是sql server 2005中新添加的基礎程序,主要用于在數(shù)據(jù)庫引擎內建立基于消息的應用程序。這些應用程序在數(shù)據(jù)庫引擎內使用新的tsql結構而開發(fā)。
service broker應用程序以松散連接的應用程序而開發(fā),它具有高度可擴展性,并提供其它消息平臺所不具備的功能,如消息組協(xié)調和鎖定。這些應用程序充分支持事務,并能夠跨越數(shù)據(jù)庫實例和服務器。
后續(xù)討論
在這個系列的下一篇文章中,我將介紹service broker應用程序組件,并探討它們之間如何交互以構成一個service broker應用程序模型。
國內最大的酷站演示中心!新聞熱點
疑難解答
圖片精選