早在1996年Gartner就前瞻性地提出了面向服務(wù)架構(gòu)的思想(SOA)惹骂,SOA 的走紅在很大程度上歸功于 Web Service 標(biāo)準(zhǔn)的成熟和應(yīng)用的普及苏携。
Service Oriented Ambiguity 中文一般理解為:面向服務(wù)架構(gòu)做瞪,簡稱SOA对粪,這個概念算得上微服務(wù)的鼻祖了。
SOA 的提出是在企業(yè)計算領(lǐng)域装蓬,就是要將緊耦合的系統(tǒng)著拭,劃分為面向業(yè)務(wù)的、粗粒度牍帚、松耦合儡遮、無狀態(tài)的服務(wù)。服務(wù)發(fā)布出來供其他服務(wù)調(diào)用暗赶,一組互相依賴的服務(wù)就構(gòu)成了SOA架構(gòu)下的系統(tǒng)鄙币。
SOA 本質(zhì)上是服務(wù)的集合肃叶。
在分布式通信技術(shù)選型中,就本人曾經(jīng)使用過的基于微軟平臺的分布式通信進(jìn)行概述十嘿,先明確一下分布式框架的三個基本需求:
- 客戶端: Web因惭、Android、IOS绩衷、跨平臺(Java 開發(fā)的系統(tǒng)和.NET 開發(fā)的系統(tǒng)可以通信)
- 服務(wù)端:部署在Windows蹦魔、Linux
- 合約(Contract):傳遞的格式(REST,Json、SOAP咳燕、XML)勿决、通信協(xié)議(HTTP、XML-RPC招盲、TCP)低缩、消息超時設(shè)置、消息包大小
要打造分布式平臺宪肖,各家技術(shù)棧多有不錯的實(shí)踐表制,這里重點(diǎn)說一下微軟技術(shù)棧下,豐富的技術(shù)選型:
- .NET Remoting (15年前技術(shù)控乾,目前已經(jīng)失傳)
- Web Service (ASMX, ASP .NET Web Services么介,15年前技術(shù),維護(hù)項目依然存在)
- WCF (Windows Communication Foundation蜕衡,10年前技術(shù)壤短,維護(hù)項目中比較多)
- Web API (5年前技術(shù)開始火起來,和跨平臺需求密不可分慨仿,最近3年的新需求大部分遷移在這里了)
下面展開來說:
.NET Remoting
是2.0時代的產(chǎn)物, 即2004年的技術(shù)久脯,我還沒有機(jī)會實(shí)戰(zhàn)過。在微軟Roadmap中已被WCF取代(.NET Remoting做得到的事镰吆,理論上WCF都可以實(shí)現(xiàn)) 依據(jù)微軟一份帘撰,WCF在效能上比ASP.NET Web Service快了25%-50%,比.NETRemoting快25%万皿,棄.NET Remoting改用WCF將有性能能上的突破摧找。 詳見報告鏈接。
Web Service
在很早前開發(fā)WebForm ASP.NET中用的比較多牢硅,因此可以將 Web Service 理解為一個基于 HTTP 協(xié)議開發(fā)的上層應(yīng)用程序
Web service 是一個平臺獨(dú)立的蹬耘,低耦合的,自包含的减余、基于可編程的 Web 的應(yīng)用程序综苔,可使用開放的 XML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個子集)標(biāo)準(zhǔn)來描述、發(fā)布、發(fā)現(xiàn)如筛、協(xié)調(diào)和配置這些應(yīng)用程序堡牡,用于開發(fā)分布式的互操作的應(yīng)用程序。 Simple Object Access Protocol杨刨,中文為簡單對象訪問協(xié)議悴侵,簡稱 SOAP。
1拭嫁、它是基于SOAP協(xié)議的可免,數(shù)據(jù)格式是XML (SOAP )
2、只支持HTTP協(xié)議
3做粤、它不是開源的浇借,但可以被任意一個了解XML的人使用
4、它只能部署在IIS上
SOA 不是 Web Service怕品,Web Service 是當(dāng)年最適合實(shí)現(xiàn)SOA的技術(shù)妇垢。
WCF
WCF是取代Web Service及.NET Remoting的接班人,我記得這個是微軟2010年開始力推的技術(shù)肉康。
我第一次是用WCF是2012年闯估,做一個電信級項目,結(jié)合微軟吹水的Silverlight技術(shù)(Silverlight技術(shù)吼和,2013年底該技術(shù)被微軟安樂死了涨薪,again!)
1炫乓、這個也是基于SOAP的刚夺,數(shù)據(jù)格式是XML
2、這個是Web Service(ASMX)的進(jìn)化版末捣,可以支持各種各樣的協(xié)議侠姑,像TCP,HTTP箩做,HTTPS莽红,Named Pipes, MSMQ.
3、WCF的主要問題是邦邦,它配置起來特別的繁瑣0灿酢!圃酵! (此處特別強(qiáng)調(diào)了3個感嘆號 )
4柳畔、它不是開源的馍管,但可以被任意一個了解XML的人使用
5郭赐、它可以部署應(yīng)用程序中或者IIS上或者Windows服務(wù)中
WCF門檻有些太高,僅僅在Windows平臺開發(fā),而且配置文件比較復(fù)雜(WCF 客戶端\WCF 服務(wù)器端,僅Binding捌锭、Behavior的復(fù)雜度就能單獨(dú)寫一篇文章俘陷,踩過不少坑,都是淚观谦。)
眾所周知拉盾,微軟.net技術(shù)未來是.netCore,成熟的.NetCore3 2019年底就可以應(yīng)用于生產(chǎn)系統(tǒng)了, 但多年來微軟一直拒絕將WCF 的服務(wù)器端移植到.NET Core, 導(dǎo)致這個分布式技術(shù)豁状,面臨的極大的技術(shù)瓶頸捉偏,即若干年后幾無可用人才來維護(hù)WCF項目,所以大約3年前開始泻红,我知道周圍朋友公司的新項目大都避而不談WCF了夭禽。
ASP.NET Web API
隨著SOAP 逐漸淡出,RESTful大行其道谊路, Web API火了起來讹躯。
微軟技術(shù)棧的工程實(shí)現(xiàn)是 ASP.NET Web API,而且微軟建議使用 ASP.NET Core Web API 或 gRPC缠劝,它們提供基于跨平臺和跨編程語言的 RPC潮梯,也能使用 gRPC 來編寫代碼,并替換掉一些 WCF 服務(wù)器服務(wù)惨恭。
1秉馏、一個簡單的構(gòu)建HTTP服務(wù)的新框架
2、在.net平臺上Web API 是一個開源的脱羡、理想的沃饶、構(gòu)建REST-ful 服務(wù)的技術(shù)
3、不像WCF REST Service.它可以使用HTTP的全部特點(diǎn)(比如URIs轻黑、request/response頭糊肤,緩存,版本控制氓鄙,多種內(nèi)容格式)
4馆揉、它也支持MVC的特征,像路由抖拦、控制器升酣、action、filter态罪、模型綁定噩茄、控制反轉(zhuǎn)(IOC)或依賴注入(DI),單元測試复颈。這些可以使程序更簡單绩聘、更健壯
5、它可以部署在應(yīng)用程序和IIS上
6、這是一個輕量級的框架凿菩,并且對限制帶寬的設(shè)備机杜,比如智能手機(jī)等支持的很好
7、Response可以被Web API的MediaTypeFormatter轉(zhuǎn)換成Json衅谷、XML 或者任何你想轉(zhuǎn)換的格式椒拗。
WCF 的未來是Web API,而且微軟2014年推出開源.NetCore中就有ASP.Net Core Web API获黔,可見重視程度蚀苛。
分布式技術(shù)這么多,我該選誰玷氏?
都2019年了枉阵,新項目肯定是WebAPI,原因如下:
WebAPI只要有能力發(fā)送HTTP Request跟解析JSON预茄,比較符合微服務(wù)要求, 跨平臺支持兴溜。
創(chuàng)建一個基于HTTP的面向資源的服務(wù)并且可以使用HTTP的全部特征時(比如URIs、request/response頭耻陕,緩存拙徽,版本控制,多種內(nèi)容格式)诗宣,你應(yīng)該選擇WebAPI
讓你的服務(wù)用于瀏覽器膘怕、手機(jī)、iPhone和平板電腦時召庞,你應(yīng)該選擇Web API
雙工消息模式,過SignalR和WebSockets整合(創(chuàng)建一個支持消息岛心、消息隊列、雙工通信的服務(wù)時)