Môi trƣờng phát triển

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Tìm hiểu và ứng dụng công nghệ Cloud computing với nền tảng Google app engine (Trang 58)

CHƢƠNG 3 .AN NINH TRÊN CLOUD

5.1. Công nghệ Google AppEngine

5.1.2 Môi trƣờng phát triển

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 .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 qua trình duyệt web.

Theo góc nhìn của ứng dụng, mơi trƣờng thực thi chỉ xuất hiện và tồn tại khi bắt đầu một yêu cầu và sẽ biến mất khi yêu cầu đó đƣợc đáp ứng xong. App Engine cung cấp tối thiểu 2 cách thức lƣu trữ dữ liệu tồn tại giữa các yêu cầu , nhƣng các cơ chế này tồn tại bên ngồi mơi trƣờng thực thi. Mơi trƣờng thực thi sẽ khơng duy trì trạng thái giữa các u cầu, hoặc ít nhất khơng mong muốn các trạng thái sẽ đƣợc duy trì giữa các u cầu. App Engine có thể phân phát lƣu lƣợng truy cập trong nhiều server, vì nó cần phải đáp ứng cho nhiều yêu cầu xử lý nhƣ nhau, bất kể có bao nhiêu lƣu lƣợng truy cập nó sẽ xử lý cùng một lúc.

Bản thân GAE có cơ chế để quản lý các trạng thái của từng yêu cầu trong mỗi ứng dụng dƣới dạng Sandbox (ngƣời phát triển không biết rõ cơ chế bên trong nhƣng hỗ trợ ngƣời phát triển những dịch vụ cần thiết). Điều này cho phép App Engine xử lý một yêu cầu với một máy chủ mà nó mong muốn trong ƣớc tính của nó để trả về phản hồi nhanh nhất. Khơng có cách nào để đảm bảo rằng phần cứng trên cùng một máy chủ sẽ xử lý hai lần yêu cầu, ngay cả khi các yêu cầu đến cùng từ một client, và đến khá nhanh chóng.

Sandbox cho phép App Engine chạy nhiều ứng dụng trên cùng một máy chủ, trong đó hành vi của một ứng dụng không làm ảnh hƣởng đến các ứng dụng khác. Ngoài ra để giới hạn quyền truy cập đến hệ điều hành, môi trƣờng thực thi cũng giới hạn việc sử dụng CPU và bộ nhớ . App Engine giữ các giới hạn này linh hoạt và chặt chẽ hơn các giới hạn này để các ứng dụng sử dụng nhiều tài nguyên hơn để bảo vệ tài nguyên đƣợc chia sẻ từ những ứng dụng “khơng mong muốn”.

Mỗi u cầu có tối đa 30s để trả về phản hồi cho client. Mặc dù thời gian này có vẻ đáp ứng tốt cho một ứng dụng web, nhƣng App Engine đƣợc tối ƣu hóa cho các ứng dụng đáp ứng chƣa đầy một giây. Ngoài ra nếu một ứng dụng sử dụng nhiều CPU, App Engine có thể làm chậm nó xuống, nên các ứng dụng khơng trì hỗn bộ vi xử lý trên một máy phục vụ đa ứng dụng. Một CPU tập trung xử lý yêu cầu có thể mất nhiều thời gian để hoàn thành, khi App Engine dị tìm các mơ hình theo cách sử dụng CPU và phân bổ cho phù hợp.

Google App Engine cung cấp hai mơi trƣờng thực thi chính cho các ứng dụng. Đó là Java và Python, hiện đang thử nghiệm trên Go. 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.5. App Engine gọi các ứng dụng Python nhờ vào CGI. Ứ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 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).

5.1.3. Mơ hình kiến trúc và các dịch vụ của GAE

GAE có kiến trúc khác với kiến trúc máy chủ ứng dụng web truyền thống. GAE hạn chế sự truy cập của ứng dụng vào cơ sở hạ tầng vật lý, không cho phép ghi tệp, mở cổng hay điều khiển các tiến trình. Tuy nhiên, GAE cung cấp một số dịch vụ để giải quyết những hạn chế trên. GAE đặt trọng tâm giải quyết vấn đề chính là khả năng mở rộng, độ tin cậy, dễ xây dựng và bảo trì.

Hình 5.1 Kiến trúc GAE

Trong mơ hình kiến trúc trên cho thấy đƣợc hoạt động của GAE. Một yêu cầu từ trình duyệt của máy bàn, máy xách tay, điện thoại, … đƣợc gửi tới GAE thông qua lối vào (Front End). Một ứng dụng chủ (App Master) sẽ điều khiển, lập lịch cho tất cả các yêu cầu. Nếu yêu cầu truy cập tệp tin tĩnh, yêu cầu sẽ gửi đến dịch vụ các tệp tĩnh (Static Flies). Nếu yêu cầu nội dung động, yêu cầu sẽ đƣợc gửi tới ứng dụng của mình trên GAE, thơng qua các thƣ viện APIs, ứng dụng có thể truy cập tới các dịch vụ lƣu trữ (Datastore), dịch vụ lƣu trữ bộ nhớ (Memcache), dịch vụ thao tác ảnh (Image

manipulation),… Mỗi dịch vụ có chức năng và hoạt động riêng biệt, khơng phụ thuộc lẫn nhau. Khi xây dựng ứng dụng với ngôn ngữ Java, GAE hỗ trợ thƣ viện kết hợp thƣ viện chuẩn Java cho phép ứng dụng truy cập vào các dịch vụ tƣơng ứng.

Hình 5.2 Ánh xạ thư viện chuẩn Java vào các dịch vụ của App Engine

5.1.3.1 Các file server tĩnh (static server files)

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ệt, 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ệu 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.

5.1.3.2. Tổ chức và lưu trữ dữ liệu (Datastore)

Khi xây dựng ứng dụng trên GAE, ứng dụng khơng có quyền truy cập đến cơ sở dữ liệu truyền thống trên các hệ quản trị cơ sở dữ liệu truyền thống nhƣ Oracle, MySQL hay SQLite. Thay vào đó, ứng dụng chỉ đƣợc phép truy cập vào kho dữ liệu của Google là Datastore. Google Datastore dựa trên nền tảng công nghệ BigTable và GFS.

Chuẩn Java JSR-151 JSR-220,JSR-213 Java SE JSR-919 JSR-107 Java Servlet JDO/JPA Java.net.UR L Javax.mail Javax.cac he

Các dịch vụ của Google App Engine

Web App Container Data Store API

BigTable là một dịch vụ lƣu trữ và quản lý dữ liệu phân tán có cấu trúc, nó đƣợc thiết kế với khả năng mở rộng kích thƣớc dữ liệu vơ cùng lớn có thể đến petabytes. Cịn GFS là hệ thống lƣu trữ tệp của Google với mức độ tin cậy cao, khả năng mở rộng linh hoạt.

Datastore lƣu trữ các đối tƣợng dữ liệu gọi là các thực thể (Entities). Một thực thể có một hoặc nhiều thuộc tính có giá trị là một trong một số kiểu dữ liệu hỗ trợ: ví dụ, kiểu chuỗi, số nguyên, hoặc tham chiếu đến một đối tƣợng khác. Mỗi thực thể đƣợc xác định bởi một loại (Kind), trong đó phân loại các thực thể cho mục đích của các truy vấn, và một khóa (key) xác định duy nhất trong loại này.

App Engine Datastore khác với cơ sở dữ liệu quan hệ truyền thống (CSDLQH) ở cách nó mơ tả quan hệ giữa các đối tƣợng dữ liệu:

- Các thực thể thuộc cùng một loại có thể có nhiều thuộc tính khác nhau và các thực thể khác nhau có thể có các thuộc tính cùng tên nhƣng với kiểu dữ liệu khác nhau.

- Các thực thể thuộc cùng một kiểu trong Datastore khơng bắt buộc phải có cùng một tập thuộc tính cố định nhƣ trong CSDLQH

Mặt khác Datastore khơng có kiểm tra tính tồn vẹn dữ liệu, câu truy vấn không sử dụng chuẩn SQL mà chỉ giống với SQL và đƣợc gọi là JDOQL (Java Data Objects Query Language). Tuy nhiên Datastore lại có thể mở rộng do đƣợc xây dựng trên hàng trăm, thậm chí đến hàng ngàn máy để hoạt động nhƣ một hệ thống cơ sở dữ liệu duy nhất. Vì vậy, việc thay đổi hay bổ sung thêm máy là dễ dàng. Bên cạnh đó, Datastore vẫn có một chút tƣơng đồng với CSDLQH về các thành phần của lƣợc đồ, bảng dƣới đây thể hiện ánh xạ giữa các thành phần lƣợc đồ của CSDLQH với Google Datastore.

CSDLQH App Engine Datastore

Database Datastore

Table Kind

Row Entity

Row ID Key

Column Property

Bảng ánh xạ giữa CSDLQH với App Engine Datastore

5.1.3.3. Quản lý vùng nhớ đệm (Memcache)

Dịch vụ Datastore là dịch vụ lƣu trữ dữ liệu trên đĩa cứng, thời gian truy cập chậm. Đôi khi chúng ta gặp phải trƣờng hợp có những dữ liệu tĩnh khơng cần lƣu vào đĩa cứng mà nó cần đƣợc truy xuất nhanh và đáp ứng đƣợc nhiều yêu cầu, Memcache là dịch vụ giải quyết bài tốn đó.

Hình 5.3 Sử dụng dịch vụ Memcache

Dịch vụ này cho phép cập nhật, truy xuất dữ liệu ở dạng ít thay đổi với tốc độ nhanh nhờ đƣợc lƣu trữ trong bộ nhớ. Tuy nhiên dịch vụ này thƣờng có nhƣợc điểm là giới hạn kích thƣớc dữ liệu và thời hạn lƣu trữ. Để sử dụng dịch vụ này trong ứng dụng Java, App Engine Java SDK cung cấp thƣ viện Jcache, đoạn mã nhúng thƣ viện và sử dụng dịch vụ Memcache đƣợc thể hiện ở hình 5.3.

5.1.3.4. Dịch vụ giao tiếp web (URL Fetch)

Do việc hạn chế mở cổng để truy cập tài nguyên từ các ứng dụng, hệ thống khác, App Engine cung cấp dịch vụ URL Fetch để giải quyết hạn chế này. Đây là một dịch vụ đƣợc chạy trên hạ tầng mạng của Google, dịch vụ này cho phép ứng dụng giao tiếp với các hệ thống khác sử dụng HTTP hoặc HTTPs. Thông qua dịch vụ URL Fetch, ứng dụng có thể đọc và phân tích các tài liệu XML, gọi dịch vụ mạng RESTful,…

5.1.3.5. Dịch vụ thư điện tử (Mail)

Dịch vụ Mail đƣợc sử dụng để gửi và nhận thƣ điện tử. Dịch vụ cho phép địa chỉ gửi là thƣ điện tử gmail của thành viên quản trị hoặc ngƣời sử dụng đăng nhập. Nếu thƣ điện tử khơng phải là gmail, địa chỉ đó phải đƣợc phân quyền quản trị mới gửi đƣợc thƣ điện tử. Tuy nhiên, dịch vụ lại cho phép nhận nhiều loại thƣ điện tử khác nhau từ gmail, yahoo, hotmail,… Đồng thời dịch vụ còn cho phép gửi và nhận thƣ điện tử có đính kèm thêm file.

5.1.3.6. Một số dịch vụ khác

Ngoài các dịch vụ đã nêu trên, App Engine còn cung cấp nhiều dịch vụ khác nhƣ: Dịch vụ thao tác ảnh (Image) cho phép thay đổi kích cỡ, xoay, lật, cắt và nâng cao chất lƣợng ảnh; Dịch vụ ngƣời sử dụng (Users) cho phép sử dụng tài khoản của Google để xác thực trong ứng dụng; Dịch vụ Blobstore, dịch vụ XMPP, … Đồng thời, App Engine ngày càng mở rộng và bổ sung thêm nhiều dịch vụ mới phù hợp với xu thế phát triển của ĐTĐM và nâng cao chất lƣợng dịch vụ đáp ứng các yêu cầu của khách hàng.

5.1.4. Công cụ quản lý ứng dụng

GAE hỗ trợ khách hàng quản lý ứng dụng của mình thơng qua trình duyệt bằng cách cung cấp một giao diện web hỗ trợ cho khách hàng có thể quản lý dữ liệu bao gồm bổ sung, sửa và xóa dữ liệu. Đồng thời, nó cũng cho phép quản lý tài nguyên đám mây bao gồm việc giám sát tài nguyên đã sử dụng, cấu hình bổ sung hay thêm bớt tài nguyên cho phù hợp với quy mô ứng dụng.

5.2. Xây dựng và triển khai ứng dụng trên GAE

Để xây dựng và triển khai ứng dụng trên nền tảng GAE, ngƣời sử dụng có thể sử dụng trình soạn thảo Eclipse và cài đặt chƣơng trình cắm Google Plugin for Eclipse. Sau khi cài đặt trình cắm xong, trình soạn thảo sẽ có thêm chức năng tạo mới ứng dụng theo cấu trúc của một ứng dụng App Engine và chức năng triển khai ứng dụng lên nền tảng GAE.

5.2.1 Công cụ xây dựng ứng dụng

Để xây dựng ứng dụng này trên nền công nghệ GAE tôi đã sử dụng các công cụ sau:

Java SE Development Kit 6 update 18

Eclipse Indigo

Google Plugin for Eclipse 3.7

Google Web toolkit SDK 2.4.0

5.2.2 Cài đặt Plugin cho Eclipse

Khởi động Eclipse và chọn Help  Install new Software. Tại đây hệ thống yêu cầu ngƣời thực hiện phải nhập địa chỉ chƣa Plugin cho Eclipse để tiến hành cài đặt. Vì Plugin này đƣợc cung cấp miễn phí từ Google nên ta nhập vào Text box địa chỉ sau:

http://www.dl.google.com/eclipse/plugin/3.7

Từ đó sẽ thấy những Plugin cần thiết cho việc xây dựng một ứng dụng Google App Engine với Eclipse.

Hình 5.7: Những Plugin cần thiết cài đặt thêm vào Eclipse

Sau đó hệ thống yêu cầu đọc chính sách bảo mật và nhấp chọn đồng ý rồi chọn Finish để tiến hành cài đặt.

Hình 5.8: Đồng ý chính sách sử dụng và cài đặt của Google

Sau khi quá trình cài đặt kết thúc hệ thống sẽ nhắc nhở ngƣời dùng cần thiết phải khởi động lại chƣơng trình để sự việc cài đặt đƣợc hồn tất và có thể sử dụng trong lần khởi động tiếp theo. Quá trình cài đặt Plugin đã thành công.

5.2.3. Xây dựng ứng dụng trên GAE

Để tạo một ứng dụng mới, NSD chọn chức năng với biểu tƣợng tạo mới ứng dụng App Engine trên thanh cơng cụ của trình soạn thảo, sau đó nhập các thơng tin cần thiết trong đó có tên ứng dụng, ứng dụng của em có tên vietnam-tour, kết quả là một ứng dụng đƣợc tạo mới có cấu trúc nhƣ sau:

Hình 5.9 Cấu trúc một ứng dụng App Engine

Trong một ứng dụng App Engine, một số tệp cấu hình đƣợc tạo ra mặc định để cấu hình cho ứng dụng, cụ thể:

Tệp appengine-web.xml khai báo các thông số: định danh, phiên bản của ứng dụng

Tệp jdoconfig. xml khai báo thƣ viện JDO để tƣơng tác với kho dữ liệu trung tâm của

Google.

Tệp web.xml xác định xem servlet nào đƣợc gọi khi web server nhận đƣợc yêu cầu. Ngồi ra, ứng dụng cịn có thêm thƣ viện của bộ cơng cụ phát triển App Engine SDK, thƣ viện máy ảo Java. Đồng thời, NSD có thể tạo thêm các tệp Java, Javascript, HTML, CSS, JSP/Servlet,…

Từ đây chúng ta có thể tự do thoải mái lập trình cho ứng dụng của mình.

5.2.4. Triển khai ứng dụng

Sau khi đã xây dựng đƣợc ứng dụng App Engine, để triển khai ứng dụng đó lên nền tảng GAE của Google, NSD phải có một tài khoản thƣ điện tử Gmail và tài khoản đó phải đƣợc cấp quyền tạo ứng dụng trên GAE. Để cấp quyền cho tài khoản tạo đƣợc ứng dụng, NSD có thể đăng nhập vào địa chỉ https://appengine.google.com/ để gửi yêu cầu tới Google. Sau khi tài khoản đã có quyền, NSD có thể tạo định danh cho ứng dụng trên nền tảng GAE, với ứng dụng mơ phỏng của em là vietnam-tour. Khi đã có

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Tìm hiểu và ứng dụng công nghệ Cloud computing với nền tảng Google app engine (Trang 58)

Tải bản đầy đủ (PDF)

(85 trang)