Tải bản đầy đủ (.pdf) (66 trang)

Điện toán đám mây với Google App Engine

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.74 MB, 66 trang )






TRNG I HC M TP.H CHÍ MINH
KHOA CÔNG NGH THÔNG TIN
xyxy


IN TOÁN ÁM MÂY VI
GOOGLE APP ENGINE




BÁO CÁO KHÓA LUN TT NGHIP
SVTH: Nguyn Ngc Mãn
MSSV: 10761245
Ngành: Khoa Hc Máy Tính
Hng Chuyên Ngành: Mng Máy Tính
Lp: TH07B1

Ngi Hng Dn
TS.Lê Xuân Trng




T
p


. H Chí Minh –Thán
g
9 nm 2011




LI CÁM N
Khóa lun đc thành công là nh s hng dn, giúp đ ca các
thy. Em xin chân thành cm n các thy đã b thi gian quý báu ca mình đ
giúp em hoàn thành tt khóa lun này.




NHN XÉT CA GIÁO VIÊN HNG DN




NHN XÉT CA GIÁO VIÊN HNG DN

………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………

………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………







MC LC
Chng 1. TNG QUAN 1
1.1. Gii thiu 1
1.2. Mc đích làm đ tài 1
1.3. Phng pháp nghiên cu 2
1.4. Phm vi 2
1.5. B cc báo cáo 2
Chng 2. C S LÝ THUYT 4
2.1. Tng Quan in Toán ám Mây 4
2.1.1. Gii pháp ca đin toán đám mây 5

2.1.2. Cu trúc các phn to nên đám mây 6
2.1.2.1. Các dch v ng dng (SaaS) 6
2.1.2.2. Các dch v nn tng (PaaS) 6
2.1.2.3. Các dch v c s h tng (IaaS) 6
2.1.3. in toán đám mây vi Google App Engine 7
2.2. Kin trúc Google App Engine 7
2.2.1. Tng quan Google App Engine 7
2.2.2. Môi trng phát trin 8
2.2.3. Các loi tp tin tnh trên server 9
2.2.4. DataStore 9
2.2.5. Các loi Dch V 10
2.2.6. Google Accounts 10
2.2.7. Các hn ch ca Google App Engine 10
2.3. Các thành phn ca Google App Engine trong Java 11
2.3.1. BackEnds 11
2.3.2. Datastore 11
2.3.2.1. Thc Th, Thuc Tính và khóa 12
2.3.2.2. Transactions 15




2.3.2.3. Java Data Object (JDO) 17
2.3.2.4. Java Persistence API (JPA) 20
2.3.3. Các dch v ca GAE 23
2.3.3.1. BlobStore Java API 23
2.3.3.2. Capabilities 24
2.3.3.3. Channel API 25
2.3.3.4. Image API 26
2.3.3.5. Mail API 26

2.3.3.6. Memcache Service 27
2.3.3.7. OAuth 27
2.3.3.8. Task Queues 29
2.3.3.9. URL Fetch 29
2.3.3.10. Users Service 29
2.3.3.11. XMPP 30
2.3.3.12. YAML 30
Chng 3. HIN THC NG DNG 33
3.1. S lc ng dng 33
3.1.1. Mô hình hot đng 33
3.1.2. S lc các chc nng 33
3.2. Xây dng ng dng Frontend và Backend 33
3.2.1. ng b hóa d liu tài khon google 33
3.2.2. S dng App Engine Datastores 34
3.2.2.1. Tùy chnh lu tr d liu 34
3.2.2.2. Xác đnh mi kt hp và bng s 34
3.2.2.3. Mô hình thc th mi kt hp 39
3.2.2.4. Mô hình vt lý d liu 40
3.2.3. S đ trang web (Site map) 40
3.2.4. Apache Struts Framework 41




3.2.5. Thanh toán trc tuyn (Online Payment) 42
3.2.5.1. Tng quan v tính nng thanh toán 42
3.2.5.2. Cng thanh toán Nganluong.vn 43
3.2.6. Các yêu cu v tính toán 44
3.2.7. Dch v Mail 46
3.3. Xây dng ng dng xem đim trên Mobile 46

3.3.1. Mô hình hot đng 47
3.3.2. Cách thc x lý 47
Chng 4. KT QU T C 49
4.1. Các dch v tin ích dành cho giáo viên, ph huynh và hc sinh 49
4.2. Tin ích dành cho ngi qun tr 53
4.3. ng dng trên Mobile 55
Chng 5. KT LUN 56
5.1. Li ích ca đin toán đám mây vi GAE 56
5.2. Hn ch 56
TÀI LIU THAM KHO 57





DANH MC CÁC THUT NG TING ANH VÀ CH VIT
TT
Datastore: Ni lu tr d liu ca đin toán đám mây
OPENID: Th vin giúp đng nhp vào mt website
GAE: Google App Engine
HDR: High Replication Datastore
API: Mt tp các th vin
SDK: B công c dành cho phát trin phn mm
JDO: Java Data Object
JPA: Java Persistence API
JDOQL: Mt loi ngôn ng dùng đ truy vn d liu trong Java
JPQL: Mt loi ngôn ng dùng đ truy vn d liu trong JPA
YAML: Mt ngôn ng giúp cu hình ng dng Java
XMPP: Mt giao thc ca Google App Engine trong
ng dng Chat G talk

DDos: mt loi tn công t chi dch v
GFS: Google File System, h thng file ca Google



DANH MC CÁC HÌNH
Hình 2.1 Mô hình các cm máy ch trên đám mây 4
Hình 2.2 Các gii pháp v cung cp các dch v tài nguyên 5
Hình 2.3 Các phn to nên đám mây 6
Hình 2.4 Kin trúc Google App Engine cho Java 8
Hình 2.5 So sánh gia hai loi lu tr d liu 12
Hình 2.6 Các kiu d liu đc h tr bi GAE 15
Hình 2.7 Mô hình cp nht ca d liu ca Transaction 16
Hình 2.8 Mô hình JDO 17
Hình 2.9 Cu hình JDO trong Google App Engine 18
Hình 2.10 Mô Hình JPA 21
Hình 2.11 Mô Hình JPA trong Google App Engine 22
Hình 2.12 To đi tng EntityManager 22
Hình 2.13 Cách thc lu d liu ca BlobStore trong Datastore 23
Hình 2.14 Cách s dng Capabilities 24
Hình 2.15 Các loi Capabilities GAE h tr 25
Hình 2.16 Trao đi d liu gia client và server s dng Channel API 26
Hình 2.17 Cu hình Channel trong Google App Engine 26
Hình 2.18 Cu hình Mail trong Google App Engine 27
Hình 2.18 Chng thc s dng OAuth 28
Hình 2.20 Chn phng thc chng thc trong GAE 30
Hình 3.1 Quy trình đng b hóa website vi google Accouts 34
Hình 3.2 Mi kt hp xp lp hc sinh 35
Hình 3.3 Mi kt hp xp lp giáo viên 35
Hình 3.4 Mi kt hp xp loi hc sinh 36




Hình 3.5 Mi kt hp kim tra 37
Hình 3.6 Mi kt hp giáo viên ch nhim và phân ban lp hc 38
Hình 3.7 Mô hình thc th mi kt hp 39
Hình 3.8 Mô hình vt lý d liu 40
Hình 3.9 S đ ca website 40
Hình 3.10 Quy trình hot đng ca Struts Framework 41
Hình 3.11 Chng thc tài khon trong thanh toán 42
Hình 3.12 Chuyn khon trong thanh toán 43
Hình 3.13 Thanh toán kiu tích hp đn gin 44
Hình 3.14 Mô hình hot đng ng dng mobile 47
Hình 3.15 Lu đ x lý yêu cu ca ng dng Mobile 48
Hình 4.1 Thông tin ca hc sinh 49
Hình 4.2 Thông tin ca giáo viên 50
Hình 4.3 Thông tin v đim s 51
Hình 4.4 Thông tin v hc phí 51
Hình 4.5 Chuyn khon qua nganluong.vn 52
Hình 4.6 Gi thông tin cho hc sinh 53
Hình 4.7 Các tin ích dành cho ngi qun tr 54
Hình 4.8 màn hình ngi dùng nhp vào mã s sinh viên 55
Hình 4.9 ngi dùng sau khi tra cu đim thành công 55




-1 -

Chng 1. TNG QUAN

1.1. Gii thiu
Thut ng "cloud computing" ra đi gia nm 2007 không phi đ nói v mt
trào lu mi, mà đ khái quát li các hng đi ca c s h tng thông tin vn đã và
đang din ra t my nm qua. khái nim này có th đc din gii mt cách đn gin:
các ngun đin toán khng l nh phn mm, dch v s
nm ti các máy ch o
(đám mây) trên Internet thay vì trong máy tính gia đình và vn phòng (trên mt đt) đ
mi ngi kt ni và s dng mi khi h cn.
Nh vy, cloud computing ch là khái nim hoàn chnh cho mt xu hng không
mi bi nhiu doanh nghip hin không có máy ch riêng, PC ch cài mt s phn
mm c bn còn tt c đu ph thuc vào cloud. Chng hn, h đ
ng ký dch v
hosting cho website công ty, thuê công c qun lý doanh thu t Salesforce.com, ly d
liu kho sát th trng t t chc Survey Monkey Và tt nhiên, h dùng Google đ
tìm kim, phân tích, chia s và lu tr tài liu.
Vi các dch v sn có trên Internet, doanh nghip không phi mua và duy trì
hàng trm, thm chí hàng nghìn máy tính cng nh phn mm. H ch cn tp trung
sn xut bi đã có ngi khác lo c s h tng và công ngh
 thay h.
Google nm trong s nhng hãng ng h đin toán máy ch o tích cc nht bi
hot đng kinh doanh ca h da trên vic phân phi các cloud (virtual server), và các
web services s dng các dch v hosting ca Google, đc gi là Google App Engine
(GAE).
GAE là mt nn tng hosting bao gm web server, c s d liu BigTable và kho
lu tr file GFS. GAE cho phép vit ng dng web da trên c s h tng ca
Google. Ngha là chúng ta không cn quan tâm là trang web ca chúng ta đc lu tr
nh th nào (k c database đi kèm), mà ch cn quan tâm đn vic phát trin ng
dng theo các API do Google cung cp.
Vì th khi s dng GAE chúng ta nhm đn các li ích mà nó mang li nh gim
bt chi phí bn quyn, các chi phí v mua và bo dng máy ch, không cn quan

tâm ti gii hn phn cng cng nh v trí đa lý. D liu trong mô hình
đin toán
đám mây đc lu tr 1 cách phân tán ti nhiu cm máy ch ti nhiu v trí khác
nhau. iu này giúp tng đ tin cy, đ an toàn ca d liu mi khi có s c hoc
thm ha xy ra. Vic tp trung d liu t nhiu ngun khác nhau s giúp các chuyên
gia bo mt tng cng kh nng bo v d liu ca ngi dùng, c
ng nh gim thiu
ri ro b n cp toàn b d liu. Và các lp trình viên cng d dàng hn trong vic cài
đt, nâng cp ng dng ca mình. Da vào nhng tiêu chí này, chúng ta có th to ra
mt ng dng có th phát trin thành ng dng ln và nó không là mt ý ngh xa vi
da trên nhng li ích mà nó mang li.
1.2. Mc đích làm đ tài


-2 -

Da trên công ngh GAE mà cung cp, phát trin mt ng dng qun lý hc sinh
đ minh ha v nhng li ích mà Google App Engine mang li
1.3. Phng pháp nghiên cu
• Áp dng công ngh Servlet & JSP
• S dng FrameWork Apache Struts, Apache Struts là mt web Application
FrameWork mã ngun m đc phát trin trong d án Apache Jakarta, s dng
mô hình MVC
• Công ngh v đin toán đám mây vi Google App Engine
• S dng c s d liu App Engine Datastore, s dng mt chun ging lnh
SQL đ truy vn d liu, đc gi là ngôn ng JDOQL(Java Data Object
Query Language)
• Chng thc user s dng tài khon Gmail
1.4. Phm vi
• Dch v web(Web services):

ứ Cung cp cho ph huynh và hc sinh có th tra cu đc đim
ứ Các thông tin v các lp hc
ứ Danh sách lp
ứ Giáo viên ch nhim lp.v.v
• Thanh toán trc tuy
n (Online payment)
ứ Cho phép ph huynh đóng tin trc tuyn
• Phiên bn mobile
ứ ng dng có th xem đim ngay trc tip trên mobile, ch cn Mobile có kt
ni GPRS hoc WIFI
• Java Mail Service
ứ Kh nng gi mail t đng. Cp nht các thông báo ca nhà trng đn ph
huynh.
1.5. B cc báo cáo
• Chng 1: Tng quan
ứ  chng này s nói v m
c đích nghiên cu ca đ tài, phng pháp thc
hin cng nh tính hiu qu ca đ tài.


-3 -

• Chng 2: C s lý thuyt
 chng này s nói v các công ngh da trên Google App Engine
ứ Các dch v mà Google App Engine cung cp
ứ Giao tip vi c s d liu Datastore
ứ Chi tit v Framework Struts
ứ Chi tit v giao dch trc tuyn (Online Payment).
• Chng 3: Hin thc h thng
 chng này s nêu bt lên các công ngh đc áp dng vào trong ng dng

ứ Các dch v ng dng vào h thng
ứ Cách thc hin thc h thng
ứ Kt qu có đc t h thng
• Chng 4: Kt qu đt đc
ứ  chng này s biu din các hình nh ca ng dng khi thc hin đc
• Chng 5: Kt lun
ứ Trong chng cui này báo cáo s trình bày các li ích và hn ch
 ca
Google App Engine


-4 -

Chng 2. C S LÝ THUYT
2.1. Tng Quan in Toán ám Mây
T “ám mây” trong in toán đám mây thc cht ch là 1 phép n d đ mô t
Internet. Theo đnh ngha thì đin toán đám mây là bin pháp s dng da trên kt ni
Internet, ni mà nhng ngi dùng chia s cùng mt mng máy ch, phn mm và d
liu Nu nh chúng ta s dng nhng ng dng web t các hãng l
n nh Google hoc
Microsoft thì chính chúng ta đang s dng Cloud Computing. Các ng dng web nh
Gmail, Google Calendar, Hotmail, SaleForce, Dropbox và Google Docs đu da trên
Cloud Computing bi vì khi kt ni ti nhng dch v đó, ngi dùng đã đc truy
cp vào nhng cm mây o ca h thng máy ch đ s thng nht ca các hãng ln
trên Internet.

Hình 2.1 Mô hình các cm máy ch trên đám mây
Mi công ty thng chy các ng dng ngay trên các máy ch ca chính h.
Nhng máy ch đc đt  ngay v trí công ty. iu đó đòi hi rt nhiu công sc
trong vic bo dng, bo trì, tin bc và thi gian đ gi cho mi th liên tc đc

chy, nâng cp và đm bo. Nu các doanh nghip áp dng in toán đám mây, h
 s
vn s dng đc các ng dng y ht nhng chúng li đc đt  các cm máy ch
trên Internet. Các doanh nghip ch vic kt ni qua mng Internet mà không phi mt
chút công sc nào đ bo trì, bo dng, nâng cp, chy máy ch. Không nhng th,
các doanh nghip còn có th cho khách hàng ca h s dng ng dng mà không phi
mt công cài đt



-5 -

2.1.1. Gii pháp ca đin toán đám mây

Hình 2.2 Các gii pháp v cung cp các dch v tài nguyên
̇ Vn đ v lu tr d liu
D liu đc lu tr tp trung  các trung tâm d liu khng l. Các
công ty ln nh Microsoft, Google có hàng chc trung tâm d liu nm ri
rác khp ni trên th gii. Các công ty ln này s cung cp các dch v cho
phép doanh nghip có th lu tr và qun lý d liu c
a h trên các trung
tâm lu tr.
̇ Vn đ v sc mnh tính toán
Có 2 gii pháp chính:
• S dng các siêu máy tính đ x lý tính toán.
• S dng các h thng tính toán song song, phân tán.

̇ Vn đ v cung cp tài nguyên, phn mm.
Cung cp các dch v nh IaaS (infrastructure as a service), PaaS
(platform as a service), SaaS (Storeage as a service).







-6 -

2.1.2. Cu trúc các phn to nên đám mây


Hình 2.3 Các phn to nên đám mây

2.1.2.1. Các dch v ng dng (SaaS)
Tng dch v ng dng này lu tr các ng dng phù hp vi mô hình
SaaS. ây là nhng ng dng chy trong mt đám mây và đc cung cp theo
yêu cu. ôi khi các dch v này đc cung cp min phí và các nhà cung cp
dch v to ra doanh thu t nhng th khác nh các qung cáo Web và nhiu
khi các nhà cung cp 
ng dng to ra doanh thu trc tip t vic s dng dch
v. Nu bn đã kim tra th ca bn khi s dng Gmail hoc Yahoo Mail hoc
đc nhc các cuc hn khi s dng Google Calendar, thì bn đã quen thuc
vi tng trên cùng ca đám mây. ây ch là mt vài ví d v các kiu ng dng
này.
Các ng dng đc cung cp qua mô hình SaaS làm li cho ngi tiêu
dùng bng cách gii phóng cho h khi vic cài đt và bo trì phn mm và các
ng dng có th đc s dng thông qua các mô hình cp phép có h tr tr
tin đ s dng.
2.1.2.2. Các dch v nn tng (PaaS)
ây là tng  đó chúng ta thy c s h tng ng dng ni lên nh là

mt tp hp các dch v. Các dch v 
đây đc dành đ h tr cho các ng
dng. Các ng dng này có th đang chy trong đám mây và chúng có th đang
chy trong mt trung tâm d liu doanh nghip truyn thng.  đt đc kh
nng m rng cn thit trong mt đám mây, các dch v khác nhau đc đa ra
 đây thng đc o hóa. Các ví d trong phn này ca đám mây bao gm
Amazon Web Services, Boomi, và Google App Engine. Các d
ch v nn tng
này cho phép khách hàng chc chn rng các ng dng ca h đc trang b đ
đáp ng các nhu cu ca ngi dùng bng cách cung cp c s h tng ng
dng da theo yêu cu.
2.1.2.3. Các dch v c s h tng (IaaS)


-7 -

 đây, chúng ta thy mt tp hp các tài sn vt lí nh các máy ch, các
thit b mng và các đa lu tr đc đa ra nh là các dch v đc cung cp
cho ngi tiêu dùng. Các dch v  đây h tr c s h tng ng dng và nhiu
ngi tiêu dùng hn. Cng nh vi các dch v nn tng, s o hóa là mt
phng pháp thng đc s dng đ to ra ch đ phân phi các ngun tài
nguyên theo yêu cu. Ví d v các dch v c s h tng bao gm IBM
Bluehouse, VMware, Amazon EC2, Microsoft Azure Platform, Sun ParaScale
Cloud Storage
2.1.3. in toán đám mây vi Google App Engine
Google nm trong s nhng hãng ng h đin toán máy ch o tích cc
nht bi hot đng kinh doanh ca h da trên vic phân phi các cloud (virtual
server). Google cung cp các d
ch v  hai tng,  tng ng cao nht ca đám mây
là SaaS, Google cho phép s dng các dch v ca h nh Gmail, Google Doc và 

tng Paas h cung cp các tp API dành cho các doanh nhip, cá nhân, hay t chc
đ h tr cho các ng dng web Application s dng các dch v hosting ca
Google, đc gi là Google App Engine (GAE).
2.2. Kin trúc Google App Engine
2.2.1. Tng quan Google App Engine
Nhiu doanh nghip s dng rt nhiu ph
n cng đ chy các ng dng nh
các c s d liu, các máy ch ng dng, các h thng qun lý thay đi và các
công c ln vt tìm li. Tuy vy, ngày nay, các phn cng này này có th d dàng
vt b đ thay bng vic s dng chính gói phn mm y di dng mt dch v
đang chy trên mt c s h tng c
a ngi, hay t chc nào đó khác.
Mt doanh nghip có th vt b phn cng nm bên di ca mt ng dng
web c th đ thay bng vic chy ng dng trên phn cng đc cung cp bi
Amazon, Google hoc các đi tác khác. Các công ty này đa ra kh nng thuê
phn cng  các mc đ khác nhau, va vn có th lu tr mt ng d
ng. Hn
na, các công ty này có kh nng qun lý m rng, sao lu và bo mt. Amazon và
Google đã nêu ra nhng mi quan tâm này và đi phó tt hn vi chúng ta, có
nhiu đi mi xung quanh các khía cnh ca vic chy các nn tng phn mm sao
cho hiu qu.
App Engine ca Google là mt nn tng thc s đ xây dng và trin khai
ng dng Web Java, Python và Go trên c s h tng m rng c
a Google. Nó
không yêu cu l phí cp phép s dng (tr ra mt s th vin phn mm mà
chúng ta chn đ s dng trên c s h tng y yêu cu giy phép) và không cn
chi phí tr trc cho bng thông hoc không gian lu tr. C s h tng ca App
Engine là hoàn toàn min phí cho đn khi đt đn ngng v mc s dng, dung
lng lu tr 500MB và theo nh
trích dn nguyên vn t Google, "đ CPU và

bng thông cho khong 5 triu lt xem trang mi tháng". Ch cn nói rng, khi
đt ti đim mà Google bt đu gi hóa đn tính phí, thì ng dng Web ca chúng
ta rõ ràng đã to ra lu lng đáng k , có nhiu ngi xem và có lãi.


-8 -

Hình 2.4 Kin trúc Google App Engine cho Java
2.2.2. Môi trng phát trin
Hin nay Google App Engine h tr phát trin trên ba môi trng nn tng.
Mt là Java Runtime Environment, Python Runtime Environment và Go Runtime
Environment. Môi trng đc chn ph thuc vào ngôn ng ca ng dng và
công ngh mà chúng ta s dng đ phát trin ng dng.
Môi trng Java h tr cho ng dng s dng Java 6 virtual Machine. ng
dng có th phát trin bng ngôn ng Java, hay hu ht các ngôn ng khác mà có
th chy trên JVM nh PHP(s
 dng Quercus), Ruby (s dng JRuby), JavaScript,
Scala, Groovy. ng dng có th chy trên môi trng và s dng các dch v bng
các công ngh web chun hin nay nh servlet và Java Persistence API
Môi trng Python h tr cho các ng dng đc vit bng ngôn ng
Python 2.5 đc ci tin t phiên bn CPython. Môi trng Python trên Google
App Engine cho phép các ng dng Python s dng CGI, mt th vin chun h
tr giao din. Mt ng dng python có th
s dng đc hu ht các th vin
chun. Nhiu th vin mã ngun m điu hot đng tt vi google App Engine
nh là Django, Web2py, Pylons và App Engine còn cha nhiu th vin ca riêng



-9 -


Môi Trng Go h tr cho các ng dng đc vit bng ngôn ng Go phiên
bn Release r58.1 tr lên, môi trng này hin đang đc th nghim trên Google
App Engine. Trong gói SDK ca GAE đã cha trình biên dch ca Go và mt th
vin chun.
Môi trng Java, Python và Go có đim chung đó là s dng cách thc
ging nhau trong vic truy cp d liu: mt ng dng đc đnh tuyn ti máy ch
ca Google, sau
đó máy ch s xem yêu cu và chun b d liu, nu có d liu
theo yêu cu thì máy ch tin hành tr li cho client. Mi môi trng s dng mt
trình thông dch riêng.
Tt c các ng dng ca server cn mt trình thông dch riêng (JVM hay
Python interpreter), vì th trc khi các yêu cu đc gi ti server, thì server phi
thc hin nhim v là chun b môi trng phù hp vi ng dng có yêu c
u.
2.2.3. Các loi tp tin tnh trên server
Mt website có rt nhiu tài nguyên.Hu ht các website có resource đc
cp phát cho trình duyt mà không có s thay đi trong quá trình hot đng thng
xuyên ca nó. Hình nh và CSS đc mô t nh là s xut hin ca các trang
web, mã JavaScript giúp chy các tác v trên trình duyt, và các trang HTML
không có các thành phn d liu đng là các ví d ca nhng tài nguyên này, đc
gi chung là các tp tin tnh. S cp phát tài nguyên này cho browser không liên
quan ti mã code ca ng d
ng, không cn thit và không hiu qu đ đáp ng t
các máy ch. Thay vào đó, App Engine cung cp mt thành phn chuyên bit ca
máy ch chuyên dng đ cung cp tnh các tp tin này. Các server này đc ti u
hóa cho kin trúc ni b và phng thc truyn dn mng đ x lý các yêu cu v
tài nguyên tnh.
Khi duyt website, các tp tin tnh cùng các mã ng dng đc load lên.
 các tp tin tnh có th

đáp ng yêu cu ca website, phi cu hình mt s khía
cnh trong các tp tin cu hình bao gm: các URL tnh ca tp tin, các loi ni
dung và hng dn cho các trình duyt đ gi các bn sao ca các tp tin trong b
nh Cache cho mt s lng và thi gian nht đnh đ làm gim lu lng và tc
đ dng hình ca trang khi trang đc load. Mc đnh trong GAE thì các file hình
nh và CSS trong th mc resouse ca ng d
ng đu là các tp tin Static.
2.2.4. DataStore
Hu ht các ng dng web hu ích cn phi lu tr thông tin trong vic x
lý yêu cu. Vì th các website thng có các lung xut nhp d liu và phi có
mt hoc nhiu máy ch web kt ni vi máy ch c s d liu đ lu tr hoc ly
d liu. Tuy nhiên, khó khn đc đt ra khi có nhiu kt n
i đng thi đ yêu cu
d liu, vì th h thng máy ch c s d liu phi đòi hi mt s cu hình v
phn cng đ có th đáp ng đc nhiu yêu cu cùng lúc.
Hin nay, các h thng lu tr d liu ph bin nht cho các ng dng web
là lu tr theo table, hàng và ct, gin lt không gian, s
p xp, s dng các ch s
index đ nâng cao kh nng truy xut d liu. Các loi khác ca h thng lu tr


-10 -

d liu bao gm các kho d liu phân cp (XML) và c s d liu hng đi
tng (Object database). Mi loi c s d liu có u và khuyt đim riêng, và
loi tt nht phù hp cho mt ng dng ph thuc vào bn cht d liu ca ng
dng. Và mi loi c s d liu có nhng k thut c
a riêng mình đ phát trin qua
các h thng các máy ch.
H thng c s d liu ca Google App Engine gn ging nht vi mt c

s d liu kiu đi tng(object). Nó không phi là mt c s d liu quan h,
điu này có th s yêu cu thay đi cách suy ngh v d liu ca ng dng.
2.2.5. Các loi Dch V
Mi quan h gia datastore và thi gian thc thi đó là mt loi dch v: dch
v này cung cp các tp API đ truy xut vào h thng c s d liu. Google App
Engine bao gm mt s dch v hu ích cho các ng dng web. Dch v b nh
Cache là mt dch v giúp kh nng truy xut nhanh vì chính li th ca nó là
nhanh, nhanh hn nhiu so vi truy xut trc ti
p trên database. Nhng mt nhc
đim ca nó là khi server có s c v mt đin hay tt máy thì các giá tr ghi tm
thi trong memcache b xóa hoàn toàn. Nh tên gi ca nó, dch v memcache s
dng nh là mt b nh cache đ lu các kt qu ca các truy vn thng xuyên
hoc thc hin các phép tính toán.
ng dng ca App Engine có th truy xut đn các tài nguyên ca các trang
web khác s dng d
ch v URL Fetch. Dch v này to ra kt ni HTTP ti server
khác trên internet đ nhn v tài nguyên
ng dng App Engine có th gi mail s dng dch v Mail. Tin nhn có
th gi đn các user khác trong Domain hoc ngoài Domain và có th nhn mail t
các user khác. Nu ng dng đc cu hình đ nhn mail thì tin nhn s đc gi
đn đa ch ca ng dng, sau đó ng dng s đnh tuy
n ti Mail service và hin
th trên webform nu có yêu cu
Ngoài gi nhn Mail. App Engine còn cho phép ng dng có th nhn tin
nhn chat ca Google Talk s dng giao thc XMPP bng dch v XMPP service
X lý nh cng là mt phn trong dch v ca App Engine bao gm các
dch v xoay nh, ct nh, hin th nh…
2.2.6. Google Accounts
App Engine có kh nng tích hp các tài khon Google vào ng dng, các
tài khon này ngi dùng đã

đng kí trên các dch v Saas nh Google Mail,
Google Docs và Google Calendar. S bo mt hn nu chúng ta có th s dng tài
khon Google đ chng thc thay vì s dng mt h thng đng nhp riêng. Tt
nhiên, Chúng ta có th s dng h thng riêng ca chúng ta hoc là mt nhà cung
cp khác mà GAE có h tr nh là OpenID
2.2.7. Các hn ch ca Google App Engine


-11 -

App Engine cung cp phng thc kt ni an toàn(HTTPS) cho tên min
con ca google h tr là application-id.appspot.com, nhng cha h tr phng
thc kt ni này cho tên min khác. Google account đng nhp luôn luôn s dng
phng thc kt ni an toàn này
ng dng s dng dch v URL Fetch đ to kt ni HTTPS và gi yêu cu
đn mt website khác, nhng App Engine không kim tra đc certificate (giy
chng nhn) s d
ng trên máy ch t xa.
2.3. Các thành phn ca Google App Engine trong Java
2.3.1. BackEnds
Backends đc mô t nh là mt phn ph tr ca GAE, là mt ng dng
đc bit không có gii hn thi gian yêu cu, có b nh cao hn và tng bng
thông CPU. BackEnds đc thit k cho các ng dng cn hiu sut nhanh hn,
cn b nh nhiu hn, và các quá trình yêu cu là liên tc. Nhng phn ph tr

này s tính phí theo thi gian hot đng
2.3.2. Datastore
App Engine cung cp hai tùy chnh lu tr d liu khác nhau đc phân
bit bi tính kh dng và tính nht quán:
• Kho d liu Master/Slave: s dng mt h thông sao chép master-slave. Có

ngha là d liu ch đc lu tr ti mt trung tâm d liu vt lý. Tùy chn
này cung cp tính nht quán mnh m v d liu cho tt c các l
n đc và
truy vn. Tùy chn này giúp ngi qun tr ít tn dung lng lu tr, và tc
đ CPU gim đi đáng k
• Kho d liu High Replication: D liu đc nhân rng trên khp các trung
tâm d liu bng cách s dng mt h thng da trên thut toán Paxos. Tùy
chn này cung cp cho ngi s dng các tính nng v tng hp d liu
nhanh trong mi ln đ
c và ghi d liu xung. Vi tùy chn này thì dung
lng lu tr s tng lên và chi phí cho CPU tng gp 3 ln so vi tùy chn
Master/Slave
C s d liu App engine lu tr mt h thng các đi tng, đc bit đn
nh là mt thc th. Mt thc th có th có nhiu thuc tính, tên và giá tr ca mt
trong s các loi d liu đc h
tr bi GAE.

High Replication Master/Slave
Cost

Storage 1x 1/3x
Put/Delete CPU 1x 5/8x


-12 -

Get CPU 1x 1x
Query CPU 1x 1x
Performance


Put/Delete Latency 1/2x–1x 1x
Get Latency 1x 1x
Query Latency 1x 1x
Consistency

Get/Put/Delete Strong Strong
Most Queries Eventual Strong
Ancestor Queries Strong Strong
Occasional Planned
Read-Only Period
No Yes
Unplanned Downtime
Rt him xy ra. Nu có
xy ra thì không mt d
liu

Him khi xy ra. Có th mt mt
lng nh % d liu gn lúc server
b Down

Hình 2.5 So sánh gia hai loi lu tr d liu
Khi mi ng dng mi đc to ra thì GAE s la chn mc đnh loi lu
tr CSDL là HRD(High Replication Datastore).

2.3.2.1. Thc Th, Thuc Tính và khóa
Mt đi tng trong c s d liu ca GAE đc bit đn nh là mt
thc th. Mi thc th có mt khóa duy nht đ xác đnh các đi tng trên
toàn b h thng. Nu có mt khóa, các thc th có th tìm ra mt cách nhanh
chóng. Khóa đc lu tr nh là mt thuc tính trong thc th. Mt phn ca
khóa là ID ca ng dng, đ đm bo rng các ng dng khác không th truy

cp vào ng dng ca chúng ta, và ng dng ca chúng ta không th truy cp
vào ng dng khác. Sau khi thc th đc to ra thì khóa không th thay đi.
Ta có th hình dung đi vi CSDL quan h thì 1 entity đc ví nh là 1
dòng record trong mt bng, tuy nhiên có mt s khác bit đôi chút. Kho d
liu ca App Engine đc xây dng theo hng CSDL hng đi t
ng
(object database), đây là 1 loi CSDL vn còn mi và vn cha đc thông
dng, CSDL quan h mi là loi đang đc s dng rng rãi và ph bin. Vì
th kho d liu ca App Engine đã c gng xây dng ht tt c nhng đc đim


-13 -

vn có ca CSDL quan h đ đem li cho ngi phát trin s quen thuc.
Chúng ta vn có nhng câu query, transaction, khóa … nh chúng ta tng làm
vic vi CSDL quan h.
u tiên là entity, mi entity s có 1 khóa đ phân bit mình vi tt c
các entity khác trong datastore. Trong datastore không h có bng nh trong
CSDL quan h thông thng. i vi datastore, ta nên hiu nó ch là 1 bng và
là 1 cái bng rt ln, đó là lý do mà nó có tên là BigTable. Vì th khóa dùng đ
phân bit entity này vi tt c các entity khác trong cái bng to l
n y. Khóa có
2 dng, chúng ta có th t đt tên cho khóa đ có th s dng sau này, hoc nu
ta không ch đnh tên cho khóa thì h thng s phát sinh s ngu nhiên (id) cho
entity. Vì th, 1 entity hoc là có tên khóa, hoc là có s id ca khóa. Vic gán
tên cho khóa ch xy ra khi entity đc khi to và giá tr đó không th thay đi
đc khi entity đã đc to ra ri.
Mi entity có 2 loi thuc tính: thuc tính tnh (fixed property) và thuc
tính đng (dynamic property). Vi thu
c tính tnh, ta có th hình dung nó nh

là các ct trong CSDL quan h, có giá tr và cùng kiu d liu. Tuy nhiên đi
vi thuc tính đng, s lng thuc tính này thay đi tùy vào mc đích ca
chúng ta. Vì th, mc dù cùng 1 entity nhng 2 th hin có th có s lng
thuc tính đng khác nhau, và có th các thuc tính đng có tên ging nhau
nhng kiu d liu khác nhau. Mi thuc tính đu có kiu d liu riêng ca nó,
các kiu d li
u trên datastore đã đc đánh ch mc mt cách t đng. Tuy
nhiên chúng ta phi khai báo ch mc cho nhng thuc tính cn s dng trong
câu query vì đy là yêu cu bt buc ca datastore.
Trong datastore, đ có th ly đc các entity cha d liu, ta có 2 cách.
Th nht là bit khóa ca nó và ly da vào khóa. Th 2, ph bin hn, là s
dng câu truy vn (query). Trong datastore, các thuc tính đc s dng trong
câu query bt bu
c phi đc khai báo ch mc. Nu không câu query s không
hot đng. Vic khai báo ch mc index s giúp câu query đt đc tc đ tt
nht.
Java SDK cung cp mt tp các API đn gin h tr trc tip. Các hàm
API này nm trong gói com.google.appengine.api.datastore. Chúng ta có th s
dng API này đ truy xut trc tip ti các ng dng, và có th to ra mt tp
API riêng t vic tng hp các API này. Java SDK c
ng cung cp hai loi truy
xut d liu chun là: Java Data Objects(JDO) và Java Persistence API (JPA).
Vi vic s dng 1 trong 2 giao din trên, chúng ta có th to ra đc thc th
vi thuc tính c đnh.  to ra thc th loi A, ta cn đnh ngha mt class A
và khai báo các thuc tính kèm theo kiu d liu mà ta mun thc th ca ta có.
Tuy nhiên đ s dng JDO hoc JPA, chúng ta cn phi cu hình đ App
Engine nhn bi
t chúng
Chúng ta giao tip vi Datastore bng cách s dng các hàm get(),
put(),delete() đ ly, to mi và xóa mt thc th trong Datastore. Các hàm này

là phng thc trong đi tng DatastoreService


-14 -

DatastoreService datastore=
DatastoreServiceFactory.getDatastoreService();
S dng phng thc to khóa cho thc th createKey(Entity name,
Key key) bng đi tng KeyFactory. Sau đây là các kiu và các thuc tính ca
thc th mà GAE h tr
Value type Java type Sort order Notes
Boolean
boolean or java.lang.Boolean
false < true

Byte string,
short
com.google.appengine.api.da
tastore.ShortBlob
byte order
Up to 500 bytes. A
value longer than
500 bytes throws a
JDOFatalUserExcep
tion.
Byte string,
long
com.google.appengine.api.da
tastore.Blob
n/a

up to 1 megabyte;
not indexed
category
com.google.appengine.api.da
tastore.Category
Unicode

Date and time
java.util.Date
chronological

email address
com.google.appengine.api.da
tastore.Email
Unicode

floating point
number
float, java.lang.Float,
double, java.lang.Double
numeric
64-bit double
precision, IEEE 754
geographical
point
com.google.appengine.api.da
tastore.GeoPt
b
y latitude, then
longitude


Google
Accounts user
com.google.appengine.api.us
ers.User
email address in
Unicode order

integer
short, java.lang.Short,
int, java.lang.Integer,
long, java.lang.Long
numeric
Stored as long
integer, then
converted to the
field type. Out-of-
range values
overflow.


-15 -

key, blobstore
com.google.appengine.api.bl
obstore.BlobKey
byte order

key, datastore
com.google.appengine.api.da

tastore.Key, or the
referenced object (as a
child)
by path
elements (kind,
ID or name,
kind, ID or
name )

link
com.google.appengine.api.da
tastore.Link
Unicode

messaging
handle
com.google.appengine.api.da
tastore.IMHandle
Unicode

null
null
n/a

postal address
com.google.appengine.api.da
tastore.PostalAddress
Unicode

rating

com.google.appengine.api.da
tastore.Rating
numeric

telephone
number
com.google.appengine.api.da
tastore.PhoneNumber
Unicode

Text string,
short
java.lang.String
Unicode
Up to 500 Unicode
characters. A value
longer than 500
characters throws a
JDOFatalUserExcep
tion
.
Text string,
long
com.google.appengine.api.da
tastore.Text
n/a
up to 1 megabyte;
not indexed

Hình 2.6 Các kiu d liu đc h tr bi GAE

2.3.2.2. Transactions
Vi các ng dng web, có th có nhiu ngi truy cp và cp nht d
liu đng thi. Hu ht các h qun tr c s d liu đu đm bo tính toàn vn
d liu khi thc hin nhiu mt tp hp các hot đng, mt tp các hot đng
đó đc đc thc hin liên tc đc g
i là mt transaction. Mt h thng h


-16 -

tr Transaction đm bo rng nu mt giao dch thành công, tt c các hot
đng trong giao dch đu đc hoàn thành. Nu có bt kì mt li nào phát sinh
t mt hot đng bên trong vì bt c lý do gì thì d liu s tr v trng thái lúc
ban đu, lúc cha thc hin Transaction
Mt hot đng có th tht bi có th là do s lng ngi truy cp cùng
lúc vào mt entity quá ln, hoc v
t quá mc đ tài nguyên mà GAE cung
cp min phí cho ngi dùng, trong trng hp này nu mun s dng thêm
phi đng kí vi nhà cung cp dch v và bt đu tính phí. Tùy trng hp tht
bi mà phát sinh các exception khác nhau nh DatastoreTimeoutException,
ConcurrentModificationException, or DatastoreFailureException.
DatastoreService datastore =
DatastoreServiceFactory.getDatastoreService()
Transaction txn = datastore.beginTransaction();
try {
// Các liên kt vi các hot đng con
txn.commit();
} finally {
if (txn.isActive()) {
txn.rollback();

}
}
Transactions là mt tính nng tùy chn ca Datastore nên không cn s
dng Transaction trong các hot đng ca kho d liu. Tùy trng hp ng
dng yêu cu phi s dng Transaction trong các hot đng ly d liu đ đm
bo tính toàn vn d liu

Hình 2.7 Mô hình cp nht ca d liu ca Transaction
Khi ng dng s dng Transaction cho mt nhóm các thc th,
Datastore to ra mt bin đ đánh du thi gian. Khi ng dng gi datastore
cp nht các thc th, Datastore ghi các yêu cu thay đi vào Journal, mt hàng

×