TRƯỜNG ĐẠI HỌC TÂY NGUYÊN
KHOA KHTN&CN
TRƯỜNG ĐẠI HỌC TÂY NGUYÊN
KHOA KHTN&CN
CHUYÊN ĐỀ TỐT NGHIỆP
CHUYÊN
ĐỀ TỐT
TÌM HIỂU CÔNG
NGHỆ
ĐIỆNNGHIỆP
TOÁN ĐÁM MÂY
ỨNG DỤNG VÀO MỘT DỊCH VỤ TRONG THƯ VIỆN
GOOGLE APP ENGINE CỦA GOOGLE
TÌM HIỂU CÔNG NGHỆ ĐIỆN TOÁN ĐÁM MÂY
ỨNG DỤNG VÀO MỘT DỊCH VỤ TRONG THƯ VIỆN
GOOGLE APP ENGINE CỦA GOOGLE
Sinh viên
: Mạc Chu Bảo Nguyên
Sinh
viên
:
Bảo
Nguyên
Chuyên ngành:Mạc
CôngChu
nghệ
thông
tin
Chuyên
ngành:
Công
nghệ
thông
tin
Khóa học
: 2011 - 2015
Người hướng dẫn:
CN. Phan Thị Đài Trang
Đắk Lắk, tháng 05 năm 2015
Đắk Lắk, tháng 05 năm 2015
Đắk Lắk, 01 tháng 05 năm 2015
LỜI CẢM ƠN
Để có thể hoàn thành được chuyên đề này, em xin bày tỏ lòng biết ơn sâu
sắc đến các thầy, cô giáo trong trường Đại học Tây Nguyên nói chung, bộ
môn Tin học nói riêng, những người đã tận tình truyền đạt cho em kiến thức
trong những năm học vừa qua.
Em xin chân thành cảm ơn cô Phan Thị Đài Trang đã nhiệt tình hướng
dẫn, chỉ bảo và cung cấp cho em những kiến thức cũng như những tài liệu quý
báu giúp em hoàn thành chuyên đề này.
Cuối cùng, em xin cảm ơn gia đình, bạn bè đã tạo điều kiện thuận lợi,
động viên và giúp đỡ em về mọi mặt trong quá trình thực hiện chuyên đề này.
Do vốn kiến thức còn hạn chế và chưa có đủ kinh nghiệm thực tế nên
không thể tránh khỏi thiếu sót, kính mong các thầy, cô đóng góp ý kiến để
chuyên đề này được hoàn thiện hơn.
Em xin chân thành cảm ơn.
Đắk Lắk, tháng 5 năm 2015
Sinh viên thực hiện
Mạc Chu Bảo Nguyên
2
MỤC LỤC
3
DANH MỤC HÌNH ẢNH
DANH MỤC CÁC KÍ HIỆU VIẾT TẮT
API
CGI
CPU
GAE
GWT
HTTP
HTML
JVM
PHP
TLS
SLA
SDK
URL
VPS
XMPP
Application Programming Interface: Giao diện lập trình ứng dụng.
Common Gateway Interface: Phương pháp cho phép giao tiếp giữa server và
chương trình nhờ các định dạng đặc tả thông tin.
Central Processing Unit: Bộ vi xử lí trung tâm.
Google App Engine: Một môi trường phát triển ứng dụng dựa trên công nghệ
điện toán đám mây.
Google Web Toolkit: Bộ công cụ phát triển để xây dựng và tối ưu hóa các ứng
dụng web phức tạp.
Hyper Text Transfer Protocol: Giao thức truyền tải siêu văn bản.
HyperText Markup Language: Ngôn ngữ đánh dấu siêu văn bản.
Java Virtual Machine: Môi trường máy ảo để thực thi mã java bytecode.
Internet Protocol: Giao thức Internet.
Transport Layer Security: Bảo mật tầng giao vận.
Service Level Agreement: Cam kết về dịch vụ
Software Development Kit: Bộ công cụ phát triển phần mềm.
Universal Resource Locator: Tham chiếu tới tài nguyên trên Internet.
Virtual Private Server: Máy chủ ảo.
Extensible Messaging and Presence Protocol: Giao thức mở và dựa trên nền
tảng XML .
4
MỞ ĐẦU
1. Đặt vấn đề
Ngày nay, máy tính đã trở thành một phần tất yếu của cuộc sống. Khi
nhu cầu sử dụng máy tính tăng thì nguồn tài nguyên cần cung cấp cũng tăng.
Trước đây, với những vấn đề lớn về cơ sở hạ tầng trong công nghệ
thông tin như máy hỏng, treo ổ cứng, lỗi phần mềm, v.v… thật sự nghiêm
trọng cho các doanh nghiệp. Trước tình hình đó, điện toán đám mây ra đời là
một giải pháp tối ưu và cấp thiết.
Điện toán đám mây là một cuộc dịch chuyển cách mạng trong đó việc
tính toán sẽ được chuyển giao từ máy tính cá nhân hay các máy chủ ứng dụng
doanh nghiệp đến một đám mây máy tính. Đám mây ở đây chính là mạng
máy tính, một hình tượng để chỉ đến tập các máy chủ ảo hóa, có thể cung cấp
nguồn tài nguyên khác nhau cho khách hàng. Người sử dụng của hệ thống chỉ
cần quan tâm tới các dịch vụ đang được yêu cầu. Cái chi tiết bên trong hệ
thống như thế nào người dùng không cần phải biết. Các dữ liệu và các dịch vụ
cung cấp nằm trong các trung tâm dữ liệu của đám mây có khả năng mở rộng
lớn, có thể được truy cập ở bất kỳ đâu, từ bất kỳ thiết bị nào được kết nối trên
thế giới.
Điện toán đám mây được sử dụng trong các lĩnh vực khác nhau như
web hosting, lập trình song song, dựng hình đồ họa, mô hình tài chính (IBM
Clouds), các phương pháp duyệt và tìm kiếm trên web (web spider), phân tích
gen (Amazon Clouds), v.v …
Từ thực tế trên, em thực hiện đề tài “TÌM HIỂU CÔNG NGHỆ ĐIỆN
ĐOÁN ĐÁM MÂY ỨNG DỤNG VÀO MỘT THƯ VIỆN TRONG
GOOGLE APP ENGINE CỦA GOOGLE” để làm rõ hơn công nghệ này.
5
2. Mục tiêu nghiên cứu
- Tìm hiểu được công nghệ điện toán đám mây.
- Ứng dụng được vào Google App Engine.
3. Tổng quan/ cơ sở lí luận
Điện toán đám mây (Cloud Computing, hay còn biết đến với tên gọi
“Điện toán máy chủ ảo”) là môi trường tính toán dựa trên internet mà ở đó tất
cả phần mềm, dữ liệu, tài nguyên được cung cấp cho máy tính và các thiết bị
khác theo nhu cầu.
Thuật ngữ “đám mây” ở đây là lối nói ẩn dụ chỉ mạng Internet và như
một liên tưởng về độ phức tạp của các cơ sở hạ tầng chứa trong nó.
Nói một cách đơn giản nhất, ứng dụng điện toán đám mây chính là
những ứng dụng trực tuyến trên Internet. Trình duyệt là nơi ứng dụng hiện
hữu và vận hành còn dữ liệu được lưu trữ và xử lý ở máy chủ của nhà cung
cấp ứng dụng đó.
Một số nền tảng điện toán đám mây hiện nay: Google App Engine,
Windows Azure, Amazone Webservice, Sun Cloud, Facebook, …
Google App Engine (App Engine hay GAE) là một nền tảng điện toán
đám mây của Google để phát triển và lưu trữ ứng dụng web trong những
trung tâm dữ liệu do Google quản lý (google-managed data centers). Bản beta
được giới thiệu lần đầu tiên vào ngày 7 tháng 4 năm 2008. “Google App
Engine” là một nền tảng hosting bao gồm web server, cơ sở dữ liệu BigTable
and kho lưu trữ file GFS. Google App Engine cho phép ta viết ứng dụng web
dựa trên cơ sở hạ tầng của Google.
Ứng dụng App Engine rất dễ xây dựng, dễ bảo trì, và dễ dàng để mở
rộng quy mô. Khi nói đến “ứng dụng web”, chúng ta muốn nói tới các ứng
dụng hay dịch vụ được truy cập trên các trang web, thường là thông qua trình
duyệt web: những trang web mua bán, mạng xã hội, … App Engine cũng có
thể phục vụ các trang web truyền thống như xử lý văn bản hay hình ảnh
nhưng được thiết kế dành cho thời gian thực.
6
Với App Engine, ta không cần quan tâm là trang web của mình đượ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ới App Engine,
không cần máy 3 chủ để duy trì: ta chỉ cần tải ứng dụng của mình, và nó sẵn
sàng để phục vụ người dùng.
Người sử dụng có thể sử dụng tên miền riêng của mình thông qua
Google Apps cung cấp, hoặc có thể
dùng sub-domain miễn phí của
appspot.com.
Thực ra, GAE được thiết kế để lưu trữ những ứng dụng và phục vụ
nhiều người dùng một cách đồng thời. Khi một ứng dụng có thể phục vụ
nhiều người dùng một cách đồng thời mà không làm giảm hiệu suất, chúng ta
gọi đó là sự co giãn (scales). Những ứng dụng được viết cho App Engine sẽ
được co giãn một cách tự động. Càng nhiều người sử dụng chương trình, App
Engine sẽ tạo ra càng nhiều tài nguyên cho ứng dụng đó và quản lý chúng.
Chính bản thân ứng dụng cũng không cần phải biết đến các tài nguyên mà nó
đang sử dụng.
Không như những server cung cấp các dịch vụ lưu trữ thông thường
hay các server có chức năng tự quản lý, với Google App Engine, chúng ta chỉ
phải trả tiền cho những tài nguyên mà chúng ta sử dụng. Những tài nguyên
này được đo bằng gigabyte và không có bất kì lệ phí hàng tháng nào hay lệ
phí để chúng ta thay đổi diện mạo trang web. Hóa đơn thanh toán những
nguồn tài nguyên này bao gồm CPU chúng ta sử dụng, lưu trữ hàng tháng,
băng thông vào ra (incoming and outgoing bandwidth), và một số các tài
nguyên khác của dịch vụ App Engine.
Để giúp chúng ta có thể làm quen với GAE, mỗi lập trình viên sẽ có
khoảng 1 GB lưu trữ, một lượng tài nguyên miễn phí đủ để chạy những ứng
dụng nhỏ với băng thông thấp. Google dự toán rằng với nguồn tài nguyên
miễn phí, một ứng dụng có thể đạt tới 5 triệu lượt truy cập trong một tháng.
Trong phạm vi đề tài này, em sẽ trình bày một cách tổng quát các vấn
đề cần quan tâm về hệ thống Google App Engine như: kiến trúc, các thành
7
phần, các bước để xây dựng ứng dụng trên Google App Engine. Đồng thời, đề
tài cũng minh họa một ứng dụng cụ thể đã triển khai trên Google App Engine.
4. Nội dung nghiên cứu
Chương 1: Tổng quan về điện toán đám mây
1.1. Khái niệm
1.2. Các đặc điểm của điện toán đám mây
1.3. Ưu và nhược điểm của điện toán đám mây
1.4. Ứng dụng của điện toán đám mây.
Chương 2: Tìm hiểu về Google App Engine
2.1. Kiến trúc hoạt động
2.2. Các thành phần chính và chức năng
2.3 Hạn chế của Google App Engine
Chương 3: Xây dựng và triển khai ứng dụng
3.1. Chuẩn bị
3.2. Đăng kí tài khoản Google App Engine
3.3. Ứng dụng minh họa
3.4. Các file cài đặt trong project
3.5. Triển khai ứng dụng
3.6. Upload ứng dụng lên Google App Engine
3.7. Sử dụng ứng dụng
5. Phương pháp nghiên cứu
- Nghiên cứu tài liệu tham khảo.
- Phương pháp thu thập thông tin.
- Nghiên cứu dưới sự hướng dẫn của giáo viên.
8
NỘI DUNG
CHƯƠNG 1: TỔNG QUAN VỀ ĐIỆN TOÁN ĐÁM MÂY
1.1. Khái niệm
Điện toán đám mây (Cloud Computing, hay còn biết đến với tên gọi
“Điện toán máy chủ ảo”) là môi trường tính toán dựa trên internet mà ở đó tất
cả phần mềm, dữ liệu, tài nguyên được cung cấp cho máy tính và các thiết bị
khác theo nhu cầu.
Thuật ngữ “đám mây” ở đây là lối nói ẩn dụ chỉ mạng Internet và như
một liên tưởng về độ phức tạp của các cơ sở hạ tầng chứa trong nó.
Nói một cách đơn giản nhất, ứng dụng điện toán đám mây là những
ứng dụng trực tuyến trên Internet. Trình duyệt là nơi ứng dụng hiện hữu và
vận hành còn dữ liệu được lưu trữ và xử lý ở máy chủ của nhà cung cấp ứng
dụng đó.
1.2. Các đặc điểm của điện toán đám mây
Một định nghĩa cho điện toán đám mây có thể được đưa ra như là một mô
hình máy tính mới mà ở đó dữ liệu và các dịch vụ được đặt tại các trung tâm
dữ liệu có thể mở rộng trong các đám mây và có thể được truy cập từ bất kỳ
thiết bị nào qua internet.
Đám mây điện toán là một cách để cung cấp các dịch vụ khác nhau trên
các máy ảo được cấp phát trong một tập hợp các máy tính vật lý lớn nằm
trong đám mây. Điện toán đám mây trở nên tập tmng chỉ khi chúng ta suy
nghĩ về cái mà công nghệ thông tin đã luôn luôn mong muốn - một cách để
tăng năng lực hoặc thêm các khả năng khác nhau vào thiết lập hiện tại mà
không cần đầu tư vào cơ sở hạ tầng mới, đào tạo nhân viên mới hoặc cấp giấy
phép mới phần mềm. Và đám mây điện toán đã cung cấp một giải pháp tốt
hơn.
9
Chúng ta có khả năng tính toán lớn và khả năng lưu trữ ở trong môi
trường phân tán của đám mây. Điện toán đám mây phải làm thế nào để khai
thác khả năng của các tài nguyên và làm cho các tài nguyên sẵn sàng như một
thực thể duy nhất mà có thể được thay đổi để đáp ứng các nhu cầu hiện tại của
người dùng. Cơ sở của Điện toán đám mây là tạo ra một tập các máy chủ ảo
rộng lớn và khách hàng sẽ truy cập chúng. Bất thiết bị truy cập web nào cũng
có thể được sử dụng để truy cập vào các nguồn tài nguyên thông qua các máy
chủ ảo. Căn cứ vào tính toán nhu cầu của khách hàng, cơ sở hạ tầng đuợc
phân bổ cho khách hàng có thể được tăng lên hoặc hạ xuống.
Nhìn từ quan điểm kinh doanh, điện toán đám mây là một phương pháp để
giải quyết khả năng mở rộng và những mối quan tâm cho các ứng dụng quy
mô lớn, trong đó bao gồm việc chi phí ít hơn. Bởi vì tài nguyên được phân bổ
cho khách hàng có thể dựa trên nhu cầu khác nhau của khách hàng và có thể
được thực hiện mà không phiền phức nào, các nguyên cần thiết là rất ít.
Một trong những thành tựu quan trọng của điện toán đám mây có thể khái
quát là xử lý dữ liệu lớn gấp 1000 lần không nhất thiết phải thực hiện với sự
phức tạp hơn 1000 lần thông thường. Khi số lượng dữ liệu tăng, các đám mây
dịch vụ điện toán có thể được sử dụng đế quản lý việc tải một cách hiệu quả
và làm cho công việc xử lý dễ dàng hơn. Trong thời đại của máy chủ doanh
nghiệp và máy tính cá nhân, phần cứng là tiêu chuẩn chính cho khả năng xử
lý, chúng phụ thuộc vào cấu hình phần cứng của máy chủ. Nhưng với sự ra
đời của đám mây máy tính, các hàng hóa đã thay đổi với chu kỳ và byte - tức
là trong dịch vụ điện toán đám mây, người dùng được tính dựa trên số lượng
các chu trình được thực hiện hay là số lượng byte được dịch chuyển.
Các phần cứng hoặc các máy mà các ứng dụng được chạy thì được ấn
khỏi người sử dụng. Số lượng phần cứng cần thiết cho tính toán được thực
hiện bởi trình quản lý và nói một cách khái quát là khách hàng được tính chi
phí dựa trên cách ứng dụng sử dụng các nguồn tài nguyên.
10
1.2.1. Tự sửa chữa
Bất kỳ ứng dụng hoặc dịch vụ nào đang chạy trong một môi trường điện
toán đám mây có một tính chất tự sửa chữa. Trong trường hợp ứng dụng thất
bại, luôn luôn có một dự phòng tức thời của ứng dụng sẵn sàng để cho công
việc không bị gián đoạn. Có nhiều bản sao của cùng một ứng dụng - mỗi bản
cập nhật chính nó thường xuyên vì vậy ở những lần thất bại, có ít nhất một
bản sao của ứng dụng có thể lấy lên hoạt động mà thậm chí không cần thay
đổi nhỏ nào trong trạng thái chạy của nó.
1.2.2. Nhiều người sử dụng
Với điện toán đám mây, bất kỳ ứng dụng nào cũng hỗ trợ đa người dùng đó là khái niệm dùng để chỉ nhiều người sử dụng đám mây trong cùng thời
gian. Hệ thống cho phép một số khách hàng chia sẻ cơ sở hạ tầng được phân
bố cho họ mà không ai trong họ nhận biết về sự chia sẻ này. Điều này được
thực hiện bởi việc ảo hóa các máy chủ trong một dải các máy tính và sau đó
cấp phát các máy chủ đến nhiều người sử dụng. Điều này được thực hiện theo
cách mà trong đó sự riêng tư của người sử dụng và bảo mật của dừ liệu của họ
không bị tổn hại.
1.2.3. Khả năng mở rộng tuyến tính
Dịch vụ điện toán đám mây có khả năng mở rộng tuyến tính. Hệ thống có
khả năng phân chia các luồng công việc thành phần nhỏ và phục vụ nó qua cơ
sở hạ tầng. Một ý tưởng chính xác của khả năng mở rộng tuyến tính có thể
được lấy từ thực tế là nêu một máy chủ có thể xử lý 1000 giao dịch trong một
giây, thì hai máy chủ có thể xử lý 2.000 giao dịch trong một giây.
1.2.4. Hướng dịch vụ
Hệ thống Điện toán đám mây là tất cá các dịch vụ theo định hướng những dịch vụ như vậy được tạo ra từ những dịch vụ rời rạc khác. Rất nhiều
dịch vụ rời rạc như vậy là sự kết hợp của nhiều dịch vụ độc lập khác với nhau
đê tạo dịch vụ này. Điều này cho phép việc tái sử dụng các dịch vụ khác nhau
11
sẵn có và đang được tạo ra. Bằng việc sử dụng các dịch vụ đã được tạo ra
trước đó, những dịch vụ khác có thể được tạo ra từ đó.
1.2.5. Điều khiển SLA(Service level agreement)
Thông thường các doanh nghiệp có thỏa thuận về số lượng dịch vụ. Khả
năng mở rộng và các vấn đề có sẵn có thể làm cho các thỏa thuận này bị phá
vở. Tuy nhiên, các dịch vụ điện toán đám mây là hướng SLA, như việc khi hệ
thống có kinh nghiệm đạt đỉnh của tải, nó sẽ tự động điều chỉnh chính nó để
tuân thủ các thỏa thuận ở cấp độ dịch vụ. Các dịch vụ sẽ tạo ra thêm những
thực thể của ứng dụng trên nhiêu server đê cho việc tải có thê dễ dàng quản
lý.
1.2.6. Khả năng ảo hóa
Các ứng dụng trong điện toán đám mây hoàn toàn tách rời khỏi phần cứng
nằm bên dưới. Môi trường điện toán đám mây là môi trường ảo hóa đầy đủ.
1.2.7. Tính linh hoạt
Một tính năng khác của các dịch vụ điện toán đám mây là chúng linh hoạt.
Chúng có thể được dùng để phục vụ rất nhiều loại công việc có khối lượng
khác nhau từ tải nhỏ của một ứng dụng nhỏ cho đến tải rất nặng của một ứng
dụng thương mại.
1.3. Ưu và nhược điểm, những khó khăn thách thức
1.3.1. Ưu điểm
Giảm chi phí đầu tư ban đầu của các doanh nghiệp sử dụng dịch vụ, độ
tin cậy được cải thiện thông qua việc sử dụng các site có nhiều dư thừa, tính
co giãn linh động, hiệu suất: hiệu suất hoạt động được quan sát và các kiến
trúc nhất quán, kết nối lỏng lẽo được cấu trúc dùng web service như giao tiếp
hệ thống, bảo mật: Việc bảo mật cải thiện nhờ vào tập trung hóa dữ liệu, các
tài nguyên chú trọng bảo mật, v.v... nhưng cũng nâng cao mối quan tâm về
việc mất quyền điều khiển dữ liệu nhạy cảm và khả năng chịu đựng.
12
1.3.2. Nhược điểm
Bên cạnh những ưu điểm mà điện toán đám mây mang lại thì nó vẫn
còn những nhược điểm như là: Chi phí bản quyền phần mềm ban đầu có thể
khá cao, công tác quản lý và tính sẵn sàng.
1.3.3. Những khó khăn thách thức
Trong quá trình hiện thực điện toán đám mây, người ta nhận thấy một
số khó khăn, thách thức như bảo mật, khả năng không kiểm soát dữ liệu, độ
trễ dữ liệu, tính sẵn sàng của dịch vụ và dữ liệu, các dịch vụ kèm theo và các
quy định pháp luật cho các dịch vụ, giữa khách hàng và nhà cung cấp.
1.4. Ứng dụng của điện toán đám mây
- Cloud Datacenter: Giải pháp hiệu quả và tiết kiệm cho hệ thống của
doanh nghiệp
- Cloud Server: Giải pháp thay thế vượt trội cho VPS và Server vật lý
- Cloud Desktop: Máy tính ảo hoàn chỉnh trên internet, có thể truy cập
24/24
- Cloud Backup: Giải pháp lưu trữ trực tuyến giá rẻ nhất
-
13
CHƯƠNG 2: TÌM HIỂU VỀ GOOGLE APP ENGINE
2.1. Kiến trúc hoạt động
Kiến trúc của App Engine khác với những server lưu trữ ứng dụng web
thông thường. Ở phần lõi của nó, App Engine sẽ hạn chế những truy cập từ
ứng dụng của chúng ta đến cơ sở hạ tầng vật lý, ngăn cản chúng ta từ việc mở
các socket, chạy các tiến trình ngầm, hay các cách đi khác bằng cổng sau để
giúp chương trình của ta có quyền trên môi trường này. App Engine được
thiết kế để giải quyết mối quan tâm của chúng ta về sự mở rộng và độ tin cậy.
Nó được xây dựng dựa trên khái niệm có thể mở rộng theo chiều ngang, nghĩa
là thay vì ứng dụng của chúng ta sẽ được chạy trên một phần cứng mạnh mẽ,
thì nó có thể chạy trên nhiều phần cứng yếu hơn.
Ứng dụng App Engine chạy như một thực thể cô lập trong môi trường
gồm nhiều thành phần (multitenant environment). App Engine chia sẻ những
nguồn tài nguyên giữa các ứng dụng nhưng cô lập về dữ liệu và bảo mật giữa
những thành phần với nhau. Ứng dụng của chúng ta có thể sử dụng một số
các dịch vụ của Google, như URLFetch. Bởi vì chúng ta không thể mở cổng
(port) một cách trực tiếp trong ứng dụng của mình, nên chúng ta phải lệ thuộc
vào dịch vụ này, ví dụ: cổng 8888.
Xem xét kỹ hơn một chút, giả sử App Engine là một tòa nhà có gắng hệ
thống điều hòa không khí và nhiệt độ. Chúng ta là một phần trong căn nhà đó
(chính xác hơn là ứng dụng của chúng ta). Chúng ta không thể điều chỉnh
nhiệt độ một cách trực tiếp bởi nó sẽ ảnh hưởng đến những phần khác trong
tòa nhà (các ứng dụng khác). Vì vậy, chúng ta phải gửi một yêu cầu đến người
chủ của căn nhà này để nhờ họ thay đổi nhiệt độ cho chúng ta. Chính xác đó
là các dịch vụ của GAE như URLFetch, Bigtable query, Memcache, mail,
XMPP, và các dịch vụ khác. Đó chính là bản chất những gì đang xảy ra trong
App Engine.
Như vậy, trong GAE, tùy vào ứng dụng viết theo ngôn ngữ nào, nó sẽ
được chạy trên môi trường Java hay Python tương ứng. Song song đó, chúng
14
ta sẽ được cung cấp sử dụng miễn phí các dịch vụ của google như URL Fetch,
Mail, Memcache, … và được lưu trữ trên cơ sở dữ liệu hướng đối tượng
datastore. Khi yêu cầu được gửi lên từ phía người dùng, GAE sẽ chuyển yêu
cầu đó cho ứng dụng của chúng ta. Tùy theo việc xử lý chúng mà ta cấu hình
và sử dụng các ứng dụng thích hợp của GAE.
2.2. Các thành phần chính và chức năng
2.2.1. Môi trường thực thi (runtime environment)
Một ứng dụng App Engine đáp ứng các yêu cầu web. Một yêu cầu web
sẽ bắt đầu khi có một người dùng hay điển hình là các trình duyệt web của
người dùng gửi một yêu cầu truy cập vào ứng dụng thông qua giao thức
HTTP. Khi App Engine nhận được yêu cầu, nó sẽ xác định ứng dụng dựa vào
tên miền, hoặc tên miền con của <tên bạn>.appspot.com (cung cấp miễn phí
mỗi ứng dụng) hoặc là một tên miền riêng của chúng ta đã được đăng kí và
thiết lập với Google Apps. App Engine lựa chọn một máy chủ từ nhiều máy
chủ để xử lý các yêu cầu đó. Sau đó, App Engine sẽ gửi các yêu cầu đã nhận
được từ người dùng đến ứng dụng phù hợp để xử lý, sau khi đã xử lý xong
các ứng dụng này sẽ gửi dữ liệu trả về cho App Engine, App Engine sẽ nhận
dữ liệu phản hồi từ các ứng dụng và trả về cho người dùng thông qúa trình
duyệt web.
Google App Engine cung cấp hai môi trường thực thi tốt cho các ứng
dụng. Đó là Java và Python. Môi trường chúng ta chọn sẽ phụ thuộc vào ngôn
ngữ và những công nghệ liên quan khi chúng ta dùng để phát triển ứng dụng.
Môi trường Java thực thi các ứng dụng được viết cho JVM6. Ứng dụng
có thể được phát triển dựa vào ngôn ngữ lập trình Java hoặc hầu hết các ngôn
ngữ có thể biên dịch và chạy trên JVM: ví dụ PHP (dùng Quercus), Ruby
(dùng JRuby), Javascript (dùng Rhino), Scala, Groovy. App Engine cũng hỗ
trợ Google Web Tootkit (GWT).
Môi trường Python thực thi các ứng dụng được viết dựa vào ngôn ngữ
lập trình Python bản 2.7. App Engine gọi các ứng dụng Python nhờ vào CGI
15
(Common Gateway Interface). Ứng dụng có thể dùng hầu hết các thư viện của
Python, các framework của Python như Django, web2py, Pylons.
Cả hai môi trường Java và Python đều sử dụng chung một mô hình:
một yêu cầu gửi đến ứng dụng trên server, ứng dụng được kích hoạt (nếu cần
thiết), gọi bộ phận xử lý yêu cầu và trả về kết quả cho client. Mỗi môi trường
sử dụng bộ tiền xử lý (interpreter) cho riêng mình (JVM hay Python).
2.2.2. Các file server tĩnh (static file servers)
Hầu hết các website có một số tài nguyên mà chúng chuyển đến các
trình duyệt không thay đổi trong suốt hoạt động của site. Ví dụ như các hình
ảnh và các file css hỗ trợ hiển thị của site, các đoạn mã Javascript chạy trên
trình duyện, và các file HTML tĩnh. Vì việc gửi những file này không cần đến
việc gọi code của ứng dụng, nói cách khác, việc này không cần thiết, làm
giảm hiện quả làm việc của các server ứng dụng.
Thay vì thế, App Engine cung cấp một tập các server tách biệt chuyên
làm nhiệm vụ trao đổi các file tĩnh này. Những server nói trên tối ưu hóa cho
kiến trúc bên trong và hạ tầng mạng để xử lý các requests cho các tài nguyên
tĩnh. Đối với client, các file tĩnh này cũng giống như các tài nguyên khác
được cung cấp bởi ứng dụng của chúng ta.
Chúng ta upload các file tĩnh cùng với code ứng dụng. Chúng ta có thể
cấu hình vài cách hiển thị nhất định cho các file này, bao gồm các URL cho
file tĩnh, loại nội dung, và các hướng dẫn cho trình duyệt để lưu các bản sao
file này trong bộ nhớ cache để giảm lưu lượng và tăng tốc cho trang web.
2.2.3. Kho dữ liệu (datastore)
Hầu hết mọi ứng dụng web đều cần một nơi để chứa thông tin khi xử lý
yêu cầu từ phía client và lấy thông tin cho những lần yêu cầu sau này. Việc sử
dụng một server làm một trung tâm dữ liệu là một ý tưởng rất hay nhưng có
vấn đề xảy ra khi quá nhiều kết nối được gửi tới server này.
Hệ thống database của Google App Engine gần giống như một đối
tượng database. Thiết kế của App Engine datastore chỉ là trừu tượng để cho
16
App Engine có thể xử lý việc phân tán và co giãn các ứng dụng. Chính vì thế
trong các đoạn mã của chúng ta sẽ quan tâm đến những thứ khác được nêu
sau đây.
2.2.4. Thực thể (entities) và Thuộc tính (properties)
Một ứng dụng App Engine có thể chứa dữ liệu trong một hay nhiều
thực thể datastore. Mỗi thực thể có một hay nhiều thuộc tính, mỗi thuộc tính
đều có tên và giá trị. Mỗi thực thể đều được phân loại để tiện cho việc truy
vấn.
Ở cái nhìn đầu tiên, chúng ta thấy thực thể có thể gần giống các hàng
(row) trong một bảng trong cơ sở dữ liệu quan hệ. Và mỗi thuộc tính có thể
giống với một cột. Tuy nhiên đối với các thực thể cùng loại với nhau có thể có
các thuộc tính khác nhau. Thứ 2, các thực thể có thể có cùng thuộc tính với
các thực thể cùng loại khác nhưng khác về kiểu dữ liệu. Một điểm khác nhau
nữa giữa thực thể và các hàng (row) là các thực thể có thể có nhiều giá trị cho
một thuộc tính đơn lẻ.
Mỗi thực thể có một khóa riêng (key) phân biệt lẫn nhau được cung cấp
bởi ứng dụng hoặc do App Engine. Khác với cơ sở dữ liệu quan hệ, khoá của
thực thể không phải là thuộc tính, nó tồn tại độc lập với thực thể. Khoá của
thực thể không được thay đổi khi thực thể đã được tạo ra.
2.2.5. Truy vấn (queries) và Chỉ mục (indexes)
Một câu truy vấn trên datastore trả về không hoặc nhiều thực thể cùng
loại với nhau. Nó cũng có thể trả về các khóa của thực thể. Câu truy vấn có
thể dựa vào các giá trị thuộc tính của thực thể và được sắp xếp theo giá trị của
thuộc tính. Câu truy vấn cũng có thể làm việc với các khóa của thực thể.
Với App Engine, mỗi câu truy vấn sẽ có một chỉ mục trong datastore.
Khi ứng dụng cần thực hiện một câu truy vấn, thì datastore sẽ tìm chỉ mục của
câu truy vấn đó. Khi chúng ta tạo mới một thực thể và cập nhật cái cũ thì
datastore cũng sẽ cập nhật lại chỉ mục. Điều này giúp cho câu truy vấn được
nhanh hơn.
17
2.2.6. Phiên giao dịch (transaction)
Khi một ứng dụng có quá nhiều client liên tục đọc hay ghi cùng một dữ
liệu ở cùng một thời điểm, thì phiên giao dịch rất cần thiết để dữ liệu không bị
đọc sai. Mỗi phiên giao dịch là đơn vị nhỏ nhất và chỉ có hai trạng thái là
thành công hoặc thất bại.
Một ứng dụng đọc hay cập nhật nhiều thực thể trong một phiên giao
dịch, nhưng nó phải nói cho App Engine biết những thực thể nào sẽ được cập
nhật khi nó tạo ra nhiều thực thể. Ứng dụng làm được điều này bởi việc tạo ra
nhóm thực thể. Nhờ nhóm thực thể, App Engine sẽ biết được các thực thể sẽ
phân tán như thế nào qua các server, vì thế nó có thể khẳng định chắc chắn là
phiên giao dịch thành công hay thất bại. App Engine cũng hỗ trợ những phiên
giao dịch nội bộ (local transaction).
Nếu một người dùng cố gắng cập nhật một thực thể trong khi người
khác đang cập nhật thực thể đó thì datastore sẽ ngay lập tức trả về một biệt lệ
báo lỗi. Trong thuật ngữ database, thì ta nói App Engine sử dụng “optimistic
concurrency control”. Với chỉ mục và “optimistic concurrency control”, App
Engine được thiết kế giúp cho ứng dụng có thể đọc dữ liệu nhanh hơn và đảm
bảo hơn.
2.2.7. Các dịch vụ (services)
Dịch vụ chính là mối quan hệ giữa datastore với môi trường thực thi.
GAE bao gồm một số các dịch vụ hữu ích cho các ứng dụng web.
Dịch vụ memcache là dịch vụ lưu trữ theo khóa - giá trị. Thuận lợi
chính của dịch vụ này trên datastore là tốc độ nhanh, rất nhanh so với việc lưu
trữ và lấy dữ liệu một cách bình thường trên datastore. Memcache lưu trữ dữ
liệu trên bộ nhớ thay vì trên ổ đĩa để tăng tốc độ truy cập. Nó cũng phân tán
như datastore tuy nhiên không lưu trữ, vì thế nếu mất điện thì dữ liệu trên
memcache cũng mất. Và nó cũng có nhiều giới hạn sử dụng hơn datastore.
Việc sử dụng memcache tốt nhất là lưu lại các kết quả của các câu query hay
18
các tính toán trước đó. Ứng dụng sẽ kiểm tra trong memcache, nếu không có
dữ liệu thì sẽ tiến hành query trên datastore.
Ứng dụng App Engine có thể truy cập các tài nguyên web khác nhờ vào
dịch vụ URL Fetch. Dịch vụ này tạo ra các yêu cầu theo dạng HTTP gửi đến
các server khác trên Internet như là việc tương tác với các web service khác.
Vì khi ta truy cập đến server khác thời gian sẽ lâu nên URL Fetch hỗ trợ chạy
ngầm bên dưới trong khi xử lý các yêu cầu khác.
Ứng dụng App Engine có thể gửi mail dựa vào dịch vụ Mail, hoặc nếu
được cấu hình, nó có thể nhận được email.
Ứng dụng App Engine có thể gửi và nhận những tin nhắn đến các dịch
vụ chat có sử dụng giao thức XMPP bao gồm Google Talk.
2.2.8. Tài khoản Google (google accounts)
Các chức năng của App Engine tích hợp trong các tài khoản của Google
như Google Mail, Google Docs và Google Calendar. Chúng ta có thể sử dụng
tài khoản trên Google như cho các ứng dụng của chúng ta, do đó không cần
thiết lập thêm. Và nếu các người dùng của chúng ta đã có tài khoản trên
Google, họ có thể đăng nhập vào ứng dụng của chúng ta với các tài khoản đó,
mà không cần tạo tài khoản riêng trong ứng dụng. Tất nhiên, điều đó không
bắt buộc. Chúng ta luôn có thể xây dựng hệ thống tài khoản riêng của mình,
hoặc sử dụng một provider OpenID.
2.2.9. Các công cụ lập trình (programming tools)
Google cung cấp một số tool miễn phí cho việc phá triển ứng dụng App
Engine bằng ngôn ngữ Java, Python, PHP, Go. Chúng ta có thể download
software development kit (SDK) cho ngôn ngữ tương ứng và hệ điều hành
của chúng ta từ website Google. Người dùng Java có thể down SDK cho Java
trong form plug-in cho Eclipse. Người dùng Python sử dụng Windows hoặc
Mac OS X có thể tải SDK cho Python từ form của giao diện ứng dụng. Các
SDK đó đều có file zip, sử dụng command-lines để trực tiếp tích hợp vào môi
trường phát triển hoặc xây dựng hệ thống.
19
Mỗi SDK bao gồm một server web chạy ứng dụng của chúng ta tại máy
cá nhân, đóng vai trò môi trường thực thi, kho dữ liệu và các service. Server
này tự động phát hiện những thay đổi trong file source và load lại chúng nếu
cần, vì thế chúng ta có thể luôn mở server trong khi đang lập trình cho ứng
dụng.
Nếu chúng ta sử dụng Eclipse, chúng ta có thể chạy server cho Java
trong bộ tích hợp debugger, và có thể đặt các breakpoint trong code. Chúng ta
cũng có thể sử dụng Eclipse cho ứng dụng phát triển Python dùng PyDev, một
nhánh mở rộng của Eclipse, bao gồm bộ debugger cho Python.
Mỗi SDK cũng bao gồm một công cụ cho việc tương tác với các ứng
dụng chạy trên App Engine. Chủ yếu là sử dụng cho việc upload code lên App
Engine. Chúng ta cũng có thể sử dụng tool để download các file log từ ứng
dụng đang chạy, hoặc quản lý danh mục ứng dụng.
SDK Python và Java gồm một chức năng mà chúng ta có thể cài đặt
trong ứng dụng cho việc truy cập có thứ tự từ xa một cách an toàn đến ứng
dụng. SDK Python bao gồm các công cụ dùng cho việc xử lý dữ liệu lớn, như
upload dữ liệu từ file text, và tải lượng lớn dữ liệu, hoặc sao lưu cho mục đích
lưu trữ. SDK cũng có command-line shell của Python cho việc test, kiểm lỗi
và thao tác với dữ liệu. (Các tool này có trong SDK cho Python, nhưng cũng
làm việc với các ứng dụng Java sử dụng phiên bản Java có chức năng truy cập
từ xa). Chúng ta có thể viết đoạn mã script và chương trình sử dụng chức
năng truy cập từ xa cho việc vận chuyển lượng lớn dữ liệu và các biện pháp
bảo trì khác.
2.3. Hạn chế của Google App Engine
- App Engine hỗ trợ HTTPS đối với domain con của .appspot.com
những vẫn chưa hỗ trợ đối với các domain khác.
- Hiện Google App Engine hỗ trợ 4 loại ngôn ngữ chính là: Python,
Java, PHP(beta), Go(beta).
- Phụ thuộc hoàn toàn vào các dịch vụ của Google.
20
- Microsoft sẽ chẳng bao giờ mua sản phẩm được xây dựng trên nền
tảng của đối thủ.
- Các nhà đầu tư e ngại vì toàn bộ dữ liệu của mình đều nằm trong tay
nhà cung cấp dịch vụ, dù cho đó là Google.
21
CHƯƠNG 3: XÂY DỰNG VÀ TRIỂN KHAI ỨNG DỤNG
3.1. Chuẩn bị
- Google App Engine SDK for python.
- Python 2.7.
3.2. Đăng kí tài khoản Google App Engine
Để triển khai các ứng dụng trên dịch vụ điện toán đám mây của
Google, ta cần một tài khoản App Engine thông qua tài khoản email của
Google. Ta thực hiện đăng ký như sau:
Vào trình duyệt, mở trang và
đăng nhập với thông tin tài khoản Gmail.
Hình 3.1: Đăng nhập tài khoản Google
22
Sau khi đăng nhập, giao diện tiếp theo xuất hiện cho phép người dùng
tạo các ứng dụng – Application. Ta bấm vào nút Create project để bắt đầu tạo
một ứng dụng.
Hình 3.2: Danh sách ứng dụng đã tạo
Hình 3.3: Nhập thông tin ứng dụng
23
Hình 3.4: Hoàn tất tạo ứng dụng
Vậy tạo Application trên trang
đã xong. Công việc tiếp theo là ta xây dựng file, sau đó upload lên
Application đã tạo để chạy.
3.3. Ứng dụng minh họa
Trong ứng dụng này, em trình bày chi tiết các bước để tạo một ứng
dụng có tên Guestbook bằng ngôn ngữ python, ứng dụng này khi khởi chạy
trên web sẽ cho người dùng có thể nhập các dòng message và post lên trang
web, thông tin của người dùng có thể là thông tin đăng nhập từ 1 tài khoản
gmail hoặc là vô danh. Nhìn chung, ứng dụng minh họa này giống như
chương trình chat-room trên các diễn đàn ta thường thấy!
Khi ta nhập thông tin vào và ấn Sign Guestbook dữ liệu sẽ được kiểm
tra và phân loại ở file guestbook5_datastore.py. Sau đó dữ liệu được hiển thị
trên file index.html thông qua file guestbook6_teamplates.py.
24
3.4. Các file cài đặt trong project
Hình 3.5: Các file cài đặt của guestbook
3.4.1. Chức năng của các file
Index.html : Tạo giao diện hiển thị.
Index.yaml : Tự động tải lên các xử lý ở localhost lên host thông qua
appcfg.py.
App.yaml : Cấu hình để chạy các file trong project lên host.
Main.css : Trình bày trang hiển thị.
Guestbook6_teamplates.py : Lấy dữ liệu và xuất dữ liệu.
class MainPage(webapp.RequestHandler):
# hàm lấy dữ liệu
def get(self):
greetings_query = Greeting.all().order('-date')
greetings = greetings_query.fetch(10)
#kiểm tra đăng nhập
if users.get_current_user():
# nếu đã đăng nhập trả về link logout
url = users.create_logout_url(self.request.uri)
url_linktext = 'Logout'
else:
# ngược lại tra về link login
url = users.create_login_url(self.request.uri)
url_linktext = 'Login'
template_values = {
'greetings': greetings,
'url': url,
'url_linktext': url_linktext,
}
# xuất dữ liệu ra file index.html
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path, template_values))
25