分散式系統的建言...

「分散式系統」(Distributed System) 是個老詞彙,但跟最近當紅詞彙「雲」、「NoSQL」常常相關。也因此「雲」與「NoSQL」常常遇到的都是分散式系統遇到 (並且討論過) 的問題...

而「Notes on Distributed Systems for Young Bloods」這篇寫的好血淚 XDDD 除了講理論面的東西以外,也把實務面會遇到的問題拿出來講...

首先要先知道「Fallacies of Distributed Computing」,在分散式系統裡,能假設的事情實在太少,要處理的事情太多。而「CAP theorem」也是個必讀的主題,從 Amazon 丟出「Dynamo: Amazon's Highly Available Key-value Store」這篇經典的 paper 後讓更多人知道這個理論。

熟悉上面兩個主題後,接下來就是血淚史... XD

garbage collection pauses make masters “disappear”

啊,GC 讓 master 不見... (NameNode... XDDD)

Writing robust distributed systems costs more than writing robust single-machine systems.

Robust, open source distributed systems are much less common than robust, single-machine systems.

這兩條... XD

Oh, and Paxos really is very hard to implement

Paxos... XD

If you can fit your problem in memory, it’s probably trivial.

(噴飯)

“It’s slow” is the hardest problem you’ll ever debug.

連問題都找不到嗎... XD

撇開這些碎碎念的部份,就算對 distributed system 沒那麼熟,這篇文章也提到了很多「解決的方向」以及「關鍵字」讓你找資料,對於實際操作時會有很大的幫助。

Twitter 的熱門搜尋演算法 (以及背後的機制)

昨天的 Twitter Engineering Blog 上說明了 Twitter 這陣子改善搜尋演算法背後的故事:「Improving Twitter search with real-time human computation」。

因為搜尋的量夠大,所以可以拿搜尋的 keyword 計算。

而系統會一直分析搜尋的關鍵字,當發現有詞彙在某個時間內超過設定的水位時,就發 API 到 AmazonMechanical Turk 讓真人分析 (分類),分析完成後就可以再回到自動化的流程進行後續的步驟...

Mechanical Turk 就是 crowdsourcing 類型的服務,這個服務因為法令限制,到現在還是只能讓美國的公司或是個人使用,是少數還沒玩過的服務,應該來找看看有沒有其他 crowdsourcing 服務可以玩...

把 PEM Private Key 檔轉成 SSH Public Key 格式...

RSA 中,單獨靠 Private Key 是無法算出 Public Key 的,不過在 PEM 檔裡因為都有紀錄,所以可以取出:

openssl rsa -in aws.pem -pubout

不過取出的格式需要再轉一次讓 OpenSSH 可以吃:(參考「Convert pem key to ssh-rsa format」這篇的方法)

ssh-keygen -f aws.pub -i -m PKCS8

雖然 ssh-keygen 不接受 - 當 stdin,但可以利用 /dev/stdin 直接串起來:

openssl rsa -in aws.pem -pubout | ssh-keygen -f /dev/stdin -i -m PKCS8

AWS EC2 新機種:超大台的 hs1.8xlarge...

Amazon Web ServicesEC2 在世界末日時發表 120GB RAM、16 virtual core、48TB disk (24 disks) 的「EC2 虛擬機」:「The New EC2 High Storage Instance Family」。

看起來像是 12 顆 7.2KRPM 的 2TB SATA,每顆如果可以跑到 200MB 就是 2.4GBytes/sec?如果是這種規格,給大量 sequence read/write 的運算超適合,官方 blog 的說明裡的解釋也是接近這個方向:

This instance family is designed for data-intensive applications that require high storage density and high sequential I/O -- data warehousing, log processing, and seismic analysis (to name a few). We know that these applications can generate or consume tremendous amounts of data and that you want to be able to run them on EC2.

目前只在 US-East (Northern Virginia) 有,USD$4.60/hour,硬算 720 小時,大約是每個月台幣十萬...

AWS 最近在補的硬體可以看出來是 Hybrid Hosting 的路線:這些機器應該是一台只跑一個 instance,跟 Dedicated Hosting 差不多。上面跑虛擬化只是為了算錢 (accounting) 以及一些安全機制 (像是防止 IP spoof,以及配合 EC2 提供的 firewall)。

實質上不太能說 AWS 不是 Hybrid Hosting 了...

Imgur 的商業使用方案...

TC 上看到 Imgur 提供商業方案:「Imgur Expands Its Revenue Streams With Latest API Update, Now Ready For Commercial Use」,同時 Imgur 也更新了 API 說明頁面:「The Imgur API - General Information」。

以圖片張數與 API request 數量限制,USD$25/month 每個月可以傳 12.5k 張以及 375k API requests。換算成每天的量,大約是 4k 0.4k 張圖與 12k 次 API call。(hmmm,Komica 不知道會不會去租用...)

看起來 Imgur 裡面的情況很糟啊,居然設計出這樣的方案。如果讓我來猜國外的觀點,Imgur 應該是被定位為「圖床」而非「相本服務」?這是要賺 eBay 賣家的錢嗎?

Imgur 圖片並不是什麼便宜的 bandwidth,而是 EdgeCast 含亞洲 PoP 的 CDN,這樣發展對嗎...

Debian 官方維護的 AWS EC2 Image...

在「Official Debian Images on Amazon Web Services EC2」看到 Debian 官方放出了 AWS EC2 的 AMI:「Cloud/AmazonEC2Image - Debian Wiki」。

之前幾乎都是靠 alestic 製作的版本,現在則是官方直接支援了... 在頁面上除了有連結指到 Debian 官方的版本外 (在 AWS Marketplace 上),另外還列出了其他個人與團體製作的版本。

之後如果要用 Debian 可以選這些 AMI 來用...

AWS 的儲存空間降價 (S3 與 EBS)

雪梨也是同樣降幅,而且最高的 >5000TB 沒降,應該是因為 AWS re:Invent 辦這麼大,總是要有些東西看起來很炫?

降價範圍除了 Standard Storage 以外也包括 Reduced Redundancy Storage,降幅很大,從 24% 到 28% (約 1/4):「Amazon S3 Storage Price Reduction (24 to 28%)」。

其他幾個對手壓力很大啊 XD

虛擬機內的 Side-channel attack...

前陣子在其他地方看到,不過剛剛在「Stealing VM Keys from the Hardware Cache」看到利用 Side-channel attack 的攻擊:「Cross-VM Side Channels and Their Use to Extract Private Keys」。

實際攻擊的項目是 libgcrypt 實做的 ElGamal 演算法,長度是 4096bits。環境是 Xen,限制是在同一台實體機器上。

對抗 side-channel attack 的幾個方法:實體隔離 (效果最好) 或是改善演算法 (通常是犧牲一些演算法效率,換取難以被外部預測的保護)。前者也就是 AWS 為了符合美國政府要求所建立 AWS GovCloud (US) 的原因之一。

AWS 澳洲開台!

AWS 在澳洲雪梨開台:「New Asia Pacific (Sydney) Region in Australia - EC2, DynamoDB, S3, and Much More」,成為目前 AWS 南半球第二個服務區域 (第一個是巴西聖保羅)。

幾乎所有主要服務都開台了... 連 AWS Direct Connect 都開 :p

其中兩個主要服務,EC2 的費用與新加坡相同,網路流量部分是亞洲區裡面偏貴的。而 S3 空間費用跟加州一樣貴... 不過講這麼多,用的到的人應該還是會用,畢竟光的速度還是有極限的,建在本地總是有優勢...

接下來會開在俄羅斯嗎?XD

可以在 AWS VPC 內開 Micro Instance 了...

之前在 AWS VPC (Virtual Private Cloud) 能開的最小台機器是 m1.small,而 AWS 總算是宣佈可以在 VPC 裡開更小台的 t1.micro 了:「Amazon VPC now Supports Micro Instances」、「Launch EC2 Micro Instances in a Virtual Private Cloud」。

剛好可以拿來當 VPC 的 NAT server 來用...