440 likes | 907 Views
Google App Engine. Các Công nghệ lập trình hiện đại. TH2009/03. Contents. Giới thiệu. Môi trường GAE. Google App Engine Service. Quotas & Limit. Phát triển Ứng dụng trên GAE. Giới thiệu. Google App Engine là gì ? .
E N D
Google App Engine CácCôngnghệlậptrìnhhiệnđại TH2009/03
Contents Giớithiệu Môitrường GAE Google App Engine Service Quotas & Limit PháttriểnỨngdụngtrên GAE ĐH-KHTN
Giớithiệu • Google App Engine làgì? • GAElàmộtnềntảng cho phép chúng ta có thể triển khai các ứng dụng của mình trên nền cơsởhạtầngsẵn của Google ĐH-KHTN
Giớithiệu • Lợiíchcủa GAE: Easy build: cơ chế build tự động của Google. Maintain: chúng ta sẽ không cần quan tâm đến các vấn đề bảo trì Server vì đã có Google giúp chúng ta làm chuyện đó. Easy scale: Server tự điều chỉnh băng thông và dung lượng lưu trữ cho phù hợp. Công việc chính của chúng ta chỉ là xây dựng và upload mã nguồn lên GAE. ĐH-KHTN
Môitrường GAE: • Tổngquan: • GAE baogồmnhữngtínhnăngsau: Cáccôngnghệ web độngphổ biến. Cơsở dữliệuchophéptruyvấn, sắpxếpvà xửlýtheo Session. Khảnăng Scalable dễdàng. API để xácthựcvà gửi mail bằngtàikhoản Google. Mộtbộ SDK cókhảnănggiảlập Local Server như GAE Server. Task Queue và Task Schedule ĐH-KHTN
Môitrường GAE: • Tổngquan: • GAE hỗtrợ 3 ngônngữchính: Java - Java runtime environment Python - Python runtime environments Go - Go runtime environment ĐH-KHTN
Môitrường GAE: • Sandbox: Sandbox làmộtmôitrườngđảmbảocácứngdụngchạytrên GAE phảituânthủmộtsốquytắcnhấtđịnh: Thayđổihệthốngtập tin. MởMột socket hoặctruycậptrựctiếpMộtmáychủkhác SinhraMộttiếntrìnhphụkháctrongkhisửlýmột Request Tạocácloại System Call khácnhau ĐH-KHTN
Môitrường GAE: • Storing Your Data: GAE cungcấpmộtsốlựachọnchoviệclưudữliêu: App Engine Datastore: https://developers.google.com/appengine/docs/whatisgoogleappengine Google Cloud SQL: https://developers.google.com/cloud-sql/ Google Cloud Storage: https://developers.google.com/storage/ ĐH-KHTN
Môitrường GAE: • Google Accounts: Cho phépỨngdụngcủachúngtasửdụng Google Account làmhệthốngxácthựcngườidùng. Lợiích: • Ngườidùngkhôngcầntạo 1 acc mớiđểđăngnhậpvàohệthốngcủachúngta. • Chúngtakhôngcầnphảitốnthờigiantrongviệcpháttriểnvàbảomậtmộthệthốngquảnlýngườidùng. ĐH-KHTN
Google App Engine Service: App Engine cungcấpmộtloạtcácdịchvụchophépthựchiệncáchoạtđộngphổbiếntrênứngdụng: • 1) URL Fetch 2) Mail 3) MemCache • 4) Image Manipulation 5) Scheduled Tasks and Task Queues 6) XMPP ĐH-KHTN
Google App Engine Service: • 1.URL Fetch: Đặcđiểm: • Truycậpcác URL bênngoàithông qua HTTP và HTTPS. • Hỗtrợcácphươngthức: GET, POST, DELETE, PUT, HEAD. • Hỗtrợcácyêucầu: ĐồngbộvàBấtđồngbộ. Giớihạn: • Dung lượngyêucầuvàthông tin trảvề khôngđược quá 1MB. ĐH-KHTN
Google App Engine Service: • 2.Mail: Đặcđiểm: • Gửi mail dướidanhnghĩacủa admin hoặcngườidùng Google. Giớihạn: • Tổng dung lượngmột mail baogồm cả phầnđínhkèmkhông quá 1MB. • Nếu admin làngườinhận dung lượng mail khôngđược quá 16KB. ĐH-KHTN
Google App Engine Service: • 3.MemCache: Đặcđiểm: • NhanhhơnlưutrữtrênDataStore • Lưutrữliệulênbộ nhớthay vì lênđĩa. • Tổ chức key-value pair. • Kế thừaJcaheinteface. Giớihạn: • Dung lượnglưutrữkhôngvượtquá 1MB. ĐH-KHTN
Google App Engine Service: • 4.Image Manipulation: Đặcđiểm: • Xửlíảnh, cảithiệnảnh, chuyểnđổiđịnhdạng. • Cóthể sửdụngảnhtrongBlobStore, khiđókíchthướcảnh có thể bỏ qua tuynhiênảnhtrảvề vẫn bị giớihạnnhỏhơn 1MB. Giớihạn: • Kíchthướctốiđacủaảnhnhậnvàgửilà 1MB. ĐH-KHTN
Google App Engine Service: • 5.Scheduled Tasks & Task Queues: Đặcđiểm: • Thựchiệncáctác vụ nềnbằngcáchthêmchúngvàocáchàngđợi. • File queue.xml phảiđượccấuhình. Giớihạn: • Mộtđốitượng Task có kíchthướcphảinhỏ hơn 10 KB. • Số hàngđợitốiđa là 10. • Tốiđa 20 task đượcthựcthitrong 1 giây. ĐH-KHTN
Google App Engine Service: • 6.XMPP: Đặcđiểm: • Tươngthíchvớicácứngdụng chat phổ biến. • Khônghỗ trợ chat nhóm. Giớihạn: • Dung lượngmỗithôngđiệpkhông quá 100KB. ĐH-KHTN
Google App Engine Service: • 6.XMPP: Đặcđiểm: • Tươngthíchvớicácứngdụng chat phổ biến. • Khônghỗ trợ chat nhóm. Giớihạn: • Dung lượngmỗithôngđiệpkhông quá 100KB. ĐH-KHTN
Quotas and Limit: Google App Engine cungcấptrênmỗitàikhoản Gmail là 10 Ứngdụng. Mỗiứngdụngsẽcó: • 1GBlưutrữ. • 5 triệulượtxem/1 tháng/1 ứngdụng. Lưu ý: • Nếubạnmuốnmởrộnghệthốngcủabạn, bạnchỉcầntrảchonhữngkhoảnvượt qua mứcQuotas(Limit trên 1 App của 1 tàikhoản Free) • TuynhiênnếubạnlợidụngQuotas đểgianlận(Xâydựngmộtloạtứngdụng link vớinhau) thìtấtcảứngdụngđósẽbịngắtvàtàikhoảncủabạnsẽbị block. ĐH-KHTN
PháttriểnỨngdụngtrên GAE Mộtsốbướcpháttriểnứngdụng GAE Java Application: • 1)Càiđặt GAE SDK. • 2)Tạo Project. • 3)Sửdụng User Service. • 4)SửdụngDataStore. • 5)Deploy ứngdụnglên GAE. ĐH-KHTN
Google App Engine Service: • 1.Cài đặt GAE SDK: a)Càiđặt JDK: http://www.oracle.com/technetwork/java/javase/downloads/index.html b)Càiđặt Eclipse: http://www.eclipse.org/downloads/packages/eclipse-classic-421/junosr1 c)Dùng Eclipse càiđặt GAE SDK: https://dl.google.com/eclipse/plugin/4.2 Xem Video Demo ĐH-KHTN
Google App Engine Service: • 2.Tạo Project: Saukhicàiđặt Eclipse với GAE SDK bạncóthểtạo GAE Application thông qua 2 cách: i) Click vào Button New Web Application Project trênthanh toolbar. ii) File → New → Web Application Project. ĐH-KHTN
Google App Engine Service: • 2.Tạo Project: a) Cấutrúcthưmục: Java Web Application tuântheotiêuchuẩnWAR. Ứngdụngsẽbaogồmcác file .class, static file vàcác file configđượctổchứcnhưsau: ĐH-KHTN
Google App Engine Service: • 2.Tạo Project: Nội dung trìnhbày: a) Cấutrúcthưmục. b) Mộtsốtập tin đặcbiệt. c) Running & Testing. ĐH-KHTN
Google App Engine Service: • 2.Tạo Project: b) Mộtsốtập tin đặcbiệt: • web.xml: Giúpứngdụngkhinhậnđượcmột Web Request sẽbiếtđượcnênchạyServletnào. Nội dung file web.xml 3 2 Web Request 1 ĐH-KHTN
Google App Engine Service: • 2.Tạo Project: b) Mộtsốtập tin đặcbiệt: • appengine-web.xml: File appengine-web.xml cónhiệmvụchohệthốngbiếtđượclàmcáchnàođể deploy vàchạyứngdụng. Nội dung file appengine-web.xml: App ID đượcđăngkýtrên GAE Version hiệntạicủaứngdụngtrên GAE ĐH-KHTN
Google App Engine Service: • 2.Tạo Project: c) Running & Testing(tt): Lưu ý:Khi pháttriểnứngdụngtrên Eclipse hay mộtsố IDE khác, Nếubạnthayđổimộtsồ file nhưJSPs, static files, class, appengine-web.xml, hệthốngsẽcốgắngcậpnhậtnhữngthayđổiđólên Server. Nhưngnếubạnthayđổitrên file web.xml, bắtbuộcbạnphải stop Server mớicóthểcậpnhậtthayđổi. ĐH-KHTN
Google App Engine Service: • 2.Tạo Project: c) Running & Testing: Khipháttriểnứngdụng GAE bằng Eclipse trên local, ứngdụngsẽđược Deploy với Port mặcđịnhlà 8888. VD: http://localhost:8888/guestbook Nếubạnđangsửdụngdev_appserver command, ứngdụngsẽđược Deploy với Port là 8080. VD: http://localhost:8080/guestbook ĐH-KHTN
Google App Engine Service: • 3.Sử dụng User Service: a) Giớithiệu: Nhưđãnói ở trên Google cungcấpchochúngtamộtdịchvụhếtsứcbổíchchínhlàhệthống Google Account. Cácứngdụngtrên GAE cóthểdễdàngtíchhợphệthống Google Account mộtcáchdễdàng ĐH-KHTN
Google App Engine Service: • 3.Sử dụng User Service: b) Cáchsửdụng: // Lấythông tin ngườidùnghiệntạiUserServiceuserService=UserServiceFactory.getUserService();Useruser=userService.getCurrentUser(); Login: userService.createLoginURL(); Logout: userService.createLogoutURL(); • Lưu ý:Khi Deploy ứngdụngtrênServer Local, thìhàmcreateLoginURL() sẽ Redirect đếntrang login củaứngdụnghiệntại. Ở trangnày, khônghềcóbấtcứxửlýnàoliênquanđếnGoogle Account. Chỉkhita deploy ứngdụnglênGAE, tamớiđược Redirect đếntrangđăngnhậpcủaGoogle. ĐH-KHTN
Google App Engine Service: • 4.Sử dụngDataStore: a) Giớithiệu: Đasốứngdụngtrên GAE đềusửdụngDataStorelànơilưutrữdữliệu. Trongđócác Object đượclưutrongDataStoređượcgọilà Entity. Các Entity đượctổchứcvớinhaudướidạngcâythưmục. VD: ĐH-KHTN
Google App Engine Service: • 4.Sử dụngDataStore: a) Giớithiệu(tt): Những Entity cùnglà con củamột Entity thìthuộcvềmột group. Chínhvìvậy, ngoài Common Key của Entity, Các Entity còncóthêmmột Key nữađểđịnhdanh Parent củanó. VD: Cáccâutruyvấnthườngdùng Parent Key đểtruyvấnđượcgọilà:ancestor queries. Cấutrúcdữliệutheokiểunàyđảmbảodữliệuluônđượcthốngnhấtvàtoànvẹn. ĐH-KHTN
Google App Engine Service: • 4.Sử dụngDataStore: b) CácthaotáccơbảntrênDataStore: i) Create Object: // Lấy Parent Key StringguestbookName=req.getParameter("guestbookName");KeyguestbookKey=KeyFactory.createKey("Guestbook",guestbookName);String content =req.getParameter("content");Datedate=newDate(); //Set cácthuộctínhcho ObjectEntity greeting =newEntity("Greeting",guestbookKey);greeting.setProperty("user", user);greeting.setProperty("date", date);greeting.setProperty("content", content); // Thêm Object vào DatabaseDatastoreServicedatastore=DatastoreServiceFactory.getDatastoreService();datastore.put(greeting); ĐH-KHTN
Google App Engine Service: • 4.Sử dụngDataStore: b) CácthaotáccơbảntrênDataStore: ii) Read(Query) Object: // Lấy Parent Key DatastoreServicedatastore=DatastoreServiceFactory.getDatastoreService();KeyguestbookKey=KeyFactory.createKey("Guestbook",guestbookName); // Run an ancestor query to ensure we see the most up-to-date// view of the Greetings belonging to the selected Guestbook. //TạocâutruyvấncóthêmdùnghàmaddFilter(“Column”, FilterOperator.EQUAL,value) đểthêmcácđiềukiệnWhere Queryquery=newQuery("Greeting",guestbookKey).addSort("date",Query.SortDirection.DESCENDING);List<Entity> greetings =datastore.prepare(query).asList(FetchOptions.Builder.withLimit(5)); ĐH-KHTN
Google App Engine Service: • 4.Sử dụngDataStore: b) CácthaotáccơbảntrênDataStore: iii) Delete Object: • // Key employeeKey = ...;datastore.delete(employeeKey); iii) Update Object: Đểcậpnhậtmột entity, tatruyvấnsauđósửađổicácthuộctínhcủađốitượngvàgọithông qua phươngthứcDatastoreService.put(). Dữliệusẽđượcghiđè. ĐH-KHTN
Google App Engine Service: • 4.Sử dụngDataStore: c) DataStore Index: i) Giớithiệu: ĐểhỗtrợchoviệctruyvấntrênDataStore, GAE hỗtrợkỹthuật Index(Datastore Indexes).Tấtcảcáccâu Query trênDataStoređềucóítnhấtmộtIndex.Các Index củaứngdụngđềuđượclưutrong file datastore-indexes.xml. Hệthốngsẽtựđộng add các Entry vào file này. Ta cũngcóthểcustome file nàychotốiưunhất. VD: <?xml version="1.0" encoding="utf-8"?><datastore-indexesautoGenerate="true"><datastore-indexkind="Greeting"ancestor="true"><propertyname="date"direction="desc"/></datastore-index></datastore-indexes> ĐH-KHTN
Google App Engine Service: • 4.Sử dụngDataStore: c) DataStore Index: i) Cáchthứchoạtđộng: • Lấyracác Index từcâu Query. VD: Query q =newQuery("Person").addFilter("lastName",Query.FilterOperator.EQUAL,"Smith").addSort("height",Query.SortDirection.DESCENDING); • Các Index đượcchọn: lastName, height. • Lọcracác Potential Result. • Lựachọnracác Entity cólastNamevà height cógiátrịhoặcbằng Null ĐH-KHTN
Google App Engine Service: • 4.Sử dụngDataStore: c) DataStore Index: i) Cáchthứchoạtđộng(tt): • Sắpxếp Potential Result vào Table Index. Table Index sẽsắpxếpcác Entity theolầnlượtcáchàmaddSortcủa Query. • Scan rakếtquảcuốicùng. • Sauđó, Hệthốngsẽ scan đểtìmrađược Entity đầutiênthỏamãnđiềukiệncuảcác Index trongTableIndex. Nếugặpđược Entity đầutiênthỏamãnhệthốngsẽlấyluôncácphầntửsauchođếnkhi: • Entity tiếptheokhôngthỏacác Index. • Khônggặpđược Entity tiếptheo(Kếtthúcbảng). • Đạtđủsốlượngyêucầu. ĐH-KHTN
Google App Engine Service: • 5.Deploy ứngdụnglên GAE: Trướckhi deploy ứngdụng ta cầnphảiđăngkíứngdụngtrên GAE: • Đăngkýmộttàikhoản Gmail. • Đăngnhậptrêntrang: https://appengine.google.com/vớitàikhoản Gmail vừatạo • Click vào button Create Application: ĐH-KHTN
Google App Engine Service: • 5.Deploy ứngdụnglên GAE: • Điềncácmụctheoyêucầu . ĐH-KHTN
Google App Engine Service: Chỉnh sửa file appengine-web.xml. <application>application-ID vừa đăng ký </application> <version>Số version của ứng dụng được chạy trên GAE</version> • 5.Deploy ứngdụnglên GAE: Cácbướcđể deploy ứngdụnglên GAE: • Chỉnhsửa file appengine-web.xml. <application>application-ID vừađăngký </application> <version>Số version củaứngdụngđượcchạytrên GAE</version> ĐH-KHTN
Google App Engine Service: Chỉnh sửa file appengine-web.xml. <application>application-ID vừa đăng ký </application> <version>Số version của ứng dụng được chạy trên GAE</version> • 5.Deploy ứngdụnglên GAE: Cácbướcđể deploy ứngdụnglên GAE: • TrongElipse ta click vào button trênToolbar vàchọn Deploy to App Engine… • Truycậpvào Website http://your_app_id.appspot.com/đểkiểmtra ĐH-KHTN
Thank You ! www.themegallery.com