Google app engine Cáccôngnghệlậptrìnhhiệnđại
Nội dung tìmhiểu Google App Engine • Giớithiệusơlược • Kiếntrúchoạtđộng • Cácthànhphầnchínhvàchứcnăng • Hạnchế • Demo
Nội dung tìmhiểu Google App Engine • Giớithiệusơlược • Kiếntrúchoạtđộng • Cácthànhphầnchínhvàchứcnăng • Hạnchế • Demo
Giớithiệusơlược 1. Điệntoánđámmây 2. Google App Engine
Điệntoánđámmây • Điệntoánđámmây (cloud computing), còngọilàđiệntoánmáychủảo, làmôhìnhđiệntoánsửdụngcáccôngnghệmáytínhvàpháttriểndựavàomạng Internet. • Thuậtngữ"đámmây" ở đâylàlốinóiẩndụchỉmạng Internet (dựavàocáchđượcbốtrícủanótrongsơđồmạngmáytính) vànhưmộtliêntưởngvềđộphứctạpcủacáccơsởhạtầngchứatrongnó.
Điệntoánđámmây • Ở môhìnhđiệntoánnày, mọikhảnăngliênquanđếncôngnghệthông tin đềuđượccungcấpdướidạngcác "dịchvụ",chophépngườisửdụngtruycậpcácdịchvụcôngnghệtừmộtnhàcungcấpnàođó "trongđámmây" màkhôngcầnphảicócáckiếnthức, kinhnghiệmvềcôngnghệđó, cũngnhưkhôngcầnquantâmđếncáccơsởhạtầngphụcvụcôngnghệđó.
Điệntoánđámmây • Theo tổchứcXãhộimáytính IEEE "Nólàhìnhmẫutrongđóthông tin đượclưutrữthườngtrựctạicácmáychủtrên Internet vàchỉđượcđượclưutrữtạmthời ở cácmáykhách, baogồmmáytínhcánhân, trungtâmgiảitrí, máytínhtrongdoanhnghiệp, cácphươngtiệnmáytínhcầmtay, ...". • Điệntoánđámmâylàkháiniệmtổngthểbaogồmcảcáckháiniệmnhưphầnmềmdịchvụ, Web 2.0 vàcácvấnđềkhácxuấthiệngầnđây, cácxuhướngcôngnghệnổibật, trongđóđềtàichủyếucủanólàvấnđềdựavào Internet đểđápứngnhữngnhucầuđiệntoáncủangườidùng.
Điệntoánđámmây • Vídụ, dịchvụGoogle App Engine cungcấpnhữngứngdụngkinhdoanhtrựctuyếnthôngthường, cóthểtruynhậptừmộttrìnhduyệt web, còncácphầnmềmvàdữliệuđềuđượclưutrữtrêncácmáychủ. • Mộtsốnềntảngđiệntoánđámmâyhiện nay: Google App Engine, Windows Azure, AmazoneWebservice, Sun Cloud, Facebook, …
Google App Engine • Google App Engine (App Engine hay GAE) làmộtnềntảngđiệntoánđámmâycủa Google đểpháttriểnvàlưutrữứngdụng web trongnhữngtrungtâmdữliệu do Google quảnlý (google-managed data centers). Bản beta đượcgiớithiệulầnđầutiênvàongày 7 tháng 4 năm 2008. • GAE là 1 dịchvụlưutrữcácứngdụng web. Khinóiđến “ứngdụng web”, chúngtamuốnnóitớicácứngdụng hay dịchvụđượctruycậptrêncáctrang web, thườnglàthông qua trìnhduyệt web: nhữngtrang web muabán, mạngxãhội… App Engine cũngcóthểphụcvụcáctrang web truyềnthốngnhưxửlývănbản hay hìnhảnhnhưngđượcthiếtkếdànhchothờigianthực.
Google App Engine • Thựcra, GAE đượcthiếtkếđểlưutrữnhữngứngdụngvàphụcvụnhiềungườidùngmộtcáchđồngthời. Khimộtứngdụngcóthểphụcvụnhiềungườidùngmộtcáchđồngthờimàkhônglàmgiảmhiệusuất, chúngtagọiđólàsự co giãn(scales). • Nhữngứngdụngđượcviếtcho App Engine sẽđược co giãnmộtcáchtựđộng. Càngnhiềungườisửdụngchươngtrình, App Engine sẽtạoracàngnhiềutàinguyênchoứngdụngđóvàquảnlýchúng. Chínhbảnthânứngdụngcũngkhôngcầnphảibiếtđếncáctàinguyênmànóđangsửdụng.
Google App Engine • Khôngnhưnhững server cungcấpcácdịchvụlưutrữthôngthường hay các server cóchứcnăngtựquảnlý, với Google App Engine, chúngtachỉphảitrảtiềnchonhữngtàinguyênmàchúngtasửdụng. Nhữngtàinguyênnàyđượcđobằng gigabyte vàkhôngcóbấtkìlệphíhàngthángnào hay lệphíđểchúngtathayđổidiệnmạotrang web. HóađơnthanhtoánnhữngnguồntàinguyênnàybaogồmCPUchúngtasửdụng, lưutrữhàngtháng, băngthôngvàora(incoming and outgoing bandwidth), vàmộtsốcáctàinguyênkháccủadịchvụ App Engine.
Google App Engine • Đểgiúpchúngtacóthểlàmquenvới GAE, mỗilậptrìnhviênsẽcókhoảng500 MB lưutrữ, mộtlượngtàinguyênmiễnphíđủđểchạynhữngứngdụngnhỏvớibăngthôngthấp. Google dựtoánrằngvớinguồntàinguyênmiễnphí, mộtứngdụngcóthểđạttới 5 triệulượttruycậptrongmộttháng. • HiệnAppEnginehỗtrợ 2 loạingônngữlà: Python và Java. MộtsốngônngữkhácnhưPHPcũngcóthểchạyđượcnếucàicùngvớibộchuyểntừ PHP sang Java.
Nội dung tìmhiểu Google App Engine • Giớithiệusơlược • Kiếntrúchoạtđộng • Cácthànhphầnchínhvàchứcnăng • Hạnchế • Demo
Kiếntrúchoạtđộng
Kiếntrúchoạtđộng • Kiếntrúccủa App Engine khácvớinhững server lưutrữứngdụng web thôngthường. Ở phầnlõicủanó, App Engine sẽhạnchếnhữngtruycậptừứngdụngcủachúngtađếncơsởhạtầngvậtlý, ngăncảnchúngtatừviệcmởcác socket, chạycáctiếntrìnhngầm, hay cáccáchđikhácbằngcổngsauđểgiúpchươngtrìnhcủatacóquyềntrênmôitrườngnày. • Nênnhớrằng, App Engine đượcthiếtkếđểgiảiquyếtmốiquantâmcủachúngtavềsựmởrộngvàđộ tin cậy. Nóđượcxâydựngdựatrênkháiniệmcóthểmởrộngtheochiềungang, nghĩalàthayvìứngdụngcủachúngtasẽđượcchạytrênmộtphầncứngmạnhmẽ, thìnócóthểchạytrênnhiềuphầncứngyếuhơn.
Kiếntrúchoạtđộng • Chúngtacóthểthấyứngdụng App Engine chạynhưmộtthựcthểcôlậptrongmôitrườnggồmnhiềuthànhphần (multitenant environment). App Engine chiasẻnhữngnguồntàinguyêngiữacácứngdụngnhưngcôlậpvềdữliệuvàbảomậtgiữanhữngthànhphầnvớinhau. • Ứngdụngcủachúngtacóthểsửdụngmộtsốcácdịchvụcủa Google, nhưlàURLFetch. Bởivìchúngtakhôngthểmởcổng (port) mộtcáchtrựctiếptrongứngdụngcủamình, nênchúngtaphảilệthuộcvàodịchvụnày, vídụ: yêucầu Google mởcổngvàthựcthiứngdụngcủamình.
Kiếntrúchoạtđộng • Xemxétkỹhơnmộtchút, giảsử App Engine làmộttòanhàcógắnhệthốngđiềuhòakhôngkhívànhiệtđộ. Chúngtalàmộtphầntrongcănnhàđó (chínhxáchơnlàứngdụngcủachúngta). Chúngtakhôngthểđiềuchỉnhnhiệtđộmộtcáchtrựctiếpbởinósẽảnhhưởngđếnnhữngphầnkháctrongtòanhà (cácứngdụngkhác). Vìvậy, chúngtaphảigửimộtyêucầuđếnngườichủcủacănnhànàyđểnhờhọthayđổinhiệtđộchochúngta. Chínhxácđólàcácdịchvụcủa GAE nhưURLFetch, Bigtable query, Memcache, mail, XMPP, vàcácdịchvụkhác. Đóchínhlàbảnchấtnhữnggìđangxảyratrong App Engine.
Kiếntrúchoạtđộng • Nhưvậy, trong GAE, tùyvàoứngdụngviếttheongônngữnào, nósẽđượcchạytrênmôitrường Java hay Python tươngứng. Song songđó, chúngtasẽđượccungcấpsửdụngmiễnphícácdịchvụcủagooglenhư URL Fetch, Mail, Memcache, … vàđượclưutrữtrêncơsởdữliệuhướngđốitượngdatastore. Khiyêucầuđượcgửilêntừphíangườidùng, GAE sẽchuyểnyêucầuđóchoứngdụngcủachúngta. Tùytheoviệcxửlýchúngmàtacấuhìnhvàsửdụngcácứngdụngthíchhợpcủa GAE.
Nội dung tìmhiểu Google App Engine • Giớithiệusơlược • Kiếntrúchoạtđộng • Cácthànhphầnchínhvàchứcnăng • Hạnchế • Demo
Cácthànhphầnchínhvàchứcnăng 1. Môitrườngthựcthi 2. Các file server tĩnh 3. Khodữliệu 4. Cácdịchvụ 5. Tàikhoảngoogle 6. Cáccôngcụlậptrình
Môitrườngthựcthi • Mộtứngdụng App Engine đápứngcácyêucầu web. Mộtyêucầu web sẽbắtđầukhicómộtngườidùng hay điểnhìnhlàcáctrìnhduyệt web củangườidùnggửimộtyêucầutruycậpvàoứngdụngthông qua giaothức HTTP. Khi App Engine nhậnđượcyêucầu, nósẽxácđịnhứngdụngdựavàotênmiền, hoặctênmiền con của <tênbạn>.appspot.com (cungcấpmiễnphímỗiứngdụng) hoặclàmộttênmiềnriêngcủachúngtađãđượcđăngkívàthiếtlậpvới Google Apps. App Engine lựachọnmộtmáychủtừnhiềumáychủđểxửlýcácyêucầuđó. • Sauđó, App Engine sẽgửicácyêucầuđãnhậnđượctừngườidùngđếnứngdụngphùhợpđểxửlý, saukhiđãxửlýxongcácứngdụngnàysẽgửidữliệutrảvềcho App Engine, App Engine sẽnhậndữliệuphảnhồitừcácứngdụngvàtrảvềchongườidùngthông qua trìnhduyệt web.
Môitrườngthựcthi • Google App Engine cungcấphaimôitrườngthựcthitốtchocácứngdụng. ĐólàJavavàPython. Môitrườngchúngtachọnsẽphụthuộcvàongônngữvànhữngcôngnghệliênquankhichúngtadùngđểpháttriểnứngdụng.
Môitrườngthựcthi • MôitrườngJavathựcthicácứngdụngđượcviếtchoJVM6. Ứngdụngcóthểđượcpháttriểndựavàongônngữlậptrình Java hoặchầuhếtcácngônngữcóthểbiêndịchvàchạytrênJVM: vídụ PHP (dùngQuercus), Ruby (dùngJRuby), Javascript (dùng Rhino), Scala, Groovy. App Engine cũnghỗtrợ Google Web Tootkit (GWT). • MôitrườngPythonthựcthicácứngdụngđượcviếtdựavàongônngữlậptrìnhPythonbản 2.5. App Engine gọicácứngdụng Python nhờvàoCGI (Common Gateway Interface). Ứngdụngcóthểdùnghầuhếtcácthưviệncủa Python, các framework của Python nhưDjango, web2py, Pylons.
Môitrườngthựcthi • CảhaimôitrườngJavavàPythonđềusửdụngchungmộtmôhình: mộtyêucầugửiđếnứngdụngtrên server, ứngdụngđượckíchhoạt (nếucầnthiết), gọibộphậnxửlýyêucầuvàtrảvềkếtquảcho client. Mỗimôitrườngsửdụngbộtiềnxửlý (interpreter) choriêngmình (JVM hay Python).
Các file server tĩnh • Hầuhếtcác website cómộtsốtàinguyênmàchúngchuyểnđếncáctrìnhduyệtkhôngthayđổitrongsuốthoạtđộngcủa site. Vídụnhưcáchìnhảnhvàcácfile csshỗtrợhiểnthịcủa site, cácđoạnmãJavascriptchạytrêntrìnhduyệt, vàcácfile HTML tĩnh. Vìviệcgửinhững file nàykhôngcầnđếnviệcgọi code củaứngdụng, nóicáchkhác, việcnàykhôngcầnthiết, làmgiảmhiệnquảlàmviệccủacác server ứngdụng.
Các file server tĩnh • Thayvìthế, App Engine cungcấpmộttậpcác server táchbiệtchuyênlàmnhiệmvụtraođổicác file tĩnhnày. Những server nóitrêntốiưuhóachokiếntrúcbêntrongvàhạtầngmạngđểxửlýcác requests chocáctàinguyêntĩnh. Đốivới client, các file tĩnhnàycũnggiốngnhưcáctàinguyênkhácđượccungcấpbởiứngdụngcủachúngta. • Chúngtaupload các file tĩnhcùngvới code ứngdụng. Chúngtacóthểcấuhìnhvàicáchhiểnthịnhấtđịnhchocác filenày, baogồmcác URL cho file tĩnh, loạinội dung, vàcáchướngdẫnchotrìnhduyệtđểlưucácbảnsao filenàytrongbộnhớ cache đểgiảmlưulượngvàtăngtốcchotrang web.
Khodữliệu • Hầuhếtmọiứngdụng web đềucầnmộtnơiđểchứathông tin khixửlýyêucầutừphía client vàlấythông tin chonhữnglầnyêucầusaunày. Việcsửdụngmột server làmmộttrungtâmdữliệulàmột ý tưởngrất hay nhưngcóvấnđềxảyrakhiquánhiềukếtnốiđượcgửitới servernày. • Hệthống database của Google App Engine gầngiốngnhưmộtđốitượng database. Thiếtkếcủa App Engine datastorechỉlàtrừutượngđểcho App Engine cóthểxửlýviệcphântánvà co giãncácứngdụng. Chínhvìthếtrongcácđoạnmãcủachúngtasẽquantâmđếnnhữngthứkhácđượcnêusauđây.
Khodữliệu – Thựcthểvàthuộctính • Mộtứngdụng App Engine cóthểchứadữliệutrongmột hay nhiềuthựcthểdatastore. Mỗithựcthểcómột hay nhiềuthuộctính, mỗithuộctínhđềucótênvàgiátrị. Mỗithựcthểđềuđượcphânloạiđểtiệnchoviệctruyvấn. • Ở cáinhìnđầutiên, chúngtathấythựcthểcóthểgầngiốngcáchàng (row) trongmộtbảngtrongcơsởdữliệuquanhệ. Vàmỗithuộctínhcóthểgiốngvớimộtcột. Tuynhiênđốivớicácthựcthểcùngloạivớinhaucóthểcócácthuộctínhkhácnhau. Cácthựcthểcóthểcócùngthuộctínhvớicácthựcthểcùngloạikhácnhưngkhácvềkiểudữliệu. Mộtđiểmkhácnhaunữagiữathựcthểvàcáchàng (row) làcácthựcthểcóthểcónhiềugiátrịchomộtthuộctínhđơnlẻ.
Khodữliệu – Thựcthểvàthuộctính • Mỗithựcthểcómộtkhóariêng (key) phânbiệtlẫnnhauđượccungcấpbởiứngdụnghoặc do App Engine. Khácvới CSDL quanhệ, khoácủathựcthểkhôngphảilàthuộctính, nótồntạiđộclậpvớithựcthể. Khoácủathựcthểkhôngđượcthayđổikhithựcthểđãđượctạora.
Khodữliệu – Truyvấnvàchỉmục • Mộtcâutruyvấntrêndatastoretrảvềkhônghoặcnhiềuthựcthểcùngloạivớinhau. Nócũngcóthểtrảvềcáckhóacủathựcthể. Câutruyvấncóthểdựavàocácgiátrịthuộctínhcủathựcthểvàđượcsắpxếptheogiátrịcủathuộctính. Câutruyvấncũngcóthểlàmviệcvớicáckhóacủathựcthể. • Với App Engine, mỗicâutruyvấnsẽcómộtchỉmụctrongdatastore. Khiứngdụngcầnthựchiênmộtcâutruyvấn, thìdatastoresẽtìmchỉmụccủacâutruyvấnđó. Khichúngtatạomớimộtthựcthểvàcậpnhậtcáicũthìdatastorecũngsẽcậpnhậtlạichỉmục. Điềunàygiúpchocâutruyvấnđượcnhanhhơn.
Khodữliệu – Phiêngiaodịch • Khimộtứngdụngcóquánhiều client liêntụcđọc hay ghicùngmộtdữliệu ở cùngmộtthờiđiểm, thìphiêngiaodịchrấtcầnthiếtđểdữliệukhôngbịđọcsai. Mỗiphiêngiaodịchlàđơnvịnhỏnhấtvàchỉcóhaitrạngtháilàthànhcônghoặcthấtbại. • Mộtứngdụngđọc hay cậpnhậtnhiềuthựcthểtrongmộtphiêngiaodịch, nhưngnóphảinóicho App Engine biếtnhữngthựcthểnàosẽđượccậpnhậtkhinótạoranhiềuthựcthể. Ứngdụnglàmđượcđiềunàybởiviệctạoranhómthựcthể. Nhờnhómthựcthể, App Engine sẽbiếtđượccácthựcthểsẽphântánnhưthếnào qua các server, vìthếnócóthểkhẳngđịnhchắcchắnlàphiêngiaodịchthànhcông hay thấtbại. App Engine cũnghỗtrợnhữngphiêngiaodịchnộibộ (local transaction).
Khodữliệu – Phiêngiaodịch • Nếumộtngườidùngcốgắngcậpnhậtmộtthựcthểtrongkhingườikhácđangcậpnhậtthựcthểđóthìdatastoresẽngaylậptứctrảvềmộtbiệtlệbáolỗi. Trongthuậtngữ database, thìtanói App Engine sửdụng “optimistic concurrency control”. Vớichỉmụcvà “optimistic concurrency control”, App Engine đượcthiếtkếgiúpchoứngdụngcóthểđọcdữliệunhanhhơnvàđảmbảohơn.
Cácdịchvụ • Dịchvụchínhlàmốiquanhệgiữadatastorevớimôitrườngthựcthi. GAE baogồmmộtsốcácdịchvụhữuíchchocácứngdụng web. • Dịchvụmemcachelàdịchvụlưutrữtheokhóa - giátrị. Thuậnlợichínhcủadịchvụnàytrêndatastorelàtốcđộnhanh, rấtnhanh so vớiviệclưutrữvàlấydữliệumộtcáchbìnhthườngtrêndatastore. Memcachelưutrữdữliệutrênbộnhớthayvìtrên ổ đĩađểtăngtốcđộtruycập. Nócũngphântánnhưdatastoretuynhiênkhônglưutrữ, vìthếnếumấtđiệnthìdữliệutrênmemcachecũngmất. Vànócũngcónhiềugiớihạnsửdụnghơndatastore. Việcsửdụngmemcachetốtnhấtlàlưulạicáckếtquảcủacáccâu query hay cáctínhtoántrướcđó. Ứngdụngsẽkiểmtratrongmemcache, nếukhôngcódữliệuthìsẽtiếnhành query trêndatastore.
Cácdịchvụ • Ứngdụng App Engine cóthểtruycậpcáctàinguyên web khácnhờvàodịchvụ URL Fetch. Dịchvụnàytạoracácyêucầutheodạng HTTP gửiđếncác server kháctrên Internet nhưlàviệctươngtácvớicác web service khác. Vìkhitatruycậpđến server khácthờigiansẽlâunên URL Fetch hỗtrợchạyngầmbêndướitrongkhixửlýcácyêucầukhác. • Ứngdụng App Engine cóthểgửi mail dựavàodịchvụ Mail, hoặcnếuđượccấuhình, nócóthểnhậnđược email. • Ứngdụng App Engine cóthểgửivànhậnnhững tin nhắnđếncácdịchvụ chat cósửdụnggiaothức XMPP baogồm Google Talk.
Tàikhoản Google • Cácchứcnăngcủa App Engine tíchhợptrongcáctàikhoảncủa Googlenhư Google Mail, Google Docs và Google Calendar. Chúngtacóthểsửdụngtàikhoảntrên Google nhưchocácứngdụngcủachúngta, do đókhôngcầnthiếtlậpthêm. Vànếucácngườidùngcủachúngtađãcótàikhoảntrên Google, họcóthểđăngnhậpvàoứngdụngcủachúngtavớicáctàikhoảnđó, màkhôngcầntạotàikhoảnriêngtrongứngdụng. Tấtnhiên, điềuđókhôngbắtbuộc. Chúngtaluôncóthểxâydựnghệthốngtàikhoảnriêngcủamình, hoặcsửdụngmột provider OpenID.
Cáccôngcụlậptrình • Google cungcấpmộtsốtool miễnphíchoviệcphátriểnứngdụng App Engine bằngngônngữ Java và Python. Chúngtacóthể download software development kit (SDK) chongônngữtươngứngvàhệđiềuhànhcủachúngtatừ website Google. Ngườidùng Java cóthể down SDK cho Java trong form plug-in cho Eclipse. Ngườidùng Python sửdụng Windows hoặc Mac OS X cóthểtải SDK cho Python từ form củagiaodiệnứngdụng. Các SDK đóđềucófile zip, sửdụngcommand-linesđểtrựctiếptíchhợpvàomôitrườngpháttriểnhoặcxâydựnghệthống.
Cáccôngcụlậptrình • Mỗi SDK baogồmmột server web chạyứngdụngcủachúngtatạimáycánhân, đóngvaitròmôitrườngthựcthi, khodữliệuvàcác service. Server nàytựđộngpháthiệnnhữngthayđổitrong file source và load lạichúngnếucần, vìthếchúngtacóthểluônmở server trongkhiđanglậptrìnhchoứngdụng. • Nếuchúngtasửdụng Eclipse, chúngtacóthểchạy server cho Java trongbộtíchhợp debugger, vàcóthểđặtcác breakpoint trong code. Chúngtacũngcóthểsửdụng Eclipse choứngdụngpháttriển Python dùngPyDev, mộtnhánhmởrộngcủa Eclipse, baogồmbộ debugger cho Python.
Cáccôngcụlậptrình • Mỗi SDK cũngbaogồmmộtcôngcụchoviệctươngtácvớicácứngdụngchạytrên App Engine. Chủyếulàsửdụngchoviệc upload code lên App Engine. Chúngtacũngcóthểsửdụng tool để download các file logtừứngdụngđangchạy, hoặcquảnlýdanhmụcứngdụng.
Cáccôngcụlậptrình • SDK Python và Java gồmmộtchứcnăngmàchúngtacóthểcàiđặttrongứngdụngchoviệctruycậpcóthứtựtừxamộtcách an toànđếnứngdụng. SDK Python baogồmcáccôngcụdùngchoviệcxửlýdữliệulớn, như upload dữliệutừ file text, vàtảilượnglớndữliệu, hoặcsaolưuchomụcđíchlưutrữ. SDK cũngcócommand-line shell của Python choviệc test, kiểmlỗivàthaotácvớidữliệu. (Các tool nàycótrong SDK cho Python, nhưngcũnglàmviệcvớicácứngdụng Java sửdụngphiênbản Java cóchứcnăngtruycậptừxa). Chúngtacóthểviếtđoạnmã script vàchươngtrìnhsửdụngchứcnăngtruycậptừxachoviệcvậnchuyểnlượnglớndữliệuvàcácbiệnphápbảotrìkhác.
Nội dung tìmhiểu Google App Engine • Giớithiệusơlược • Kiếntrúchoạtđộng • Cácthànhphầnchínhvàchứcnăng • Hạnchế • Demo
Hạnchế
Hạnchế • App Engine hỗtrợ HTTPS đốivới domain con của .appspot.comnhữngvẫnchưahỗtrợđốivớicác domain khác. • Hiện Google App Engine hỗtrợ 2 loạingônngữlà: Python, Java (Mộtsốngônngữkhácnhư PHP cũngcóthểchạyđượcnếucàicùngvớibộchuyểntừ PHP sang Java). • Phụthuộchoàntoànvàocácdịchvụcủa Google. • Microsoft, … sẽchẳngbaogiờmuasảnphẩmđượcxâydựngtrênnềntảngcủađốithủ. • Cácnhàđầutư e ngạivìtoànbộdữliệucủamìnhđềunằmtrongtaynhàcungcấpdịchvụ, dùchođólà Google.
Nội dung tìmhiểu Google App Engine • Giớithiệusơlược • Kiếntrúchoạtđộng • Cácthànhphầnchínhvàchứcnăng • Hạnchế • Demo
Demo
Thanks for listening