2014年10月29日 星期三

Google App Engine Hello World!教學 (以python flask及ubuntu為例)

本文說明如何利用Google app engine提供的工具,在local進行Google app engine程式之開發。期望在讀完本文之後能學會開發第一隻Hello world。

1. 下載google app cloud sdk

curl https://sdk.cloud.google.com/ | bash

2. 下載google app engine sdk
https://storage.googleapis.com/appengine-sdks/featured/google_appengine_1.9.15.zip

解開它
unzip google_appengine_1.9.15.zip 
vi ~/.bashrc
在裡頭加入此行
export PATH=$PATH:$HOME/google_appengine/

其中$HOME/google_appengine/ 是google_appengine解開的位置,此例解在home下。

3. 重啟你的Terminal
4. 預期會多出一個可執行的python檔在PATH裡頭dev_appserver.py,如果沒有表示sdk沒裝好。

5. 下載Google app engine Hello World (flask)範例程式並解開它,預期會解出名為appengine-try-python-flask的資料夾


6. 執行

dev_appserver.py appengine-try-python-flask
7. 用browser打開http://localhost:8080/試試是否成功


丟出回應的程式碼主要在appengine-try-python-flask/main.py,熟稔flask或python的人應該就能開始開發了。

參考網址:

2012年11月11日 星期日

深入淺出Gluster Geo-replication

Gluster Geo-replication是什麼?

Gluster Geo-replication(下稱geo-replication)是一種異地備份技術,它主要應用在於把Cluster中的一個volume,近乎即時地(near real-time)透過wan備份到遠端。本文主旨不在如何使用geo-replication,而是深入探討它內部之運作方式,若有未儘或錯誤之處再請各位讀者隨時指正。

設定geo-replication時,須指定一個master volume及一個slave volume,slave也可以是路徑不一定得是gluster volume。master代表的是將被備份的資料來源,而slave代表的則是備份的目的地。

Gluster Geo-replication的運作主要依靠三個元件:


  1. Marker translator
  2. Crawler
  3. Syncer

Marker translator

在啟動geo-replication後,gluster會啟動marker這個translator。在第一次啟動時,marker會對master volume內的所有檔案賦予一個叫做xtime的extended attribute,這也是為什麼geo-replication要求cluster的時間要一致的原因。並同時透過syncer將檔案連同xtime做rsync送至slave。而之後這個marker會做什麼事呢?marker會攔截master volume的檔案操作,並在每個檔案(或資料夾)被操作時,去更新該檔案的xtime,以及該檔案的所有祖先的xtime。圖解如下。(為簡化說明,筆者假設master和slave皆為gluster volume)

Step 1:


啟動marker後,marker會為所有檔案建立xtime,並將檔案連同xtime送至slave端。

Step 2:

當有使用者透過任何一個節點操作檔案時,marker會更新該檔案的xtime。

Step 3:

接著更新所有該檔案的祖先的xtime。

marker的工作到此結束,剩下就是crawler和syncer的工作。

Crawler

而crawler做什麼事呢?crawler會不斷地監視master及slave兩端root的xtime。而root的xtime有更新時,便掃描在它的子檔案及子資料夾的xtime,若沒更新則不做任何事,若是檔案且xtime有更新,便把該檔案加入syncer的list中;若是資料夾xtime有更新便進去裡頭重覆上述的動作。遞迴式地爬完所有有更新xtime的地方。對刪除的處理而是若slave有該檔案或資料夾,而master沒有的話便刪除。如圖所示。




crawler只要不斷監視兩端root的xtime,並透過marker的幫忙,能有目地的搜尋並找到被變更的檔案。接著把檔案加入syncer的list中。

Syncer

最後是syncer,syncer的工作是負責將crawler收到的file list連同xtime透過rsync送至slave端,這樣便不會在下次的monitor中被重送。


整個來說,筆者給geo-replication技術下的註解是:「有目的地的rsync。」

希望這篇文章對希望了解geo-replication技術的人有幫助。

2012年10月27日 星期六

My sharing

i would like to share something about distributed system here if i can.

我的學習之旅

如果還有力氣的話,希望能把學到的一些東西整理出來分享給大家吧,附中英對照。