Azure中繼的演化版Hybrid Connections完全基于HTTPS和WebSocket,我們因此可以安全地把本地防火墻后面的資源和服務(wù)與云端的服務(wù)或其他任何地方的資產(chǎn)連接起來(lái)。
Hybrid Connections基于WebSocket協(xié)議,提供了一個(gè)安全的、雙向的且跟第三方框架無(wú)關(guān)的二進(jìn)制通信通道,可以很容易地與許多已存的現(xiàn)代RPC框架集成,如Apache Thrift、Apache Avro、Microsoft Bond等。
根據(jù)最新微軟官方文檔所述,Azure中繼對(duì)開(kāi)發(fā)人員來(lái)說(shuō)不僅僅是一個(gè)中轉(zhuǎn)(pass-through)代理,它還提供了很多特性,如“TCP風(fēng)格的節(jié)流(TCP-like throttling)、端點(diǎn)發(fā)現(xiàn)(endpoint discovery)、連接狀態(tài)(connectivity status)和多層端點(diǎn)安全(overlaid endpoint security)”。微軟指出Azure中繼與傳統(tǒng)的基于VPN的解決方案不同,因?yàn)锳zure中繼可以被綁定到單獨(dú)的應(yīng)用端點(diǎn)上,而無(wú)需對(duì)網(wǎng)絡(luò)做任何侵入式的改動(dòng)。
用戶(hù)在使用基于WCF的功能時(shí)對(duì)后端的變化一無(wú)所知。而且,Azure中繼現(xiàn)在同時(shí)支持傳統(tǒng)的WCF中繼和Hybrid Connections。微軟在Azure中繼的產(chǎn)品文檔中指出,Hybrid Connections與WCF中繼不同之處在于,它支持.NET Core、Javascript/Node.js、Java、標(biāo)準(zhǔn)的開(kāi)放協(xié)議以及多種RPC編程模型。協(xié)議本身包含了四個(gè)“監(jiān)聽(tīng)器”交互動(dòng)作——listen、accept、renew和ping,以及一個(gè)“發(fā)送器”交互動(dòng)作——connect。所有的通信都是基于WebSocket,使用443端口。
定價(jià)取決于使用的是WCF中繼還是Hybrid Connections。如果選擇了Hybrid Connections,就按照監(jiān)聽(tīng)器數(shù)量和傳輸?shù)牧髁坑?jì)費(fèi)(每月超過(guò)5GB的部分)。WCF中繼則按照中繼時(shí)間(每次打開(kāi)中繼時(shí)開(kāi)始計(jì)算)和每萬(wàn)條消息進(jìn)行計(jì)費(fèi)。Azure中繼并不是為支持高并發(fā)監(jiān)聽(tīng)器而設(shè)計(jì)的,因此并不一定適用于移動(dòng)設(shè)備廣播。不過(guò),該服務(wù)有個(gè)合理的限額,包括單個(gè)中繼25個(gè)并發(fā)監(jiān)聽(tīng)器(監(jiān)聽(tīng)器間有負(fù)載均衡),每月50億條消息和每月2百萬(wàn)小時(shí)中繼時(shí)長(zhǎng)。
作為本次公開(kāi)預(yù)覽版的一部分,微軟分享了兩個(gè)Hybrid Connections樣例。 .NET樣例使用了部署在Nuget上的一個(gè)預(yù)覽包(Microsoft.Azure.Relay)。Node.js樣例使用了一個(gè)新的npm包(hyco-ws),簡(jiǎn)化了JavaScript開(kāi)發(fā)人員建立連接的操作。
為了更多地了解有關(guān)本次發(fā)布會(huì)的細(xì)節(jié),InfoQ對(duì)Clemens Vasters進(jìn)行了一次簡(jiǎn)要的采訪(fǎng)。
InfoQ:第一版的服務(wù)總線(xiàn)中繼(Service Bus Relay)可以追溯到2010年。為什么消除對(duì)WCF和Windows的依賴(lài)需要花這么長(zhǎng)時(shí)間?最近對(duì)跨平臺(tái)服務(wù)的需求是否很強(qiáng)烈嗎?
Vasters:第一版是從2010年1月開(kāi)始的,但是Azure中繼在那之前已經(jīng)孵化了3年時(shí)間。它最初依賴(lài)WCF是因?yàn)樗莾蓚€(gè)WCF組員在準(zhǔn)備發(fā)布WCF時(shí)無(wú)心插柳的作品。雖然從表面上看API和協(xié)議這些年來(lái)一直相當(dāng)穩(wěn)定,但是自從第一版發(fā)布以來(lái)我們做了很多底層的工作。要讓該服務(wù)與各種客戶(hù)網(wǎng)絡(luò)環(huán)境協(xié)調(diào)工作比外人想象的要難得多。協(xié)議接口太過(guò)穩(wěn)定,以至于我們發(fā)現(xiàn)有一位客戶(hù)仍然在使用我們2010年發(fā)布的1.0初始版本客戶(hù)端。對(duì)中繼跨平臺(tái)的需求多年來(lái)不斷上升,我們一直忙得焦頭爛額,直到現(xiàn)在才有時(shí)間處理它。在這期間,該團(tuán)隊(duì)發(fā)布了隊(duì)列/主題消息代理(Queues/Topics Messaging broker)、事件中心(Event Hub)、通知中心(Notification Hub),并主導(dǎo)了物聯(lián)網(wǎng)中心的啟動(dòng)工作。我們運(yùn)營(yíng)的云資產(chǎn)負(fù)載達(dá)到了每月萬(wàn)億級(jí)別的消息傳輸事務(wù)和PB級(jí)別的數(shù)據(jù)量。我們一直都很忙。
InfoQ:你認(rèn)為Azure中繼理想的使用場(chǎng)景是怎樣的?
Vasters:對(duì)客戶(hù)來(lái)說(shuō),Azure中繼一直是一個(gè)驚艷的產(chǎn)品。它為一組難以單獨(dú)解決的網(wǎng)絡(luò)通信問(wèn)題提供了解決方案。首先,它為可以連接到外部網(wǎng)絡(luò)(或Azure)的應(yīng)用或機(jī)器提供了反向的應(yīng)用層連接(inbound application-layer connectivity)。這意味著你的服務(wù)器可以接收來(lái)自任何地方的連接,包括那些不在管轄范圍內(nèi)的網(wǎng)絡(luò)。第二,它隱藏了該服務(wù)器的位置,這樣它在Internet上是私密的;當(dāng)你關(guān)閉了主機(jī),IP地址和端口無(wú)法再被使用。第三,中繼服務(wù)器提供了穩(wěn)定的網(wǎng)絡(luò)名,無(wú)需使用DNS來(lái)管理端點(diǎn)。第四,它允許采用ARM通過(guò)編程的方式發(fā)現(xiàn)現(xiàn)有的端點(diǎn)和它們的狀態(tài)。第五,它為已連接的服務(wù)器提供自動(dòng)的負(fù)載均衡。最后,它提供了額外的客戶(hù)端授權(quán)邊界,保證所有的通信都是使用TLS保護(hù)的,服務(wù)器不需要判斷證書(shū)。
任何需要通過(guò)socket進(jìn)行端到端連接的場(chǎng)景都是Azure中繼的用武之地,比如數(shù)據(jù)庫(kù)、遠(yuǎn)程桌面、Shell、RPC。如果連接的雙方都在各自的防火墻內(nèi),那么需要用到站點(diǎn)到站點(diǎn)的連接方式。如果僅有一方在防火墻內(nèi),那么要使用云到站點(diǎn)的連接方式。有些商用打印機(jī)通過(guò)中繼進(jìn)行打印,有些自動(dòng)販賣(mài)機(jī)通過(guò)中繼相互連接,有些本地?cái)?shù)據(jù)庫(kù)和CRM系統(tǒng)通過(guò)中繼連接到云端。今天人們通過(guò)它能做到很多事情,我們希望新的版本能從根本上擴(kuò)大人們應(yīng)用它的范圍。
近來(lái),Azure中繼被作為連接容器的工具來(lái)使用,因?yàn)樗峁┝松厦媪信e的那些功能。
InfoQ:隨著時(shí)間的推移,架構(gòu)發(fā)生了什么樣的變化?在保持服務(wù)接口穩(wěn)定的同時(shí),服務(wù)內(nèi)部的結(jié)構(gòu)是否發(fā)生了變化?
Vasters:我們不會(huì)過(guò)多地討論服務(wù)的內(nèi)部細(xì)節(jié),因?yàn)槲覀儼l(fā)現(xiàn)人們?nèi)菀讛嗾氯×x。不過(guò)確實(shí),在最開(kāi)始的3年里,我們對(duì)服務(wù)進(jìn)行了定期的更新和至少兩次大規(guī)模的重寫(xiě)。構(gòu)建超大規(guī)模的云平臺(tái)服務(wù)是一門(mén)藝術(shù),特別是要在性能、可靠性和成本方面達(dá)到均衡更是難上加難。為了讓服務(wù)內(nèi)部的重寫(xiě)對(duì)外部不可見(jiàn),我們需要花費(fèi)額外的精力,有時(shí)甚至是一個(gè)人月,來(lái)保證系統(tǒng)能在保持負(fù)載和維持SLA的情況下順利地從一個(gè)版本升級(jí)到另一個(gè)版本。在升級(jí)過(guò)程中,我們有可能還需要在不同架構(gòu)的機(jī)器間進(jìn)行切換。
Relay Hybrid Connections雖然是一個(gè)全新的組件,但它是基于那些現(xiàn)有的組件創(chuàng)建的,并和WCF中繼部署在一起。所以我們可以這么說(shuō),那些從一開(kāi)始就被廣泛部署的組件就是Hybrid Connections的公共預(yù)覽版。它內(nèi)部完全基于AMQP棧和Service Fabric,并不依賴(lài)WCF。WCF中繼和Hybrid Connections現(xiàn)在依賴(lài)同樣的底層基礎(chǔ)。
InfoQ:使用像Azure中繼這類(lèi)分布式消息解決方案的用戶(hù)該如何保證系統(tǒng)可用性和對(duì)通道的監(jiān)控能力?用戶(hù)在什么情況下應(yīng)該轉(zhuǎn)向使用隊(duì)列/主題這類(lèi)解決方案?
Vasters:基于隊(duì)列/主題的消息系統(tǒng)和Azure中繼之間有很大的差別。Azure中繼主要解決連接點(diǎn)之間的連接和定位問(wèn)題?;陉?duì)列/主題的消息系統(tǒng)旨在解耦消息的發(fā)布者和訂閱者,它不要求參與通信的各方同時(shí)在線(xiàn)。這兩種服務(wù)解決的是不一樣的通信問(wèn)題,并且我們相信中繼領(lǐng)域尚有非常大的探索空間。
針對(duì)監(jiān)控,我們有一個(gè)一直在改進(jìn)的工具集,這個(gè)工具集通過(guò)Azure Portal的方式提供出來(lái)。我們剛剛為中繼、隊(duì)列/主題、事件中心對(duì)該工具集進(jìn)行了顯著的改進(jìn)。所有這些數(shù)據(jù)都可以通過(guò)編程的方式訪(fǎng)問(wèn)。有一些第三方解決方案可以幫助我們對(duì)那些使用了Azure Portal API的服務(wù)總線(xiàn)進(jìn)行監(jiān)控。
InfoQ:讓人感到驚訝的是,這些年來(lái)Azure中繼在行業(yè)中一直獨(dú)占鰲頭。你認(rèn)為為什么會(huì)這樣呢?
Vasters:市面上也有一些相似的解決方案,但是Azure事實(shí)上是唯一一個(gè)提供了上述服務(wù)的云產(chǎn)品。如果把Hybrid Connections看作純粹的WebSocket解決方案,它可以運(yùn)行在任何支持WebSocket的平臺(tái)和設(shè)備上,那么可以說(shuō)它已經(jīng)是同類(lèi)服務(wù)中的佼佼者,因?yàn)樗呀?jīng)被部署到全球范圍的Azure數(shù)據(jù)中心和中繼集群上,并為數(shù)以百萬(wàn)計(jì)的連接提供服務(wù)。
關(guān)于為什么其他大型云服務(wù)平臺(tái)沒(méi)有提供上述功能,我很難給出答案。從技術(shù)方面來(lái)說(shuō),有可能是因?yàn)槲覀兊囊恍└?jìng)爭(zhēng)者在架構(gòu)上太過(guò)依賴(lài)HTTP,以至于很難在他們的基礎(chǔ)設(shè)施上運(yùn)行有狀態(tài)的連接服務(wù)。CloudFoundry直到今年才具備了基于TCP的路由能力。我們發(fā)現(xiàn)在物聯(lián)網(wǎng)和消息系統(tǒng)技術(shù)方面也存在同樣的情況。我們運(yùn)營(yíng)著最龐大的基于AMQP/HTTP多協(xié)議的企業(yè)級(jí)云代理,它的規(guī)模無(wú)出其右。AWS SQS僅僅包含這些特性中的一小部分,而且只支持HTTP,效率要低得多。構(gòu)建大規(guī)模基于高效協(xié)議的消息中間件是一件很困難的事情。
InfoQ:既然它面向廣泛的用戶(hù)開(kāi)放,那么你在它被如何使用方面是否存在一些遐想?你希望看到它與哪些現(xiàn)有產(chǎn)品集成?
Vasters:我們相信,只要我們保持協(xié)議的簡(jiǎn)單性,比如只使用WebSocket五個(gè)基本的操作手勢(shì),就可以在用戶(hù)和社區(qū)中間開(kāi)辟出很多機(jī)會(huì)。當(dāng)然,這種方式也直接影響著定價(jià)模型,而定價(jià)又是影響產(chǎn)品是否被接受的因素。對(duì)WCF中繼來(lái)說(shuō),只有部分用戶(hù)使用了定價(jià)較高的功能,而他們居然還覺(jué)得他們?yōu)榇烁冻龅馁M(fèi)用簡(jiǎn)直不值一提。與此同時(shí),還有一些需要使用大量連接或監(jiān)聽(tīng)器的用戶(hù),他們都是毫不遲疑地直接買(mǎi)下我們的產(chǎn)品。我們計(jì)劃推出一個(gè)專(zhuān)門(mén)的中繼,它的定價(jià)模型跟我們的消息系統(tǒng)高級(jí)版和事件中心類(lèi)似。
至于說(shuō)到它跟現(xiàn)有哪些產(chǎn)品集成,我們認(rèn)為它可以跟任何一款基于Socket和流的產(chǎn)品集成起來(lái)。我們將會(huì)在如何與編程語(yǔ)言運(yùn)行時(shí)和協(xié)議棧集成方面做一些工作??梢耘c我們的產(chǎn)品集成的軟件真的是太多了,比如數(shù)據(jù)庫(kù)、OpenSSH、遠(yuǎn)程桌面、RPC框架,傳感數(shù)據(jù)流。通過(guò)與這項(xiàng)消除網(wǎng)絡(luò)邊界的技術(shù)集成,這些框架或產(chǎn)品將從中獲得極大好處。
之前我們已經(jīng)說(shuō)過(guò),對(duì)于躲在那些復(fù)雜網(wǎng)絡(luò)背后的容器組件來(lái)說(shuō),Azure中繼是一劑解除痛苦的良藥。我們的產(chǎn)品在這塊有很大潛力。