無分類雜文 16 Aug 2009 01:32 am

推到 Twitter!
推到 Plurk!


莫拉克颱風災情支援網 - 救災網站背後技術與技巧 (1)



[這篇文章是我的投影片文字版]

今天( 2009/8/15 )是 COSCUP 第一天,我在早上九點半有個 Talk,有關於 Ruby Web Framework - Sinatra。不過兩天前,我向大會 submit 了新的 topic,改成了 『莫拉克颱風災情支援網 』。

臨時改題目,大家應該會覺得奇怪,這…網站,說穿了不過是個雙向留言板,到底有什麼好湊成一個講題。

也許大家不知道,在這六天( 8/9 - 8/ 15) handle 網站的期間,我其實從觀察其他網路救災團隊運作,和自己實際運營網站時發生的事件,得到了不少經驗。剛好 8/15 就是COSCUP ,才讓我決定臨時改變主題,整理分享這一些心得。

雖然不知道以後還用不用得上(希望台灣以後不要再發生這種大災難),但我希望的是藉由這次經驗的分享,能讓其他人以後再投入網路救災之時,能更有個脈絡方向,能耗費更少精力但能更有效的投入網路支援救災的部份。

=====

莫拉克颱風災情支援網 ( 以下簡稱支援網 ),到底有什麼特點值得拿出來講呢?

1. 它是這次風災最早上線的手刻系統 ( 8/9 12:18 撰寫完成8/9 01:03 announce、 )。
2. 網站最穩定(唯一沒被 DDoS 到掛站)
3. 功能相對其他救災網站完整。
4. 善於整合地三方資訊。

我的投影片,就是直接以這次開發支援網的技術、實際經驗,來解釋幾個我覺得經營架設、網路支援救災網最需注意的幾個重點…。

說到架設這類網站,你會想到什麼需要注意的事項?

1. 功能完整
2. 統一資訊
3. 一台不錯機器
4. 一隊負責整理更新的網路志工

大概就這些吧…

鄉民最後的直覺結論就會導出:「用 CMS ( Wordpress / Drupal / Joomla ),找個空間,上網找一隊志工支援…收工!」

要是這麼簡單就好了。真的這樣搞,上線會遇到的第一個問題,就是 被‧打‧爆 ….

====

個人這次針對這次經驗,整理了五個重點,供大家參考。我認為救災支援網站需要的是

1. 儘快上線,功能其次
2. 高流量承載與調校 (被打掛 = 無用
3. 廣為人知
4. 有效利用第三方外掛與資源
5. 有效防止來亂的

儘快上線,功能其次

也許一些朋友比較知道,我現在的職業是程式設計師,強項就是 Ruby on Rails 敏捷網站開發。Ruby on Rails 不僅是我最熟悉的網頁框架,也是世界上開發網站最快速的框架。也因為這樣的因素,我有時候就比較倒楣的常會被抓去支援作一些臨時性的網站救火。這次支援網也是因為比利潘的召喚,臨時從以前做過的舊網站硬改出一個符合需求的直接上線 — 改版(15min)+ Deploy( 45min)大概總共只花了一小時。

因為需求很明確,因此我作的就只是一個很簡單的「Google Maps + 刊登版(可留言)」的網站,不需要其他雜功能。這也是沒有選擇現成 CMS,直接用手刻的主要原因。

高流量承載與調校

而在前面提到。支援網是從頭到尾沒有被打爆過的網站。不能被打爆,我認為是身為救災消息集散中心一個很重要的 key point。當災難發生,可預見的是,這一類網站一定會瞬間湧進巨大的流量。伺服器可以反應慢沒關係,但一定要擋的住。因為一旦擋不住癱瘓掉了,甚至癱瘓長達幾個數小時。這要命的幾個小時所造成的後果就等於救命稻草蒸發,所有網友心血白費。

那一定有人會覺得好奇,RoR 不是傳說中以效能不佳的惡名著稱?為什麼這次幾個站台之內,被打掛的反而都是 PHP 的站台…

[網站功能保持簡單]

我要澄清一點的是:其實 RoR 並沒有大家想像中的效能糟,它的效能比一些知名的 PHP Web Framework 來的更佳(qps 高很多)。而且我更想提出進一步的是,如果已經預見會是大流量的 event site,隨便使用不熟悉的 PHP CMS,會造成更糟的下場。這也是前一段為什麼會強調「功能其次」的原因,因為功能越「完整」,可能表示效能越不佳。而那些完整的功能,也許並非能在事件中發揮到很大的功能,甚至這部分的 code (plugin / module)更有可能是超吃系統資源的怪獸。而這些功能如果又不是你開發的,短時間你連 tune 都無從 tune 起。

[容易 Scale]

Ruby on Rails Application 較為人熟知的架設方式,是跑好幾隻 mongrel 起來,再用 apache 或 nginx 當 reverse proxy 跑在前面擋。但這次跟往常比較不同的地方是,支援網架構在 Rails 雲端(Heroku)之上。也因為這層關係,網站變得比較好 Scale,幾乎不必再分神去監控系統是否會垮掉。(雖然我當初只是因為懶得管機器…deploy 在雲端)

支援網最高峰那日大概整天是快 40 萬 pageview( Google Analytics),開了 3 台 Heroku 的 dyno。如果當初是拿 VPS 或 dedicated server 跑,大概會陷入一直監控它是不是會掛掉,或者是機器不夠撐要搬家重弄的惡夢…。現在只要信用卡刷下去就…

[Web Performance Tunning ]

雖然個人在網路公司服務的關係,也熟悉 Backend Performance Tunning 的一些技巧。但我深知我的長項是網站敏捷開發,因此頭兩日幾乎是把心力都投注在寫 Code 之上。功能寫的差不多,才回頭改善開啟網站的速度。

調校網站大概抓了幾個重點去作:

1. 改善 db query

2. 打開 YSlow ,依照 High Performance Web Sites 的 tips 去 tune。

(a) 靜態檔案壓縮 - rails 的 靜態檔案 helper 有個很棒的功能,就是指定 :cache => true,就會自動把所有需要用到的 css / js ,combine 成單一檔案。這樣的好處就是可以降低 request 數,減輕對 httpd 的壓力。

(b) CSS 擺上面,JS 擺下面。

(c) 後來多開 dyno 並沒有太大的速度改善,而 Heroku 的底層是 EC2,很明顯的問題就出在卡頻寬。而 YSlow 更告訴我一件驚人的事,html 只有 19k,但我使用的 js framework 有 150k。這時候隨即下的判斷,就是向公司同事 @gslin 求援,把靜態檔案通通丟上 CDN(CDN 費用由公司 PIXNET 贊助)。上 CDN 帶來很明顯的好處:提供 delivery 檔案的速度品質、有的廠商會幫忙上 gzip(甚至多幫忙處理 IE6 下 gzip 的問題)、減輕對 httpd 的壓力。

這幾個措施一做完,網站開起來就變得很快,同樣資源也能撐更多上線人數…

廣為人知

網站上線了。再來的問題:要怎麼讓別人知道有這個網站?我個人因為是比較著名的部落客,噗浪推特有相對比別人多的 follower (各約一千多人),廣播的廣度夠大。但只有我一個人負責廣播,效力是不會持久的。重要的救災訊息中心的位址,除了迅速傳播還要持久傳播

因此我在網站上線時也作了兩件事:

(1) 製作推噗按鈕:

噗浪現在是台灣當紅的微網誌。因此要做的是就是讓這個網站在噗浪上燒起來,燒越久越好……。如果現在在噗浪搜尋 “http://disastertw.com” 的話,應該會驚奇的發現一件事,河道上無時無刻幾乎洗滿了眾網友廣告這個網站的噗。

怎麼做到的?我製作了一個推噗按鈕……

推噗按鈕

網友大多是懶惰的,作公益有時只是順便而已。而在噗浪貼連結,是有特殊語法的,沒有人有美國時間幫你弄好連結…何況 ReP 也沒有辦法直接 copy 效果。即使訊息傳的快,恐怕也無法持久。

為了解決這個問題,想到的簡單的方式就是直接幫網友生好連結與敘述,輕鬆一按 Enter 就噗出去了,完全不費力。之前在 Dell 之歌的事件時,我跟 EvenWu 在當時就順便測了一下這個按鈕的行銷效果,嗯,流量大概成長了三倍以上吧….

支援網在噗浪上面,延燒這麼久完全是有原因的。

(2) 針對搜尋引擎作有效的 SEO

再來,就是 SEO 的技巧。一般網友,在災情一發生時,不一定會知道有這個支援網站。也許他想幫忙,但是很有可能也無從幫起。這時候變成要向搜尋引擎下手,讓網友一搜尋「莫拉克」,馬上就知道有這個支援網站的存在。

為此,我也做了幾件事:

(a) 經過上面的噗浪宣傳,還有噗浪同步 twitter 的效果,可以導入非常多的 inbound link,有益分數。
(b) meta keywords 塞關鍵字
(c) 調整 Page Title …

搜尋引擎排名就會有非常顯性的提昇,都在搜尋引擎結果第一頁的前幾名。

[ 寫累了,明日待續 」

Creative Commons License

19 Responses to “莫拉克颱風災情支援網 - 救災網站背後技術與技巧 (1)”


  1. on 16 Aug 2009 at 11:54 am 1.jimmy said …

    我很佩服XDite製作這個平台

    不過打爆與否的關鍵,還是在是不是用自己熟悉的工具來進行,以作最佳化的調校吧…

    如果我來用ROR寫一個,應該也會被輕易打爆,重點是開發者是你,而且用的是ROR啊~ XD

  2. on 16 Aug 2009 at 5:20 pm 2.keric said …

    其實也不盡然單純的熟悉 ROR 吧?

    到了比較流量比較高的時候,問題就在於有沒有能力作系統分析以及根據系統分析的結果做出決策,這部分跟工具或framework其實關係不是那麼大。

    我個人比較相信之前 Dell 那個網站一度被打掛給 Xdite 的經驗在這次發揮相當大的效用。加上背後的決策交流網可以讓需要什麼資源可以立刻找到對的人提供,這或許發揮比單純的工具多了一些功用。

  3. on 16 Aug 2009 at 5:48 pm 3.billypan101 said …

    本來災情地圖就是要找你來刻的,結果你這個阿宅吭都不吭一聲就發狂的寫起程式來….

    但後來這樣也好,不同的情報站幫忙把訊息流來流去。能夠頂住沒被打爆,也是多虧了你以前做的幾個高流量網站的經驗吧。所以平常的惡搞還是蠻重要的….

  4. on 16 Aug 2009 at 7:35 pm 4.pokii said …

    XDite 您好,

    我急著需要救災網站的資訊,但我經常看到這個畫面

    而且照畫面上按了重新整理,還是一樣

    http://img146.imageshack.us/img146/893/icant.png

  5. on 16 Aug 2009 at 8:20 pm 5.jimmy said …

    是啊,所以經驗值高的人跳下來作災情通報系統,會真的差很大。我想表達的也是這個意思 :P

  6. on 16 Aug 2009 at 9:04 pm 6.xdite said …

    done

  7. on 16 Aug 2009 at 9:24 pm 7.lake said …

    感謝 大大無私的分享

  8. on 16 Aug 2009 at 11:59 pm 8.色丁 said …

    專業推。能成功不單靠程式語言,重點是你能快速用對方法,台灣靠你了,救災中心應該請你坐鎮的.

  9. on 17 Aug 2009 at 10:41 am 9.indiana said …

    第一次參加COSCUP,沒想到第一場talk就這麼精采!謝謝 xdite 做這麼有意義的網站,整場演講梗多又超順!真過癮… 可惜的是,這個版本的投影片沒有那個「防止來亂的」那部分,尤其是那個「靠x,最後都在搞這個」真是太經典啦! (lmao) 可以的話真想收藏原版投影片!

  10. on 17 Aug 2009 at 8:53 pm 10.kiang said …

    感謝你製作了這個網站,不過我在研討會過程提到的,並不是指製作 RSS 功能,而是將資訊整合、單一化,讓救災的資訊能夠確實發揮它的價值。 typhoon.oooo.tw 提到 “為配合政府災區消息統一,自 2009 年 8 月 18 日 15 時起將停止本站運作。”,跟我想的有些類似,也許能夠找出目前參與救災工作的單位,將資訊或甚至工具提供給他們,協助他們運用資訊、更新資訊,相信能夠讓更多受災民眾受惠。

    當然,如果你的重點是在展示 RoR 的能耐,也許就當我不識相吧。

    會場中提到的 Sahana 已經有人在進行了( http://proj.daodin.net/sahana-sandbox/ ),也許在這次的救災活動中發揮不了什麼價值,希望他們的努力可以讓未來需要它的人更容易上手。

    我將目前所知的救災資訊網站放在這兒:
    http://news.oss.tw/node/10605

  11. on 19 Aug 2009 at 6:39 pm 11.I. S. G. said …

    資訊統合固然是重要的,然而,資訊公開與透明也很重要。
    如果資訊統合給了政府之後,政府反而利用來遮蔽資訊與操弄,這種統合便無意義,反而誤事。目前這個政府前科累累,毫無公信,司法與監督體系失靈,獨立於它之外,另行獨立運作,說不定才是真正對事情有幫助的作法。

  12. on 20 Aug 2009 at 10:04 pm 12.抗擊颱風,網路救災在臺灣 – MMDays said …

    [...] 更多細節請參閱:XDite的救災網站背後技術與技巧,工頭堅的我所知道的「莫拉克網路災情中心」幕後故事。 [...]

  13. on 21 Aug 2009 at 9:14 am 13.kiang said …

    更新, typhoon.oooo.tw 不管再過多久本站也不會關閉

    不見得是給政府,或許是類似世界展望會這樣的組織

    也許會對非營利組織的效率感到質疑,不過這種組織是可以參與與推動的 ;)

  14. on 01 Sep 2009 at 3:02 pm 14.Benson said …

    謝謝你的經驗分享
    受益良多

  15. on 01 Sep 2009 at 5:17 pm 15.roga's blog » 給他們工具,他會更積極幫你宣傳。 said …

    [...] (會新增這個按鈕,主要是受到 XDite 這篇文章的啟發:裡面告訴我們,推一個東西,一定要「廣為人知」!) [...]

  16. on 03 Sep 2009 at 2:35 pm 16.國網中心 Ruby on Rails, Web 2.0 技術推廣 » Blog Archive » Google Wave – 新手問題 said …

    [...] 的收費比較如下: XDite 在莫拉克颱風災情支援網心得裡寫說為了應付最高潮時的一日 40 萬 pageview 衝刺,他開了三個 Heroku 的 dyno。 [...]

  17. on 03 Sep 2009 at 3:04 pm 17.qweruiop said …

    哇,我文章一發表就被你的網站撈到。 我在假設說如果您的網站是用 App Engine 來當 hosting 的話,價錢會是多少? 方便透漏 Heroku 平均每天的收費是多少嗎? 會說到用信用卡刷,一天美金應該不只 $2~3 塊吧。 謝謝您。

  18. on 03 Sep 2009 at 4:51 pm 18.xdite said …

    heroku 上面有報價。

    http://www.flickr.com/photos/xdite/3876867699/

    這是支援網的八月支出,總共 50 USD 左右

  19. on 26 Oct 2009 at 11:52 pm 19.抗击台风,网络救灾在台湾 | E惠社 said …

    [...] 更多细节请参阅:Xdite的救災網站背後技術與技巧,工头坚的我所知道的「莫拉克網路災情中心」幕後故事。 [...]

Trackback This Post | Subscribe to the comments through RSS Feed

Leave a Reply