如何無痛上雲端? 以Elastic Beanstalk Java Container為例
-
Upload
yuen-kuei-hsueh -
Category
Technology
-
view
1.760 -
download
8
Transcript of 如何無痛上雲端? 以Elastic Beanstalk Java Container為例
![Page 2: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/2.jpg)
上雲端
Deploy application to VPS (Virtual Private Server)
Cloud Web Application
or
!2
![Page 3: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/3.jpg)
Cloud Web Application
Web Application is powered by cloud computing
Elasticity: 能隨時主動增加或刪減資源
Scalability: 資源的增減直接反應到負載上
Reliability: 應⽤用程式不會因為部分故障, 就無法提供服務
!3
![Page 4: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/4.jpg)
Cloud Web Application
!4 http://media.amazonwebservices.com/architecturecenter/AWS_ac_ra_web_01.pdf
Architecture for Web Application Hosting
![Page 5: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/5.jpg)
Cloud Web ApplicationBuild a cloud web application in AWS, you may need to know…
Elastic Load Balancing (ELB)
Auto Scaling
Cloud Watch
Elastic Compute Cloud (EC2)
Deployment
Management
Monitoring
!5
Infrastructure}
![Page 6: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/6.jpg)
!6
有沒有簡單⼀一點的⽅方法上雲端?
![Page 7: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/7.jpg)
!7
有! ⽤用PaaS吧!
PaaS: Platform as a Service
![Page 8: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/8.jpg)
可是聽說PaaS....
White List
Black Box
Platform Dependent Services/Libraries
Software Versions
…etc
!8
![Page 9: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/9.jpg)
!9
試試Elastic Beanstalk吧:)
![Page 10: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/10.jpg)
Elastic Beanstalk (EB)
Elastic Beanstalk是架構在AWS infrastructure上的PaaS服務, 使⽤用Elastic Beanstalk可以同時具備控制底層IaaS的能⼒力與PaaS的便利
Elastic Beanstalk的縮寫是EB (不是EBS, EBS是Elastic Block Store的縮寫)
!10
![Page 11: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/11.jpg)
Elastic Beanstalk
!11
![Page 12: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/12.jpg)
Elastic Beanstalk
Concept(1)
!12
Application
Environment
URL(CNAME)
![Page 13: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/13.jpg)
Concept(2)
!13
Applications
Environments
URL
![Page 14: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/14.jpg)
Supported Platforms
!14
![Page 15: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/15.jpg)
Java Container
OS: x32/x64 Amazon Linux (2012.09)
Java: OpenJdk 1.6.0_24
Web Container: Tomcat 6.0.35 & 7.0.27
!15
![Page 16: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/16.jpg)
Customization
!16
![Page 17: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/17.jpg)
Elastic Beanstalk可以裝第三⽅方的程式嗎? 像是phantomjs, imagemagick…之類
或把Tomcat換成TomEE?
!17
![Page 18: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/18.jpg)
Customizing Environment
Elastic Beanstalk provides two mechanisms to customize environment
Custom AMI
Configuration File (Oct 2. 2012)
including AWS resources (e.g. ElastiCache)
!18
![Page 19: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/19.jpg)
Configuration File(1)Configuration File in WAR file
!19
![Page 20: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/20.jpg)
Configuration File(2)
!20
Configuration File Example
YAML format
![Page 21: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/21.jpg)
Deployment
!21
![Page 22: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/22.jpg)
Upload WAR file
AWS Management Console
!22
![Page 23: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/23.jpg)
AWS Toolkit for Eclipse
!23
![Page 24: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/24.jpg)
$ git init # init git repository$ eb init # init EB Application Configuration$ eb start # start EB Environment$ git add . # track all files$ git commit -m “Initial Commit” # commit$ git aws.push # push to EB
!24
Command-line interface
![Page 25: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/25.jpg)
Deploying with Zero Downtime
Swap Environments URLs (CNAMEs)
It usually takes 2-3 minutes to swap
!25
![Page 26: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/26.jpg)
Management
!26
![Page 27: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/27.jpg)
Application versions
!27
![Page 28: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/28.jpg)
!28
Monitoring
![Page 29: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/29.jpg)
Health CheckEC2 Instance
TCP:80 for nonlegacy containers
HTTP:80 for legacy containers
Application health check URL
HTTP 200 OK= Health
!29
![Page 30: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/30.jpg)
Usage
!30
![Page 31: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/31.jpg)
ProcessesUse Monit to monitor processes
Apache HTTP Server
Apache Tomcat
!31
![Page 32: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/32.jpg)
!32
Pricing
![Page 33: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/33.jpg)
PricingElastic Beanstalk is free, you only pay for the underlying AWS resources
Single-instance Type
EC2 instance
Load-balancing, Autoscaling Type
EC2 instance(s)
Elastic Load Balancing
!33
![Page 34: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/34.jpg)
!34
準備好上雲端了嗎? Cloud Ready?
![Page 35: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/35.jpg)
如果程式有⽤用到下列其中⼀一個...
HTTP Session
File System
User Data Storage
File Cache
!35
![Page 36: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/36.jpg)
!36
對不起!還不能上雲端:-(
![Page 37: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/37.jpg)
!37
HTTP Session Problem
![Page 38: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/38.jpg)
HTTP Session Problem(1)
!38
Session table
ABAB
Session table
CDCD
JSESSIONID: CDCD JSESSIONID: ABAB
Server#1 Server#2
User#1 User#2
![Page 39: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/39.jpg)
HTTP Session Problem(2)
!39
Session table
CDCD
JSESSIONID: ABAB
Server#2Session
table
ABAB
JSESSIONID: CDCD
Server#1
User#1 User#2
Invalid Session for Server#2
Load Balancer uses Round Robin
redirect
![Page 40: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/40.jpg)
Solutions for HTTP Session
改程式的做法
Keep Stateless (use access token)
不改程式的做法
Session Persistence
Sticky Sessions
!40
(Not working for Auto Scaling)
![Page 41: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/41.jpg)
Sticky Sessions Problem(1)
!41
Session table
ABAB
Session table
CDCD
JSESSIONID: CDCD JSESSIONID: ABAB
Server#1 Server#2
User#1 User#2
Server Session
Server#1 ABAB
Server#2 CDCD
Load Balancer enables Sticky Sessions
![Page 42: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/42.jpg)
Server Session
Server#1 ABAB
Server#2 CDCD
Sticky Sessions Problem(2)
!42
Session table
ABAB
JSESSIONID: CDCD JSESSIONID: ABAB
Server#1 Server#2
User#1 User#2
Scale in or Server Failure
Invalid Session for Server#1
![Page 43: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/43.jpg)
Session Persistence
!43!43
Shared Session table
ABAB
CDCD
JSESSIONID: CDCD JSESSIONID: ABAB
Server#1 Server#2
User#1 User#2
![Page 44: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/44.jpg)
!44
Session Managers for Tomcat
PersistentManager (JDBC Based Store)
http://tomcat.apache.org/tomcat-7.0-doc/config/manager.html#Nested_Components
Memcached Session Manager
http://code.google.com/p/memcached-session-manager
Redis Session Manager
https://github.com/jcoleman/tomcat-redis-session-manager
Amazon DynamoDB Session Manager
https://github.com/aws/aws-dynamodb-session-tomcat/
![Page 45: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/45.jpg)
Session Managers for Tomcat
Q. 為什麼不使⽤用DeltaManager或BackupManager呢? (in-memory-replication)
A. EC2不⽀支援multicast與boardcast (不完全⽀支援)
!45
![Page 46: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/46.jpg)
!46
File System Problem
![Page 47: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/47.jpg)
User Data Storage Problem(1)
!47
Server#1 Server#2
User#1 User#2
File#1
Upload File#1
File#2
Upload File#2
![Page 48: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/48.jpg)
Solutions for User Data Storage(1)
Use FS for User Data Storage
改程式的做法
透過AWS SDK把檔案的存取改到S3
不改程式的做法
⽤用S3FS或NFS
!48
![Page 49: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/49.jpg)
使⽤用S3FS需注意的地⽅方流量
上傳: 檔案會先上傳⾄至Server, 在由Server寫⼊入S3
下載: 檔案需先由S3取出到Server, 在回傳給User
負載
無法降低Server負載
安全性
敏感的資料: 避免直接對外
⼀一般資料: 直接把網址對外, 可降低負載與下載流量
!49
![Page 50: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/50.jpg)
Solutions for File Cache
Use FS for File Cache
改程式的做法
將file cache改存⾄至DB或Cache Clusters
不改程式的做法
?
!50
![Page 51: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/51.jpg)
可以⽤用S3FS做File Cache嗎?
S3不適合儲存File Cache
Latency
Read-After-Write Consistency
Eventually Consistency (US Standard Region)
!51
![Page 52: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/52.jpg)
SummaryElastic Beanstalk is PaaS, but you retain full control over the underlying infrastructure
Elastic Beanstalk is Free
For Scalability, you should pay attention to
HTTP Session
File System
!52
![Page 53: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例](https://reader031.fdocument.pub/reader031/viewer/2022012320/559489391a28ab177d8b46a7/html5/thumbnails/53.jpg)
!53
Thanks for your attention:)