2012年12月23日 星期日

在 2013 年會改變 Web 的五個 API

原文網址:http://blog.alexmaccaw.com/the-next-web

本篇沒有很講究翻譯上的精確度,可能會有漏字 or 自行腦補。另外原文有對一些字設定 style,並沒有完整一一對應到譯文中。

看 Web 的發展實在讓人興奮爆了,即將到來的 2013 年會有更多的進步。在接下來的一年中,有許多可能會從本質上改變我們開發與使用 Web 方式的技術會陸續出現。

2012年12月9日 星期日

2012 年 GWT 調查報告中文摘要

原始報告請到 https://vaadin.com/gwt/report-2012 下載。雖然 Vaadin 有收集 EMail 之嫌 [炸],但不可否認這份報告實在做的非常有愛,值得給他 EMail 帳號以資鼓勵。另,本篇摘要翻的很隨性,只保證數據沒有打錯,其他就...... [毆飛]


GWT 在 2012 年有許多令人興奮的內容、也改變了未來發展 GWT 的方式。 在產品與社群前所未有地茁壯的同時,大家想問:「阿下一步咧?」

Google 在六月的時候把 GWT 變得更開放。 為了未來的發展,成立了 GWT 指導委員會, 裡頭有 Vaadin、Google、Sencha、RedHat 等等。 我們開始設法收集大家拿 GWT 作啥、想許什麼願望。

這個 GWT 研究是由 Vaadin 以及一堆人努力而成, 在這份報告裡頭也會看到他們的意見。

在回收的一千三百多份問卷當中,都回答了超過三十個以上的問題, 我們相信這會是最完整的調查報告。

2012年12月5日 星期三

謠言終結者:一定要在 Tomcat 前端用 httpd 來增加效能嗎?

原文網址:http://www.tomcatexpert.com/blog/2010/03/24/myth-or-truth-one-should-always-use-apache-httpd-front-apache-tomcat-improve-perform

簡單地說,這是假的。要仔細講的話,在 Tomcat 3 的年代是有一些真實成份在。不過以現今使用的 5.5.x 以及 6.0.x 來說,實在沒有必要因為單純效能的理由來使用 httpd。Tomcat 現在支援 native / APR 的 connector,使用與 httpd 相同的 native library(Apache Protable Runtime APR)來處理低階 I/O,因此可以達到與 httpd 差不多的效能。當處理靜態內容時,Tomcat 是比 httpd 多一小點兒的負荷量,但實在太小了以至於在 production system 上很難注意到差異。

如果你研究 httpd 與 Tomcat 的效能議題,你會找到各種覆載與效能的 benchmark,結果也不盡相同。一個常被引用的結果證明 Tomcat 的純 Java connector 始終比 httpd 快

這個異常的結果剛好與期待相反:httpd 應該比 Tomcat 的 pure Java connector 快上很多才對。這可能是所使用的檔案大小導致的結果。Tomcat 會預設把小的靜態檔案 cache 在記憶體中,這可以提供顯著的效能提昇。httpd 在預設情況下沒有作這件事。這很明確地證實 benchmark 的定義會影響結果。

Christopher Schultz(Tomcat mailing list 的常客)以一個較大範圍的檔案大小進行這個測試(譯註:連結已經失效),在我看來這個測試比較好一點。結果顯示在下面這張圖表中:


這更符合預期了,不過有一些有趣的重點要注意:
  • Apache httpd 與 Coyote APR / native 的效能表現在同一個水準
  • Coyote NIO 只落後 httpd 與 Coyote APR / native 一點
  • 看起來似乎 sendfile 的效益有一個極限在。有可能是硬體限制,不過值得進一步關注。我已經把這個加到我的待辦事項中。
  • 對於小於 10KB 的檔案,Tomcat 有顯著的效能提昇。
任何效能測試的細部結果都會隨著一些因素而改變,像是使用何種硬體、同時有多少 request、keep-alive 與 cache 的使用。在特定的測試中,這些因素會改變結果,不過大多數的效能測試結果會保持一樣:
  • httpd 與 Coyote APR / native 有差不多的效能
  • Coyote NIO 比 Coyote APR / native 差一點(在用 SSL 的情況下會差更多)
  • Coyote BIO 通常是最差的。
要設定出最佳的效能,這會隨著 application 的不同而不同。一個 application 的最佳設定取決於 resource 的大小、動態 / 靜態內容的比例、目前的使用者數量、這些使用者的使用模式...... 等等。一般來說,可以透過增加 cacheMaxSize 值、增加可處理 request 的 connector thread 數量(使用 maxThreads)、開啟 keep-alive(用 maxKeepAliveRequests)來增加效能,不過這些都會增加資源的使用量。每個不同的 application 得在效能與資源使用量之間作取捨。

另外要注意的是:Tomcat 中沒有「讓它跑的比較快」的魔法設定。如果你的 application 花 15 秒來產生一個 request,Tomcat 沒辦法改進些甚嘛。你必須監控你的 application 以了解為甚麼 request 會花這麼久的時間,然後適當地調整你的程式碼。

雖然單純從效能觀點,沒有什麼好理由去用 httpd,不過還是有其他論點支持 Tomcat 應該搭配 httpd。最常見的原因是為兩個以上的 Tomcat 提供 load balance。httpd 並不是唯一的選擇,也可以用硬體的 load balance 或是其他 reverse proxy,不過系統管理者仍然會選擇他們已經很熟的 httpd。我未來會寫更多用 httpd 當 load balancer 的文章。

有需要支援 Java 以外的技術,也是 Tomcat 與 httpd 一起使用的原因。Tomcat 可以支援 PHP 與 Perl,不過在 httpd 當中支援度較好。因此,對於需要混合技術的網站,httpd 可以用來當前端的 web server,將 request 導向 mod_php、mod_fastcgi、mod_proxy_http(給 Tomcat)或是其他的 module。

另一個這樣用的原因:httpd 可以將 Windows 的身份認證整合進來。有 Tomcat 整合 Window 身份認證的方式,在更廣泛地使用之後,這讓是不是用 httpd 變得不那麼重要。然後,這仍是讓 httpd 搭配 Tomcat 使用的一個常見原因。

總而言之,有充分的理由讓 httpd 搭配 Tomcat 使用,不過靜態內容的效能並不是其中之一。如果你僅僅是為了加強靜態內容的效能而用 httpd,那我建議你看一下給 Apache Tomcat 使用的 Coyote APR / native connector。