The Art of Readable Code && High Performance Comments

最近終於脫離 (假) 創業狀態,進公司領人薪水順便充實自己 XD 我在這邊是首席 cloud + web programmer,因為公司其它人在寫 app 與桌面軟體;而目前 cloud 上的所有東西都是可關閉的 (泣)。

這個月大概花了 1/3 的時間學 Angular.js,做出公司要的某個 gallery-like 頁面;這專案原先是用公司網站的舊 django 系統管理,但裡頭結構實在是有點偏離精神,因此忍不住重打,並且把 call server API 的部份抽離成為 api python client library;這大概花 1/3 時間。剩下的 1/3 就是跟 aws 打交道了;即使網頁服務不大,搞定單 Region 的自動擴展 (scaling & failover) 應該是 clouder 的基本自我要求。

稍微花了一些時間玩 VPC,我完全同意今天在 AWSUG #4 聽到 Johnathon 所說,使用 VPC 優先於 EC2 叢集的建議。底下整理重要差異,順便把踩到的 private / public subnet 陷阱說一說。

使用 EC2 叢集的優點如下:

  1. 完全免設定,內外網 IP 各配一個;只要 security group 搞定,外面就連得通。outbound traffic 從來不成問題。
  2. 每台機器都有內外網 IP,不受每 region / vpc 5 個 EIP 的上限 (可寄信哭哭)。話說回來,透過 load balancer 從不同 port 提供不同 service 才是王道 (除非同時連線數會打到 ephemeral port 上限,或者頻寬被打穿 — 多綁個 ip 上去就好)

使用 VPC 的優點如下:

  1. 網段分配自由度高
  2. 可就 inbound / outbound traffic,對 security group 與 subnet 設定 (效率 security group 較高,但後者比較接近 ipfw / ipfilter 的邏輯)
  3. 可以給 instance 指定內網 ip (透過把綁好 private IP 的網卡在 instance 間 attach/detach)
  4. 可以給 instance 換 security group
  5. 可以對 subnet 設定 routing table,網路流量控制彈性大

這陣子將公司的服務從 EC2 轉移到 VPC 的過程中,被 private / public subnet 整了一下;簡單整理重點:

  1. 在初始狀況下,整個 VPC 下的所有 subnet 都互通;
    可以透過 routing table 去惡搞,但若要設限建議從 Network ACL 下手
  2. 在初始狀況下,VPC 下的所有 instance 都無法與外部連線;除了以下兩種狀況:
    1. instance 有綁 EIP,並且所處 subnet 的 routing table 先指向 internet gateway
    2. instance 所處 subnet 的 routing table 指向一台 NAT portal (而 NAT portal 必須位於前項指稱的類別中,並擁有一個 EIP),且 instance 與該 portal 可互通 (不能被 Net ACL 或 security group 幹掉)
  3. 有些基於 EC2 的 aws 服務,例如 RDS, ElastiCache, ELB,可以直接綁在 VPC 裡面;千萬要注意 2 的連線限制。如果要透過 aws 外部 ip 連線服務的話,就要被收 (不高的) 連線費用了。
  4. 如果 API 要對內與對外提供服務,要比較加開 internal ELB 與透過 public ip 調用的成本;以現在數字計算,每月超過 1.8TB 的話,給內網加開一組 ELB 會比較划算
  5. 有些服務 (S3) 綁不進內網;收進來分析再吐回去,會吃雙邊傳輸費。在使用者上傳時從 EC2 做必要運算,然後寫進 S3 / 提取時直接給 authorized url 會比較省頻寬錢 XD

最後偷偷感謝 awsug 今天辦的活動,以及 Ken Lee / Jonathan Huang 的分享

發表迴響

分類

%d 位部落客按了讚: