天天看點

Java程式員也應該知道的系統知識系列之全局體系

作者:林昊

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代碼本身是不夠的。