Xây dựng hệ thống phần mềm (dạng web trên nền tảng đám mây) hỗ trợ học sinh phổ thông học toán
Trang 1CHƯƠNG 1 GIẢI PHÁP CHO VẤN ĐỀ
1.1 Giải pháp chức năng
Phát biểu chi tiết bài toán sẽ giải quyết
Xây dựng hệ thống phần mềm (dạng web trên nền tảng đám mây) hỗ trợ học sinh phổ thông học toán Hệ thống là một tập những công cụ giải các dạng toán quen thuộc ở chương trình học phổ thông giới hạn trong lĩnh vực đại số & giải tích Cụ thể hệ thống sẽ giải quyết những vấn đề sau :
Công cụ tính toán : Hệ thống cho phép học sinh chọn một công cụ tính toán, sau đó nhập vào biểu thức toán học tương ứng Hệ thống sẽ đưa ra kết quả tính toán và bài giải chi tiết (nếu có) cho học sinh Danh sách những công cụ được xây dựng :
Giải phương trình (bậc 1, bậc 2, bậc 3, , phương trình lượng giác)
Giải hệ phương trình
Tìm giới hạn (biểu thức, hàm số)
Tính đạo hàm biểu thức
Khảo sát và vẽ đồ thị hàm số
Tìm nguyên hàm với biểu thức cho trước
Tính tích phân của biểu thức
Lý thuyết : ứng với mỗi công cụ tính toán là một bộ lý thuyết tóm tắt xoay quanh vấn đề này Sau khi chọn công cụ tính toán, học sinh có thể xem những lý thuyết liên quan đến bài toán mà công cụ này giải quyết (ví dụ : với công cụ khảo sát hàm số, tương ứng sẽ có phần lý thuyết về các bước
để khảo sát hàm số, )
1.2 Giải pháp công nghệ
Cloud computing
Trang 2Hiện nay, chưa có một sự thống nhất về định nghĩa Cloud computing, mỗi tổ chức hay nhà cung cấp dịch vụ đều đưa ra ý kiến riêng
Theo WIKIPEDIA
Cloud Computing là điện toán trên nền tảng Internet Các Máy Chủ cung cấp tài nguyên, phần mềm, dữ liệu, và các thiết bị khác theo yêu cầu
Theo Ian Foster
Cloud Computing là mô hình điện toán phân tán có tính co giãn linh hoạt về mặt kinh tế, là nơi chứa sức mạnh về tính toán, lưu trữ dựa trên nền tảng và dịch vụ cung cấp
sự ảo hóa tài nguyên và thay đổi linh hoạt để phù hợp với nhu cầu khách hàng trên Internet
Theo Rajkumar Buyya
Cloud là một hệ thống phân tán và xử lý song song gồm nhiều máy tính ảo kết nối với nhau và được cung cấp cho người dùng dựa trên thỏa thuận giữa nhà cung cấp dịch
vụ và người dùng
Tại sao phải dùng Cloud Computing ?
Lợi ích về chi phí đầu tư
Thông thường người dùng hoặc các doanh nghiệp phải đầu tư vào nhiều khoản như: mua ứng dụng, đầu tư cho phần cứng để có thể triển khai được ứng dụng đó, chi phí bảo trì phần cứng và phần mềm, chi phí nâng cấp thiết bị, thuê đội ngũ quản lý, …đôi khi nhiều ứng dụng và thiết bị có giá đắt đỏ được mua về tuy nhiên tần suất sử dụng không cao, khả năng đáp ứng kém, đó là một sự lãng phí lớn
Với điện toán đám mây, người dùng và các doanh nghiệp chỉ các thiết bị cấu hình
đủ để duyệt web, được kết nối với internet là có thể sử dụng được các tài nguyên mà họ đang có nhu cầu Không cần tốn quá nhiều chi phí, nhưng người dùng và các doanh
Trang 3nghiệp có thể sử dụng các tài nguyên tốt nhất với khả năng đáp ứng cao và chỉ phải trả chi phí cho lưu lượng mà họ đã sử dụng (thường tính bằng thời gian sử dụng ứng dụng)
Công nghệ ảo hóa
Ảo hóa làm tăng năng xử lý bằng cách kết hợp các server và các thiết bị lưu trữ Công nghệ ảo hóa đã tạo nên tính linh động của điện toán đám mây Nếu các nhà cung cấp dịch vụ truyền thống chỉ cung cấp cố định tài nguyên và năng lực xử lý đúng như ràng buộc của hai bên (thường thấp hơn so với hợp đồng), thì điện toán đám mây có khả năng cung cấp thêm tài nguyên, năng lực xử lý một cách nhanh chóng chỉ sau những thao tác cấu hình đơn giản và khách hàng chỉ phải trả chi phí đúng theo lưu lượng mà họ sử dụng Người dùng hoặc các doanh nghiệp có thể tiếp cận với các tài nguyên tính toán và lưu trữ khổng lồ
Ngoài ra, xét ở góc độ các lập trình viên và các nhà phát triển ứng dụng, điện toán đám mây cung cấp đầy đủ các công cụ hỗ trợ trong quá trình phát triển một ứng dụng như các cơ sở dữ liệu, các máy chủ ứng dụng, hệ thống quản lý source code, hệ thống quản lý thay đổi, các công cụ lần vết tìm lỗi, … mà không cần đầu tư quá nhiều Cho phép các lập trình viên và nhà phát triển ứng dụng tạo ra các ứng dụng web tùy chỉnh và phát hành nó một cách nhanh chóng , bỏ qua nhiều giai đoạn rắc rối như việc thiết lập hosting, servers, databases, …
Các loại hình dịch vụ
Các mô hình dịch vụ của điện toán đám mây khá da dạng, nhưng phổ biến nhất có thể được phân thành 3 nhóm: dịch vụ hạ tầng (IaaS), dịch vụ nền tảng (PaaS) và dịch vụ phần mềm (SaaS)
Dịch vụ hạ tầng IaaS (Infrastructure as a Service)
Dịch vụ hạ tầng IaaS cung cấp dịch vụ cơ bản, cung cấp năng lực tính toán, không gian lưu trữ, kết nối mạng tới khách hàng Khách hàng (cá nhân hoặc tổ chức) có thể sử dụng tài nguyên hạ tầng này để đáp ứng nhu cầu tính toán hoặc cài đặt ứng dụng riêng
Trang 4tùy theo mục đích sử dụng Với dịch vụ này khách hàng làm chủ hệ điều hành, không gian lưu trữ và các ứng dụng do khách hàng cài đặt Khách hàng điển hình của dịch vụ IaaS có thể là mọi đối tượng cần tới một máy tính và tự cài đặt ứng dụng của mình
Ví dụ điển hình về dịch vụ này là dịch vụ EC2 của Amazon Khách hàng có thể đăng ký sử dụng một máy tính ảo trê dịch vụ của Amazon và lựa chọn một hệ thống điều hành (ví dụ, Windows hoặc Linux) và tự cài đặt ứng dụng của mình
Dịch vụ nền tảng PaaS (Platform as a Service)
Dịch vụ nền tảng PaaS cung cấp nền tảng điện toán cho phép khách hàng phát triển các phần mềm, phục vụ nhu cầu tính toán hoặc xây dựng thành dịch vụ trên nền tảng đám mây đó Dịch vụ PaaS có thể được cung cấp dưới dạng các ứng dụng lớp giữa (middleware), các ứng dụng chủ (application server) cùng các công cụ lập trình với ngôn ngữ lập trình nhất định để xây dựng ứng dụng Dịch vụ PaaS cũng có thể được xây dựng riêng và cung cấp cho khách hàng thông qua API riêng Khách hàng xây dựng ứng dụng
và tương tác với hạ tầng điện toán đám mây thông qua API đó Ở mức PaaS, khách hàng không quản lý nền tảng đám mây hay các tài nguyên lớp như hệ điều hành, lưu giữ ở lớp dưới Khách hàng điển hình của dịch vụ PaaS chính là các nhà phát triển ứng dụng
Dịch vụ App Engine của Google là một dịch vụ PaaS điển hình, cho phép khách hàng xây dựng các ứng dụng web với môi trường chạy ứng dụng và phát triển dựa trên ngôn ngữ lập trình Java hoặc Python
Dịch vụ phần mềm SaaS (Software as a Service)
Dịch vụ SaaS cung cấp các ứng dụng hoàn chỉnh như một dịch vụ theo yêu cầu cho nhiều khách hàng Khách hàng lựa chọn ứng dụng phù hợp với nhu cầu và sử dụng
mà không quan tâm tói hay bỏ công sức quản lý tài nguyên tính toán bên dưới
Dịch vụ SaaS nổi tiếng nhất phải kể đến Salesforce.com với các ứng dụng cho doanh nghiệp mà nổi bật nhất là CRM Các ứng dụng SaaS cho người dùng cuối phổ biến
là các ứng dụng office Online của Microsoft hay Google Docs của Google
Trang 5Mô hình triển khai
Đám mây “công cộng”
Mô hình đầu tiên được nói đến khi đề cập tới điện toán đám mây chính là mô hình đám mây công cộng (public cloud) Đây là mô hình mà hạ tầng điện toán đám mây được một tổ chức sỡ hữu và cung cấp dịch vụ rộng rãi cho tất cả các khách hàng thông qua hạ tầng mạng internet hoặc các mạng công cộng diện rộng Các ứng dụng khác nhau chia sẻ chung tài nguyên tính toán, mạng và lưu trữ Do vậy, hạ tầng điện toán đám mây được thiết kế để đảm bảo cô lập về dữ liệu giữa các khách hàng và tách biệt về truy cập
Các dịch vụ của đám mây công cộng hướng tới số lượng khách hàng lớn nên thường có năng lực về hạ tầng cao, đáp ứng nhu cầu tính toán linh hoạt, đem lại chi phí thấp cho khách hàng Do đó khách hàng của các dịch vụ trên đám mây công cộng sẽ bao gồm tất cả các tầng lớp, trong đó khách hàng là cá nhân và doanh nghiệp nhỏ sẽ được lợi thế trong việc dễ dàng tiếp cận các ứng dụng công nghệ cao, chất lượng mà không phải đầu tư ban đầu, chi phí sử dụng thấp, linh hoạt
Đám mây “riêng”
Đám mây riêng (private cloud) là mô hình trong đó hạ tầng đám mây được sở hữu bởi một tổ chức và phục vụ cho người dùng của tổ chức đó Đám mây riêng có thể được vận hành bởi một bên thứ ba và hạ tầng đám mây có thể được đặt bên trong hoặc bên ngoài tổ chức sở hữu (tại bên thứ ba kiêm vận hành hoặc thậm chí là một bên thứ tư)
Đám mây riêng được các tổ chức, doanh nghiệp lớn xây dựng cho mình nhằm khai thác ưu điểm về công nghệ và khả năng quản trị của điện toán đám mây Với đám mây riêng, các doanh nghiệp tối ưu được hạ tầng IT của mình, nâng cao hiệu quả sử dụng, quản lý trong cấp phát và thu hồi tài nguyên, qua đó giảm thời gian đưa sản phẩm sản xuất, kinh doanh ra thị trường
Trang 6Đám mây “chung”
Đám mây chung (community cloud) là mô hình trong đó hạ tầng đám mây được chia sẻ bởi một số tổ chức cho cộng đồng người dùng trong các tổ chức đó Các tổ chức này do đặc thù không tiếp cận với các dịch vụ của đám mây công cộng và chia sẻ chung một hạ tầng điện toán đám mây để nâng cao hiệu quả đầu tư và sử dụng
Đám mây “lai”
Mô hình đám mây lai (hybrid cloud) là mô hình bao gồm hai hoặc nhiều hơn các đám mây trên tích hợp với nhau Mô hình đám mây lai cho phép chia sẻ hạ tầng hoặc đáp ứng nhu cầu trao đổi dữ liệu
Khảo sát các nhà cung cấp dịch vụ điện toán đám mây
Những hổ trợ cho Developer
Amazon Salesfore GAE Microsoft Rackspace
Hổ trợ HDH Window y y y y y
Hổ trợ HDH Mac OS y y y n n
Hổ trợ HDH Linux/Other y y y n y
.NET y y n y y
Java y y y y y
Python y y y n y
Ruby y y n y n
PHP y y n y n
Flex n y n n n
Trang 7SQL/ SQL Server y n n y y
MySQL y n y n y
Oracley n n n y
Miễn phí sử dụng y y y y n
Ghi chú :
GAE : Google App Engine
y : có cung cấp
n : không cung cấp
Chi phí sử dụng cho người dùng
Amazon
Miễn phí: http://aws.amazon.com/free/
Có phí: mức phí nhỏ nhất là 1.365$ và sẽ lớn hơn nhiều tùy thuộc nhu cầu sử dụng EC2 : http://aws.amazon.com/ec2/pricing/
Data Tranfer
Amazon Elastic Block Store
Elastic IP Addresses
Trang 8Amazon CloudWatch.
Elastic Load Balancing
Amazon S3
Salesforce
Google App Engine
Miễn phí: Có dung lượng lưu trữ 1GB và lượng băng thông là 5 triệu pageview trên tháng
Có phí: Mỗi ứng dụng sẽ phải trả tối thiểu 8$/tháng Và tối đa là 1000$/tháng tùy thuộc vào những dịch vụ đăng ký sử dụng
Microsoft (Window Azure)
Giải pháp được lựa chọn
Theo nhu cầu thì loại hình dịch vụ mà nhóm sử dụng là PaaS (nền tảng dịch vụ), với mô hình triển khai là Public Cloud (đám mây chung)
Nhà cung cấp dịch vụ : nhóm chúng em quyết định chọn nhà cung cấp dịch vụ là Google vì những lý do sau :
Trang 9Google App Engine tích hợp đầy đủ những công nghệ phổ biến hiện nay để phát triển một ứng dụng web (xét ra thì có phần kém linh hoạt hơn so với Amazon và Rackspace) Chúng ta sẽ không cần phải lo lắng về việc mở rộng cho ứng dụng của mình
vì Google sẽ đảm nhận việc này
Hạ tầng của Google đủ tốt để ta có thể tin vào khả năng đáp ứng trước những đột biến bất ngờ có thể xảy ra
Google App Engine hỗ trợ 2 môi trường phát triển ứng dụng là Java và Python Java là ngôn ngữ đang được ưa chuộng để phát triển ứng dụng So với Amazon, Salesfore, Microsoft, thì Google không có hổ trợ NET, một ngôn ngữ cũng rất được yêu thích hiện nay
Google khá thoải mái trong cách tính phí ở thời điểm hiện tại Bạn sẽ có được 1G lưu trữ và lượng băng thông 5 triệu pageview hàng tháng hoàn toàn miễn phí Nếu vượt qua mốc này bạn phải thực hiện trả phí Nhưng một website mới xây dựng thời gian đầu thì khó mà vượt qua được ngưỡng miễn phí này
Tuy nhiên cũng có mặt trái khi ta sử dụng GAE đó là, Hệ thống của chúng ta phải phụ thuộc hoàn toàn vào nền tảng và công nghệ của Google, và rất khó để tách biệt thành một ứng dựng độc lập Nhưng với mức độ cũng như thời điểm hiện tại, nhóm chúng em chưa cần thiết phải nghĩ ngợi xa như vậy Do đó chúng em quyết định chọn Google App Engine làm nhà cung cấp dịch vụ cho mình
Google App Engine
Google App Engine (GAE)
Google App Engine cho phép bạn triển khai ứng dụng web của mình trên hạ tầng của Google Việc xây dựng ứng dụng với App Engine rất dễ dàng, thuận lợi trong quá trình bảo trì, dễ mở rộng khi có lượng truy cập tăng, hoặc khi có thêm nhu cầu lưu trữ Với App Engine, bạn chỉ cần upload ứng dụng mình lên và ứng dụng sẽ sẵn sàng phục vụ người dùng
Trang 10GAE hỗ trợ cho chúng ta 2 môi trường phát triển ứng dụng : Java runtime environment và Python runtime environment
Java Runtime Environment : bạn có thể xây dựng ứng dụng trên công nghệ Java bao gồm Java virtual machine (JVM), Java servlet, và Java programming language - hoặc bất kỳ một ngôn ngữ nào được biên dịch trên JVM chẳn hạn như JavaScript hay Ruby
Python Runtime Environment : là một môi trường chuyên dụng bao gồm một trình thông dịch rất nhanh và một bộ thư viện chuẩn
Một số đặc tính của Google App Engine:
Hỗ trợ các công nghệ web thông dụng, phổ biến nhất
Tự động mở rộng và cân bằng tải
Cung cấp các API để xác thực người dùng và gửi mail sử dụng tài khoản của Google
Cung cấp một môi trường phát triển với đầy đủ các tính năng
App Engine datastore
App Engine cung cấp một dịch vụ lưu trữ phân tán những kho dữ liệu phân tán này sẽ phát triển dần theo dữ liệu của bạn App Engine sẽ cung cấp cho chúng ta những API để thực hiện thao tác với cở sở dữ liệu bên dưới
Google App Engine cung cấp hai dạng datastore:
Master/Slave Datastore: bao gồm một trung tâm dữ liệu (data center) đóng vai trò
là master chịu trách nhiệm đọc và truy vấn, các trung tâm dữ liệu khác đóng vai trò slave Với mô hình này thì dữ liệu được sao lưu không đồng bộ, tuy nhiên lợi thế của mô hình này không gian lưu trữ nhỏ, chi phí CPU thấp
Trang 11High Replication Datastore: dữ liệu sẽ được sao lưu trên tất cả các trung tâm dữ liệu khác dựa trên thuật toán Paxos Đây là một giải pháp mới, tính sẵn sàng cao và đáng tin cậy Tuy nhiên chi phí cao, do đó nó được sử dụng cho các ứng dụng cực kì quan trọng
App Engine datastore lưu các đối tượng dữ liệu gọi là các thực thể (entity) Một thực thể có một hay nhiều thuộc tính (property), mỗi thuộc tính tương ứng một kiểu dữ liệu (chuỗi, số nguyên, tham chiếu đến một đối tượng khác, …)
Một thao tác với cơ sở dữ liệu gọi là thành công khi mọi hành động trong thao tác
đó thành công Nếu bất kì một hành động nào không thành công, thì thao tác đó sẽ bị ngừng lại Điều này thích hợp với các ứng dụng web phân tán, nơi người dùng có thể truy cập hay thao tác cùng một dữ liệu tại một thời điểm
Datastore với kiến trúc phân tán có nhiều tính năng tương tự cơ sở dữ liệu truyền thống, có khả năng quản lý lượng dữ liệu rất lớn Nó khác với cơ sở dữ liệu quan hệ truyền thống trong cách mô tả quan hệ giữa các đối tượng dữ liệu Hai thực thể cùng loại
có thể có các thuộc tính khác nhau, các thực thể khác nhau có thể có các thuộc tính cùng tên, nhưng khác nhau về kiểu dữ liệu
Thực thể và thuộc tính
Một đối tượng dữ liệu trong Google App Engine được gọi là một thực thể Mỗi thực thể có một hay nhiều thuộc tính, thuộc tính có thể là kiểu chuỗi, số nguyên, ngày, …
Mỗi thực thể có một khóa dùng để định danh Một khóa đơn giản gồm có hai thông tin là loại và ID định danh được cung cấp bởi các datastore Nhờ phân loại các thực thể mà truy vấn dễ dàng hơn ID định danh của một thực thể cũng có thể là một chuỗi
Một ứng dụng có thể lấy các thực thể từ datastore bằng cách sử dụng khóa chính, hoặc truy dựa trên các thuộc tính của thực thể Một truy vấn có thể trả về 0 hoặc nhiều thực thể, và các thực thể có thể được sắp xếp theo thuộc tính Tuy nhiên, số lượng thực