Tính năng

Một phần của tài liệu Điện toán đám mây của Google và ứng dụng xây dựng hệ thống quản lý dịch vụ (Trang 27)

Google App Engine hỗ trợ web động và các công nghệ web phổ biến hiện nay, Cho phép cơ sở dữ liệu có khả năng chấp nhận truy vấn liên tục, tự động cân bằng tải. Giao diện lập trình ứng dụng cho phép xác thực ngƣời dùng, gửi thƣ điện tử qua tài khoản Google.

Google App Engine cung cấp môi trƣờng phát triển đầy đủ tính năng giống nhƣ Google App Engine đƣợc cài đặt trên máy tính của ngƣời dùng.

Google App Engine có khả năng lập lịch cho các sự kiện xảy ra tại một thời điểm xác định trong khoảng thời gian định kỳ.

Ứng dụng có thể chạy trên hai môi trƣờng là Java và Python. Môi trƣờng chạy ứng dụng đƣợc bảo mật, có thể truy cập ứng dụng qua URL, dịch vụ thƣ điện tử, các yêu cầu HTTP, HTTPS. Ứng dụng không ghi đƣợc vào file hệ thống mà chỉ có thể đọc các file trong mã nguồn của ứng dụng. Ứng dụng chỉ đáp ứng một yêu cầu web, kết quả phải đƣợc trả về trong vòng 30 giây, sau khi kết quả đã đƣợc trả về, yêu cầu sẽ không thực hiện gọi các tiến trình con hay thực thi mã nguồn nữa.

2.4.3 Dịch vụ App Engine

URL fetch: các ứng dụng có thể truy cập các nguồn tài nguyên trên mạng (dữ liệu, dịch vụ web) qua dịch vụ tìm kiếm các tài nguyên trên mạng (URL fetch). Máy chủ tạo yêu cầu HTTP tới các máy chủ khác trên mạng, giống nhƣ truy vấn các trang hoặc tƣơng tác với dịch vụ web. Tất cả các yêu cầu phải bắt đầu và kết thúc trong thời gian xử lý yêu cầu.

Mail: cho phép gửi thƣ qua dịch vụ thƣ điện tử của App Engine. Dịch vụ này sử dụng cơ sở hạ tầng của Google để gửi thƣ điện tử. Các ứng dụng App Engine có thể gửi thông điệp sử dụng dịch vụ thƣ điện tử. Các thông điệp có thể đƣợc gửi với tƣ cách là ứng dụng hoặc ngƣời dùng tạo yêu cầu gửi thƣ điện tử. Nhiều ứng dụng web sử dụng thƣ điện tử để thông báo cho ngƣời dùng, xác nhận hoạt động của ngƣời dùng, hiệu lực thông tin liên lạc. Một ứng dụng cũng có thể nhận thƣ điện tử. Nếu một ứng

dụng đƣợc cấu hình để nhận thƣ, một thông điệp đƣợc gửi đến địa chỉ của ứng dụng đƣợc chuyển đến dịch vụ thƣ, phân phối các thƣ đến ứng dụng dƣới dạng yêu cầu HTTP tới bộ xử lý yêu cầu. Ứng dụng App Engine có thể gửi và nhận thông điệp đến và từ máy chủ tán gẫu hỗ trợ giao thức XMPP, bao gồm Google Talk - một ứng dụng gửi một thông điệp chat XMPP bằng cách gọi dịch vụ XMPP. Khi ai đó gửi thƣ đến địa chỉ của ứng dụng, dịch vụ XMPP phân phối thƣ đến ứng dụng bằng cách gọi bộ xử lý yêu cầu.

Memcache: dịch vụ bộ nhớ đệm cung cấp cho ứng dụng một vùng nhớ đệm hiệu suất cao, có thể truy cập đƣợc thông qua nhiều thể hiện của ứng dụng, phù hợp với dữ liệu không cần lƣu trữ lâu. Ƣu điểm lớn nhất của nó đối với lƣu trữ dữ liệu là nhanh. Bộ nhớ đệm lƣu các giá trị trong bộ nhớ thay vì trên đĩa cứng để truy cập nhanh hơn. Nó đƣợc phân tán nhƣ cơ sở dữ liệu, vì vậy mọi yêu cầu nhận đƣợc cùng một tập các khóa và giá trị. Ứng dụng kiểm tra giá trị đệm, nếu không có giá trị, nó thực hiện truy vấn hoặc tính toán và lƣu giá trị trong bộ đệm để sử dụng sau này.

Image Manipulation: dịch vụ hình ảnh cho phép ứng dụng thao tác với các hình ảnh, có thể thay đổi kích cỡ, cắt bớt, xoay các ảnh có định dạng JPEG và PNG. Nhiệm vụ xử lý ảnh đƣợc thực hiện trên cơ sở hạ tầng tƣơng tự nhƣ Google sử dụng để xử lý hình ảnh, vì vậy kết quả đƣợc trả về rất nhanh.

2.4.4 Giới hạn sử dụng

Google không thu phí tạo tài khoản, xuất bản ứng dụng. Ứng dụng đƣợc miễn phí sử dụng 500MB dung lƣợng lƣu trữ và 5000 lƣợt ghé thăm mỗi tháng. Khi chọn trả tiền sử dụng, có thể thiết lập số lƣợng sử dụng tối đa và chi phí cho mỗi tài nguyên theo nhu cầu sử dụng.

Mỗi tài khoản có thể đăng ký tối đa 10 ứng dụng. Mỗi ứng dụng bị giới hạn tài nguyên sử dụng, có thể điều chỉnh bằng cách mua thêm tài nguyên. Một số tính năng bị giới hạn không liên quan đến tài nguyên sử dụng để đảm bảo tính ổn định của ứng dụng.

2.4.5 Ứng dụng trên Google App Engine 2.4.5.1 Tổng quan 2.4.5.1 Tổng quan

Google App Engine là một dịch vụ máy chủ ứng dụng web. “Ứng dụng web” nghĩa là một ứng dụng hoặc một dịch vụ đƣợc truy cập qua web, thƣờng là qua trình duyệt.

Google App Engine đƣợc thiết kế để đặt các ứng dụng có nhiều ngƣời dùng đồng thời. Khi một ứng dụng có thể phục vụ nhiều ngƣời dùng đồng thời mà không giảm hiệu suất, ta nói rằng ứng dụng đó co giãn. Các ứng dụng đƣợc viết cho App Engine co giãn một cách tự động. Khi có càng nhiều ngƣời sử dụng ứng dụng, App

Engine càng cấp nhiều tài nguyên hơn cho ứng dụng và quản lý việc dùng các tài nguyên này. Ứng dụng tự nó không cần biết bất kỳ điều gì về tài nguyên mà nó đang sử dụng.

Không giống các máy chủ web truyền thống hoặc các máy chủ tự quản lý, với Google App Engine, ngƣời dùng chỉ phải trả cho những tài nguyên mà họ dùng. Những tài nguyên này đƣợc đo bằng gigabyte mà không thu phí hàng tháng hay phí trả trƣớc. Các tài nguyên phải trả phí gồm phí sử dụng CPU, phí lƣu trữ hàng tháng, băng thông đi và đến, một số tài nguyên cho các dịch vụ App Engine. Lúc đầu, các lập trình viên sẽ đƣợc cấp cho một lƣợng tài nguyên nhất định, đủ cho các ứng dụng nhỏ với lƣu lƣợng thấp. Google ƣớc lƣợng rằng với nguồn tài nguyên miễn phí, một ứng dụng có thể cho phép khoảng 5 triệu lƣợt xem mỗi tháng.

App Engine có thể đƣợc miêu tả gồm ba phần: môi trƣờng chạy thực, lƣu trữ dữ liệu, các dịch vụ bậc thang.

2.4.5.2 Môi trường chạy thực

Một ứng dụng App Engine đáp ứng các yêu cầu web. Một yêu cầu web bắt đầu khi một ngƣời dùng trình duyệt, trao đổi với ứng dụng bằng một yêu cầu HTTP, giống nhƣ truy cập một trang web từ một URL. Khi App Engine nhận đƣợc yêu cầu, nó xác định ứng dụng từ tên miền của địa chỉ, hoặc một miền con .app.com (đƣợc cung cấp miễn phí cho mọi ứng dụng) hoặc một miền con của tên miền của khách hàng đăng ký và cài đặt với Google Apps. App Engine chọn một máy chủ từ rất nhiều máy chủ để xử lý yêu cầu, lựa chọn máy chủ nào có khả năng phản hồi nhanh nhất, sau đó gọi ứng dụng với nội dung của yêu cầu HTTP, nhận dữ liệu đáp ứng từ ứng dụng và trả đáp ứng về máy ngƣời dùng.

Một ứng dụng có thể đọc chính các file từ hệ thống file của nó, nhƣng lại không thể ghi vào các file và càng không thể đọc các file của một ứng dụng khác. Một ứng dụng không thể truy cập các tài nguyên mạng của máy chủ phần cứng mặc dù nó có thể xử lý các vấn đề liên quan đến mạng bằng các dịch vụ.

App Engine có thể đánh giá để tìm ra máy chủ xử lý một yêu cầu để cung cấp phản hồi nhanh nhất. Không có cách nào đảm bảo rằng cùng một máy chủ phần cứng sẽ xử lý hai yêu cầu, ngay cả khi yêu cầu đến từ cùng một máy khách và đến tƣơng đối nhanh.

App Engine có thể chạy nhiều ứng dụng trên cùng một máy chủ mà hoạt động của các ứng dụng ảnh hƣởng đến nhau. Để hạn chế truy cập vào hệ điều hành, môi trƣờng chạy thực phải giới hạn tổng thời gian, việc sử dụng CPU khi một yêu cầu xảy ra.

Một yêu cầu có tới 30 giây để trả đáp ứng tới máy khách. App Engine phù hợp với các ứng dụng mà đáp ứng nhỏ hơn một giây.

Google App Engine cung cấp hai môi trƣờng chạy thực cho ứng dụng: môi trƣờng Java và môi trƣờng Python. Môi trƣờng chọn tùy thuộc vào ngôn ngữ và các công nghệ liên quan dùng để phát triển ứng dụng.

Môi trƣờng Java chạy các ứng dụng đƣợc triển khai cho Máy ảo Java 6 (JVM). Một ứng dụng có thể đƣợc cài đặt bằng ngôn ngữ lập trình Java hoặc các ngôn ngữ khác cũng biên dịch hoặc chạy trong máy ảo Java nhƣ PHP (sử dụng Quercus), Ruby (sử dụng Jruby), Javascript (sử dụng trình biên dịch Rhino), Scala, Groovy. Ứng dụng truy cập môi trƣờng và các dịch vụ bằng giao diện web, gồm Java servlets và Java Persistence API (JPA). Bất kỳ công nghệ Java nào mà chức năng bị giới hạn bởi sandbox có thể chạy App Engine. App Engine hỗ trợ Google Web Toolkit (GWT), một framework cho các ứng dụng web cho phép lập trình ứng dụng mà không cần cài thêm gì nữa.

Môi trƣờng Python chạy các ứng dụng đƣợc viết bằng ngôn ngữ lập trình Python 2.5 sử dụng phiên bản Cpython. App Engine gọi một ứng dụng Python sử dụng CGI, một tiêu chuẩn giao diện hỗ trợ ứng dụng. Một ứng dụng có thể sử dụng thƣ viện chuẩn của Python cũng nhƣ API và thƣ viện để truy cập các dịch vụ và mô hình hóa dữ liệu. Nhiều framework ứng dụng web mã nguồn mở Python làm việc với App Engine nhƣ Django, web2py, Pylons.

Môi trƣờng Java và Python sử dụng cùng mô hình máy chủ ứng dụng: một yêu cầu đƣợc chuyển đến một máy chủ ứng dụng, ứng dụng đƣợc khởi động trên máy chủ ứng dụng (nếu cần thiết) và đƣợc gọi để xử lý yêu cầu, tạo ra kết quả, kết quả đƣợc trả về máy khách. Mỗi môi trƣờng chạy một bộ biên dịch của nó (bộ biên dịch JVM hoặc Python).

Việc sử dụng các máy chủ khác nhau cho mỗi yêu cầu có ƣu điểm trong việc co giãn. App Engine giảm nhẹ giá khởi động bằng việc lƣu ứng dụng trong bộ nhớ lâu nhất có thể và sử dụng lại máy chủ một cách thông minh. Khi một máy chủ cần lấy lại tài nguyên, nó khử ứng dụng đƣợc sử dụng gần nhất đi. Tất cả các máy chủ ứng dụng có môi trƣờng chạy (bộ biên dịch JVM hoặc Python) đƣợc tải trƣớc khi yêu cầu đến đƣợc máy chủ, chỉ có ứng dụng tự nó đƣợc tải vào máy chủ mới.

Ứng dụng có thể lợi dụng bộ đệm ứng dụng để giữ dữ liệu trực tiếp trên máy chủ. Vì một ứng dụng có thể bị loại trừ giữa hai yêu cầu (và các ứng dụng lƣu lƣợng thấp thƣờng đƣợc loại trừ), không có gì đảm bảo rằng một yêu cầu của ngƣời dùng sẽ đƣợc một máy chủ xử lý, các biến toàn cục dùng để khởi động tài nguyên cũng nhƣ phân tích các file cấu hình. (adsbygoogle = window.adsbygoogle || []).push({});

Có thể cấu hình máy chủ để sử dụng hệ điều hành hoặc phần cứng nào đó, nhƣng môi trƣờng chạy là một trừu tƣợng hóa mức trên của hệ điều hành, cho phép App Engine quản lý các nguồn tài nguyên, tính toán, xử lý yêu cầu, thay đổi, tải các phân tán mà không gồm ứng dụng. Các tính năng yêu cầu kiến thức về hệ điều hành

đƣợc cung cấp bởi các dịch vụ bên ngoài môi trƣờng chạy thực, đƣợc cung cấp hoặc đánh giá bằng lời gọi thƣ viện chuẩn hoặc hạn chế theo cách logic trong định nghĩa của sandbox.

2.4.5.3 Lưu trữ dữ liệu

Hầu hết các ứng dụng web cần lƣu trữ thông tin trong suốt quá trình xử lý. Cấu hình cho một trang web nhỏ bao gồm một máy chủ cơ sở dữ liệu, một hoặc nhiều máy chủ kết nối đến cơ sở dữ liệu để lƣu và truy vấn dữ liệu. Sử dụng một máy chủ cơ sở dữ liệu trung tâm sẽ giúp cho việc hiển thị dữ liệu dễ dàng hơn, để nhiều ngƣời dùng truy cập nhiều máy chủ web đều thấy cùng một thông tin và là các thông tin mới nhất.

Hầu hết các hệ lƣu trữ dữ liệu cho ứng dụng web trong các thập kỷ trƣớc đều là cơ sở dữ liệu quan hệ, với các bảng gồm các dòng và cột với các chỉ số và các hàm tính toán để thực hiện truy vấn, đặc biệt là các truy vấn kết hợp (join) để xử lý các bản ghi có liên quan đến nhau. Một loại hệ cơ sở dữ liệu khác gồm cây phân cấp lƣu trữ dữ liệu (hệ thống file, cơ sở dữ liệu XML) và các cơ sở dữ liệu đối tƣợng. Mỗi loại cơ sở dữ liệu có ƣu, nhƣợc điểm riêng, phù hợp cho ứng dụng tùy thuộc vào tính chất của dữ liệu và cách dữ liệu đƣợc truy cập.

Lƣu trữ dữ liệu trong App Engine không giống nhƣ cơ sở dữ liệu quan hệ truyền thống, các đối tƣợng dữ liệu (các thực thể) có một kiểu và một tập các thuộc tính. Các truy vấn có thể truy vấn các thực thể theo kiểu nào đó và sắp xếp giá trị của các thuộc tính. Giá trị của các thuộc tính có thể thuộc các kiểu nhƣ trong bảng 2.1:

Bảng 2.1. Các thuộc tính trong App Engine[3]

Lớp thuộc tính Giá trị Thứ tự sắp xếp

StringProperty str

unicode

Unicode (str đƣợc coi là ASCII)

ByteStringProperty ByteString Thứ tự byte

BooleanProperty Bool False < True

IntegerProperty int long (64 bits) Số học FloatProperty Float Số học DateTimeProperty DateProperty TimeProperty

datetime.datetime Theo thứ tự thời gian

ListProperty StringListProperty List Sắp xếp tăng dần từ danh sách có ít thành phần nhất; sắp xếp giảm dần từ danh sách có nhiều thành

phần nhất ReferenceProperty

SelfReferenceProperty db.Key

Theo các thành phần (kiểu, ID hoặc tên, loại, ID hoặc tên...) blobstore.BlobReferenceProperty blobstore.BlobKey thứ tự byte

UserProperty users.User Theo địa chỉ email

(Unicode)

BlobProperty db.Blob Không sắp xếp đƣợc

TextProperty db.Text Không sắp xếp đƣợc

CategoryProperty db.Category Unicode

LinkProperty db.Link Unicode

EmailProperty db.Email Unicode

GeoPtProperty db.GeoPt Theo chiều rộng, sau

đó theo chiều dài

IMProperty db.IM Unicode

PhoneNumberProperty db.PhoneNumber Unicode (adsbygoogle = window.adsbygoogle || []).push({});

PostalAddressProperty db.PostalAddress Unicode

RatingProperty db.Rating Số học

App Engine cung cấp hai lựa chọn lƣu trữ dữ liệu khác nhau, phân biệt nhau bởi tính có sẵn và nhất quán, đó là lƣu trữ dữ liệu High Replication và Master/Slave.

Trong lƣu trữ dữ liệu High Replication, dữ liệu đƣợc lƣu trên nhiều trung tâm dữ liệu. High Replication cung cấp tính có sẵn rất cao cho việc đọc và ghi vì dữ liệu đƣợc lƣu đồng bộ trên nhiều trung tâm dữ liệu. Lƣu trữ dữ liệu High Replication là kiểu lƣu trữ dữ liệu duy nhất trong Python 2.7.

Trong lƣu trữ dữ liệu Master/Slave, một trung tâm dữ liệu giữ bản sao chép chính của dữ liệu, dữ liệu đƣợc ghi vào trung tâm dữ liệu chính không đồng bộ với tất cả các trung tâm dữ liệu phụ khác. Chỉ có một trung tâm dữ liệu giữ các bản sao chép chính, nên rất nhất quán cho việc đọc và truy vấn. Master/Slave không hỗ trợ trong Python 2.7.

Các đối tƣợng dữ liệu trong lƣu trữ dữ liệu App Engine đƣợc gọi là các thực thể. Mỗi thực thể có thể có một hoặc nhiều thuộc tính. Thuộc tính có thể là chuỗi, là số nguyên, hoặc thậm chí tham chiếu đến một thực thể khác. Thuộc tính có thể có một hoặc nhiều giá trị. Một thuộc tính có nhiều giá trị có thể có nhiều kiểu. Truy vấn trên thuộc tính có nhiều giá trị kiểm tra xem các giá trị có phù hợp với tiêu chuẩn của truy vấn hay không.

Các thực thể của một kiểu giống nhƣ các dòng trong một bảng, các thuộc tính giống nhƣ các cột. Một thực thể của một kiểu đã cho không bắt buộc phải có cùng thuộc tính với các thực thể khác cùng loại. Một thực thể có thể có thuộc tính cùng tên

với thuộc tính của thực thể khác. Điểm khác biệt khác giữa thực thể và hàng trong bảng là một thực thể có thể có nhiều giá trị cho cùng một thuộc tính.

Mọi thực thể đều có một khóa riêng. Không giống cơ sở dữ liệu quan hệ, khóa không phải là “trƣờng” hay thuộc tính, nhƣng là một khía cạnh độc lập của thực thể. Có thể tìm một thực thể nhanh nếu biết khóa của nó, và truy vấn đƣợc thực hiện trên khóa đó. Khóa của thực thể không thay đổi đƣợc sau khi thực thể đã đƣợc tạo ra.

Lƣu trữ dữ liệu cung cấp một API với các hoạt động đơn giản trên thực thể bao gồm “get”, “put”, “delete”, “query”. Ngƣời dùng có thể sử dụng API bậc thấp để thực thi các giao diện khác hoặc sử dụng trực tiếp trong ứng dụng.

Mỗi đối tƣợng dữ liệu trong App Engine (entity) có một hoặc nhiều thuộc tính

Một phần của tài liệu Điện toán đám mây của Google và ứng dụng xây dựng hệ thống quản lý dịch vụ (Trang 27)