繼續學習 re:Invent 2016 的 Serverless 系列課程. 這一堂內容主要是講Serverless架構中,有關於資料層這方面的一些重點提示.

Data tier options on AWS

選項

後端資料層的選項大概有這幾種, 依適合的場合來選擇.

  • DynamoDB
  • ElastiCache
  • RDS
  • Redshift

DynamoDB use cases

NoSQL 與 SQL 各有擅場, 這邊舉了一些DynamoDB適合的場景

  • 線上廣告: Ad serving, ID lookup ..
  • IoT: Tracking state, metadata and readings from millions of devices ..
  • Gaming: 排行榜, session information..
  • Mobile & Web: Storing user profiles, session details, settings ..

AWS Lambda with DynamoDB

  • Lambda 不需要放在 VPC,可直接連
  • 使用 DynamoDB 儲存持久性資料, 配合 ElastiCache 加強讀取的效能

AWS Lambda with RDS

  • Lambda function 預設是能直通 internet 的
  • Lambda function 放到 VPC 會喪失 internet 連線能力.但是你可以看狀況決定要不要放到VPC.
  • 假如你的 Lambda function 同時需要連線 internet & VPC , 可在private subnet 使用NAT instance 或 NAT gateway 串接起來.
  • 將 Lambda 放在VPC ,需要存取 RDS/EC2..等資源時,需要設定:
    • 修改 Lambda 設定中的 VPC Subnet ID & Security group
    • 新增一個 IAM Role, 有現成的Policy叫做 AWSLambdaVPCAccessExecutionRole 可掛上去
    • Security Group inbound要設定好
  • 放在VPC後, 得確定你的 subnet 夠大,有足夠的IP
  • Lambda function 盡量避免對public hostname 做 DNS 解析. 可節省一點點時間.
  • 大規模使用的話 ,RDS instance type大小很重要. 假如是使用DynamoDB/ElastiCache 就不怕 high concurrency的狀況.
  • Kinesis sandwich架構: 如果需要控制流量大小,可使用此架構 ( Lambda -> Kinesis -> Lambda -> Storage tier )
  • 善用 Lambda function 的 hot start 機制。 程式裡面 handler 以外的 scope (例如全域變數) 有機會在下次 invoke起來後重複使用. 所以適合用像是 DB Connection 這類適合重複使用的物件.

AWS Lambda with ElastiCache

  • 在VPC內部存取
  • Memcache 適合大量Read的場景
  • Redis 適合大量write的場景
  • 使用 Redis 寫入時, 可使用 Redis pipeline (有點像批次寫入) 減少一些網路開銷.

結尾

Language Runtimes

  • function & lib 的大小會影響啟動速度, 程式最好注意減肥一下.
  • 大一點的 Lambda function 記憶體大小會減少一些延遲,有十幾種大小選項可以選, 調整效能時或許都測測看?

Local Caching

  • 重申一次,在程式裡面, handler 以外的 scope (例如全域變數) 有機會在下次 invoke起來後重複使用,要善用它.
  • Lambda function 提供的檔案暫存目錄 /tmp (512MB)裡的檔案,下次 invoke起來時也有可能繼續存在!
  • 可使用 schedule 每分鐘都跑一下Lambda function 保持一個持續熱機的狀態.

Retries and Event Ordering

  • API Gateway 呼叫 Lambda function : 同步, 假如 Lambda 程式有問題,就結束,不會重試.
  • S3/SNS 呼叫 Lambda function : 非同步 , 有3次 retry 機制, 還有最近發表的 Dead Letter Queue機制.