ArcGIS for Server 10.1的安裝目錄中,,都會內(nèi)置一個tomcat(Program Files\ArcGIS\Server\framework\runtime\tomcat\),無需單獨的Web Server即可發(fā)布各種GIS服務(wù)(對于熟悉.NET的朋友來說,,更省去單獨安裝和配置IIS的步驟),;AGS應(yīng)用程序的端口號也由之前版本的80(ArcGIS Server for .NET)和8099/8399(ArcGIS Server for Java)統(tǒng)一到了6080上,比如http://localhost:6080/arcgis/rest/services和http://localhost:6080/arcgis/manager等,。但對于內(nèi)置的這個tomcat,,我們并不能進行過多的操作,如果需要部署Web應(yīng)用或通過別的端口來訪問ArcGIS for Server的服務(wù),,這時就需要用到新的組件:Web Adaptor了,。
此外,相對于site內(nèi)的多臺GIS Server機器,Web Adaptor還可以再次(除了Web Server集群外)起到負載均衡的作用,,這在大并發(fā)量的情況下會比較有效,。假設(shè)一個site內(nèi)有n臺GIS Server,它們所能處理的最大并發(fā)請求是1w個,;根據(jù)ArcGIS for Server中p2p的實時通信架構(gòu),,當(dāng)我們將1w個并發(fā)請求發(fā)送到任一GIS Server的tomcat上時,GIS Server之間會自動以輪詢(默認(rèn)設(shè)置)的方式處理這些請求,,GIS Server們完全可以及時響應(yīng),;但1w個Web請求會首先使接收請求的這個tomcat過載,產(chǎn)生瓶頸,。如果有了Web Adaptor,,當(dāng)這1w個請求到達Web Server(集群)時,Adaptor會將這些請求輪詢發(fā)送到每個可用的GIS Server去,,這樣每個tomcat就只需支持1w/n個并發(fā)即可,,可最大限度利用硬件資源。 一個Node就對應(yīng)一個GIS Server機器,,_healthy標(biāo)記該機器的可用狀態(tài),;NodeManager是所有Node的管理類,。Web Adaptor啟動時,會調(diào)用WebAdaptorConfig.GetMachines()方法,,此方法會向http://siteip:port/arcgis/admin/machines發(fā)送get請求,,獲取site內(nèi)所有GIS Server機器的列表,然后利用UpdateNodeList方法保存在NodeManager類中,,并寫入WebAdaptor.config文件,。 發(fā)送到Web Server的GIS請求都會由其中的ProcessRequest方法進行處理,。前面說過Web Adaptor是以輪詢方式轉(zhuǎn)發(fā)請求的,而_currentNodeIndex便記錄了請求轉(zhuǎn)發(fā)目標(biāo)GIS Server的在Nodes列表中的索引: Web Adaptor接收到發(fā)到Web Server的GIS請求后,,首先會讀取初始化時保存的WebAdaptor.config配置文件并查看里面存儲的GIS Server機器列表,,如果讀取失敗或者機器個數(shù)為0,都會響應(yīng)500的錯誤,。如1所示,;接下來會利用try里的TransferRequest方法將請求轉(zhuǎn)發(fā)到具體的GIS Server(的tomcat)上去,如果轉(zhuǎn)發(fā)的這個機器沒有響應(yīng),則會在catch中將此機器利用MarkUnHealthy方法標(biāo)記為不可用,;而不論當(dāng)前節(jié)點是否成功接收請求,,TransferRequest方法中都會將_currentNodeIndex節(jié)點加一,保證下一個請求發(fā)送到下一臺GIS Server上去,,以實現(xiàn)輪詢請求的事實: 最后來看看Web Adaptor是如何根據(jù)配置文件的間隔時間去追詢標(biāo)記為下線機器的狀態(tài),,在機器上線后又將它們加回可用機器列表的: 可以看出,Web Adaptor檢測到?jīng)]有響應(yīng)的機器后,,除了標(biāo)記其為不可用,,也會同時啟動一個定時器,此定時器逝去配置文件中的檢測下線機器狀態(tài)時間間隔(分鐘)后,,會立即將這臺機器重新標(biāo)記為可用,,而不會去檢測它事實上是否可用。判斷機器是否真正可用的過程還是通過前面TransferRequest方法來完成的,,即直接向其轉(zhuǎn)發(fā)請求,,如正常響應(yīng),證明其已經(jīng)在線,;如不能正常響應(yīng),,則再次標(biāo)記其不可用,重新啟動定時器進入下一個輪回… 原文地址:http://blog./?p=1098 |
|