Application
Back-end
- Java
- slf4j
- Apache commons-codec
- Spring framework 3.1
嘗試了些新版的功能
1. Java-based configuration 覺得一般使用沒比 XML schema-based 好用,做框架設計的時候會比較實用,動態組裝、設定樣版、模組化,不知道還能怎麼運用
2. Environment API 在啟動時依系統參數來區分"開發"或"佈署環境"的Profile,用於載入不同的 bean definition,若沒指定啟動參數則為 default 的 profile
e.g. JAVA_OPTS => -Dspring.profiles.active=heroku1. Java-based configuration 覺得一般使用沒比 XML schema-based 好用,做框架設計的時候會比較實用,動態組裝、設定樣版、模組化,不知道還能怎麼運用
2. Environment API 在啟動時依系統參數來區分"開發"或"佈署環境"的Profile,用於載入不同的 bean definition,若沒指定啟動參數則為 default 的 profile
Google 的 QRCode library,在這用來產生 QRCode image 傳遞 secret key
Redis Client 端的 Java Library
在這用來做 redis 的連線控制,避免階層操作下佔用多組連線
- TOTP Algorithm
基於 RFC6238:TOTP: Time-Based One-Time Password Algorithm 附錄程式並做了些簡化
Front-end
- Spring MVC
試用 Servlet 3.0 免宣告 web.xml 的功能,但從 Tomcat 搬到 Jetty 遇到些問題,在 Jetty 的根目錄(/) 會被 DefaultServlet 覆蓋, 導不到 spring mvc的DispatcherServlet,不想多加 Filter 只好換回 web.xml
- Jackson Json
- JQuery
- Bootstap
Twitter 開發的前端工具庫
Environment
Common
Heroku 上有免費的 Redis 服務可以用,但有空間與連線數(10)限制,若使用 Connection Pool 要多留一個做遠端管理,否則當連線數滿了,就只能 stop application 來釋放
- Maven
Heroku 佈署 Java application 預設要透過 Maven 來編譯、打包
- Git
Git 是在 Heroku 用來 deployment 與 release management 的工具,先透過 Git 將原始程式上傳Heroku 後, Heroku 收到更新通知、讀取 pom.xml 進行編譯與打包
這個 demo application 也透過 Github 來 open source
Development
- Eclipse
- Tomcat
- JRebel
是 Java 的 hotswap 工具, 免除重新佈署的等待,跨平台且並支援多數知名的Framework,使用上需附加於IDE、Maven、Ant,舉例來說對某 Controller 新增了一個 RequestMapping method,JRebel agent 在偵測到有新編譯的class file 後, 會將 class file 複制到 Tomcat 相對的 classpath 裡,並在JVM裡重載該 class file與重載instance,替換互相參照的 object reference,更新Spring MVC 的 url hander mapping 快取
除了收費的 Enterprise 版本,也有免費的 Social 版本,基本上兩者的功能相同,只是Social版不能用在商業用途,用的時候要幫忙打廣告
Production
- Jetty
e.g.
java $JAVA_OPTS -jar target/dependency/jetty-runner.jar target/*.war
java $JAVA_OPTS -jar target/dependency/jetty-runner.jar target/*.war
http://devcenter.heroku.com/categories/java
- Heroku(Cedar)
使用 Heroku 的主要想借鏡其 auto scaling 的運作模式,然而單個 web dyno 免費也是誘因
平台好處就不多說,可以參考官方說明,如同其它的 Paas 平台,Heroku 也有一些使用限制,像是:
- 30 秒 request timeout
- startup 超出 60 秒,重啟
- shutdown 時間超出 10 秒,強制 kill process
- 安全性問題 (e.g. 共用環境、原始碼上傳)
- file system、database、mail server、monitoring、video streaming 等,需依靠外部的 Saas 支援
- 執行環境限制(e.g. 沒windows、JNI、WebSockets、static ip)
- SSL 加 $100 / month
- 記憶體限制(512 M),使用量 1G 時警告,1.5G 直接重啟
- 沒有 scale up 的選擇( 跑 Java 是需要些基本門檻的,許多JVM優化還是靠 memoery 與cpu 來撐)
- data center 僅有美東,與台灣的連線差不多 RTT 200ms
- 單個web dyno 於 1小時內沒有 request 則會 idling ... 等接收到 reqeust 時才會重啟 application
- application 的設計要能隨時被 shutdown,因此需要有較嚴格的容錯設計,此 scaling 策略比較簡易
- Heroku 平台框架會不斷的衍進,也會捨棄部份舊有功能(e.g. Cedar stack 去掉了varnish 也更換 domain name)
- Java 版的 newRelic 加入後,跑一陣子記憶體就會超出限制
- 其它限制可以參考官方FAQ http://devcenter.heroku.com/tags/faq
Heroku 價格不太親切,單個 dyno 為 $0.05/1hr ,在AWS相對等級的 (micro instance) 則為 $0.02/1hr,但對startup而言,若是不想在草創初期投入基礎建設,那到可以考慮先用來擋突發的尖峰流量,末來再衡量實際需求,量身打造自身的運作環境
No comments:
Post a Comment