SlideShare ist ein Scribd-Unternehmen logo
1 von 93
Cliff Chao-kuan Lu
<clifflu@gmail.com>
A Case Study:
 以超連結 (hyperlink) 代替引用
(attribution)
 引用外部內容均
◦ 已取得授權,或
◦ 包含原始連結,並在合理範圍內引用
 本文件原創內容以 CC-BY 3.0 釋出
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 2
 Full-stack Web Developer
 AWS Solutions Architect
 Nerd
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 3
about.me/clifflu
 Full-stack Web Developer
 AWS Solutions Architect
 Nerd
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 4
about.me/clifflu
Level Up !!
Professional
 Intro
◦ AWS JS SDK
◦ IAM
◦ DynamoDB
 Case Study
◦ Headless Poller
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 5
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 6
這名字好長
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 7
 很新
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 8
 官網
 起自 AWS SDK for Node.js
 2.0 更名並支援 Browser
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 9
 率先支援
◦ DynamoDB
◦ S3
◦ SNS
◦ SQS
 猛烈 rc 中
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 10
AutoScaling, CloudFormation, CloudFront, Cloudsearch,
CloudTrail, CloudWatch, DataPipeline, DirectConnect,
DynamoDB, EC2, ElastiCache, ElasticBeanstalk, ElasticTranscoder,
ELB, EMR, Glacier, IAM, ImportExport, Kinesis, OpsWorks, RDS,
Redshift, Route53, S3, SES, SimpleDB, SNS, SQS, StorageGateway,
STS, Support, SWF
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 11
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 12
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 13
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 14
國防布
 SDK for
◦ PHP, Python, Node.js
◦ Java, .NET,
◦ Ruby
 AWS SDK for Android & iOS
Dec. 8th, 2010
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 15
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 16
 Browser 直通 AWS
◦ 減低對 API Server 的需求
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 17
 機房、機器、網路、電力很難搞
交給 Amazon Web Services 正好
 那 EC2 Instance 呢?
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 18
 EC2 各種麻煩
◦ Load Balancing
◦ Types
◦ Contracts
◦ AutoScaling
 Parameters
 Pattern
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 19
 太多 Gotcha
 每層服務、各層之間都要考慮
 複雜度可能變 M x N
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 20
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 21
example.com
ELB
Route53 CF
S3
Static
Content
Shared
Env
Auto Scaling
group
AMI
AZ 2
Web Servers S1 Secondary
S2 Secondary
Config
AZ 1
Web Servers
S1 Primary S2 Primary
Config
AZ 3
Web Servers
Config +
Arbitor
mongod
 將麻煩留給 AWS
◦ 第三方與服務端授權
◦ Scaling / HA
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 22
 促成符合 SOA Pattern 之架構
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 23
Web Page
HTML
CSS
JS
Authentic
ate &
Authorize
Services
1. Auth Request
3. Authorized Identity
2. Access Token
 容易整合其他服務
 IAM
 STS: Security Token Service
 WIF: Web Identity Federation
 DynamoDB, S3, …
 自有服務,SOA 嘛 O.o/
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 24
 減低將 Access / Secret Token 打入
源碼的可能性
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 25
 API
 IAM
 Services
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 26
 RESTful, SOAP (deprecated)
 Dev Tools 是好朋友
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 27
 安全乃第一要務
 不然會變成礦工 ˇˇ
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 28
AWS 權限樞紐
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 29
 Root User
 Group / IAM User
 Roles
◦ AWS SVC
◦ X-Account
◦ IdP
 Web
 SAML
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 30
 Password
 MFA (Multi-factor authentication)
 Access / Secret Key Pair
 X.509 certificate
 3rd Party
◦ SAML
◦ Web Identity Federation
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 31
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 32
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 33
 Effect: Deny | Allow
 Action:
◦ 允許呼叫的 API
 Resource:
◦ arn
 Principal
◦ 授權端限制
 Condition
◦ 其他限制
 for rule in rules:
◦ Explicit Deny -> Deny
◦ Explicit Allow -> Allow
◦ Default Deny
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 34
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 35
 格式
◦ 冒號分隔
◦ 首二節固定為 arn:aws
◦ Service
◦ Region
◦ Account
◦ Resource Identifier
 給路人甲的
◦ Access / Secret Key Pair
◦ Management Console 登入權限
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 36
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 37
不用怕被關
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 38
Facebook,
Google 可也
 只接受下列驗證機制
◦ 表三家:Amazon, Facebook, Google
◦ SAML
 說明列表
 IAM Partners
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 39
 Trust Relationships
◦ Identity Provider
◦ Client ID
 Permissions
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 40
 用戶可透過第三方驗證與 IAM:STS,
WIF 授予調用 AWS API 之權限
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 41
 WIF Playground
 Login with amazon
 AWS Documentation
◦ Using IAM
◦ Using STS
◦ SDK for JavaScript
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 42
Managed NoSQL Service
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 43
 Managed NoSQL Service
 取代 SimpleDB
 三本柱
◦ Scalable
◦ Available
◦ Fast
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 44
 Scalar
◦ Number
{“N”: “300”}
◦ String
{“S”: “300”}
◦ Binary
{“B”: “BASE64”}
 Multi-valued
◦ Number Set
{“NS”: [“1”,”2”,”3.14”]}
◦ String Set
{“SS”: [“A”,”b”]}
◦ Binary Set
{“BS”: [“BASE64”]}
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 45
 Document size: 64 KB (UTF-8)
 5 LSIs / 5 GSIs per Table
 Min throughput: 1
 Hash Key: 2 KB
 Range Key: 1KB
 BatchGetItem: 1MB or 100 items
 BatchWriteItem: 1MB or 25 items
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 46
 Data Storage:
◦ 約是 S3 10x
 Provisioned Throughputs
◦ Reads:4kb
 循序可合併
 Eventually Consistent 消耗減半
◦ Writes : 1kb
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 47
 Hash Key
 [opt] Range Key
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 48
{“hash”: “a”, “range”: “123”, …}
{“hash”: “a”, “range”: “223”, …}
{“hash”: “a”, “range”: “321”, …}
{“hash”: “b”, “range”: “3”, …}
{“hash”: “b”, “range”: “22”, …}
{“hash”: “b”, “range”: “321”, …}
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 49
{“hash”: “a”, “range”: “123”, …}
{“hash”: “a”, “range”: “223”, …}
{“hash”: “a”, “range”: “321”, …}
{“hash”: “b”, “range”: “3”, …}
{“hash”: “b”, “range”: “22”, …}
{“hash”: “b”, “range”: “321”, …}
SortedSharded
 Index Name
 Hash Key
 Range Key
 Projection
 Shared Throughputs
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 50
 Index Name / Hash / Range Key
◦ 比照 LSI
◦ 不要求 uniqueness
 有自己的 Throughputs
 Eventual Consistency
 Projected Attributes
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 51
 針對特定 Index (PK, LSI or GSI) 查詢
 支援 Condition
 支援 Filter
 高效
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 52
 現適用於 scan 及 query
 消耗 throughput 不變
 減低 DynamoDB <-> Caller 傳輸
 boto 僅 boto.dynamodb2 支援
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 53
 …
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 54
 Upsert
 需包含 Primary Key
 Update: PATCH
 Put: POST (PUT)
 支援 Conditional Operation
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 55
 支援 Conditional Operation
 用於刪除 Item
 若要刪除 Attribute,需使用
updateItem
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 56
 “Expected”
 可實現 MVCC pattern
 配合 Document Atomicity 可模擬
transactional behavior (2-Phase
Commit)
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 57
 updateItem
◦ AttributeUpdates
 Value
 Action:
 PUT
 DELETE
 ADD
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 58
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 59
 Item
 Attribute
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 60
 Item
◦ “dynamodb:LeadingKeys”:
[“xxx”]
 Attribute
◦ “dynamodb:Attributes”:
[“xxx”,”yyy”]
 While True: Item.save(expect=…)
 1unit for Read / Write
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 61
 Stats from
DynamoDB
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 62
 CloudWatch 顯示低階數據
 `Expect` 不消耗 Read Unit
 允許 short burst
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 63
 了解 DynamoDB 的
◦ 設計目標
◦ 調校
 Index
 Throughput
◦ 操作
◦ 計費
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 64
終於到正題了 !?
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 65
 Phil:
clifflu 你要不要講五月小聚
 Henry:
聽說 Cloudflare + wordpress 會爆炸
 clifflu:
好啊,就講這個吧
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 66
 秒殺
 WP 看 location.href 重導頁面
 講不滿三十分鐘 ˇˇ
 只好調出備用題目
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 67
 EC2 各種麻煩
◦ Load Balancing
◦ Types
◦ Contracts
◦ AutoScaling
 Parameters
 Pattern
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 68
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 69
 使用服務
◦ IAM, S3 (DynamoDB), CF
 Octopress / Jekyll !?
Clone Ruby 好像很遜 >///<
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 70
 最新功能
 最冷門功能
 最好 Manual 沒有
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 71
 前端
◦ Angular.js 潮
◦ OAuth 勁
 後端
◦ 從缺,帥
 資料
◦ DynamoDB,猛
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 72
 前端
◦ Angular.js 潮
◦ OAuth 勁
 後端
◦ 從缺,帥
 資料
◦ DynamoDB,猛
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 73
CloudFront
 申請 APP
◦ Amazon
◦ Facebook
◦ Google
 將 access_token 透過 STS 轉換為
Access / Secret Key Pair
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 74
 欄位:uid, q_id, o_id
 Primary Key
◦ (uid, q_id) : unique 確保每人每題一票
◦ 選 uid 為 hash key
 Authentication
 Cardinality
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 75
 updateItem (省略 callback)
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 76
Primary Key
Upsert
 updateItem
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 77
 正解:Worker,但霸氣不足
 需求:
◦ uid 不外漏
◦ affordable
◦ 快
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 78
 建立 (q_id, o_id) 之 GSI
 禁止讀取 uid 欄位
 取出列數即為總票數
 循序讀取,節省 read capacity
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 79
 LSI / GSI 必定包含 Primary Key
 透過 Query / Scan 取得 Item 時,必
須允許讀取 primary key
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 80
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 81
 運用 “select”: “COUNT”
 只計算票數,不取 Item body
 循序讀取
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 82
 Document 沒寫
 Boto 沒使用
◦ dynamodb 實做了 query.count(),透過
取回 item 記數
◦ dynamodb2 未有類似功能
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 83
 GSI Read Capacity, 1.5 !!??
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 84
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 85
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 86
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 87
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 88
Throughputs Read Write
Table 1 5
GSI 19 5
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 89
Throughputs Read Write
Table 1 5
GSI 19 5
Total #Reads
8kb data 消耗 1
投票消耗
GSI ~ Table
~6.6 USD/mo
 改用 Batched Query ?
◦ 不支援 select COUNT
 優化流程
◦ 資料更新
◦ 後台計票
◦ 操作介面
◦ PR please 
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 90
今天沒有 bonus session
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 91
回家記得念 Manual
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 92

/clifflu/headless-poller
 簡報下載:
 AWS Doc
◦ IAM
◦ STS
◦ DynamoDB
API
2014/5/19
CC-BY 3.0, Cliff Chao-kuan Lu
<clifflu@gmail.com> 93

Weitere ähnliche Inhalte

Mehr von Cliff Chao-kuan Lu

Mehr von Cliff Chao-kuan Lu (15)

EC2 Spot in 104
EC2 Spot in 104EC2 Spot in 104
EC2 Spot in 104
 
Serverless 網站監控
Serverless 網站監控Serverless 網站監控
Serverless 網站監控
 
Lessons Learnt from Guanyu
Lessons Learnt from GuanyuLessons Learnt from Guanyu
Lessons Learnt from Guanyu
 
Serverless Patterns
Serverless PatternsServerless Patterns
Serverless Patterns
 
Greetings from AWS User Group Taiwan
Greetings from AWS User Group TaiwanGreetings from AWS User Group Taiwan
Greetings from AWS User Group Taiwan
 
104 meets cloud
104 meets cloud104 meets cloud
104 meets cloud
 
Intro to Serverless
Intro to ServerlessIntro to Serverless
Intro to Serverless
 
Interview Quiz w/o Server
Interview Quiz w/o ServerInterview Quiz w/o Server
Interview Quiz w/o Server
 
那些 re:Invent 不怎麼技術的事
那些 re:Invent 不怎麼技術的事那些 re:Invent 不怎麼技術的事
那些 re:Invent 不怎麼技術的事
 
Cost Optimization Best Practices from Trend Micro
Cost Optimization Best Practices from Trend Micro Cost Optimization Best Practices from Trend Micro
Cost Optimization Best Practices from Trend Micro
 
不談 IAM
不談 IAM不談 IAM
不談 IAM
 
Networking in the cloud
Networking in the cloudNetworking in the cloud
Networking in the cloud
 
Health, Platform, In The Cloud
Health, Platform, In The CloudHealth, Platform, In The Cloud
Health, Platform, In The Cloud
 
AWS Solutions Architect 準備心得
AWS Solutions Architect 準備心得AWS Solutions Architect 準備心得
AWS Solutions Architect 準備心得
 
無障礙網頁
無障礙網頁無障礙網頁
無障礙網頁
 

Case Study on AWS JavaScript SDK and DynamoDB

  • 2.  以超連結 (hyperlink) 代替引用 (attribution)  引用外部內容均 ◦ 已取得授權,或 ◦ 包含原始連結,並在合理範圍內引用  本文件原創內容以 CC-BY 3.0 釋出 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 2
  • 3.  Full-stack Web Developer  AWS Solutions Architect  Nerd 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 3 about.me/clifflu
  • 4.  Full-stack Web Developer  AWS Solutions Architect  Nerd 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 4 about.me/clifflu Level Up !! Professional
  • 5.  Intro ◦ AWS JS SDK ◦ IAM ◦ DynamoDB  Case Study ◦ Headless Poller 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 5
  • 6. 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 6
  • 7. 這名字好長 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 7
  • 8.  很新 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 8
  • 9.  官網  起自 AWS SDK for Node.js  2.0 更名並支援 Browser 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 9
  • 10.  率先支援 ◦ DynamoDB ◦ S3 ◦ SNS ◦ SQS  猛烈 rc 中 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 10
  • 11. AutoScaling, CloudFormation, CloudFront, Cloudsearch, CloudTrail, CloudWatch, DataPipeline, DirectConnect, DynamoDB, EC2, ElastiCache, ElasticBeanstalk, ElasticTranscoder, ELB, EMR, Glacier, IAM, ImportExport, Kinesis, OpsWorks, RDS, Redshift, Route53, S3, SES, SimpleDB, SNS, SQS, StorageGateway, STS, Support, SWF 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 11
  • 12. 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 12
  • 13. 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 13
  • 14. 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 14 國防布
  • 15.  SDK for ◦ PHP, Python, Node.js ◦ Java, .NET, ◦ Ruby  AWS SDK for Android & iOS Dec. 8th, 2010 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 15
  • 16. 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 16
  • 17.  Browser 直通 AWS ◦ 減低對 API Server 的需求 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 17
  • 18.  機房、機器、網路、電力很難搞 交給 Amazon Web Services 正好  那 EC2 Instance 呢? 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 18
  • 19.  EC2 各種麻煩 ◦ Load Balancing ◦ Types ◦ Contracts ◦ AutoScaling  Parameters  Pattern 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 19
  • 20.  太多 Gotcha  每層服務、各層之間都要考慮  複雜度可能變 M x N 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 20
  • 21. 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 21 example.com ELB Route53 CF S3 Static Content Shared Env Auto Scaling group AMI AZ 2 Web Servers S1 Secondary S2 Secondary Config AZ 1 Web Servers S1 Primary S2 Primary Config AZ 3 Web Servers Config + Arbitor mongod
  • 22.  將麻煩留給 AWS ◦ 第三方與服務端授權 ◦ Scaling / HA 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 22
  • 23.  促成符合 SOA Pattern 之架構 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 23 Web Page HTML CSS JS Authentic ate & Authorize Services 1. Auth Request 3. Authorized Identity 2. Access Token
  • 24.  容易整合其他服務  IAM  STS: Security Token Service  WIF: Web Identity Federation  DynamoDB, S3, …  自有服務,SOA 嘛 O.o/ 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 24
  • 25.  減低將 Access / Secret Token 打入 源碼的可能性 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 25
  • 26.  API  IAM  Services 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 26
  • 27.  RESTful, SOAP (deprecated)  Dev Tools 是好朋友 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 27
  • 28.  安全乃第一要務  不然會變成礦工 ˇˇ 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 28
  • 29. AWS 權限樞紐 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 29
  • 30.  Root User  Group / IAM User  Roles ◦ AWS SVC ◦ X-Account ◦ IdP  Web  SAML 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 30
  • 31.  Password  MFA (Multi-factor authentication)  Access / Secret Key Pair  X.509 certificate  3rd Party ◦ SAML ◦ Web Identity Federation 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 31
  • 32. 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 32
  • 33. 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 33  Effect: Deny | Allow  Action: ◦ 允許呼叫的 API  Resource: ◦ arn  Principal ◦ 授權端限制  Condition ◦ 其他限制
  • 34.  for rule in rules: ◦ Explicit Deny -> Deny ◦ Explicit Allow -> Allow ◦ Default Deny 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 34
  • 35. 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 35  格式 ◦ 冒號分隔 ◦ 首二節固定為 arn:aws ◦ Service ◦ Region ◦ Account ◦ Resource Identifier
  • 36.  給路人甲的 ◦ Access / Secret Key Pair ◦ Management Console 登入權限 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 36
  • 37. 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 37 不用怕被關
  • 38. 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 38 Facebook, Google 可也
  • 39.  只接受下列驗證機制 ◦ 表三家:Amazon, Facebook, Google ◦ SAML  說明列表  IAM Partners 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 39
  • 40.  Trust Relationships ◦ Identity Provider ◦ Client ID  Permissions 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 40
  • 41.  用戶可透過第三方驗證與 IAM:STS, WIF 授予調用 AWS API 之權限 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 41
  • 42.  WIF Playground  Login with amazon  AWS Documentation ◦ Using IAM ◦ Using STS ◦ SDK for JavaScript 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 42
  • 43. Managed NoSQL Service 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 43
  • 44.  Managed NoSQL Service  取代 SimpleDB  三本柱 ◦ Scalable ◦ Available ◦ Fast 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 44
  • 45.  Scalar ◦ Number {“N”: “300”} ◦ String {“S”: “300”} ◦ Binary {“B”: “BASE64”}  Multi-valued ◦ Number Set {“NS”: [“1”,”2”,”3.14”]} ◦ String Set {“SS”: [“A”,”b”]} ◦ Binary Set {“BS”: [“BASE64”]} 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 45
  • 46.  Document size: 64 KB (UTF-8)  5 LSIs / 5 GSIs per Table  Min throughput: 1  Hash Key: 2 KB  Range Key: 1KB  BatchGetItem: 1MB or 100 items  BatchWriteItem: 1MB or 25 items 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 46
  • 47.  Data Storage: ◦ 約是 S3 10x  Provisioned Throughputs ◦ Reads:4kb  循序可合併  Eventually Consistent 消耗減半 ◦ Writes : 1kb 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 47
  • 48.  Hash Key  [opt] Range Key 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 48 {“hash”: “a”, “range”: “123”, …} {“hash”: “a”, “range”: “223”, …} {“hash”: “a”, “range”: “321”, …} {“hash”: “b”, “range”: “3”, …} {“hash”: “b”, “range”: “22”, …} {“hash”: “b”, “range”: “321”, …}
  • 49. 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 49 {“hash”: “a”, “range”: “123”, …} {“hash”: “a”, “range”: “223”, …} {“hash”: “a”, “range”: “321”, …} {“hash”: “b”, “range”: “3”, …} {“hash”: “b”, “range”: “22”, …} {“hash”: “b”, “range”: “321”, …} SortedSharded
  • 50.  Index Name  Hash Key  Range Key  Projection  Shared Throughputs 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 50
  • 51.  Index Name / Hash / Range Key ◦ 比照 LSI ◦ 不要求 uniqueness  有自己的 Throughputs  Eventual Consistency  Projected Attributes 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 51
  • 52.  針對特定 Index (PK, LSI or GSI) 查詢  支援 Condition  支援 Filter  高效 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 52
  • 53.  現適用於 scan 及 query  消耗 throughput 不變  減低 DynamoDB <-> Caller 傳輸  boto 僅 boto.dynamodb2 支援 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 53
  • 54.  … 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 54
  • 55.  Upsert  需包含 Primary Key  Update: PATCH  Put: POST (PUT)  支援 Conditional Operation 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 55
  • 56.  支援 Conditional Operation  用於刪除 Item  若要刪除 Attribute,需使用 updateItem 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 56
  • 57.  “Expected”  可實現 MVCC pattern  配合 Document Atomicity 可模擬 transactional behavior (2-Phase Commit) 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 57
  • 58.  updateItem ◦ AttributeUpdates  Value  Action:  PUT  DELETE  ADD 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 58
  • 59. 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 59  Item  Attribute
  • 60. 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 60  Item ◦ “dynamodb:LeadingKeys”: [“xxx”]  Attribute ◦ “dynamodb:Attributes”: [“xxx”,”yyy”]
  • 61.  While True: Item.save(expect=…)  1unit for Read / Write 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 61
  • 62.  Stats from DynamoDB 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 62
  • 63.  CloudWatch 顯示低階數據  `Expect` 不消耗 Read Unit  允許 short burst 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 63
  • 64.  了解 DynamoDB 的 ◦ 設計目標 ◦ 調校  Index  Throughput ◦ 操作 ◦ 計費 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 64
  • 65. 終於到正題了 !? 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 65
  • 66.  Phil: clifflu 你要不要講五月小聚  Henry: 聽說 Cloudflare + wordpress 會爆炸  clifflu: 好啊,就講這個吧 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 66
  • 67.  秒殺  WP 看 location.href 重導頁面  講不滿三十分鐘 ˇˇ  只好調出備用題目 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 67
  • 68.  EC2 各種麻煩 ◦ Load Balancing ◦ Types ◦ Contracts ◦ AutoScaling  Parameters  Pattern 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 68
  • 69. 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 69
  • 70.  使用服務 ◦ IAM, S3 (DynamoDB), CF  Octopress / Jekyll !? Clone Ruby 好像很遜 >///< 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 70
  • 71.  最新功能  最冷門功能  最好 Manual 沒有 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 71
  • 72.  前端 ◦ Angular.js 潮 ◦ OAuth 勁  後端 ◦ 從缺,帥  資料 ◦ DynamoDB,猛 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 72
  • 73.  前端 ◦ Angular.js 潮 ◦ OAuth 勁  後端 ◦ 從缺,帥  資料 ◦ DynamoDB,猛 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 73 CloudFront
  • 74.  申請 APP ◦ Amazon ◦ Facebook ◦ Google  將 access_token 透過 STS 轉換為 Access / Secret Key Pair 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 74
  • 75.  欄位:uid, q_id, o_id  Primary Key ◦ (uid, q_id) : unique 確保每人每題一票 ◦ 選 uid 為 hash key  Authentication  Cardinality 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 75
  • 76.  updateItem (省略 callback) 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 76 Primary Key Upsert
  • 77.  updateItem 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 77
  • 78.  正解:Worker,但霸氣不足  需求: ◦ uid 不外漏 ◦ affordable ◦ 快 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 78
  • 79.  建立 (q_id, o_id) 之 GSI  禁止讀取 uid 欄位  取出列數即為總票數  循序讀取,節省 read capacity 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 79
  • 80.  LSI / GSI 必定包含 Primary Key  透過 Query / Scan 取得 Item 時,必 須允許讀取 primary key 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 80
  • 81. 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 81
  • 82.  運用 “select”: “COUNT”  只計算票數,不取 Item body  循序讀取 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 82
  • 83.  Document 沒寫  Boto 沒使用 ◦ dynamodb 實做了 query.count(),透過 取回 item 記數 ◦ dynamodb2 未有類似功能 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 83
  • 84.  GSI Read Capacity, 1.5 !!?? 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 84
  • 85. 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 85
  • 86. 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 86
  • 87. 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 87
  • 88. 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 88 Throughputs Read Write Table 1 5 GSI 19 5
  • 89. 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 89 Throughputs Read Write Table 1 5 GSI 19 5 Total #Reads 8kb data 消耗 1 投票消耗 GSI ~ Table ~6.6 USD/mo
  • 90.  改用 Batched Query ? ◦ 不支援 select COUNT  優化流程 ◦ 資料更新 ◦ 後台計票 ◦ 操作介面 ◦ PR please  2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 90
  • 91. 今天沒有 bonus session 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 91
  • 92. 回家記得念 Manual 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 92
  • 93.  /clifflu/headless-poller  簡報下載:  AWS Doc ◦ IAM ◦ STS ◦ DynamoDB API 2014/5/19 CC-BY 3.0, Cliff Chao-kuan Lu <clifflu@gmail.com> 93