Home » 2014 » March (Page 2)

AWS Elastic Load Balancing 服務支援 Connection Draining

AWS Elastic Load Balancing 支援 Connection Draining 功能了:「ELB Connection Draining - Remove Instances From Service With Care」。

由於 Connection Draining 是自創名詞,所以 AWS 的人解釋了一大堆。其實對比較熟悉的人用「graceful shutdown」就應該能了解 Connection Draining 想要做什麼事情。

技術上的細節是,當 instance 從 ELB 內被移除 (無論是暫時性的還是永久性的),新的 request 將不會被送到該 instance 裡,而既有的連線將不會斷掉,直到 client 完成或是超時 (timeout)。

這個功能在一般商用的 load balancing solution 都會提供,而且是對於服務品質其實還蠻重要的功能。

話說回來,這陣子 ELB 動了不少東西?不查資料可以直接想到的就包括了:

  • HTTPS 支援 PFS
  • 支援 access log 下載。

再加上今天的 graceful shutdown。每次都改善一些東西,累積起來就是驚人的財產...

Mozilla 推薦的 jsDelivr?

Mozilla 在「jsDelivr – The advanced open source public CDN」這篇文章裡面推薦 jsDelivr 這個服務:

Similar to Google Hosted Libraries, jsDelivr is an open source CDN that allows developers to host their own projects and anyone to link to our hosted files in their websites.

GitHub 當作 origin server,前端目前利用 CloudFlareMaxCDN,配合 Cedexis 的 openmix 服務,綜合這兩家 CDN 提供服務。

既有的 cdnjs.com 是由 CloudFlare 贊助的服務,那 jsDelivr 呢?

看了老半天得到這些訊息:jsDelivr 是由 @jimaek 所發起的服務,而 @jimaek 受雇於 MaxCDN。再加上 Mozilla 上的文章也是 @jimaek 發表,而且只發表過這一篇 (參考 Articles by Dmitriy Akulov),這邊的目的也太明顯...

應該可以每幾天就看一下下面的 comment,不知道什麼時候會引爆利益衝突的問題...

Pinterest 對 ZooKeeper 的用法

在「ZooKeeper Resilience at Pinterest」這篇文章裡面,Pinterest 的人說明內部是怎麼使用 ZooKeeper,其中對我來說最重要的是這張圖:

程式不直接接觸 ZooKeeper 取得資料,而是透過 daemon 寫到 local disk 的資料取得。這樣當 ZooKeeper 失敗時仍然可以保持一定的服務 (因為 local disk cache),而避免服務中斷。

當然,這跟資料的性質有關,不是所有的資料型態都可以接受 cache。這種解法常常是在穩定性不是可以自己控制 (這個例子裡是 ZooKeeper),而且遇到問題時不希望整個服務就爆炸...

但這個思路每次看過每次都會忘記,寫下來不知道會不會比較容易想起來 :o

PHP 的 strcmp()...

出自「PHP的strcmp函数引发的安全问题」。

拿 PHP 5.5 來測,這兩個都沒什麼問題:

php > var_dump(strcmp('a', 'a'));
int(0)
php > var_dump(strcmp('a', 'b'));
int(-1)

接下來測這個:

php > var_dump(strcmp('a', array()));
PHP Warning:  strcmp() expects parameter 2 to be string, array given in php shell code on line 1
NULL

沃槽...

這代表這個寫法是有問題的:

if (!strcmp($v, $v_input)) {
    // If same...
}

如果先不管 warning,還是要用 strcmp 的話,可能得寫成:

if (0 === strcmp($v, $v_input)) {
    // If same...
}

不過用原生的操作元應該是比較好的解法?

if ($v === $v_input) {
    // If same...
}

這真是太迷人了... -_-

鶯谷園整修...

無奈:

Archives