53
如何無痛上雲端? Elastic Beanstalk Java Container為例 Study Hsueh <[email protected]> 2013-11-07 1

如何無痛上雲端? 以Elastic Beanstalk Java Container為例

Embed Size (px)

Citation preview

Page 1: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

如何無痛上雲端?以Elastic Beanstalk Java Container為例

!

Study Hsueh <[email protected]> 2013-11-07

!1

Page 2: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

上雲端

Deploy application to VPS (Virtual Private Server)

Cloud Web Application

or

!2

Page 3: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

Cloud Web Application

Web Application is powered by cloud computing

Elasticity: 能隨時主動增加或刪減資源

Scalability: 資源的增減直接反應到負載上

Reliability: 應⽤用程式不會因為部分故障, 就無法提供服務

!3

Page 4: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

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為例

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為例

!6

有沒有簡單⼀一點的⽅方法上雲端?

Page 7: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

!7

有! ⽤用PaaS吧!

PaaS: Platform as a Service

Page 8: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

可是聽說PaaS....

White List

Black Box

Platform Dependent Services/Libraries

Software Versions

…etc

!8

Page 9: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

!9

試試Elastic Beanstalk吧:)

Page 10: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

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為例

Elastic Beanstalk

!11

Page 12: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

Elastic Beanstalk

Concept(1)

!12

Application

Environment

URL(CNAME)

Page 13: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

Concept(2)

!13

Applications

Environments

URL

Page 14: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

Supported Platforms

!14

Page 15: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

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為例

Customization

!16

Page 17: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

Elastic Beanstalk可以裝第三⽅方的程式嗎? 像是phantomjs, imagemagick…之類

或把Tomcat換成TomEE?

!17

Page 18: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

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為例

Configuration File(1)Configuration File in WAR file

!19

Page 20: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

Configuration File(2)

!20

Configuration File Example

YAML format

Page 21: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

Deployment

!21

Page 22: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

Upload WAR file

AWS Management Console

!22

Page 23: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

AWS Toolkit for Eclipse

!23

Page 24: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

$ 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為例

Deploying with Zero Downtime

Swap Environments URLs (CNAMEs)

It usually takes 2-3 minutes to swap

!25

Page 26: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

Management

!26

Page 27: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

Application versions

!27

Page 28: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

!28

Monitoring

Page 29: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

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為例

Usage

!30

Page 31: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

ProcessesUse Monit to monitor processes

Apache HTTP Server

Apache Tomcat

!31

Page 32: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

!32

Pricing

Page 33: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

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為例

!34

準備好上雲端了嗎? Cloud Ready?

Page 35: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

如果程式有⽤用到下列其中⼀一個...

HTTP Session

File System

User Data Storage

File Cache

!35

Page 36: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

!36

對不起!還不能上雲端:-(

Page 37: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

!37

HTTP Session Problem

Page 38: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

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為例

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為例

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為例

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為例

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為例

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為例

!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為例

Session Managers for Tomcat

Q. 為什麼不使⽤用DeltaManager或BackupManager呢? (in-memory-replication)

A. EC2不⽀支援multicast與boardcast (不完全⽀支援)

!45

Page 46: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

!46

File System Problem

Page 47: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

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為例

Solutions for User Data Storage(1)

Use FS for User Data Storage

改程式的做法

透過AWS SDK把檔案的存取改到S3

不改程式的做法

⽤用S3FS或NFS

!48

Page 49: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

使⽤用S3FS需注意的地⽅方流量

上傳: 檔案會先上傳⾄至Server, 在由Server寫⼊入S3

下載: 檔案需先由S3取出到Server, 在回傳給User

負載

無法降低Server負載

安全性

敏感的資料: 避免直接對外

⼀一般資料: 直接把網址對外, 可降低負載與下載流量

!49

Page 50: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

Solutions for File Cache

Use FS for File Cache

改程式的做法

將file cache改存⾄至DB或Cache Clusters

不改程式的做法

?

!50

Page 51: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

可以⽤用S3FS做File Cache嗎?

S3不適合儲存File Cache

Latency

Read-After-Write Consistency

Eventually Consistency (US Standard Region)

!51

Page 52: 如何無痛上雲端? 以Elastic Beanstalk Java Container為例

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為例

!53

Thanks for your attention:)