末突發奇想“能不能用nginx給自己的多個Google App Enine (以下簡稱GAE)應用作負載均衡呢?”想想蠻有意思的,動手試試看吧,不過這是我第一次用nginx做負載均衡,也是玩玩而已,我還沒有那麼大訪問量的應用。

關於nginx的介紹,百度百科維基百科官網都能找到,國內的張晏寫很了個很詳細的用nignx搭建Web 服務器的教程-《Nginx + PHP (FastCGI)搭建勝過Apache十倍的Web服務器》,也是得益於這個教程,我才順利的在vps上用nginx搭建好了Web服務器,在此表示感謝。

負載均衡聽起來貌似很複雜,很深奧的技術,等你親自嘗試一番之後會發現:其實在nginx上配置比較簡單。

好了,下面就進入到我們這個系統吧,我們要架構的整個系統的結構如下:

2038340.png  

步驟1.配置nginx代理訪問GAE應用

首先,我們要配置多個代理(你有多少個GAE應用配額就可以設置多少個代理),直接通過IP訪問GAE的應用是行不通的,因為Google的服務器無法辨認是哪個應用,所以我們要使用nginx做代理,每個代理的配置方式如下:

  1. server                                                                                                                   
  2.  {                                                                                                                        
  3.    listen 8081;                                                                                                           
  4.    location / {                                                                                                           
  5.       proxy_pass http: //app1.appspot.com;  
  6.       proxy_set_header Host   "app1.appspot.com";                                                                    
  7.       proxy_set_header X-Real-IP $remote_addr;                                                                         
  8.       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;                                                       
  9.    }                                                                                                                      
  10.  }   
  11. ....  

上面配置中設置主機頭是關鍵配置,它應該設置為你GAE應用的原始域名,一般是xxx.appspot.com。當你重新nginx配置後,你將可以通過8081端口訪問你的GAE應用。

步驟2.配置負載均衡

nginx負載均衡是通過添加upstream{..}配置節來實現的,我配置了一個最簡單的負載均衡方式:

  1. upstream backend                                                                                                         
  2.   {                                                                                                                        
  3.     server 127.0.0.1:8081;                                                                                                 
  4.     ...                                                                                                
  5.   }  

可以看到,上面可以配置多個server字段,因為在前面配置了多個代理,它們各自使用的端口不同。關於Server,據我所知有兩種類型:

1.每個Server的ip不同,開始我給每個代理分配了一個域名,然後試圖通過不同域名來區分server,失敗了,這個還有待研究,有了解的朋友請不吝賜教。

2.每個Server的端口號不同,這個就是我們上面採取的方式了。

Server除了配置地址參數外,還有其他很重要的參數,比如設置每個Server的權重,是否為備份server等等,需要知道更詳細的,建議看官方wiki大家也可以嘗試多種配置,做做實驗嘛~~

步驟3.配置應用的總入口

其他配置都準備就緒了,就差一個應用的入口點,也就是訪問這個系統的域名,我的配置如下:

  1. server                                                                                                                   
  2.   {                                                                                                                        
  3.     listen 80;                                                                                                             
  4.     server_name g.ooq.me;                                                                                                  
  5.     location / {                                                                                                           
  6.        proxy_pass http://backend;                                                                                          
  7.        proxy_set_header Host $host;                                                                                      
  8.        proxy_set_header X-Real-IP $remote_addr;                                                                         
  9.        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;                                                       
  10.     }                                                                                                                      
  11.   }  

到這裡所有的配置也就完了,重新加載一下nginx的配置文件,這個系統就啟動了。想看看效果可以點這裡

總結

搭建這個系統有諸多好處:

1.可以免費使用多個GAE跑一個應用。

2.一個很好的學習nginx負載均衡的配置的實驗環境。

3.永遠不用擔心GAE被封掉,只要確保你的vps能訪問。

缺點也是存在的:

1.企業級的應用暫時是不可能的了,就算有也不用這麼麻煩,GAE本就是雲計算應用,Google已經做了負載均衡,也就只能個人玩玩,做個博客什麼的還是很好的選擇。

2.帶寬的問題,我的vps是在美國,ping了一下GAE的服務器只要6-8ms,還算是比較滿意的,如果你的vps是在國內的話,估計速度速度會成問題。

3.數據庫的共享是一個比較複雜的問題,如果每個GAE應用都用單獨的數據庫的話,那就不是一個系統了。迫切期待大家想出好的解決方式。

 

文章標籤
創作者介紹

Martin Chang的部落格

m1016c 發表在 痞客邦 留言(0) 人氣()