41
2.2.2.5. Windows Azure Queue
2.2.2.5.1. Giới thiệu
Windows Azure Queue cung cấp một cơ chế phân phối message đáng tin
cậy. Nó cung cấp cơ chế điều phối không đồng bộ, được sử dụng để kết nối các
thành phần khác nhau của ứng dụng đám mây. Windows Azure Queue có tính sẵn sàng cao, bền và hiệu quả thực thi cao. Lập trình ngữ nghĩa của nó đảm bảo rằng một message có thể được xử lí ít nhất một lần.
Windows Azure Queue cho phép tách các thành phần khác nhau của ứng dụng đám mây, cho phép ứng dụng đám mây được xây dựng một cách dễ dàng với nhiều công nghệ khác nhau và dễ dàng mở rộng theo nhu cầu lưu thơng.
Hình 2.14: Sơ đồ hoạt động role [8]
Nhận công việc từ người dùng (bước 1). Để đẩy công việc đến thể hiện Worker role, một thể hiện Web role viết một message vào queue (bước 2). Message này, chứa tối đa 8KB, có thể chứa đường dẫn URI đến một blob hoặc một entity trong table hoặc những nội dung khác. Thể hiện Worker role đọc message từ queue này (bước 3). Sau đó thực hiện công việc mà queue yêu cầu. Khi thể hiện Worker role đã hồn thành cơng việc message yêu cầu, nó phải xóa hẳn message từ queue
(bước 5).
42
Kiến trúc này có nhiều thuận lợi, bởi vì:
- Có khả năng mở rộng:
Ứng dụng có thể mở rộng một cách dễ dàng theo nhu cầu lưu thông. Số lượng web role và số lượng worker role được điều chỉnh độc lập mà không ảnh hưởng đến logic ứng dụng.
Một queue riêng biệt có thể được sử dụng cho các mục công việc theo độ
ưu tiên khác nhau.
- Tách rời Front-End Role khỏi Back-End Role:
Các thành phần khác nhau của ứng dụng được tách rời do sử dụng queue. Các message trong queue theo định dạng chuẩn và mở rộng, ví dụ như XML.
Để các thành phần giao tiếp ở cả hai đầu của queue khơng có sự phụ
thuộc lẫn nhau miễn là họ có thể hiểu được các thơng điệp trong queue.
Các cơng nghệ và ngơn ngữ lập trình khác nhau có thể được sử dụng để thực thi các phần khác nhau của hệ thống. Hơn nữa, những thay đổi trong một thành phần là trong suốt với phần còn lại của hệ thống.
Hơn nữa, việc sử dụng queue cũng làm giảm nhẹ các ảnh hưởng khi một
thành phần riêng lẻ bị lỗi. Trong ví dụ trên, nếu một vài thể hiện worker role bị sụp đổ, thay vì mất tất cả các mục cơng việc, queue có thể làm bộ nhớ đệm cho tất cả các mục công việc. Khi thể hiện worker role được phục hồi, chúng có thể tiếp tục xử lí các mục công việc trong queue. Nên nhớ rằng các mục cơng việc đang được xử lí bởi worker role cũng không bị mất, chúng được xuất hiện trở lại trong queue sau thời gian chờ (tính bằng giây có thể thấy được thơng điệp) do
đó đảm bảo khơng mất dữ liệu khi các thành phần xảy ra lỗi.
43
2.2.2.5.2. Mơ hình dữ liệu Queue:
- Storage Account (Tài khoản lƣu trữ). Một tài khoản có nhiều queue.
- Queue (Hàng đợi) - Một queue chứa nhiều message (thơng báo).
Khơng có giới hạn về số lượng các message được lưu trữ trong queue.
Một message được lưu trữ nhiều nhất một tuần. Hệ thống sẽ dọn các message đã lưu trữ nhiều hơn một 1 tuần.
Queue có metadata. Metadata là c ặp <tên, giá trị> và chúng có kích
thước lên đến 8KB với mỗi queue.
- Message (Thông báo) - Message được lưu trữ trong queue. Mỗi message
có kích thước lên đến 8KB. Để lưu trữ dữ liệu lớn hơn, chúng ta lưu trữ nó vào bộ lưu trữ Blob hoặc Table, và sau đó lưu trữ tên blob/entity trong message. Chú ý khi ta đặt một message vào bộ lưu trữ, dữ liệu của message là binary. Nhưng khi ta lấy message ra thì dữ liệu message được trả về dạng encoded base.
2.3. Giới thiệu về SQL Azure2.3.1. Giới thiệu 2.3.1. Giới thiệu
SQL Azure là dịch vụ cơ sở dữ liệu quan hệ của Microsoft trên đám mây.
SQL Azure cung cấp tính sẵn sàng cao cho cơ sở dữ liệu của ta. Tại bất kì thời điểm, SQL Azure duy trì ba bản sao của cơ sở dữ liệu của ta trên đám mây.
SQL Azure dựa vào cơ cấu cơ sở dữ liệu quan hệ Microsoft SQL Server. Việc cho ra đời SQL Azure, Microsoft nhằm mục đích cung cấp một cơ sở dữ liệu quan hệ trên đám mây như một dịch vụ cho ứng dụng on-premise và ứng dụng đám mây. SQL Azure khơng cung cấp tất cả các tính năng sẵn có trong SQL Server, nhưng nó cung cấp các tính năng tối thiểu cần thiết để triển khai và duy trì một cơ sở dữ liệu trên đám mây. Ví dụ các tính năng như Service Broker, store procedure.
44
2.3.2. Tổng quan kiến trúc2.3.2.1 Mơ hình Provisioning 2.3.2.1 Mơ hình Provisioning
SQL Azure được thiết kế để hỗ trợ khả năng mở rộng cực đại và chi phí
thấp, cung cấp môi trường thân thiện cho nhà quản trị và lập trình viên. Nó có mơ hình phân cấp được mơ tả như sau:
- Tài khoản Windows Azure Platform:
Để sử dụng SQL Azure, ta phải tạo một tài khoản Windows Azure. Sử dụng tài khoản này, ta có thể truy xuất tất cả chức năng của nền tảng Windows Azure. Tài khoản này được sử dụng để thanh toán việc sử dụng các dịch vụ Windows Azure.
- Máy chủ Windows Azure Platform :
Mỗi tài khoản Windows Azure có thể chứa nhiều máy chủ SQL Azure. Mỗi máy chủ bao gồm hệ thống đăng nhập và ta cũng có thể chỉ định vị trí địa lý mà máy chủ của ta được đặt ở cấp này.
Ta sử dụng cổng SQL Azure để tạo và quản lí máy chủ cơ sở dữ liệu của ta. Cổng này cung cấp giao diện dễ dàng sử dụng để ta có thể tạo đăng nhập và cung cấp cơ sở dữ liệu.
2.3.2.2 Cơ sở dữ liệu SQL Azure :
Mỗi máy chủ Cơ sở dữ liệu SQL Azure có thể chứa nhiều cơ sở dữ liệu. Một máy chủ cơ sở dữ liệu mới có một cơ sở dữ liệu chính. Trong mỗi cơ sở dữ liệu, ta có thể tạo table, view, stored procedure và các đối tượng cơ sở dữ liệu quen thuộc khác. Ta có thể sử dụng cổng SQL Azure để tạo cơ sở dữ liệu.
Cơ sở dữ liệu SQL Azure được nhân rộng các phân vùng dữ liệu trên nhiều máy tính vật lý tại một trung tâm dữ liệu SQL Azure. Kiến trúc này cung cấp chuyển đổi dự phòng tự động và cân bằng tải. Dữ liệu khách hàng được lan truyền
45
qua nhiều máy chủ vật lý trong phạm vi địa điểm địa lý được thiết lập. Bằng cách này, Cơ sở dữ liệu SQL Azure đ ạt được độ sẵn sàng cao và ổn định cho tất cả các ứng dụng từ nhỏ nhất đến lớn nhất mà khơng cần nỗ lực quản lí chun sâu.
- Mơ hình dữ liệu quan hệ
Mục tiêu thiết kế chính cho SQL Azure là cung cấp một môi trường thân thuộc cho lập trình viên cơ sở dữ liệu. Do đó, các đối tượng được tạo ra trong Cơ
sở dữ liệu SQL Azure giống như các đối tượng hiện có trong cơ sở dữ liệu SQL
Server. Như : Table, Index, View, Stored Procedure, Trigger.
Cả SQL Server và SQL Azure sử dụng ngôn ngữ TSQL để tạo cơ sở dữ liệu và thao tác dữ liệu. Do đó, các lập trình viên cơ sở dữ liệu và người quản trị có thể sử dụng các kỹ năng chun mơn hiện có của họ cho SQL Azure.
- Kiến trúc truy xuất dữ liệu
Cơ sở dữ liệu SQL Azure expose một endpoint Tabular Data Stream
(TDS) cho cơ sở dữ liệu trên đám mây. Một ứng dụng desktop của client có thể kết nối vào Cơ sở dữ liệu SQL Azure tương tự như cách kết nối một thể hiện SQL Server on-premise. Truy vấn được sử dụng bằng ngôn ngữ TSQL. Secure Sockets Layer(SSL) được yêu cầu khi một ứng dụng client kết nối vào
endpoint TDS Cơ sở dữ liệu SQL Azure nhằm đảm bảo bảo mật.
Trong kịch bản ứng dụng desktop và Cơ sở dữ liệu SQL Azure, ta phải xem xét độ trễ xảy ra trên đám mây và trong xử lý của client. Độ trễ này chắc chắn cao hơn so với cơ sở dữ liệu được đặt trên cơ sở của ta. Một cách để tránh độ trễ này là tạo ra một giao diện người dùng trên nền Web cho các ứng dụng cơ
sở dữ liệu của ta và máy chủ lưu trữ nó trong Windows Azure. Trong kịch bản
này, mã nguồn client và các dữ liệu được lưu trữ tại trung tâm cùng với cơ sở dữ liệu, do đó, độ trễ thấp.
46
Kiến trúc thứ ba mà SQL Azure hỗ trợ, ta có thể tạo một ứng dụng bằng cách sử dụng ADO.Net và Entity Framework, chứa nó trên Windows Azure.
Sau đó ta có thể sử dụng ADO.NET Data Services để cơng bố ứng dụng này như một dịch vụ, sử dụng SOAP, REST hoặc giao tiếp JSON, và xây dựng ứng
dụng client nhẹ để sử dụng dữ liệu từ dịch vụ.
2.3.2.3 Mơ hình bảo mật
Nhiều cơ sở dữ liệu chứa các thơng tin nhạy cảm, vì thế nó cần phải kiểm sốt truy cập cẩn thận. Trong SQL Azure, ta có thể sử dụng các cách bảo mật
sau để chứng thực truy xuất và bảo vệ dữ liệu của ta:
SQL Server Login: được dùng để chứng thực truy xuất vào SQL Azure ở
cấp độ máy chủ.
Database User: được dùng để cấp quyền truy cập vào SQL Azure tại cấp
độ cơ sở dữ liệu.
Database Role: được dùng cho nhóm người dùng , để cấp quyền truy xuất
vào SQL Azure tại cấp độ cơ sở dữ liệu.
2.3.2.4 Triển khai
Có thể tạo và đặt một cơ sở dữ liệu hoàn toàn bằng cơ sở dữ liệu SQL Azure bằng cách sử dụng Transact-SQL. Tuy nhiên, trong hầu hết trường hợp, các lập trình viên hoặc quản trị viên sẽ thiết kế và đặt cơ sở dữ liệu trên máy tính lập trình viên hoặc máy chủ on-premise. Khi ứng dụng được hoàn
thành, cơ sở dữ liệu sẽ được triển khai đến các đám mây.
Để triển khai một cơ sở dữ liệu trên SQL Azure, ta có thể tạo một script
TSQL CREATE DATABASE trong Microsoft SQL Server® Management Studio với Generate Script Wizard. Sau đó ta có thể chạy TSQL trong SQL
Azure để tạo cơ sở dữ liệu.
47
2.3.3. Ứng dụng của SQL Azure
Một ứng dụng Windows Azure có thể lưu trữ dữ liệu trong Cơ sở dữ liệu SQL Azure. Trong khi bộ lưu trữ Windows Azure không hỗ trợ các bảng dữ liệu quan hệ, mà nhiều ứng dụng đang tồn tại sử dụng cơ sở dữ liệu quan hệ. Vì vậy, lập trình viên có thể chuyển ứng dụng đang chạy sang ứng dụng Windows Azure với lưu trữ dữ liệu trong Cơ sở dữ liệu SQL Azure.
48
CHƢƠNG 3: ỨNG DỤNG WINDOWS AZURE TRONGGIẢNG DẠY ĐẠI HỌC GIẢNG DẠY ĐẠI HỌC
3.1. Xây dựng hệ thống nhập học sinh viên, tạo khóa học và tập huấn trên Microsoft Azure sử dụng ASP.NET MVC5
3.1.1. Cài đặt môi trƣờng phát triển :
Để bắt đầu ta cần cài đặt Azure SDK for .NET.
Để cài đặt SDK ta click vào link dưới đây http://azure.microsoft.com/en-
us/downloads/
Click vào VS 2012 Install hoặc VS 2013 Install (tuỳ vào VS ta đang sử dụng) Khi được hỏi Run hoặc Save ta chọn Run
Ở cửa sổ Web Platform Installer , click Install .
Hình 3.1: Cài đặt Windows Azure SDK
Khi cài đặt hoàn tất mọi thứ gần như đã sẵn sàng để bắt đầu làm việc.
3.1.2. Tạo một ứng dụng ASP.NET MVC5 :
Tiếp theo ta sẽ dùng Visual Studio tạo một ứng dụng web application project sau đó publish tới Azure.
Mở Visual Studio 2012 hoặc Visual Studio 2012 for Web Express. Từ File menu, click New, và sau đó click Project.
49
Hình 3.2: Tạo New Project
Ở cửa sổ New Project , ta click Visual C# sau đó chọn mẫu Web Templates, ở đây mình chọn ASP.NET MVC 5 Web Application.
Ta phải chắc chắn là đã chọn .NET Framework 4.5 ở mục bên trên target framework. Đặt tên ứng dụng và click OK.
Hình 3.3: Đặt tên dự án và thư mục lưu trữ
Sau đó ở cửa sổ tiếp theo như hình bên dưới chọn MVC và chọn Change
Authentication
50
Hình 3.4: Chọn MVC
+ Ở trang Change Authentication đặt No Authentication, và chọn OK.
Hình 3.5: Chọn N Authentication
Trở lại trang New ASP.NET Project , chọn OK xuất hiện màn hình với các cài đặt mặc định cho trang web ktvUniversity
Hình 3.6: Màn hình hệ thống thống nhập học sinh viên, tạo khóa học và tập huấn
51
3.2. Tạo trang Web quản lý việc nhập học của sinh viên, tạo khóa học vàtập huấn. tập huấn.
3.2.1. Mơ hình cơ sở dữ liệu :
3.2.1.1 Bảng cơ sở dữ liệu Person : Lưu thông tin về khoa kết nối, họ đệm,
tên, ngày thuê, ngày nhập học, phân loại
TT Tên trƣờng 1 ID 2 LastName 3 FirstName 4 HireDate 5 EnrollmentDate 6 Discriminator Bảng 3.1 : Thiết kế bảng Person
3.2.1.2 Bảng cơ sở dữ liệu OffceAssignment : Lưu trữ thông tin mã khoa, địa chỉ
TT Tên trƣờng
1 InstructorID 2 Location
Bảng 3.2 : Thiết kế bảng OfficeAssignment
3.2.1.3 Bảng cơ sở dữ liệu Enrollment : Lưu trữ thông tin mã giảng viên, mã
khóa học, mã sinh viên
TT Tên trƣờng 1 EnrollmentID 3 CourseID 4 StudentID 5 Grade Bảng 3.3 : Thiết kế bảng Enrollment 52 download by : skknchat@gmail.com
3.2.1.4 Bảng cơ sở dữ liệu Department : Lưu trữ thông tin về mã khoa, tên
khoa, học phí, ngày bắt đầu học, mã khóa giảng viên, khóa hàng
TT Tên trƣờng 1 DepartmentID 2 Name 3 Budget 4 StartDate 5 InstructorID 6 RowVersion Bảng 3.4 : Thiết kế bảng Department
3.2.1.5 Bảng cơ sở dữ liệu CourseInstructor : Lưu trữ thơng tin khóa liên kết
giữa khóa học và giảng viên
TT 1 2
Bảng 3.5 : Thiết kế bảng CourseInstructor
3.2.1.6 Bảng cơ sở dữ liệu Course : Lưu trữ thông tin về mã môn học ; tên
môn học, học phí liên kết với mã khoa phụ trách giảng dạy
TT Tên tƣờng 1 CourseID 2 Title 3 Credits 4 DepartmentID Bảng 3.6 : Thiết kế bảng Course 53 download by : skknchat@gmail.com
+ Lƣợc đồ cơ sở dữ liệu :
Hình 3.7: Lược đồ cơ sở dữ liệu
3.2.2 Xây dựng các thành phần của ứng dụng :
Mô tả các lớp đối tượng và phương thức tương
ứng + Lớp Person :
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
54
namespace ktvUniversity.Models {
public abstract class Person {
public int ID { get; set; } [Required]
[StringLength(50)]
[Display(Name = “Last Name”)] public string LastName { get; set; } [Required]
[StringLength(50, ErrorMessage = “First name cannot be longer than 50 characters.”)]
[Column(“FirstName”)]
[Display(Name = “First Name”)]
public string FirstMidName { get; set; } [Display(Name = “Full Name”)]
public string FullName {
get {
return LastName + “, “ + FirstMidName; } } } } + Lớp Student : using System; using System.Collections.Generic; 55 download by : skknchat@gmail.com
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; namespace ktvUniversity.Models
{
public class Student : Person {
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = “{0:yyyy-MM-dd}”,
ApplyFormatInEditMode = true)] [Display(Name = “Enrollment Date”)] public DateTime
EnrollmentDate { get; set; }
public virtual Icollection<Enrollment> Enrollments { get; set; }
} } + Lớp OffceAssignment : using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace ktvUniversity.Models {
public class OfficeAssignment {
[Key]
[ForeignKey(“Instructor”)]
public int InstructorID { get; set; } [StringLength(50)]
[Display(Name = “Offce Location”)] public string Location { get; set; }
56
public virtual Instructor Instructor { get; set; } } } + Lớp Instructor : using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace ktvUniversity.Models {
public class Instructor : Person {
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = “{0:yyyy-MM-dd}”,
ApplyFormatInEditMode = true)] [Display(Name = “Hire Date”)] public DateTime HireDate { get; set; }
public virtual Icollection<Course> Courses { get; set; }
public virtual OffceAssignment OfficeAssignment { get; set; }
} } + Lớp Enrollment : using System.ComponentModel.DataAnnotations; namespace ktvUniversity.Models {
public enum Grade
57
{
A,B,C,D,F }
public class Enrollment {
public int EnrollmentID { get; set; } public int CourseID { get; set; } public int StudentID { get; set; } [DisplayFormat(NullDisplayText = “N grade”)] public Grade? Grade { get; set; }
public virtual Course Course { get; set; } public virtual Student Student { get; set; } } } + Lớp Department : using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespacektvUniversity.Models {
public class Department {
public int DepartmentID { get; set; }