淘寶請了 Sun 的高階工程師來幫忙做 Java 架構。那麼他們是如何做到修改程式語言而不改變網站使用呢——模組化替換,今天寫好了 A 模組,另開一個新域名,將連線指向該模組,同時別的模組不變,等到全部模組完成的時候,原域名放棄。Sun 公司堅持使用 EJB 作為控制層,加上使用 iBatis 作為持久層,一個可擴充套件且高效的 Java EE 應用誕生了。
送走 Sun 的大牛們之後,阿里的資料儲存又遇到了瓶頸,於是忍痛買了一臺 IBM 小型機,也就有了IOE(IBM + Oracle + EMC)這樣的傳說。
2004年底,淘寶註冊使用者400萬,PV 4000萬/day,全網成交額10個億。
2005年 Spring 誕生了,早聞 Spring 框架在 Web 應用不可或缺,而在淘寶網,Spring 也達到了 Rod Johnson 設計它的目的——替代 EJB。
Dubbo 是阿里巴巴內部的 SOA 服務化治理方案的核心框架,每天為2000+ 個服務提供3000000000+ 次訪問量支援,並被廣泛應用於阿里巴巴集團的各成員站點。Dubbo 自2011年開源後,已被許多非阿里系公司使用。
1.2.3 技術發展總結
1、單節點架構
2、叢集架構
3、叢集+分散式架構
1.2 代理概述
1.2.1 正向代理(Forward Proxy)
一般情況下,如果沒有特別說明,代理技術預設說的是正向代理技術。關於正向代理的概念如下:
正向代理(forward)是一個位於客戶端【使用者A】和原始伺服器(origin server)【伺服器B】之間的伺服器【代理伺服器Z】,為了從原始伺服器取得內容,使用者 A 向代理伺服器 Z 傳送一個請求並指定目標(伺服器B),然後代理伺服器 Z 向伺服器 B 轉交請求並將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設定才能使用正向代理。
這就是正向代理的意義所在。而為什麼要用代理伺服器去代替訪問方【使用者A】去訪問伺服器 B 呢?這就要從代理伺服器使用的意義說起。
使用正向代理伺服器作用主要有以下幾點:
訪問本無法訪問的伺服器 B,如圖
我們拋除複雜的網路路由情節來看上圖,假設圖中路由器從左到右命名為 R1、R2。假設最初使用者 A 要訪問伺服器 B 需要經過 R1 和 R2 路由器這樣一個路由節點,如果路由器 R1 或者路由器 R2 發生故障,那麼就無法訪問伺服器 B 了。但是如果使用者 A 讓代理伺服器 Z 去代替自己訪問伺服器 B,由於代理伺服器 Z 沒有在路由器 R1 或 R2 節點中,而是通過其它的路由節點訪問伺服器 B,那麼使用者 A 就可以得到伺服器 B 的資料了。現實中的例子就是 FQ。不過自從 VPN 技術被廣泛應用外,FQ 不但使用了傳統的正向代理技術,有的還使用了VPN 技術。
加速訪問伺服器 B
這種說法目前不像以前那麼流行了,主要是頻寬流量的飛速發展。早期的正向代理中,很多人使用正向代理就是提速。還是如上圖,假設使用者 A 到伺服器 B,經過 R1 路由器和 R2 路由器,而 R1 到 R2 路由器的鏈路是一個低頻寬鏈路。而使用者 A 到代理伺服器 Z,從代理伺服器 Z 到伺服器 B 都是高頻寬鏈路。那麼很顯然就可以加速訪問伺服器 B 了。
Cache 作用
Cache(快取)技術和代理服務技術是緊密聯絡的(不光是正向代理,反向代理也使用了Cache(快取)技術。還如上圖所示,如果在使用者 A 訪問伺服器 B 某資料 D 之前,已經有人通過代理伺服器 Z 訪問過伺服器 B 上得資料 D,那麼代理伺服器 Z 會把資料 D 儲存一段時間,如果有人正好取該資料 D,那麼代理伺服器 Z 不再訪問伺服器 B,而把快取的資料 D 直接發給使用者 A。這一技術在 Cache 中術語就叫 Cache 命中。如果有更多的像使用者 A 的使用者來訪問代理伺服器 Z,那麼這些使用者都可以直接從代理伺服器 Z 中取得資料 D,而不用千里迢迢的去伺服器 B 下載資料了。
客戶端訪問授權
這方面的內容現今使用的還是比較多的,例如一些公司採用 ISA SERVER 做為正向代理伺服器來授權使用者是否有許可權訪問網際網路,如下圖
用防火牆作為閘道器,用來過濾外網對其的訪問。假設使用者 A 和使用者 B 都設定了代理伺服器,使用者 A 允許訪問網際網路,而使用者 B 不允許訪問網際網路(這個在代理伺服器 Z 上做限制)這樣使用者 A 因為授權,可以通過代理伺服器訪問到伺服器 B,而使用者 B 因為沒有被代理伺服器 Z 授權,所以訪問伺服器 B 時,資料包會被直接丟 棄。
隱藏訪問者的行蹤
如下圖,我們可以看出伺服器 B 並不知道訪問自己的實際是使用者 A,因為代理伺服器 Z 代替使用者 A 去直接與伺服器 B 進行互動。如果代理伺服器 Z 被使用者 A 完全控制(或不完全控制),會慣以「肉雞」術語稱呼。
總結一下:正向代理是一個位於客戶端和原始伺服器(origin server)之間的伺服器,為了從原始伺服器取得內容,客戶端向代理髮送一個請求並指定目標(原始伺服器),然後代理向原始伺服器轉交請求並將獲得的內 容返回給客戶端。客戶端必須設定正向代理伺服器,當然前提是要知道正向代理伺服器的 IP 地址,還有代理程式的埠。
使用者 A 始終認為它訪問的是原始伺服器 B 而不是代理伺服器 Z,但實用際上反向代理伺服器接受使用者 A 的應答,從原始資源伺服器 B 中取得使用者 A 的需求資源,然後傳送給使用者 A。由於防火牆的作用,只允許代理伺服器 Z 訪問原始資源伺服器 B。儘管在這個虛擬的環境下,防火牆和反向代理的共同作用保護了原始資源伺服器 B,但使用者 A 並不知情。
負載均衡,如下圖:
當反向代理伺服器不止一個的時候,我們甚至可以把它們做成叢集,當更多的使用者訪問資源伺服器 B 的時候,讓不同的代理伺服器 Z(x)去應答不同的使用者,然後傳送不同使用者需要的資源。
當然反向代理伺服器像正向代理伺服器一樣擁有 Cache 的作用,它可以快取原始資源伺服器 B 的資源,而不是每次都要向原始資源伺服器 B 請求資料,特別是一些靜態的資料,比如圖片和檔案,如果這些反向代理伺服器能夠做到和使用者 X 來自同一個網路,那麼使用者 X 訪問反向代理伺服器 X,就會得到很高質量的速度。這正是 CDN 技術的核心。如下圖:
基本上,網上做正反向代理的程式很多,能做正向代理的軟體大部分也可以做反向代理。開源軟體中最流行的就是 squid,既可以做正向代理,也有很多人用來做反向代理的前端伺服器。另外 MS ISA 也可以用來在 Windows 平臺下做正向代理。反向代理中最主要的實踐就是 Web 服務,近些年來最火的就是 Nginx 了。網上有人說 Nginx 不能做正向代理,其實是不對的。Nginx 也可以做正向代理,不過用的人比較少了。
使用者 A 和使用者 B 並不知道行為管理裝置充當透明代理行為,當使用者 A 或使用者 B 向伺服器 A 或伺服器 B 提交請求的時候,透明代理裝置根據自身策略攔截並修改使用者 A 或 B 的報文,並作為實際的請求方,向伺服器 A 或 B 傳送請求,當接收資訊回傳,透明代理再根據自身的設定把允許的報文發回至使用者 A 或 B,如上圖,如果透明代理設定不允許訪問伺服器 B,那麼使用者 A 或者使用者 B 就不會得到伺服器 B 的資料。
二、在Linux下發布專案
使用的為:CentOS 系統
2.1 Linux系統上安裝JDK
登入 Linux 系統後,先檢測是否安裝了 jdk,執行:java -version,如果有 OpenJDK,將其解除安裝,我們安裝使用 SunJDK。關於兩者相關區別: