企業雲端應用服務整合
廖峻鋒 (try)[email protected]
雲端應用服務
What primary development framework are you planning to use in the cloud?
- A survey of 1,200 attendees of VMworld, 2011
• Java EE 32%
• .NET 29%
• PHP 14%
• ...others
“ The big focus with Java EE 7 is getting Java apps into the cloud ”
-Linda DeMichiel , Java EE 7 Spec Lead, Java One 2011
雲端應用服務的特色
雲端應用服務的模式
Java EE 在雲端服務扮演的角色
特色
多租戶Multi-Tenant
隨需伸縮Elastic
以次(量)計價Pay-per-use
P. Mell and T. Grance, The NIST Definition of Cloud Computing, National Institute of Standards and Technology, 2011
服務模式IaaS (Infrastructure as a Service)
PaaS (Platform as a Service)
SaaS (Software as a Service)
設施即服務模式 (IaaS)• 廠商
– 提供虛擬的計算設施 (CPU, 儲存空間)
• 使用者– 根據需求訂製自已所需設施– 以為自己獨佔這些設施
• 範例– Amazon EC2
AMI (Amazon Machine Image)2 CPU, 1G RAM, Ubuntu…
Shared Infrastructure
ssh
Virtualized Computer (s)
平台即服務模式 (PaaS)• 廠商
– 提供應用程式規格或開發工具– 符合規格者可佈署至其提供的容器(Container)– 可依應用程式負荷,自動調配計算與儲存資源
• 使用者– 開發並佈署應用程式
• 範例– GAE (Google App Engine)
Shared Platform
軟體即服務模式 (SaaS)• 廠商
– 提供應用程式本身– 提供圖型化介面的應用程式客製化工具– 可依應用程式負荷,自動調配計算與儲存資源
• 使用者– 使用圖型化介面,客製化自己的應用程式
• 範例– Salesforce.com Shared Application
在雲端中的角色
Java EE enabled Applications
Cloud Services
Java EE as Cloud Consumer
Java EE enabled Applications
Java EE as Cloud Integrator
Java EE enabledCloud Services
Java EE as Cloud Provider
Java EE在雲端扮演的角色
• Java EE as Cloud Consumer– Web Services (JAX-RS, JAX-WS)
• Java EE as Cloud Integrator– Enterprise Service Bus (JBI)
• Java EE as Cloud Provider– Elastic Clustering
– Multi-Tenant Application Server
Will be available in Java EE 7
SaaS
PaaS
S. S. Rajan, HP Solution Architect, “Java EE 7 and Cloud Computing,” Java Developer’s Journal, 2011
Java EE 8 中將有更多 support !
Java EE enabled Applications
Cloud Services
Java EE as Cloud Consumer
Java EE enabled Applications
Cloud ServicesHTTP
在雲端環境中,主機之間透過Internet標準協定進行呼叫
Web Services
有那些服務可呼叫 (服務內容)?用什麼方式呼叫 (存取方式)?
WSDL 與SOAP• 描述所提供存取方式及服務內容的標準規範
WSDL (Web Services Description Language)
請問您提供什麼服務?
您給我二個數字,照如此如此方式呼叫,我就將他們加起來,再用這般這般格式回傳給您
12
3
SOAP-Request
SOAP-Response
加法服務
SOAP 封包結構SOAP-ENV: Envelop
SOAP-ENV: Header
SOAP-ENV: Body
(放置如認證金鑰等附加資訊)
(放置XML)
11
2
使用WSDL描述服服務
Calculator Serviceint add(int i, int j)int subtract(int i, int j)int multiply(int i, int j)int divide(int i, int j)
Port Type(Interface)
int add(int i, int j)
inputoutput
operation
WSDL
WSDL細部結構
portType
port
types
operation (包含input / output)
addsubtract
multiplydivide
int
CalculatorServiceEP
WSDL 2.0中,portType=interface; port=endpoint
CalculatorService
Java API for XML Web Services
先寫程式
@WebServicepublic interface Calculator{
@WebMethodpublic int add(int i, int j);
}
@WebServicepublic class CalculatorImpl implements Calculator{
@Overridepublic int add(int i, int j){
return i+j;}
}
POJI / POJO WSDL
(with annotation)
Java API for RESTful Web Services
REST = Representational State Transfer
RESTful Web Services• R. Fielding在其博士論文提出之架構風格
– 將HTTP的精神套用到Web Services上
– “REST is not a standard, but it describes the use of standards”
• HTTP/ URL/ XML
• 和傳統SOAP/WSDL Web Services各有優勢
http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm
REST 意函解析萬物皆視被為具有URI的資源(Resources)
http://acme.com/dep1/notebook1
http://acme.com/dep1/box1
http://acme.com/dep1/person/Helen
http://acme.com/dep1/stapler
http://acme.com/dep1/phone1
REST 意函解析 (2)http://acme.com/dep1/stapler
ClientGET
GET 一台釘書機要回傳什麼?
Resource
REST 意函解析 (3)http://acme.com/dep1/stapler
ClientGET
RESTful Web Services支援多種表徵(Representation) ,例如HTML, XML, JSON, …
Representation
4
Resource
釘書機的狀態
資源的狀態隨時會改變http://acme.com/dep1/stapler
ClientGET
4
Resource
釘書機的狀態
ClientGET
3
Resource
藉由取得資源的表徵,我們可以得知該資源的狀態改變
REST = Representational State Transfer表徵 狀態 傳送(轉變)
ClientGET
3
Resource
藉由不斷傳送資源的表徵,可以得知該資源的狀態改變
ClientPUT /recharge
Resource
甚至於也可以改變資源的狀態
10
Method CRUD
POST Createupdate, delete
GET Read
PUT Updatecreate
DELETE Delete
POST: create with unknown ID, PUT: create with known ID
對資源做CRUD
RESTful Service Bean
@Path("/adder")@Produces("application/xml")public class CalculatorBean{
@GET@Path("/add/{i}/{j}")public int add(@PathParam("i") int i, @PathParam("j") int j){
return i+j;}
}
GET /adder/add/1/2
(1)
(3)
(2)
3
(4)
Java EE enabled Applications
Java EE as Cloud Integrator
Enterprise Service Bus• 基於共通標準 整合異質服務 的平台
– 讓各式異質服務在不相依的前提下相互呼叫溝通
• 重要功能– 異質元件間的服務呼叫
– 異質元件間的訊息傳送
– Message Flow管理 (EIP)
– Process Workflow管理
圖片來源: Wikipedia
ESB現有解決方案
• Java EE
– JSR-208 (Java Business Integration, JBI)
• OpenESB (GlassFish)
• Apache ServiceMix 3.x
• Non-Java EE
– Mule ESB
– Oracle AquaLogic ESB
ESB的結構• ESB包含下列組件
– Service Component• Service Engine (SE)
– ESB中提供核心服務的模組
• Binding Component (BC)
– 將外部服務轉接到ESB的模組
– Normalized Message Router (NMR)
– Delivery Channel (DC)
SE
NMR
BC 1
DC
BC 2
ESB
Party A Party B
使用ESB達成異質服務整合
Normalized Message Router (NMR)
JBI 環境
SE…
JMS BC File BC JDBC BC
DatabaseFile System
Topic A
Topic B
Topic C
MOM
SESE
ESB
ESB在雲端的定位 (以WSO2為例)5000 sessions
50 sessionswith fail over10 sessions
功能1: 異質服務整合功能2: Load Balance功能3: Failover
To ESB or not to ESB ?• ESB的問題
– 非常難學 (缺乏有系統的專書)
– 非常麻煩 (缺乏良好的開發工具)
• 使用時機
– 必須與許多即有使用多種異質協定的系統整合
– 整合時需要用到複雜的業務流程時(i.e. BPEL)
– 高度動態的服務端點
• 客戶每次必須根據SLA在不同服務端點間做選擇
Java EE enabledCloud Services
Java EE as Cloud Provider
Java EE 7/8與雲端應用服務
• Java EE 7 (PaaS相關功能)
– 隨需伸縮叢集 (Elastic Clustering)
– 多租戶 (Multi-Tenancy)
– 資料切片 (Sharding)
• Java EE 8 (SaaS相關功能)
– SaaS Multi-Tenancy、 NoSQL support…其它Java EE 7來不及做的
AP Server (GlassFish 4)
JPA (EclipseLink)
JPA (Hibernate Sharding)
隨需伸縮叢集 (Elastic Clustering)
• 2011.10.3 JavaOne 2011 technical keynote以GlassFish 4為例,展示了未來Java EE Server如何以PaaS模式運作
http://glassfish.java.net/javaone2011/
公司A 公司B 公司C
現在的Java EE平台
Java EE平台開發商
公司A 公司B 公司C
雲端化的Java EE平台
Java EE平台開發商
隨需伸縮叢集概念
SI
SISI
SI
SharedJava EE PaaSPlatform
SI=Server Instance
SISI
SI
公司1 公司2 公司3
叢集1
叢集2 叢集3
可隨需伸縮
可隨需伸縮
提供虛擬機器
Shared IaaS Platform (如Amazon EC2)Shared IaaS Platform (如Amazon EC2)
提供虛擬機器提供虛擬機器
佈署與管理
佈署與管理
佈署與管理
傳統Java EE叢集
ServerInstance
ServerInstance
Domain Administration Server
ServerInstance
ServerInstance
開發者
使用者
叢集
與IaaS整合成為隨需伸縮叢集
Domain Administration Server
開發者 (租戶)
使用者ServerInstance
ServerInstance
ServerInstance
IaaSManagement Service
叢集
VirtualServer
VirtualServer
VirtualServer
IaaS Provider
多租戶 (Multi-Tenancy)
• 在多租戶間以彈性的機制分享計算、儲存資源或應用程式
– 所提供資源必須隨需伸縮
– 所分享的資源或應用程式皆可為租戶量身訂做
ApplicationApplication
DataData
Computing ResourceComputing Resource
租戶 (Tenant): “一群”使用者,通常同屬於一家公司
“多租戶化”的程度
Application Application Application
DataDataData
划算
Application 層級的Multi-Tenancy議題
Web Container EJB Container Database
/show.jsp?id=1000 getItem(1000) Select * from item where id = …
單租戶
/tenant1/show.jsp?id=1000 getItem(tenant1,1000) Select * from item where tenant_id = … and id = …多租戶
Tenant ID Pass Through (TIP-Through)
Tenant 1
Tenant 2
Tenant N
…
Tenant ContextMulti-Tenant Web Application
create
Propagate
Layer 1 Layer 2 Layer N
…
做法一: 改寫Web Application
使用Filter或AOP進行非侵入性的改寫
Tenant 1
Tenant 2
Tenant N
…
Tenant Context
Multi-Tenant Web Application
create
Propagate
Layer 1 Layer 2 Layer N
…
Service M
ediation Proxy
Propagate
redirect
做法二: Service Mediation Proxy
Data層級的Multi-Tenancy議題
• 多租戶共享DB
– 對雲端服務提供商來說最划算
– 面臨到許多技術挑戰
Application
Data 如何有效率的查詢個別客戶的資料
如何確保客戶資料不被其它未經授權的客戶看到
最簡單的做法: 用Tenant ID來區隔資料TenantID AccountID Name Score
31 1 李小白 10031 2 黃小明 9032 1 陳小春 8632 2 林小萱 8731 3 周小芳 92
如果各個Tenant所需要的欄位不同怎麼辦?
@Entity @Table(name=“EMP”) @Multitenant(SINGLE_TABLE) @TenantDiscriminatorColumn(name = “TenantID”, …) public class Employee { ... }
使用 tenant discriminator column (supported by Java EE 7 in JPA 2.1)
EclipseLink 已有初步實作
AccountID Name Major Score
1 李小白 資訊科學系 100
2 黃小明 應用數學系 90
3 周小芳 應用數學系 92
AccountID Name Age
1 陳小春 21
2 林小萱 22
TenantID AccountID Name …
31 1 李小白 (Score) 100
31 2 黃小明 (Score) 90
32 1 陳小春 (Age) 21
32 2 林小萱 (Age) 22
31 3 周小芳 (Score) 92
Account_T31
Account_T32
欄位不同
解決方案: 一個Tenant一個Table
AccountID Name Major Score
1 李小白 資訊科學系 100
2 黃小明 應用數學系 90
3 周小芳 應用數學系 92
Account_T31
真正情況
Select Score from Account_T31 where AccountID=2
程式中的SQL需要改寫
AccountID Name Major Score
1 李小白 資訊科學系 100
2 黃小明 應用數學系 90
3 周小芳 應用數學系 92
Account
Tenant 31的觀點
Select Score from Account where AccountID=2
未來展望Future Java EE
IBM San Francisco(1997)
Java 企業端技術的進化
Spring (2003)
Hibernate (2002)
2000 2005
AOP(1997)
(1994)
J2EE 1.2(1998)
Enterprise
J2EE 1.3(2001)
RobustnessJ2EE 1.4 (2004)
Web Services
Java EE 5-6(2006-2011)
EoD/Flexibility
ORM (1980)
IoC
2010
Cloud Computing
Java EE 7-8(2012-)
Cloud
有關 Java EE 7
• Technical Lead– Linda Demichiel
• 和雲端服務有關的新規格– Jcache 1.0 (JSR 107)
– Batch Processing 1.0
– JSON 1.0
• 舊規格的雲端化– JPA 2.1 (JSR 338): Multi-Tenancy table discriminator
– JMS 2.0 (JSR 343): Cloud extension
– Servlet 3.1 (JSR 340): PaaS model for Web Applications
(資料來源: Java One 2011)
雲端服務技術的展望
• 2011
– Gartner: “the year of PaaS”
• 2012 Q3
– Java EE 7: First official Java-based cloud standard
• 2015
– Y. Natis (Gartner): “PaaS開發經驗與技能將成為IT求職基本要求! ”
Thank [email protected]