HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG
---------------------------------------
CAO TIẾN DƯƠNG
PHÁT TRIỂN ỨNG DỤNG TRÊN NỀN TẢNG ĐIỆN TOÁN ĐÁM MÂY
MICROSOFT AZURE SỬ DỤNG CƠNG CỤ LẬP TRÌNH HÀM F#
Chun ngành: KHOA
HỌC MÁY TÍNH
Mã số: 60.48.01
TĨM TẮT LUẬN VĂN THẠC SĨ
HÀ NỘI - 2013
1
Luận văn được hồn thành tại:
HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG
Người hướng dẫn khoa học: PGS.TS HUỲNH QUYẾT THẮNG
Phản biện 1: ……………………………………………………………………………………………
Phản biện 2: ……………………………………………………………………………………………
Luận văn sẽ được bảo vệ trước Hội đồng chấm luận văn thạc sĩ tại Học viện Cơng nghệ Bưu chính
Viễn thơng
Vào lúc: ....... giờ ....... ngày ....... tháng ....... .. năm ...............
Có thể tìm hiểu luận văn tại:
- Thư viện của Học viện Cơng nghệ Bưu chính Viễn thơng
1
MỞ ĐẦU
1. Lý do chọn đề tài
F# là một ngôn ngữ lập trình đa năng trên nền tảng .NET. F# hợp nhất cả 3 mơ hình:
lập trình hàm, lập trình cấu trúc và lập trình hướng đối tượng.Với F#, có thể chọn bất cứ mơ
hình nào để giải quyết các vấn đề, các bài toán sao cho hiệu quả nhất hoặc kết hợp cả 3
phong cách lập trình trên vào trong một chương trình để khai thác thế mạnh của mỗi mơ
hình.
Điện tốn đám mây đang là xu hướng cơng nghệ hiện tại và trong tương lai. Do vậy
tôi chọn đề tài phát triển ứng dụng trên nền tảng điện tốn đám mây MS Azure sử dụng
cơng cụ lập trình hàm F#.
2. Mục đích nghiên cứu
Tìm hiểu về ngơn ngữ / công cụ F# và thử nghiệm xây dựng ứng dụng trên nền tảng
Azure.
3. Đối tượng và phạm vi nghiên cứu
Đối tượng nghiên cứu là ngơn ngữ lập trình F#, nền tảng MS Azure, thư viện Cloud
Numerics
4. Phương pháp nghiên cứu
Viết ứng dụng F# sử dụng thư viện Cloud Numerics
Sử dụng tiện ích đóng gói để mở rộng ứng dụng tới Windows Azure cloud.
2
CHƯƠNG 1: NỀN TẢNG ĐIỆN TOÁN ĐÁM MÂY MS AZURE
1.1 Nền tảng điện toán đám mây Microsoft Azure
Nền tảng MS Azure là một nhóm các cơng nghệ đám mây, mỗi công nghệ cung cấp
một tập các dịch vụ đặc trưng hỗ trợ phát triển ứng dụng.
Hình 1.1: Nền tảng MS Azure hỗ trợ ứng dụng, dữ liệu và cơ sở hạ tầng trên
đám mây.
Các thành phần của nền tảng MS Azure :
Windows Azure: Cung cấp môi trường nền tảng Windows để chạy ứng dụng và lưu
trữ dữ liệu trên máy chủ trong trung tâm dữ liệu của Microsoft.
SQL Azure: Cung cấp dịch vụ dữ liệu trên đám mây dựa trên SQL Server.
Windows Azure Platform AppFabric: Cung cấp các dịch vụ đám mây để kết nối các
ứng dụng chạy trên đám mây hoặc On-Premise.
1.2 Giới thiệu công cụ Cloud Numerics
Công cụ “Cloud Numerics” là mới nhất trong chuỗi các công cụ thực hành SQL
Aruze để quản lý và phân tích dữ liệu lớn trong điện toán đám mây với Window Aruze và
SQL Aruze. Nó cho phép các ứng dụng viết trong Visual Studio được mở rộng, triển khai,
và chạy trên Window Azure với điện toán hiệu năng cao (HPC).
3
1.3 Giới thiệu SaaS
Khái niệm phần mềm SaaS rất đơn giản: thay vì phải cấp phép sử dụng vĩnh viễn cho
một phần mềm thì giờ đây các nhà cung cấp phần mềm cho phép khách hàng sử dụng phần
mềm theo cách đóng phí định kì. Tất cả những vấn đề khác như bảo mật, nâng cấp tính năng
đều do phía nhà cung cấp phần mềm SaaS thực hiện, bạn sẽ được hưởng lợi từ những nâng
cấp này mà không phải trả thêm một khoản phí nào.Thơng thường, một ứng dụng SaaS
thường có những đặc điểm như sau:
1. Sử dụng phần mềm qua mơi trường web thay vì sử dụng trên máy tính của khách
hàng như trước đây.
2. Phầm mềm được lưu trữ trên máy chủ của nhà cung cấp dịch vụ.
3. Thay vì phải trả tiền một lần để sở hữu phần mềm vĩnh viễn thì khách hàng có thể
trả phí định kì hàng tháng để sử dụng phần mềm.
4. Các tính năng cải tiến được thực hiện bởi nhà cung cấp phần mềm và người sử
dụng hồn tồn khơng phải trả thêm phí cho những cải tiến này.
Bạn có thể truy cập ứng dụng SaaS bất cứ đâu, bất cứ nơi nào miễn là nơi đó có kết
nói internet. Đây cũng là một lợi điểm không hề nhỏ của các ứng dụng SaaS. Chính khả
năng này mang lại cho những ứng dụng SaaS có nhiều cơ hội trong tương lai.
Kết chương
Nội dung trong chương 1 của luận văn chủ yếu giới thiệu về nền tảng điện toán đám
mây của Microsoft và một số khái niệm cần thiết để phát triển ứng dụng trên nền tảng này.
Qua đó cung cấp một cái nhìn tổng quan cho những ai đang phát triển phần mềm hay ứng
dụng bằng Visual Studio và CSDL SQL Server nếu muốn chuyển hệ thống phần mềm cũ
thành SaaS hay muốn đưa ứng dụng local lên Window Azure.
4
CHƯƠNG 2: KỸ THUẬT LẬP TRÌNH HÀM SỬ DỤNG F#
2.1 Hướng tiếp cận lập trình hàm
2.1.1 Tổng quan
Trong ngành khoa học máy tính, lập trình hàm là một mơ hình lập trình xem việc tính
tốn là sự đánh giá các hàm toán học và tránh sử dụng trạng thái và các dữ liệu biến đổi.
Lập trình hàm nhấn mạnh việc ứng dụng hàm số, trái với phong cách lập trình mệnh lệnh,
nhấn mạnh vào sự thay đổi trạng thái. Lập trình hàm xuất phát từ phép tính lambda, một hệ
thống hình thức được phát triển vào những năm 1930 để nghiên cứu định nghĩa hàm số, ứng
dụng của hàm số, và đệ quy. Nhiều ngơn ngữ lập trình hàm có thể được xem là những cách
phát triển giải tích lambda.
Trong thực tế, sự khác biệt giữa hàm số toán học và cách dùng từ "hàm" trong lập
trình mệnh lệnh đó là các hàm mệnh lệnh có thể tạo ra hiệu ứng lề, làm thay đổi giá trị của
một phép tính trước đó. Vì vậy các hàm kiểu này thiếu tính trong suốt tham chiếu, có nghĩa
là cùng một biểu thức ngơn ngữ lại có thể tạo ra nhiều giá trị khác nhau vào các thời điểm
khác nhau tùy thuộc vào trạng thái của chương trình đang thực thi. Ngược lại, trong lập
trình hàm, giá trị xuất ra của một hàm chỉ phụ thuộc vào các tham số đầu vào của hàm, vì
thế gọi hàm f hai lần với cùng giá trị tham số x sẽ cho ra cùng kết quả f(x). Việc loại bỏ hiệu
ứng lề có thể làm cho chương trình dễ hiểu hơn rất nhiều và người ta có dự đốn được hành
vi của một chương trình, đó chính là một trong các động lực chính cho sự phát triển của lập
trình hàm.
2.1.2 Lập trình hàm
Một số khái niệm và mơ hình chỉ có ở lập trình hàm, và thường xa lạ với kiểu lập
trình mệnh lệnh (bao gồm cả lập trình hướng đối tượng). Tuy nhiên, các ngơn ngữ lập trình
thường lai tạp nhiều hình thái lập trình khác nhau để lập trình viên sử dụng các ngơn ngữ
"mệnh lệnh nhất" cũng có thể tận dụng một số các khái niệm này:
- Hàm hạng nhất và hàm bậc cao.
- Hàm thuần túy.
5
- Đệ quy.
- Tính tốn chặt và khơng chặt.
- Hệ thống kiểu, tính đa hình, kiểu dữ liệu đại số và so trùng mẫu.
- Lập trình hàm trong các ngơn ngữ phi hàm.
2.1.3 Ứng dụng
Các ngơn ngữ lập trình hàm, đặc biệt là các loại thuần lập trình hàm, có ảnh hưởng
lớn trong giới học thuật hơn là dùng để phát triển các phần mềm thương mại. Tuy vậy, các
ngôn ngữ lập trình hàm nổi bật như Scheme, Erlang, Objective aml, và Haskell đã được
nhiều tổ chức khác nhau sử dụng trong các ứng dụng công nghiệp và thương mại. Lập trình
hàm cũng được sử dụng trong cơng nghiệp thơng qua các ngơn ngữ lập trình chun
biệt như R (thống kê ) , Mathematica (tốn học hình thức), J và K (phân tích tài chính).
F# trong Microsoft .NET và XSLT (XML). Các ngôn ngữ chuyên biệt dạng khai báo
được sử dụng rộng rãi hiện nay như SQL và Lex/Yacc, cũng sử dụng một số thành phần của
lập trình hàm, đặc biệt để tránh các giá trị biến đổi. Các bảng tính (spreadsheet) cũng có thể
được xem là các ngơn ngữ lập trình hàm.
2.2 Các kỹ thuật tiêu biểu trong lập trình hàm sử dụng F#
2.2.1 Giới thiệu F#
F# là ngơn ngữ lập trình hàm trên nền tảng .NET. Nó kết hợp tính ngắn gọn, khả
năng truyền đạt, và kết cấu của lập trình chức năng với sự hỗ trợ các runtime, các thư viện,
khả năng tương tác, công cụ và mơ hình đối tượng của .NET.
F# khác với các ngơn ngữ lập trình chức năng khác ở chổ nó bao hàm cả lập trình bắt
buộc và lập trình hướng đối tượng. Nó cũng cung cấp một sự liên kết giữa ngôn ngữ biên
dịch và ngôn ngữ động, kết hợp các đặc ngữ và phong cách lập trình đặc trưng của ngôn
ngữ động với hiệu suất và sự mạnh mẽ của một ngôn ngữ biên dịch. Những người thiết kế
F#đã kế thừa một phong cách thiết kế cho phép bạn có những khía cạnh tốt nhất và hiệu quả
nhất của các mơ hình và kết hợp chúng trong khi vẫn đặt trọng tâm chính về kỹ thuật lập
trình chức năng.
6
F # và .NET cung cấp một cách tiếp cận mới đối với lập trình trên máy tính và nó sẽ
tiếp tục gây ngạc nhiên và thích thú, và việc làm chủ kỹ thuật lập trình chức năng sẽ giúp
bạn trở thành một lập trình viên tốt hơn bất kể ngôn ngữ mà bạn sử dụng. F# cung cấp con
đường tốt nhất để tìm hiểu và áp dụng lập trình hàm trên nền tảng .NET.
2.2.2 Xây dựng các đặc tả của lập trình hàm bằng F#
- Danh mục Literals.
- Tham số hóa từng phần(Curried functions).
- Kiểu và suy luận kiểu(Type and Type Inferencing).
- Danh sách( List).
- Đa hình( Polymorphism).
- Các hàm bậc cao( Higher – Order Functions).
- Trừu tượng( Functional abstraction).
- So khớp( Patterm Matching).
2.3 Các thư viện của F#
Một số thư viện thường dùng để xử lý dữ liệu trong F#
open Microsoft.FSharp.Core.Operators
open Microsoft.FSharp.Collections
open Microsoft.FSharp.Reflection
open Microsoft.FSharp.Text.Printf
open Microsoft.FSharp.Control.Event
2.3.1 Thư viện toán học (Microsoft.FSharp.Core.Operators)
2.3.2 Microsoft.FSharp.Collections
Là một module cung cấp một số chức năng cho giao diện Ienumerable.
7
2.3.3 Microsoft.FSharp.Reflection
Là một module chứa các tham chiếu đến .NetFrameWork.
2.3.4 Microsoft.FSharp.Text.Printf
Một module chứa các sự kiện xử lý về chuỗi ký tự.
2.3.5 Microsoft.FSharp.Control.Event
Một module để làm việc với các sự kiện trong F#.
Kết chương
Kết thúc chương này chúng ta có thể tư duy một bài toán theo quan điểm của lập
trình hàm và tổ chức xây dựng các thành phần hàm F# để giải quyết bài tốn đó. Có thể sử
dụng F# để phát triển một ứng dụng hoặc sử dụng F# để giải quyết một vài bài toán trong
ứng dụng được viết bằng ngôn ngữ khác.
8
CHƯƠNG 3: THỬ NGHIỆM XÂY DỰNG ỨNG DỤNG “PHÂN TÍCH DỮ LIỆU
VẬN TẢI” TRÊN AZURE VỚI F#
3.1. Phát triển ứng dụng trên nền tảng điện toán đám mây
Để phát triển ứng dụng trên nền tảng điện toán đám mây, cụ thể là ứng dụng F# sử
dụng thư viện (tiện ích đóng gói) Cloud Numerics chúng ta cần thực hiện các bước sau đây:
Bước 1: Nhận một Azure Subscription ID.
Bước 2: Tạo ứng dụng F# sử dụng thư viện Cloud Numerics.
Bước 3: Cấu hình tài khoản dịch vụ Azure.
Bước 4: Nhập thông tin Cluster in Azure đã đăng ký và số lượng nút.
Bước 5: Quản lý dịch vụ lưu trữ SQL Azure.
Bước 6: Tạo, cấu hình và đóng gói Cloud Numerics Cluster.
3.2. Kiến trúc ứng dụng
User -> Input Data –> Window Azure HPC Portal –> System library (F# and Cloud
Numerics assembly) ->Output Data -> Window Azure HPC Portal -> User.
3.3. Phát triển các thành phần hàm F#
Với ứng dụng xử lý dữ liệu vận tải cần phát triển ba thành phần hàm chính:
- Đọc dữ liệu đầu vào: InputData().
- Xử lý dữ liệu: Main().
- Hiển thị dữ liệu sau khi xử lý : WriteOutput().
3.3.1 Phân tích dữ liệu đầu vào và phát triển hàm InputData()
Ứng dụng trong luận văn lấy dữ liệu đầu vào là các file .csv. Mỗi tháng sẽ là một file
với tên Ontime_Ontime_Performance_<tên tháng>_<tên năm> có sẵn tại
9
các file này chứa thông tin chi tiết của các chuyến bay tại hoa kỳ từ năm 1987 đến
nay.
Khai báo hàm InputData() với tham số truyền vào kiểu string và trả lại kết quả là
danh sách các object (list[object]). Mỗi object tương ứng với một hàng trong file .csv:
Let InputData(l: string) = let mutable outList = []
3.3.2 Phát triển hàm WriteOutput()
- Khai báo Hàm WriteOutput với tham số truyền vào kiểu string.
- Khai báo các biến thông tin tài khoản Azure và thực hiện Credential.
- Ghi tham số truyền vào tới một blob trong Window Azure Storage.
3.3.3 Phát triển hàm main()
- Khai báo chuỗi lưu trữ dữ liệu đầu vào.
- Triệu gọi hàm InputData() đọc dữ liệu và đổ vào một list.
- Duyệt các phần tử trong list và thực hiện các thuật toán thống kê để tạo chuỗi kết
quả.
- Triệu gọi hàm WriteOutput() ghi chuỗi kết quả nhận được tới Window Azure
Storage.
3.4. Thử nghiệm và đánh giá ứng dụng
- Quay trở lại màn hình deploy ứng dụng, chọn tab Application Code, browse đến
file .exe trong thư mục bin của ứng dụng sau khi build và chọn Submit Job trong
Deployment Actions.
- Đăng nhập vào Window Azure HPC Scheduler Web portal để kiểm tra trạng thái
công việc vừa thực hiện.
- Chọn ứng dụng vừa thực hiện trong All jobs rồi chọn tab View Tasks để hiển thị chi
tiết trạng thái ứng dụng trên Window Azure.
- Mở file flightdataresult .csv từ Azure Storage để hiển thị các kết quả tính tốn của
ứng dụng.
10
Hình 3.15: Kết quả tính tốn của ứng dụng
Từ màn hình kết quả ứng dụng, có thể thấy rằng:
+ Khoảng 70% các chuyến bay đến chậm không quá 5 phút.
+ Trên 5 phút tỉ lệ chậm giảm dần từ 8.5%, 4.0%, 2.1%, 1.1%, 0.6%.
+ Nếu một chuyến bay đã chậm 35 phút thì xác suất 50% chuyến bay đó sẽ
chậm thêm khoảng 35 phút.
Kết chương
Việc sử dụng thư viện ( tiện ích đóng gói) Cloud Numerics giúp cho q trình đóng
gói ứng dụng và đẩy lên Window Azure khá dễ dàng. Các thao tác rất giống khi đóng gói
ứng dụng đưa lên host.
Khi phát triển các thành phần hàm F# nên sử dụng phong cách lập trình hàm để phát
triển các hàm phân tích, thống kê dữ liệu lớn.
11
KẾT LUẬN
1. Đánh giá
1.1 Phân tích, đánh giá lựa chọn công nghệ.
- Cách khai báo trong F# ngắn gọn và tiện lợi hơn cho những người mới tiếp cận.
- Với những ai đang phát triển ứng dụng bằng ngôn ngữ khác như C#, Java,… Có thể
tiếp cận F# dễ dàng hơn bằng cách sử dụng kỹ thuật lập trình hướng đối tượng trong F# và
sử dụng các thư viện .net để phát triển ứng dụng đó.
- Lập trình theo phong cách lập trình hàm trong F# ít nhiều gặp phải khó khăn nếu
chưa quen với phong cách lập trình hàm.
1.2 Phát triển ứng dụng (SaaS) trên nền tảng điện toán đám mây
Phát triển ứng dụng SaaS trên nền tảng điện tốn đám mây đem lại nhiều lợi ích cho
người dùng như:
- Giảm thiểu chi phí đầu tư ban đầu và chi phí vận hành vì các tài ngun chỉ được
mua khi cần và chỉ trả tiền khi sử dụng.
- Giải phóng được đội ngũ nhân viên duy trì phần cứng và phần mềm.
Bên cạnh đó việc phát triển SaaS trên nền tảng điện tốn đám mây cịn một số rào
cản sau:
- Tư duy sở hữu: Các tổ chức, doanh nghiệp khó thay đổi về nhận thức khi chuyển từ
hình thức sử dụng riêng thành mua hoặc thuê dịch vụ.
- Lo ngại về an toàn bảo mật: Lãnh đạo nhiều DN còn lo ngại khi dữ liệu của họ
được tung lên “đám mây” sẽ bị truy xuất trái phép.
- Ngại đổi mới.
1.3 Hướng tập cận lập trình hàm trong xây dựng ứng dụng SaaS
Để tiếp cận lập trình hàm trong xây dựng ứng dụng SaaS nên áp dụng những quan
điểm sau:
12
- Phân tích ứng dụng SaaS dưới dạng các hàm đã được định nghĩa trong lập trình
hàm.
- Dùng tính tốn khơng chặt làm cơ chế để tăng tính module hóa của chương trình
thơng qua q trình chia nhỏ bài tốn.
- Sử dụng các kiểu dữ liệu đại số và so trùng mẫu để thao tác các cấu trúc dữ liệu
phức tạp.
1.4 Kết quả đạt được
- Tổng quan về nền tảng điện toán đám mây MS Azure và phần mềm dịch vụ SaaS.
- Giới thiệu về ngôn ngữ, công cụ lập trình F# và các khái niệm cơ sở trong lập trình
hàm.
- Phương pháp đưa ứng dụng lên Azure sử dụng thư viện Cloud Numerics.
- Tư duy phát triển ứng dụng SaaS sử dụng lập trình hàm F#.
2. Kiến nghị về những nghiên cứu tiếp theo
Một số hướng nghiên cứu tiếp theo của luận văn trong tương lai:
- Phát triển và thử nghiệm ứng dụng với các thống kê chi tiết hơn và tiện ích hơn cho
người dùng.
- Phát triển và thử nghiệm ứng dụng với dữ liệu trong các lĩnh vực khác như: y học,
tài chính ngân hàng,…
3. Kết luận
Tồn bộ luận văn gồm ba nội dung chính: Giới thiệu về ngơn ngữ, cơng cụ lập trình
hàm F#,giới thiệu về nền tảng điện toán đám mây MS Azure, và thử nghiệm phát triển ứng
dụng trên nền tảng này bằng F#. Qua đó cung cấp một phong cách lập trình mới để phát
triển ứng dụng (kết hợp các phong cách lập trình quen thuộc), phương pháp đưa một ứng
dụng lên MS Azure và hướng phát triển ứng dụng SaaS bằng lập trình hàm.