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 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.
Trang 1-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#
Chuyên 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
Trang 2Luận văn được hoà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
Trang 3MỞ ĐẦ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 toá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 toá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
Trang 4CHƯƠ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)
Trang 51.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 hoàn toà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
Trang 6CHƯƠ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 toá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ự đoá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
Trang 7- Đệ quy.
- Tính toá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 chuyên biệt như R (thống kê ) , Mathematica (toá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
Trang 8F # 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
Trang 92.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 toá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
Trang 10CHƯƠ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
Trang 11http://www.transtats.bts.gov/DL_SelectFields.asp?Table_ID=236&DB_Short_Name=On-Time, 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 toán của ứng dụng
Trang 12Hình 3.15: Kết quả tính toá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 quá 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
Trang 13KẾ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 toá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 nguyên 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 toá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:
Trang 14- 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 toá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 quá trình chia nhỏ bài toá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
Toà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