May 10, 2012

Finagle 概述

Finagle 是基於JVM的網路框架/堆疊,開發者能在之上使用Java,Scala或任何基於JVM程式語言來開發非同步運算的RPC Client/Server,其專案是 Twitter 總結了實務上遇到的問題,所設計的分散式系統方案,並在2011的7月開放源始碼,目前功能如下表


Protocols

  • HTTP
  • Streaming HTTP (Comet)
  • Thrift
  • Memcached/Kestrel
  • More to come!

Server Support

  • Backpressure (to defend against abusive clients)
  • Service Registration (e.g., via Zookeeper)
  • Native OpenSSL bindings

Client Support

  • Connection Pooling
  • Load Balancing
  • Failure Detection
  • Failover/Retry
  • Distributed Tracing (a la Dapper)
  • Service Discovery (e.g., viaZookeeper)
  • Rich Statistics
  • Native OpenSSL bindings
  • Sharding


Apr 7, 2012

ScalaSTM 試用

STM(software transactional memory)是種 concurrency control 機制,相對於用 locking 進行同步化,更安全與簡單,以下使用帳戶轉帳的例子實作比較locking與STM

帳號轉帳案例
多組帳號同時以隨機金額進行轉帳,轉帳過程要保證沒有 race condition 與避免 deadlock


Mar 18, 2012

Random / Math.random() / ThreadLocalRandom

java.util.Random

java.util.Random 亂數演算法會依賴 seed 數值產生亂數,並在產生亂數後重新產生 seed,
在 Multi-thread 下為了保證在各Thread取到不同的亂數, java.util.Random 在實作上使用 optimistic locking 來同步更換 seed ,問題是若所有Thread都使用同個Random物件產生亂數,在大量競爭下會造成不斷的loop計算,進而產生效能問題

Feb 17, 2012

TOTP authentication demo 開發工具與佈署環境(Heroku)

延續前篇 使用 TOTP 與 Google Authenticator 實作 Two-Factor authentication ,此篇說明使用到的工具與相關心得

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=heroku
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
Twitter 開發的前端工具庫


Jan 22, 2012

[Java Performance]Chapter 3:JVM Overview

這篇談JVM的概觀與各元件用途與描述HotSpot VM在各元件上的優化技術

HotSpot VM High Level Architecture

JVM 有三個主要元件:
  • VM Runtime
  • JIT Compiler
  • Memory manager



Jan 2, 2012

使用 TOTP 與 Google Authenticator 實作 Two-Factor authentication

在食衣住行育樂都需要的網路的時候,現代人擁有許多網路帳號,但能記憶的帳號密碼通常只有少數組合,當遇到密碼外洩(e.g.資料庫外洩、病毒側錄密碼),相對的也影響了使用共同帳密的網路服務,對今日資安事件逐漸從惡作劇變往金融犯罪的趨勢,帳號有操作功能,個資,身份(實名化),對盜竊者來說帳號密碼可以產生許多價值。

帳號盜用除了個人影響外,間接牽連的還有親友與網路服務提供者,對網路服務提供者而言,帳號盜用是會提高營運成本與降低使用者信賴度的麻煩事,因此面對使用者規模與服務品質,強化帳號安全逐漸成為不可忽視的事情,Google 於去年底開始提供 2-step verification 做多層次的帳號驗證,別於以往硬體 OTP 的方式,透過 Smartphone 使用軟體(i.e Google Authenticator) 來規模化佈署。

目前得知使用類似軟體驗證機制的服務提供者有


在 Server 端的實作驗證流程不難,未來可能會變成一種常見的帳號驗證方法。

以下參考國外部落格文章與 Google Authenticator Android原始碼 實作 Two-Factor authentication 驗證流程,並釋出伺服器端原始碼