The Art of Readable Code && High Performance Comments

感冒,加上對 Coursera Cryptography I 有些倦怠(別誤解,我相當推薦這堂課),來抽空寫寫中文偷閒。

EC2 裡的儲存有幾種選擇,簡單列下:

  • tmpfs (ramdrive):
    拿記憶體放資料,霸氣外露;除了 volatile 並且有些傷本以外,沒啥缺點。在 app 層做 replica 可以解決 volatility 的問題;這也使其寫操作表現受其他選項限制。
    如果資料不太重要,例如快取,則 memcached / redis 等方案皆相當成熟,也解決 scaling 的問題。有些 app 透過 mmap() 操作底層儲存,也能有與之類似的表現。
  • Ephemeral Storage
    位在同一個 host 下的儲存,因此存取 latency 較低;然而這是共享的資源,因而可能受到 noisy neighbor 影響。有些人期待獨佔磁碟,又不想選付費方案;這類強國思維在此先不討論。
  • EBS
    AWS 主推的儲存方案;guest 透過網路存取,因此要考慮 instance size 對頻寬的影響。另外有 first-use penalty,打算長期使用的 EBS 最好熱一下

    • Magnetic
      HDD 且 baseline 為 100 IOPS;屬共享資源,burst 時往往可以到幾百 IOPS。為了避免 Noisy-neighbor,過去的常見做法是 allocate 最大容量;並且先做測試。如果表現不佳,再重新洗一顆。現在資源分配較公平,建議照使用情境與荷包深度考量。
    • SSD-Generic
      類似 Magnetic,但底層為 SSD;並且計費方式不同。I/O Burst 起來效能遠超越 Magnetic,但 baseline = Size (in GB) * 3 就有些卑微了。猜想限制機制與 t2 CPU credit 類似。
      雖然 per GB 價格大約是 Magnetic 的兩倍,但後者要加上 i/o 量,因此實際價差會更低。
    • Provisioned IOPS
      SSD-backed,獨佔模式,因此不會 Burst ;也沒有 Busy Neighbor 的問題,開了以後基本錢就一直一直噴。對 latency-sensitive 的服務,例如 OLTP 相當實用。另外 HDD random access 約 100 IOPS ,如果本來是四顆 Raid 10,換到 AWS 上硬開 4k IOPS,這樣 over-provision 可是會被 AWS 用帳單懲罰的啊 zzzzz
  • S3
    有 FUSE 的 s3fs 可用,也可以透過 SDK / API 直接存取(支援 range);有些基於 S3 的流式操作能在記憶體內完成,就沒必要寫磁碟;徒耗 I/O 而已。

發表迴響

分類

%d 位部落客按了讚: