Java程序員也應該知道的係統知識係列之全局體係
Java程序部署到服務器上後,要被外部用戶訪問到,還需要一係列的東西組成,這些東西也是需要了解的。
外部用戶要訪問,通常來說都會給個域名,有域名就意味著需要DNS,一般來說域名注冊商都會提供域名解析服務,當然,也有外部的一些域名解析提供商,例如著名的dnspod。
域名需要解析為一個公網的ip,互聯網公司會借助這個機會來根據用戶訪問的ip來解析為一個更靠近用戶的公網ip(這個通常需要采用商用的GSLB設備來實現),從而提升用戶的訪問速度,也就是很多人都聽說過的CDN,不過這主要用於靜態資源,例如圖片、js、css文件等,這一層的技術難點是如何選擇一個對用戶而言訪問速度最快的節點(例如最近距離的一個掛了,最近的節點負載高等),在中國的網絡環境下就更複雜了。
對於動態類的資源的訪問,通常就會訪問到某個或某幾個機房,這些通常就是在DNS上綁定多個公網ip,而訪問公網ip要能最後落到實際的服務器上,通常會需要經過LB(load balance)設備,這個可以是硬件的,也可以是軟件的,軟件的目前來說實現和維護的成本還是比較高的,硬件的話則是本身價格比較昂貴,所以可以根據公司發展的階段來選擇,LB設備上的每個VIP下可以掛載一堆的服務器,由LB設備來負責選址以及failover的處理。
經過上麵的過程,用戶的請求才能落到實際的服務器上,而對於Java應用來說,各種應用服務器例如jboss、tomcat等直接暴露對外的話,支撐連接的能力會不夠(主要原因是這些應用服務器之前都是bio的模式),另外也是這些應用服務器在實現的時候對於諸如慢連接等的防攻擊能力很弱,所以通常來說在應用服務器前麵還會搭一層nginx/apache等,所以通常這個時候會先落到nginx/apache上,然後由nginx/apache再轉發到相應的服務器。
經過上麵的階段,用戶的請求才終於進入到了Java程序中處理了。
從上麵整個過程可以看到,要確定Java應用能夠支撐的量,需要全盤了解,DNS部分的解析能力、LB設備的支撐能力、CDN的流量、Nginx/Apache的支撐能力,同樣,穩定性也需要全盤了解。
整個Java程序員也應該知道的係統知識係列到此就結束了,講的並不深入,感興趣的同學可以根據涉及的點進一步的去了解更深入的內容,更多的是希望大家能通過這個係列的文章來知道對於一個生產環境中運行的Java程序,要做好穩定性保障、性能優化等,僅僅是知道Java代碼本身是不夠的。
最後更新:2017-04-03 07:57:08