Bài viết khảo sát các công trình nghiên cứu về mẫu thiết kế để phát triển phần mềm doanh nghiệp trong môi trường đám mây, đặc biệt là phần mềm cung cấp như dịch vụ, đồng thời đi sâu vào các khó khăn khi phát triển ứng dụng đa người thuê. Đóng góp chính của bài báo này bao gồm lý do cần nghiên cứu mẫu thiết kế để phát triển phần mềm trong môi trường đám mây. Mời các bạn cùng tham khảo!
Trang 1Mẫu Thiết Kế Cho Việc Phát Triển Phần Mềm Trong Môi Trường Đám Mây: Bản Khảo Sát Hiện Trạng
Ngô Huy Biên và Trần Đan Thư Khoa Công Nghệ Thông Tin, Trường Đại học Khoa học Tự nhiên, Đại học Quốc gia thành phố Hồ Chí Minh, Việt Nam
Email: nhbien@fit.hcmus.edu.vn, tdthu@fit.hcmus.edu.vn
Abstract— Điện toán đám mây hứa hẹn một cuộc cách mạng
trong công nghệ và kinh doanh bằng cách cung cấp khả năng
tính toán như các dịch vụ trong môi trường Internet Hầu hết các
doanh nghiệp ngày nay đều dựa trên các hệ thống công nghệ
thông tin để vận hành các hoạt động kinh doanh phức tạp Việc
di chuyển các hệ thống này lên môi trường đám mây là điểu tất
yếu do lợi ích to lớn trong việc giảm chi phí xây dựng và vận
hành hệ thống Các nhà phát triển có thể phát triển các ứng dụng
dịch vụ điện toán đám mây bằng 2 cách: phát triển ứng dụng
trên dịch vụ nền tảng hoặc phát triển ứng dụng riêng gọi đến các
dịch vụ của điện toán đám mây Dù phát triển ứng dụng đám
mây bằng cách nào đi nữa thì thiết kế là giai đoạn không thể bỏ
qua nhằm đánh giá tính đúng đắn của phương pháp giải quyết
vấn đề và có tài liệu để các bên liên quan liên lạc thống nhất với
nhau Để thiết kế thành công các hệ thống phần mềm trong đám
mây phục vụ doanh nghiệp các kiến trúc sư cần được trang bị
đầy đủ kiến thức và kinh nghiệm Mẫu thiết kế là một phương
tiện nhằm chuyển giao giải pháp cho các vấn đề lặp lại nhiều lần
và tính hiệu quả của mẫu thiết kế đã được chứng thực qua thời
gian Trong bài báo này chúng tôi khảo sát các công trình nghiên
cứu về mẫu thiết kế để phát triển phần mềm doanh nghiệp trong
môi trường đám mây, đặc biệt là phần mềm cung cấp như dịch
vụ, đồng thời đi sâu vào các khó khăn khi phát triển ứng dụng đa
người thuê Đóng góp chính của bài báo này bao gồm (i) lý do cần
nghiên cứu mẫu thiết kế để phát triển phần mềm trong môi
trường đám mây, (ii) bản tổng kết hiện trạng một cách hệ thống
các kết quả nghiên cứu về mẫu thiết kế cho các ứng dụng trong
môi trường đám mây và (iii) các câu hỏi nghiên cứu đề xuất cho
các vấn đề còn tồn đọng Chúng tôi hy vọng rằng bài báo sẽ góp
phần giúp các nhà nghiên cứu về kỹ nghệ phần mềm trong môi
trường đám mây có cái nhìn tổng quan từ đó xác định hướng
nghiên cứu và bài toán cụ thể cho mình trong lĩnh vực này dễ
dàng hơn
Keywords — thiết kế phần mềm; mẫu thiết kế; điện toán đám
mây; đa người thuê; tính biến thiên của phần mềm
iện toán đám mây hứa hẹn một cuộc cách mạng trong
công nghệ và kinh doanh bằng cách cung cấp khả năng
tính toán như các dịch vụ trong môi trường Internet Hầu
hết các doanh nghiệp ngày nay đều dựa trên các hệ thống công
nghệ thông tin để vận hành các hoạt động kinh doanh phức tạp
Việc di chuyển các hệ thống này lên môi trường đám mây là
điểu tất yếu do lợi ích to lớn trong việc giảm chi phí xây dựng
và vận hành hệ thống[18, 44, 60, 75]
Cho đến thời điểm hiện tại phần lớn các ứng dụng phần
mềm vẫn ở dạng truyền thống (on-premise applications) Việc
di chuyển các ứng dụng truyền thống lên các đám mây hay xây dựng một hệ thống mới trên đám mây là một thách thức lớn đối với các nhà phát triển do sự khác biệt rất lớn giữa một dịch vụ dành cho hàng trăm triệu người sử dụng với một ứng dụng cài đặt trên máy một người dùng hay một ứng dụng dùng cho vài trăm người trong một công ty Các nhà phát triển cần thiết kế ứng dụng để đáp ứng khả năng mở rộng, tính sẵn sàng cao cùng năng lực xử lý thông minh khi người dùng mất kết nối
Sự tương tác, kết hợp giữa các dịch vụ đám mây phức tạp tạo nên sự ảnh hưởng lẫn nhau giữa các ứng dụng và các nhà phát triển cần xử lý chúng một cách khéo léo
Các mẫu thiết kế truyền thống vẫn có thể sử dụng để phát triển các ứng dụng đám mây, tuy nhiên chúng chưa đủ để đáp ứng các nhu cầu của ứng dụng điện toán đám mây khi mà khối lượng xử lý trở nên khổng lồ, các kết nối có thể bị cắt đứt đột ngột, các dịch vụ tương tác chồng chéo, phụ thuộc vào nhau, chờ đợi kết quả của nhau [56, 70], nhiều khách hàng có yêu cầu khác nhau cùng dùng chung một ứng dụng
Một ví dụ cụ thể có thể kể đến như cơ chế xác thực và phân quyền Các mẫu thiết kế như Brokered Authentication, Role-Based Access Control [36] vẫn có thể sử dụng để xác thực và phân quyền cho ứng dụng đám mây Tuy nhiên với các ứng dụng đám mây hỗ trợ đa người thuê, các người thuê phân thành nhiều cấp khác nhau cần có mẫu thiết kế mới để xây dựng hệ thống quản lý nhiều người thuê phân cấp đồng thời cung cấp
cơ chế xác thực đơn giản cho tất cả các người thuê cũng như cơ chế phân quyền linh hoạt mà vẫn đảm bảo sự bảo mật trong việc truy cập vào các tài nguyên
Việc chuyển đổi các ứng dụng truyền thống lên đám mây không có nghĩa là loại bỏ chúng, các ứng dụng truyền thống sẽ vẫn tồn tại song song với các ứng dụng đám mây, do vậy cần
có các mẫu thiết kế kết hợp sự xác thực và phân quyền giữa đám mây và ứng dụng truyền thống, bảo mật cho người dùng trong nhiều môi trường chỉ qua một lần xác thực nhằm giúp họ
sử dụng dịch vụ dễ dàng hơn
Một ví dụ khác như dịch vụ trao đổi thông điệp trong môi trường đám mây, các dịch vụ email truyền thống hầu như không bảo vệ nội dung điện thư truyền đi trong môi trường mạng, do vậy cần có các mẫu thiết kế để giải quyết vấn đề bảo mật nội dung dữ liệu trao đổi giữa các dịch vụ
Rất nhiều vấn đề cần được giải quyết khi xây dựng phần mềm trong môi trường điện toán đám mây như làm thế nào để xây dựng mô hình dữ liệu cho phép thay đổi khi thực thi chương trình, làm sao để xử lý các quy trình tính toán phức tạp Đ
Trang 2đòi hỏi sự kết hợp của nhiều dịch vụ, trong đó mỗi dịch vụ đòi
hỏi đầu vào khác nhau và trả về kết quả bất tương thích với các
dịch vụ khác, làm sao để một hệ thống có khả năng quay ngược
quy trình xử lý khi tính năng của hệ thống được xây dựng bằng
cách kết hợp nhiều dịch vụ khác nhau và một dịch vụ được gọi
bị lỗi
Việc phát hiện các mẫu thiết kế để giải quyết các vấn nảy
sinh khi phát triển các hệ thống phần mềm trong môi trường
đám mây, đặc biệt là các hệ thống quản trị ngân hàng, thương
mại điện tử, quản trị nhân lực, kết nối, trao đổi thông tin hay
bản đồ dịch trở thành một nhu cầu cấp thiết Các mẫu thiết kế
mới sẽ giúp bảo đảm chất lượng và nâng cao hiệu suất của quá
trình phát triển phần mềm trong môi trường đám mây
Trong bài báo này chúng tôi khảo sát các vấn đề gặp phải
khi thiết kế và xây dựng phần mềm trong môi trường đám
mây Sơ đồ khái niệm dưới đây mô tả các lĩnh vực mà chúng
tôi sẽ đề cập và mối liên hệ giữa chúng
Hình 1 Sơ đồ khái niệm của các lĩnh vực nghiên cứu
Sơ đồ trên thể hiện mẫu phần mềm là một lĩnh vực con
trong kỹ nghệ phần mềm, mẫu thiết kế là một lĩnh vực con
trong mẫu phần mềm Điện toán đám mây là một lĩnh vực
nghiên cứu riêng biệt, phần giao giữa điện toán đám mây và kỹ
nghệ phần mềm chính là kỹ nghệ phần mềm trong môi trường
đám mây (bao gồm quy trình, chuẩn hóa, mô hình phát triển,
ứng dụng, vân vân)
Ứng dụng đám mây là một lĩnh vực con trong điện toán
đám mây, các ứng dụng đám mây tập trung ở ba loại là ứng
dụng quản lý hạ tầng cung cấp dạng dịch vụ, ứng dụng cung
cấp nền tảng dạng dịch vụ và ứng dụng nghiệp vụ cung cấp
như dịch vụ Sự giao nhau giữa mẫu thiết kế và ứng dụng đám
mây chính là mẫu thiết kế cho ứng dụng đám mây, lĩnh vực
nghiên cứu mà bài báo đề cập chính là miền giao nhau này
Ứng dụng đa người thuê là một lĩnh vực nghiên cứu trong
ứng dụng đám mây Sự giao nhau giữa mẫu thiết kế và ứng
dụng đa người thuê chính là mẫu thiết kế cho ứng dụng đa
người thuê, đây là một lĩnh vực con của mẫu thiết kế cho ứng
dụng đám mây và cũng chính là lĩnh vực mà bài báo này tập
trung đề cập nhiều nhất
Phần tiếp theo của bài báo được cấu trúc như sau: phần II
chúng tôi giới thiệu một số thành tựu trong việc nghiên cứu
mẫu thiết kế, mục đích là giới thiệu về các lĩnh vực trong công
nghệ phần mềm mà các nhà nghiên cứu đã tập trung tìm kiếm
mẫu thiết kế, từ đó cho thấy mẫu thiết kế cần tiếp tục được tìm
kiếm cho việc xây dựng phần mềm đám mây; phần III chúng tôi giới thiệu các vấn đề gặp phải khi thiết kế các phần mềm cung cấp như dịch vụ trong môi trường đám mây; phần IV chúng tôi tập trung vào các khó khăn về thiết kế khi phát triển ứng dụng đa người thuê; phần V chúng tôi thảo luận một số công trình liên quan; cuối cùng chúng tôi tổng kết lại hiện trạng nghiên cứu và đưa ra tầm nhìn về tương lại Trong mỗi phần chúng tôi giới thiệu một số vấn đề mở còn tồn đọng của chủ đề nghiên cứu
Đóng góp chính của bài báo này gồm (i) lý do cần nghiên cứu mẫu thiết kế để phát triển phần mềm trong môi trường đám mây, (ii) bản tổng kết hiện trạng nghiên cứu về mẫu thiết
kế cho các ứng dụng trong môi trường đám mây và (iii) một số câu hỏi nghiên cứu đề xuất cho các vấn đề còn tồn đọng
Công nghệ và phương pháp phát triển phần mềm thay đổi liên tục theo từng ngày, các vấn đề mới luôn xuất hiện ngày một nhiều trong khi các mẫu thiết kế có sẵn thì luôn giới hạn
Do vậy thường xuyên có nhu cầu về các mẫu mới để giải quyết các vấn đề vừa nảy sinh Để đưa ra các mẫu mới đòi hỏi cần có
sự đầu tư nghiên cứu về mẫu đối với các vấn đề mới nảy sinh, sau đó tổng kết và tài liệu hóa lại các giải pháp
Cũng như mọi sự vật khác, các mẫu không phải là tồn tại vĩnh viễn Có những mẫu trở nên lỗi thời do vấn đề cần giải quyết không còn xuất hiện nữa hoặc do xuất hiện một giải pháp thay thế khác tốt hơn, hoặc do công nghệ phát triển làm cho vấn đề có thể tự được giải quyết khi áp dụng công nghệ mới Khi một mẫu đã lỗi thời chúng ta không nên ứng dụng nó nữa
Để nhận biết một mẫu là lỗi thời, cập nhập lại mẫu đó cho hợp thời đòi hỏi sự nghiên cứu lại các mẫu cũ trong hoàn cảnh mới
Do vậy ngoài việc tìm kiếm các mẫu và ngôn ngữ mẫu mới, các nhà nghiên cứu còn tập trung vào việc tái cấu trúc, sửa chữa, điều chỉnh, mô tả lại các mẫu cũ cho phù hợp với hiện tại
Việc nghiên cứu để phát hiện, tài liệu hóa và áp dụng mẫu được thực hiện liên tục với hàng loạt các thành tựu như 23 mẫu thiết kế của nhóm 4 người với các mẫu như Abstract Factory, Facade, Composite, Template, Strategy [43] được áp dụng rộng rãi trong các hệ thống hướng đối tượng; hay các mẫu MVC, Layer, Interceptor của nhóm 5 người [16] được tích hợp vào hầu hết các hệ thống khung hiện tại; hay các mẫu Data Acess Object, Transfer Object, Business Object, Domain Model, Active Record [5, 40] được ứng dụng rộng rãi trong hầu hết các phần mềm doanh nghiệp hiện nay; hay các mẫu Role-Based Access Control [36] được áp dụng để quản lý phân quyền trong hầu như tất cả các hệ thống
Các nghiên cứu về lý thuyết mẫu cũng đã được thực hiện chi tiết [15, 24, 71] Ngoài ra các nhà nghiên cứu còn đề xuất nhiều mẫu dành riêng cho các ngôn ngữ hay hệ thống đặc thù [9, 20 - 23]; các tác vụ trong quá trình phát triển phần mềm như phân tích [39], thiết kế nghiệp vụ [31], kiểm thử đơn vị [64], tích hợp [50], quản lý tài nguyên [53], bảo mật hệ thống [37], quản lý cấu hình [11]; các phần mềm đặc thù như trang mạng [45], hệ quản trị nội dung [72], hệ thống phân tán [27], phần
Trang 3mềm hướng dịch vụ [10, 30] Các kinh nghiệm khi ứng dụng
mẫu một cách không đúng đắn cũng được nghiên cứu và tài
liệu hóa lại [13, 28, 58, 79]
Tuy nhiên cuộc sống luôn thay đổi, các lĩnh vực mới xuất
hiện ngày càng nhiều, xây dựng phần mềm trong các lĩnh vực
đó đòi hỏi các mẫu thiết kế mới Vấn đề mở hiện nay là việc
phát hiện, tài liệu hóa các mẫu và ngôn ngữ mẫu chuyên biệt
cho công nghệ mới và miền ứng dụng đặc thù, ví dụ như hệ
thống nhúng và phân tán theo thời gian thực, tương tác nhóm,
phát triển phần mềm hướng mô hình, phát triển phần mềm
hướng khía cạnh, và đặc biệt là tính toán dịch vụ và điện toán
đám mây
Ngành điện toán cho đến ngày nay đã trải qua 6 hệ mẫu
tính toán từ điện toán máy trạm đến điện toán cá nhân, đến điện
toán mạng, đến điện toán internet, đến điện toán lưới và hiện
tại đang trong giai đoạn điện toán đám mây [42] Điện toán
đám mây là một lĩnh vực liên quan chặt chẽ với kỹ nghệ phần
mềm Việc nghiên cứu các mẫu thiết kế để phát triển phần mềm
trong môi trường điện toán đám mây tập trung vào mẫu thiết kế
cho 3 loại phần mềm chính: phần mềm hạ tầng, phần mềm nền
tảng và phần mềm cung cấp như dịch vụ [17, 42, 61, 77]
Một trong các yêu cầu đối với phần mềm hạ tầng là khả
năng hợp nhất các hệ thống đám mây do vậy cần các mẫu thiết
kế và chuẩn để có thể thực hiện yêu cầu này Cả 3 loại phần
mềm đều cần sử dụng các mẫu thiết kế về lưu trữ và xử lý dữ
liệu lớn, bảo mật và mở rộng các hệ thống Cả 3 loại phần
mềm này đều có nhu cầu tích hợp các hệ thống với nhau Việc
tích hợp này thường được thực hiện dựa trên các mẫu thiết kế
cho các hệ thống nền tảng trung gian (middleware) hay hệ
thống mạch kết nối dịch vụ (enterprise service bus) và áp dụng
các chuẩn chung Đặc biệt cả 3 loại phần mềm hầu như đều
được xây dựng trên mô hình đa người thuê Việc xây dựng các
hệ thống đa người thuê đòi hỏi các mẫu thiết kế kiến trúc cho
từng lĩnh vực đặc thù và khả năng xử lý tính biến thiên Hình
2 mô tả các hướng nghiên cứu chúng tôi vừa đề cập Chi tiết
cho từng hướng sẽ được trình bày ở những phần tiếp theo
Hình 2 – Phát triển phần mềm trong môi trường đám mây
A Mẫu thiết kế cho phần mềm hệ thống và nền tảng đám mây
Nhiều doanh nghiệp hay chính phủ vì lý do bảo mật hoặc
do nhu cầu tích hợp với ứng dụng truyền thống của minh, hoặc
có nhu cầu toàn quyền quản lý ứng dụng và hạ tầng cần có đám
mây riêng của mình Để xây dựng các đám mây riêng doanh
nghiệp cần các ứng dụng vận hành đám mây Thiết kế các ứng dụng này là một vấn đề thiết yếu cần được giải quyết Xây dựng các phần mềm hệ thống (IaaS) và nền tảng (PaaS) cho đám mây là một quá trình phức tạp
Các phần mềm hệ thống cho đám mây cần quản lý được các máy chủ vật lý, các máy ảo, hệ thống lưu trữ vật lý, quản lý thông điệp giao tiếp, cân bằng tải, chống lỗi, theo dõi mức độ
sử dụng tài nguyên, hiệu suất hệ thống, cung cấp giao diện người dùng và giao diện lập trình ứng dụng [75] Các phần mềm nền tảng đám mây cần quản lý quản lý được các ứng dụng, cung cấp môi trường, ngôn ngữ và thư viện để phát triển ứng dụng, cung cấp phương pháp lưu trữ cho ứng dụng, vận hành và theo dõi các ứng dụng
Trong [48] các tác giả giới thiệu hai mẫu thiết kế để xây dựng các hệ thống IaaS và PaaS Mẫu Cloud Infrastructure đưa
ra mối quan hệ tĩnh và động giữa người thuê với hệ thống điều khiển, máy ảo, máy chủ, tài nguyên với mục đích hỗ trợ việc xây dựng các hệ thống IaaS Mẫu Platform-as-a-Service đưa ra mối quan hệ tĩnh và động giữa người dùng với bên cung cấp nền tảng cùng các thành phần thiết yếu của một hệ thống PaaS nhằm mục đích hỗ trợ xây dựng các hệ thống PaaS Tuy nhiên hai mẫu thiết kế này chỉ cung cấp kiến trúc ở mức độ tổng quan
mà không đưa ra các hướng dẫn, phân tích chi tiết về việc hiện thực hóa chúng
Vấn đề chưa giải quyết trong lĩnh vực mẫu thiết kế cho phần mềm hệ thống và nền tảng đám mây là phân tích để tìm ra những điểm chưa hoàn thiện trong mô hình nghiệp vụ của các phần mềm khi áp dụng vào các hoàn cảnh thực tế; đưa ra các chỉ dẫn cụ thể để xây dựng, hiện thực hóa các loại phần mềm dạng này; so sánh, đánh giá các phần mềm hệ thống và phần mềm nền tảng khác nhau
B Mẫu thiết kế cho việc hợp nhất các hệ thống đám mây
Các đám mây hiện nay tập trung rải rác ở một số nhà cung cấp lớn như Amazon, Google, Microsoft, IBM và Rackspace [19] dự đoán trong tương lai các đám mây này sẽ hợp nhất với nhau để tận dụng nguồn cung cấp dịch vụ của nhau nhằm giảm chi phí mở rộng và mở rộng các khả năng của mình Các tác giả đưa ra một kịch bản hợp nhất trong đó các tài nguyên ảo được chia sẽ giữa các đám mây và cung cấp cho người dùng một cách liền mạch Các tác giả cũng đề xuất kiến trúc, kỹ thuật và công nghệ cần thiết để xây dựng 3 thành phần này Đây là một ý tưởng rất hấp dẫn, tuy nhiên việc hiện thực hóa
và đánh giá kiến trúc này vẫn chưa được thực hiện
C Mẫu thiết kế lưu trữ và truy xuất dữ liệu ứng dụng đám mây
Các phần mềm trong môi trường đám mây luôn cần lưu trữ
xử lý một khối lượng dữ liệu cực kỳ lớn và nhiều khi không có giới hạn Đây là một đặc điểm đặc thù của các phần mềm trong môi trường đám mây nhằm tận dụng khả năng lưu trữ và xử lý không giới hạn của đám mây Trong đám mây hầu hết các dữ liệu được lưu trữ không theo kiểu quan hệ dẫn đến việc lập trình ứng dụng đám mây cũng thay đổi theo
Các hệ thống đám mây thường cung cấp hai dịch vụ cho việc lưu trữ và truy xuất dữ liệu ứng dụng, đặc biệt là khả năng hỗ trợ ứng dụng làm việc với khối lượng dữ liệu lớn:
Trang 4 Tập Tập tin (file) hệ thống để lưu trữ dữ liệu như
Google File System [44], Hadoop Distributed File
System [76]
Cơ chế để truy xuất dữ liệu như MapReduce [26],
Map-Reduce-Merge [86]
Một số mẫu thiết kế để truy xuất và xử lý dữ liệu lớn như
repartition join, semi-joins, secondary sort, reservoir sampling,
vân vân được giới thiệu trong [51] Tuy nhiên các cách xử lý
này thường áp dụng cho xử lý song song và cho kết quả không
theo thời gian thực trong khi các hệ thống đám mây thường
phải tương tác với người dùng theo thời gian thực Việc đưa ra
các mẫu thiết kế để giải quyết việc xử lý dữ liệu lớn và cho ra
kết quả gần như theo thời gian thực là một vấn đề cần giải
quyết
Các ứng dụng đám mây thường tương tác và trao đổi một
khối lượng lớn dữ liệu với nhau Làm sao để việc trao đổi được
tiến hành nhanh chóng với độ tin cậy cao, các lỗi có thể xảy ra
nằm trong sự kiểm soát, các thông tin không bị hỏng hay dư
thừa trong quá trình trao đổi cũng là một vấn đề cần giải quyết
Ngoài ra các ứng dụng trình khách thường hạn chế về khả năng
lưu trữ và tính toán nên việc thiết kế hệ thống sao cho vừa tận
dụng được khả năng lưu trữ cục bộ vừa tận dụng được khả
năng lưu trữ không giới hạn của đám mây cũng là một vấn đề
cần giải quyết
D Mẫu thiết kế cho việc tích hợp giữa các ứng dụng cung cấp
như dịch vụ
Mỗi ứng dụng, đặc biệt là ứng dụng doanh nghiệp luôn hiện
thực hóa một số các quy trình nghiệp vụ đặc thù Các quy trình
này thường được tích hợp với nhau để thực hiện một quy trình
lớn hơn Việc tích hợp có thể được thực hiện trong cùng một hệ
thống bằng cách sử dụng các ngôn ngữ thực thi quy trình như
Web Services Business Process Execution Language (BPEL)
[83] và các động cơ xử lý ngôn ngữ thực thi quy trình [55]
Việc tích hợp có thể được thực hiện giữa các hệ thống khác
nhau, cụ thể hơn là các hệ thống cung cấp dạng dịch vụ trong
trong môi trường đám mây Sự tích hợp giữa các hệ thống khác
nhau đảm bảo việc tận dụng tối đa việc tái sử dụng khả năng
của từng hệ thống Việc tích hợp giữa các hệ thống có thể được
thực hiện ở nhiều mức độ khác nhau bằng cách sử dụng các
dịch vụ mạng (web service) hay mashups [75] hay các ngôn
ngữ thực thi quy trình với các hệ thống trung gian
Ở góc độ thiết kế việc tích hợp giữa các ứng dụng khác
nhau có thể được thực hiện dựa vào các mẫu thiết kế tích hợp
dạng truyền tải thông điệp như Message Bus [50] Tuy nhiên
các mẫu thiết kế này quá tổng quát chưa giải quyết cụ thể các
yêu cầu đặc thù trong đám mây như đồng bộ hóa dữ liệu giữa
ứng dụng di dộng và nhiều nơi lưu trữ trong đám mây, đảm bảo
tính toàn vẹn của dữ liệu khi di chuyển trong đám mây, khả
năng tích hợp khối lượng dữ liệu cự kỳ lớn Trong [62] các tác
giả đã đề xuất một số mẫu thiết kế đồng bộ hóa dữ liệu cho ứng
dụng di động như Full Transfer, Timestamp Transfer,
Mathematical Transfer
Một trong những khó khăn khi tích hợp các ứng dụng là
giải quyết các vấn đề không tương thích, trùng lắp về dữ liệu
và chức năng của các ứng dụng Hiện nay các nền tảng đám
nhau Các nhà phát triển gặp nhiều khó khăn trong việc tích hợp ứng dụng của mình với các ứng dụng ở các nền tảng khác, đặc biệt là các ứng dụng truyền thống trong nội bộ doanh nghiệp Trong [32] các tác giả giới thiệu mẫu thiết kế “Cloud Component Gateway” giúp các ứng dụng tương tác với nhau bằng cách mỗi ứng dụng trong môi trường đám mây tạo bản sao giao diện của mình và dùng chúng tương tác với các ứng dụng truyền thống Các bản sao này sẽ chuyển các yêu cầu đến các thành phần bên trong của ứng dụng đám mây
Một vấn đề khác khi tích hợp các ứng dụng là khả năng đảm bảo tính tin cậy và toàn vẹn cho từng quy trình nghiệp vụ, trong đó mỗi quy trình nghiệp vụ gọi các quy trình từ các ứng dụng khác Mặc dù đã có các chuẩn để hỗ trợ sự tin cậy khi tích hợp các dịch vụ như Coordination, WS-AtomicTransaction và WS-BusinessActivity [83] việc hiện thực hóa các chuẩn này thành các hệ thống nền tảng trung gian
để giảm thời gian và chi phí cho các nhà phát triển trong việc hiện thực hóa các nghiệp vụ doanh nghiệp trong môi trường đám mây vẫn chưa được thực hiện Do vậy cần tìm kiếm mẫu thiết kế để tích hợp các ứng dụng theo chuẩn, ví dụ như mẫu thiết kế cho chuẩn quản lý giao dịch của ứng dụng đám mây nhằm đạt được độ tin cậy về kết quả và sự toàn vẹn về dữ liệu
E Mẫu thiết kế cho việc bảo mật ứng dụng
Mối quan tâm lớn nhất của các doanh nghiệp khi đưa ứng dụng của mình lên đám mây là khả năng bảo mật thông tin do trong môi trường đám mây các hệ thống luôn mở với người dùng cuối thông qua các giao diện người dùng trên web hay các dịch vụ web Ngoài ra bảo mật cho ứng dụng trong môi trường đám mây thường đòi hỏi tuân theo các chuẩn nhằm hỗ trợ cho việc tích hợp các dịch vụ đám mây Nếu dịch vụ đám mây là dịch vụ đa người thuê, bảo mật cho ứng dụng còn cần đảm bảo sự cách ly giữa các người thuê khác nhau
Hầu hết các ứng dụng hiện tại sử dụng các cơ chế chứng thực đơn giản dễ bị tấn công bởi các dạng tấn công nghe trộm
và mô phỏng Dịch vụ mạng là công nghệ được sử dụng phổ biến hiện nay Để đảm bảo sự bảo mật cho các dịch vụ web đồng thời giúp các dịch vụ web tương tác được với nhau, nhiều chuẩn đã được phát triển và áp dụng Chuẩn WS-Policy mô tả văn phạm để biểu diễn các chính sách khác nhau của một dịch
vụ web và kết hợp giữa chúng WS-Policy là nền tảng để mô tả các chuẩn khác Chuẩn WS-Security sử dụng các mô hình bảo mật có sẵn như Kerberos [68] hoặc X509 Chuẩn này đặc tả cách sử dụng các mô hình đó sao cho các dịch vụ web có thể tương tác đồng nhất với nhau
Bảo mật được xây dựng trên mối quan hệ tin cậy được định nghĩa trước Kerberos bảo mật được bởi vì các thành viên tham gia tin tưởng vào một trung tâm phân phối khóa (Kerberos Key Distribution Center) Public Key Infrastructure (PKI) [1] bảo mật được bởi vì các thành viên tin tưởng vào các nhà cấp chứng chỉ gốc (Root Certificate Authorities) Chuẩn WS-Trust đưa ra một mô hình mở rộng để thiết lập và kiểm tra các mối quan hệ tin cậy giữa các dịch vụ web Chuẩn WS-Federation cho phép một nhóm các tổ chức thiết lập một vùng bảo mật ảo Chuẩn WS-SecureConversation được xây dựng trên nền của các chuẩn WS-Security, WS-Trust, và WS-Policy nhằm cung cấp sự tương tác và trao đổi dữ liệu bảo mật cho các dịch vụ web [83] XML Signature bảo vệ các phần của một tài liệu XML khỏi sự chỉnh sửa trái phép bằng cách sử dụng chữ ký
Trang 5điện tử Thuật toán cho chữ ký có thể sử dụng hệ thống bảo
mật đối xứng như (Triple DES hoặc AES) hoặc bất đối xứng
như RSA hoặc DSA XML Encryption mã hóa các phần của
một tài liệu XML
Các chuẩn bảo mật cho dịch vụ web thường phức tạp và dài
dòng gây khó khăn cho các kiến trúc sư hay nhà phát triển
trong việc áp dụng và kiểm tra chúng Trong [2, 3] các tác giả
mô tả lại các chuẩn dưới dạng mẫu nhằm giúp các nhà phát
triển hiểu các chuẩn một cách dễ dàng hơn đồng thời cung cấp
khả năng so sánh và kiểm tra xem một ứng dụng có đáp ứng
một chuẩn bảo mật nào đó không
Đăng nhập và chứng thực một lần là nhu cầu thiết yếu khi
sử dụng các dịch vụ Chuẩn Security Assertion Markup
Language (SAML) được đưa ra bởi tổ chức OASIS đã giải
quyết vấn đề này [25] Giao thức OAuth 2.0 [47] là một giao
thức phân quyền mở và chuẩn hóa cho phép người dùng cấp
quyền cho các ứng dụng bên thứ ba truy cập có giới hạn vào
các tài nguyên của mình tại một nơi lưu trữ Giao thức cho
phép cấp quyền mà không chia sẻ các thông tin bảo mật lâu
dài như mật khẩu đồng thời cho phép người dùng hủy việc cấp
phép khi cần thiết OAuth 2.0 cũng có thể được sử dụng cho
việc đăng nhập một lần
Các vấn đề chưa giải quyết trong lĩnh vực này là thể hiện
toàn bộ các chuẩn dưới dạng mẫu thiết kế nhằm giúp các nhà
phát triển dễ dàng áp dụng chúng trong hệ thống của mình và
hiện thực hóa chúng một cách đúng đắn [54, 78], đồng thời
cũng cần thiết đưa ra các mẫu thiết kế nhằm hướng dẫn áp
dụng các thuật toán bảo mật mới trong các hoàn cảnh đặc thù
nhằm đảm bảo vấn đề bảo mật cho hệ thống
F Mẫu thiết kế kế cho việc mở rộng khả năng tải của ứng
dụng
Đối với các ứng dụng đám mây yêu cầu về năng lực xử lý
của hệ thống luôn tăng theo cùng số lượng người dùng Vì vậy
là khả năng mở rộng (scalabilty) của ứng dụng nhằm đảm bảo
cho hệ thống vẫn hoạt động tốt khi dữ liệu xử lý tăng lên là yêu
cầu tiên quyết Hệ thống cũng cần có khả năng giảm năng lực
xử lý khi dữ liệu cần xử lý giảm xuống để tiết kiệm chi phí
Việc tăng giảm tài nguyên này cần được thực hiện một cách
liền mạch để không ảnh hưởng đến hoạt động của hệ thống
Trong [6] các tác giả giới thiệu 5 mẫu thiết kế để mở rộng
các ứng dụng đám mây bao gồm: Single Platform, Shared
Platform, Clustered Platform, Multiple Shared Platforms,
Multiple Clustered Platforms Các mẫu thiết kế này chỉ tập
trung vào khía cạnh triển khai hệ thống mà không tập trung vào
khía cạnh thiết kế và xây dựng hệ thống
Trong [85] tác giả giới thiệu các mẫu thiết kế Horizontally
Scaling Compute tập trung vào việc mở rộng tính toán bằng
cách xây dựng các cụm tính toán tự trị và phi trạng thái dựa
trên các dịch vụ đám mây để giảm sự phức tạp trong triển khai
và quản lý các cụm tính toán
Khó khăn khi xây dựng hệ thống có khả năng mở rộng là
quản lý trạng thái của ứng dụng sao cho khi áp dụng cân bằng
tải (load balancing) người dùng luôn truy cập được trạng thái
ứng dụng của phiên làm việc trước Ngoài ra dữ liệu của các
người thuê cũng cần được thiết kế một cách hợp lý để có thể
mở rộng cho người thuê này mà không ảnh hưởng đến người
thuê khác, đặc biệt là khi hệ thống đang vận hành Do vậy để xây dựng hệ thống đa người thuê đáp ứng tốt khả năng mở rộng các nhà thiết kế cần đưa ra các mẫu thiết kế quản lý trạng thái của ứng dụng khi ứng dụng được triển khai ở nhiều cụm máy chủ, mẫu thiết kế theo dõi và quản lý việc tăng giảm tài nguyên đối với từng người thuê khi hệ thống đang vận hành
G Mẫu thiết kế cho ứng dụng cung cấp như dịch vụ
Phần mềm cung cấp như dịch vụ là một mô hình dịch vụ trong đó các khả năng của hệ thống được cung cấp đến người dùng bằng việc sử dụng trực tiếp ứng dụng của nhà cung cấp trong môi trường đám mây [63]
Phần mềm cung cấp như dịch vụ xuất hiện từ những ngày đầu của internet Một số nhà cung cấp ứng dụng như dịch vụ (Application Service Provider – ASP) đã đóng gói các sản phẩm của mình, cài đặt trong trung tâm dữ liệu của mình và cho phép người dùng truy cập chúng thông qua internet Tuy nhiên làn sóng ASP đầu tiên thất bại vì cơ sở hạ tầng cho đường truyền internet còn chưa đáp ứng được nhu cầu người dùng về băng thông, người dùng phải sử dụng phương pháp truy cập bàn điều khiển từ xa (remote desktop) để thao tác với ứng dụng và giá thành không rẻ hơn nhiều so với ứng dụng truyền thống
Không như làn sóng ASP đầu tiên các nhà cung cấp phần mềm như dịch vụ thế hệ tiếp theo như Google hay Salesforce
sử dụng hoàn toàn kiến trúc nền tảng web, tận dụng tối đa hạ tầng chung cho nhiều người dùng để giảm giá thành Dưới góc nhìn của một khách hàng khi sử dụng phần mềm cung cấp như dịch vụ người dùng chỉ cần có một thẻ ghi nợ (credit card) và một trình duyệt để đăng ký sử dụng phần mềm Sau đó người dùng truy cập và hiệu chỉnh lại phần mềm theo nhu cầu của mình và có thể bắt đầu sử dụng cho công việc của mình Điểm nhấn mạnh ở đây là khách hàng không cần các bộ phận chuyên trách về công nghệ thông tin để có sản phẩm sử dụng, không lo lắng về vấn đề cập nhập và bảo trì phần mềm [75]
Các giải pháp cung cấp như dịch vụ được quan tâm bởi chúng mang lại sự đơn giản trong việc sở hữu, vận hành và bảo trì sản phẩm kèm theo khả năng giảm chi phí to lớn cho doanh nghiệp so với phần mềm truyền thống [81] Vấn đề chưa giải quyết trong lĩnh vực này là đưa ra các mẫu kiến trúc để xây dựng các hệ thống SaaS cho các miền ứng dụng khác nhau như ngân hàng, bệnh viện, bảo hiểm, trường học, học tập điện tử (e-learning)
THUÊ
Để đạt được mục tiêu giảm chi phí, các giải pháp cung cấp như dịch vụ thường được thiết kế theo mô hình đa người thuê
Đa người thuê là một mô hình trong đó nhiều doanh nghiệp sử dụng chung một nền tảng, chia sẻ chung nơi lưu trữ dữ liệu và
có khả năng cấu hình lại giải pháp [59] Có thể nói mô hình này là một điểm đặc trưng nổi bật để phân biệt giữa một phần mềm trong môi trường đám mây với một phần mềm truyền thống Mô hình đa người thuê được phân thành các nhóm chính sau [41, 66]:
Trang 6 Hệ thống không có khả năng cấu hình và một hệ thống
được triển khai dùng chung cho nhiều người thuê
(single instance service)
Hệ thống không có khả năng cấu hình và mỗi người
thuê sử dụng một hệ thống được triển khai riêng cho
mình (multiple instances service)
Hệ thống có khả năng cấu hình và một hệ thống được
triển khai dùng chung cho tất cả các người thuê (single
arbitrary arbitrary instance service)
Hệ thống có khả năng cấu hình và mỗi người thuê sử
dụng một hệ thống được triển khai riêng cho mình
(multiple configurable instances service)
Ngoài ra có thể kết hợp 2 mô hình không cấu hình với
nhau hoặc 2 mô hình cấu hình với nhau để tạo thành
các mô hình tự do (arbitrary instances service)
Hình 3 mô tả kiến trúc chung của các sản phẩm cung cấp
như dịch vụ cho đa người thuê dạng có khả năng cấu hình và
một hệ thống được triển khai cho tất cả các người thuê [75]
Một sản phẩm cung cấp như một dịch vụ được sử dụng bởi
nhiều khách hàng (người thuê) A, B, C Các khách hàng chia
sẻ chung một mã nguồn Mỗi khách hàng có dữ liệu riêng của
mình và có thể cấu hình lại hệ thống thông qua các siêu dữ
liệu (dữ liệu cấu hình) Các hệ thống đa người thuê giảm tối đa
chi phí để sở hữu và vận hành hệ thống Một ví dụ cho thấy là
khi hệ thống cần nâng cấp một tính năng, trong môi trường đa
người thuê do chỉ có một mã nguồn và dữ liệu được triển khai
trên một hệ thống nên chi phí giảm đi rất nhiều so với việc cập
nhập nhiều hệ thống cho từng khách hàng theo cách truyền
thống [75]
Hình 3 – Kiến trúc của phần mềm đa người thuê [75]
Mục tiêu chính của hệ thống đa người thuê là giảm chi phí
bằng cách tối đa hóa việc chia sẻ tài nguyên Khi chia sẻ tài
nguyên hệ thống cần đảm bảo dữ liệu của từng người thuê phải
được bảo mật và cách ly; tốc độ thực thi của các người thuê
phải được cách ly hay nói cách khác tốc độ khi sử dụng hệ
thống của người thuê này không được ảnh hưởng đến tốc độ sử
dụng hệ thống của người thuê khác; việc thực thi công việc của
từng người thuê phải được cách ly hay nói cách khác luồng
thực thi của các người thuê phải độc lập, kết quả của người
thuê này không ảnh hưởng đến kết quả của người thuê khác
[69]
Ngoài ra khi xây dựng các hệ thống đa người thuê cần đảm
bảo hệ thống có khả năng xử lý dữ liệu lớn hơn nhiều so với
các hệ thống cho một khách hàng; hệ thống cần có khả năng
khách hàng; hệ thống cần được thiết kế với khả năng biến thiên
để thỏa mãn các yêu cầu về dữ liệu và quy trình nghiệp vụ khác nhau của các khách hàng khác nhau; hệ thống cần có khả năng
mở rộng hay thu hẹp một cách linh động tùy theo số lượng người thuê nhằm giảm thiểu chi phí phần cứng; hệ thống cần khả năng vận hành trên nhiều cụm máy chủ khác nhau cùng khả năng chuyển đổi giữa các cụm khi xảy ra sự cố; hệ thống cần cho phép người thuê đo lường các yêu cầu phi chức năng
mà hệ thống cung cấp tại bất kỳ thời điểm nào [73]
A Mẫu thiết kế kiến trúc cho phần mềm đa người thuê
Một trong những khó khăn khi xây dựng phần mềm đa người thuê là kiến trúc tổng thể của hệ thống Kiến trúc này là chìa khóa để hiện thực hóa các ứng dụng đa người thuê Mục tiêu chính của kiến trúc này là làm sao để cách ly các người thuê với nhau để họ không bị ảnh hưởng bởi nhau về mặt dữ liệu, bảo mật, độ tin cậy cũng như quy trình nghiệp vụ Nhiều nhà nghiên cứu đã đề xuất các kiến trúc để giải quyết khó khăn này
Frederick Chong và Gianpaolo Carraro liệt kê các thành phần cơ bản của kiến trúc đa người thuê bao gồm tầng lưu trữ, tầng dịch vụ nghiệp vụ, tẩng dịch vụ quy trình, tầng giao diện, tầng dịch vụ bảo mật và tầng siêu dữ liệu [41]
Guo và các cộng sự đề xuất mô hình để phát triển các ứng dụng đa người thuê trong trong đó việc việc thực thi và quản lý được cách ly bằng cách hạn chế người dùng đến một phần của cấu trúc thư mục bằng các mô hình bảo mật hệ thống đặc thù của nền tảng phát triển [46]
Ralph Mietzner giới thiệu và đánh giá các mẫu thiết kế Single instance service, Single configurable instance service và Multiple instances service Các tác giả mô tả làm thế nào để các dịch vụ giữa các người thuê Các mẫu thiết kế này có thể
áp dụng để thiết kế, phát triển và triển khai các ứng dụng đa người thuê [66] Ngoài ra các tác giả còn thể hiện phương pháp tích hợp các dịch vụ dựa trên thông tin người thuê bằng cách truyền thông tin người thuê hiện hành vào các thành phần dịch vụ đang được kích hoạt
Weissman và Bobrowski mô tả thiết kế của Force.com, một trong những doanh nghiệp đi tiên phong trong mô hình đa người thuê Force.com sử dụng kiến trúc trên nền tảng siêu dữ liệu Các siêu dữ liệu này được dùng để định nghĩa và lưu trữ
dữ liệu cho ứng dụng đa người thuê [84]
Một kiến trúc sơ bộ cho đa người thuê được giới thiệu trong [12], trong đó các tác giả cho rằng sự định danh, cấu hình và cơ
sở dữ liệu là các thành phần chính của ứng dụng đa người thuê Một kiến trúc để hiện thực hóa đa người thuê cho nền tảng hướng dịch vụ được giới thiệu trong [8] Afkham và các cộng
sự cho rằng việc cấu hình, phân phối thông điệp, bảo mật, thực thi dịch vụ và truy cập dữ liệu là các khía cạnh chính một ứng dụng đa người thuê cần có
Việc xây dựng các ứng dụng đa người thuê từ đầu đòi hỏi nhiều thời gian và công sức Tập trung vào khía cạnh bảo mật của hệ thống [4] giới thiệu kiến trúc quản lý bảo mật đa người thuê cho phép các nhà cung cấp dịch vụ tái sử dụng các giao diện lập trình bảo mật có sẵn khi phát triển một ứng dụng đa người thuê mới Kiến trúc này cũng cho phép có thể điều chỉnh
Trang 7nguồn vào ứng dụng tại thời điểm đang chạy để hiện thực hóa
yêu cầu mới này Các tác giả ứng dụng mẫu thiết kế quản lý
đảo ngược (inversion of control) hoặc khả năng lập trình hướng
khía cạnh để hiện thực hóa kiến trúc này
Việc phân phối tài nguyên đến từng người thuê một cách
tối ưu hóa là một vấn đề cần được quan tâm Hệ thống chưa
được tối ưu hóa nếu một người thuê có số người dung là 100
được phân phối số tài nguyên bằng với một người thuê có số
người dùng là 10000 Trong [34] các tác giả trình bày một
khung ứng dụng cho phép tối ưu hóa sự phân bổ các yêu cầu
của các người thuê đến các tài nguyên hệ thống bằng cách sử
dụng thuật toán tôi luyện thép
Các hệ thống đa người thuê rất phong phú và đa dạng, yêu
cầu thay đổi tùy theo từng tổ chức Ví dụ rất nhiều tổ chức
cùng cần hệ thống quản trị dự án với các yêu cầu về quy trình
đặc thù cho tổ chức của mình; các nhà cung cấp phần mềm
dịch vụ cần xây dựng hệ thống quản trị dự án đa người thuê
cho các tổ chức đó Hay như nhiều trường đại học cùng cần hệ
thống học tập điện tử với các yêu cầu đặc thù cho từng trường;
các nhà cung cấp phần mềm dịch vụ cần xây dựng hệ thống
học tập điện tử đa người thuê cho các trường đại học Để xây
dựng những hệ thống như vậy đòi hỏi các mẫu thiết kế kiến
trúc đa người thuê đặc thù cho lĩnh vực mà tổ chức quan tâm
Do vậy thể hiện kiến trúc đa người thuê cho các lĩnh vực đặc
thù ví dụ như hệ thống bảo mật thông điệp, hệ thống quản lý dự
án, học tập điện tử, ngân hàng, bảo hiểm, quản lý doanh nghiệp
là vấn đề cần được giải quyết
B Mẫu thiết kế cho tính biến thiên của phần mềm đa người
thuê
Tính biến thiên được nghiên cứu và sử dụng nhiều trong kỹ
nghệ phần mềm dòng (software product line engineering) ở
nhiều công đoạn khác nhau trong quá trình phát triển phần
mềm như phân tích yêu cầu, thiết kế, hiện thực hóa, kiểm thử
và ở nhiều mức độ trừu tượng khác nhau như mô hình yêu cầu,
mô hình thiết kế, hệ thống đã được hiện thực hóa, kết quả kiểm
thử [57]
Khi xây dựng các phần mềm đa người thuê, các hệ thống
cần phải thỏa mãn các yêu cầu khác nhau của nhiều người thuê
và yêu cầu của môi trường phát triển đặc thù như Amazon1,
Azure2 hay Google Application Engine3 Điều này đòi hỏi các
phần mềm cần được thiết kế một cách linh động, dễ cấu hình,
hay nói cách khác là phải thỏa mãn các yêu cầu khác nhau của
các khách hàng khác nhau Nói cách khác phần mềm đa người
thuê cần phải có tính biến thiên
Tính biến thiên của phần mềm có thể được định nghĩa như
khả năng của một hệ thống hay sản phẩm phần mềm có thể mở
rộng, thay đổi, cấu hình hoặc hiệu chỉnh một cách hiệu quả để
có thể sử dụng trong một hoàn cảnh đặc thù [67] Sự biến thiên
của phần mềm có thể xảy ra ở dữ liệu của hệ thống, ở tính năng
của hệ thống, ở luồng nghiệp vụ, ở công nghệ sử dụng, ở mục
tiêu chất lượng đối với hệ thống hay ở môi trường triển khai hệ
thống [35]
1 http://aws.amazon.com
2 http://www.windowsazure.com/en-us
3 https://appengine.google.com
Tính biến thiên cần được mô hình và quản lý ở góc độ vấn
đề (hay cụ thể hơn là yêu cầu) và góc độ giải pháp [74] Các giải pháp cho tính biên thiên tập trung ở khả năng cấu hình (configuration), hiệu chỉnh (customization) và triển khai hệ thống (provision, deployment) Cấu hình là khả năng thay đổi hành vi của hệ thống dựa trên các thiết lập được định nghĩa sẵn Cấu hình được thực hiện khi hệ thống đang vận hành Các thiết lập cho cấu hình được xác định trước khi triển khai hệ thống hoặc dựa vào các siêu dữ liệu trong quá trình vận hành Hiệu chỉnh là khả năng thay đổi hành vi của hệ thống dựa trên việc thay đổi hay thêm một số thành phần của hệ thống Hiệu chỉnh được thực hiện trước khi hệ thống đưa vào triển khai Cấu hình thường được sử dụng để hỗ trợ sự thay đổi thông qua các tham số được định nghĩa trước cho mô hình dữ liệu, quy tắc nghiệp vụ hay giao diện Hiệu chỉnh thường được sử dụng để hỗ trợ sự thay đổi của những phần cốt lõi của phần mềm mà khó có thể được thực hiện bằng cấu hình So với cấu hình thì hiệu chỉnh thường tốn nhiều chi phí và thời gian hiện thực hóa cũng như bảo trì hơn [80] Hình 4 trình bày phân loại của tính biến thiên trong môi trường đa người thuê
Mô hình hóa yêu cầu về tính biến thiên của một hệ thống và
kỹ thuật quản lý chúng được giới thiệu trong [65] Trong đó tác giả áp dụng các kỹ thuật của kỹ nghệ sản phẩm phần mềm dòng để giải quyết vấn đề quản lý các yêu cầu biến thiên của ứng dụng cung cấp như dịch vụ
Trong [74] các tác giả mô tả quy trình để mô hình khả năng cấu hình về tính năng và yêu cầu chất lượng của một hệ thống trong đám mây bằng cách sử dụng mô hình tính tăng mở rộng (extended feature model) của kỹ nghệ phần mềm dòng
Hình 4 – Tính biến thiên trong môi trường đa người thuê
Các giải pháp cho khả năng cấu hình của phần mềm đa người thuê tập trung vào khả năng thay đổi dữ liệu cho phù hợp với các người thuê khác nhau, khả năng thay đổi chức năng hay hành vi cho phù hợp với các quy trình nghiệp vụ khác nhau Hình 5 trình bày phân loại của các giải pháp cho tính biến thiên của dữ liệu và chức năng trong môi trường đa người thuê dựa trên cấu hình
Frederick Chong và Gianpaolo Carraro giới thiệu các phương pháp để cô lập và mở rộng dữ liệu của các người thuê khác nhau trong hệ quản trị cơ sở dữ liệu quan hệ bao gồm kỹ thuật sử dụng một sơ đồ dữ liệu chung (single schema model) [41] Khi sử dụng một sơ đồ dữ liệu chung mỗi dòng dữ liệu của một bảng được gắn kết với một người thuê nhất định thông qua định danh người thuê, các trường mở rộng của mỗi bảng có
Trang 8thể là một tập hợp cố định các trường định nghĩa trước hoặc có
thể là một tập hợp vô hạn các cặp tên và giá trị trong một bảng
khác
Hình 5 – Các giải pháp cho tính biến thiên của dữ liệu và chức năng trong
môi trường đa người thuê
Để giải quyết tính biến thiên của dữ liệu trong quá trình
thực thi của phần mềm [7] giới thiệu kỹ thuật Chunk Folding,
trong đó các bảng dữ liệu được phân ra thành các bảng thông
thường chứa các dữ liệu chung, đặc thù cho ứng dụng và các
bảng rải rác (chunking) chứa các dữ liệu riêng cho từng người
thuê Kỹ thuật này được hiện thực hóa trên nền của các hệ quản
trị cơ sở dữ liệu quan hệ Các tác giả cũng xây dựng ngôn ngữ
để truy vấn thông tin khi sử dụng kỹ thuật này Điểm yếu của
kỹ thuật này là tính cục bộ (ad-hoc) và sự phức tạp khi truy vấn
thông tin Để ứng dụng kỹ thuật này các hệ thống phải thay đổi
hoàn toàn cách truy cập cơ sở dữ liệu của mình
Weissman và Bobrowski mô tả thiết kế của Force.com, một
trong những doanh nghiệp đi tiên phong trong mô hình đa
người thuê Force.com sử dụng kiến trúc trên nền tảng siêu dữ
liệu Tính biến thiên về dữ liệu được xử lý bằng cách dùng các
siêu dữ liệu để mô tả dữ liệu người thuê [84] Tương tự như kỹ
thuật sử dụng siêu dữ liệu Gautam Shroff mô tả kỹ thuật sử
dụng nhiều sơ đồ (multiple schemas) trong đó mỗi người thuê
được gắn kết với một sơ đồ dữ liệu nhất định Sơ đồ này được
định nghĩa bằng thông tin siêu dữ liệu [75]
Một kỹ thuật khác để xử lý tính biến thiên của dữ liệu là tận
dụng các dịch vụ lưu trữ không quan hệ trong môi trường đám
mây (cloud data store) [75]
Trong [32] tác giả đề xuất phương pháp hiện thực tính biến
thiên về dữ liệu bằng cách sử dụng mẫu thiết kế Variable Data
Component, trong đó dữ liệu của mỗi thực thể được gắn kết với
một danh sách không định kiểu Mỗi đối tượng trong danh sách
này được xác định thông qua một khóa duy nhất Trong trường
hợp các dữ liệu này được xử lý không thông qua các hàm nhập
xuất cơ bản (tạo, cập nhập, xóa, trả về thông tin), nhà phát triển
cần tạo các hàm xử lý đặc thù cho chúng
Để đạt được tính biến thiên về chức năng Fehling đề xuất
xây dựng các chức năng cơ bản sau đó sử dụng các ngôn ngữ
thực thi quy trình, ví dụ như BPEL [55], để gắn các chức năng
với nhau [32]
Thiết kế và hiện thực hóa một động cơ thực thi các luồng
công việc cho đa người thuê được giới thiệu trong [69] Động
cơ này cho phép nhiều người thuê cùng chạy các luồng công
việc của mình trên cùng một động cơ Công trình này cũng sử
dụng BPEL làm ngôn ngữ thực thi quy trình
Việc hiện thực hóa các yêu cầu biến thiên về tính năng cho ứng dụng đa người thuê có thể được thực hiện bằng cách sử dụng một kiến trúc dành cho việc phát triển các ứng dụng tự điều chỉnh (dynamically adaptive applications) [73] Kiến trúc này bao gồm một siêu mô hình để định nghĩa các thành phần, một ngôn ngữ để diễn tả các thành phần và một động cơ để chạy các ứng dụng phát triển dựa trên kiến trúc này Các ứng dụng được phát triển dựa trên bộ khung này sẽ tự điều chỉnh ở trạng thái thực thi dựa trên cấu hình của từng người thuê cũng như yêu cầu của họ Các yêu cầu khác nhau của từng người thuê được định nghĩa dựa trên cấu hình người thuê
Stefan Walraven và các cộng sự giới thiệu cách xử lý các yêu cầu khác nhau của những người thuê khác nhau bằng cách kết hợp việc nội xạ sự phụ thuộc (dependency injection) với các hệ thống nền tảng trung gian hỗ trợ việc cách ly dữ liệu các người thuê [82] Việc tùy chỉnh phần mềm theo các yêu cầu khác nhau của từng người thuê được thực hiện thông qua việc nhận các cấu hình của từng người thuê trong cơ sở dữ liệu, sau
đó từng thành phần của phần mềm cho từng tính năng yêu cầu được khởi tạo và ánh xạ vào từng phần thực thi của hệ thống sử dụng nội xạ sự phụ thuộc
Eddy Truyen và các cộng sự giới thiệu cách tùy chỉnh ứng dụng đa người thuê bằng cách sử dụng các tính năng đặc biệt của các ngôn ngữ lập trình hướng hoàn cảnh [49, 80]
Tình biến thiên cho các yêu cầu về triển khai cho từng người thuê tùy theo các điều khoản của hợp đồng về dịch vụ hoặc triển khai một phần mềm được hiệu chỉnh cho từng người thuê có thể được hiện thực bằng ngôn ngữ thực thi quy trình [32], hoặc kỹ nghệ hướng mô hình [29, 38]
Các công trình trên đã giải quyết tính biến thiên của một số khía cạnh trong ứng dụng đa người thuê như dữ liệu, luồng công việc Tuy nhiên các hệ thống đa người thuê hiện tại thường phân thành nhiều tầng như giao diện, nghiệp vụ và dữ liệu Sự thay đổi của một tầng sẽ kéo theo sự thay đổi của các tầng phụ thuộc Thực hiện các yêu cầu về mở rộng một cách đồng nhất trong quá trình thực thi vẫn chưa được giải quyết triệt để; vẫn chưa có các mẫu thiết kế giúp đạt được các tính biến thiên của ứng dụng một cách đồng nhất ở thời điểm thực thi nhằm đáp ứng nhu cầu nghiệp vụ khác nhau của mỗi doanh nghiệp khác nhau Hay nói một cách khác là vẫn chưa có các mẫu thiết kế để xây dựng các ứng dụng tự điều chỉnh (adaptive SaaS software)
Tìm hiểu về mẫu thiết kế cho điện toán đám mây chỉ mới được thực hiện bởi [33] Trong báo cáo này các tác giả đề xuất quy trình để tìm kiếm mẫu thiết kế cho điện toán đám mây, đề xuất cách mô tả các mẫu thiết kế và thảo luận một số lĩnh vực
áp dụng Tuy nhiên các tác giả chỉ nêu lên các vấn đề chung cần giải quyết của điện toán đám mây mà chưa đi sâu vào việc phát triển phần mềm trong môi trường đám mây; các mẫu thiết
kế cho từng vấn đề cụ thể cũng chưa được khảo sát; các công trình được khảo sát chưa bao quát đầy đủ các lĩnh vực chính
và phân loại một cách hệ thống; các vấn đề nghiên cứu còn tồn đọng cũng chưa được đề cập
Trang 9VI KẾT LUẬN VÀ TẦM NHÌN
Trong bài báo này chúng tôi đã trình bày nguyên nhân cần
nghiên cứu mẫu thiết kế cho việc phát triển phần mềm trong
môi trường đám mây Chúng tôi tổng kết các nghiên cứu về
mẫu thiết kế cho việc phát triển phần mềm trong môi trường
đám mây Cụ thể là các vấn đề mà các nhà nghiên cứu công
nghệ phần mềm quan tâm khi phát triển ứng dụng trong môi
trường đám mây như xây dựng phần mềm hệ thống và phần
mềm nền tảng, xử lý dữ liệu lớn, quản lý bảo mật, xây dựng và
tích hợp các phần mềm cung cấp như dịch vụ, phát triển phần
mềm đa người thuê, xử lý tính biên cho ứng dụng đa người
thuê Chúng tôi đi sâu vào các khó khăn khi phát triển ứng
dụng trong môi trường đám mây và đề xuất các vấn đề nghiên
cứu cho từng lĩnh vực Hình 1, 2, 4 và 5 cung cấp góc nhìn
tổng quan về các hướng nghiên cứu mà chúng tôi đã khảo sát
Chúng tôi hy vọng rằng bài báo sẽ giúp các nhà nghiên cứu
về kỹ nghệ phần mềm cho đám mây có cái nhìn tổng quan về
hiện trạng nghiên cứu, các vấn đề nghiên cứu, từ đó có thể lựa
chọn cho mình bài toán cụ thể để tiếp tục giải quyết nhằm góp
phần cung cấp các kiến thức cho ngành kỹ nghệ phần mềm
trong môi trường đám mây Trong tương lai chúng tôi sẽ tập
trung khảo sát hiện trạng các hướng nghiên cứu liên quan đến
mẫu thiết kế trong môi trường đám mây như kỹ nghệ hướng
mô hình, thiết kế phần mềm tự hiệu chỉnh, thiết kế phần mềm
trong mạng lưới internet vạn vật
TÀI LIỆU THAM KHẢO
[1] Carlisle Adams and Steve Lloyd, Understanding PKI Concepts,
Standards, and Deployment Considerations Second Edition.: Addison
Wesley, 2002
[2] Ola Ajaj and Eduardo B Fernandez, "A pattern for the
WS-SecureConversation standard for web services," in Pattern Languages of
Programs, Tucson, Arizona, 2012
[3] Ola Ajaj and Eduardo B Fernandez, "A pattern for the WS-Trust
standard of web services," in Asian Conf on Pattern Languages of
Programs, Tokyo, 2010
[4] Mohamed Almorsy, John Grundy, and Amani S Ibrahim, "TOSSMA: A
Tenant-Oriented SaaS Security Management Architecture," in 5th IEEE
Conference on Cloud computing, Hawaii, 2012
[5] Deepak Alur, John Crupi, and Dan Malks, Core J2EE™ Patterns: Best
Practices and Design Strategies., 2001
[6] Claudio A Ardagna, Ernesto Damiani, Fulvio Frati, Davide Rebeccani,
and Marco Ughetti, "Scalability Patterns for Platform-as-a-Service," in
2012 IEEE 5th Int Conf on Cloud Computing (CLOUD), Honolulu,
2012
[7] Stefan Aulbach, "Multi-Tenant Databases for Software as a Service," in
2008 ACM SIGMOD Int Conf on Management of data, 2008
[8] Afkham Azeez et al., "Multi-Tenant SOA Middleware for Cloud
Computing," in Cloud Computing (CLOUD), 2010 IEEE 3rd
International Conference, pages 458 - 465, Miami, FL, 2010
[9] Kent Beck, Using Pattern Languages for Object-Oriented Programs.,
1987
[10] Michael Bell, SOA Modeling Patterns for Service-Oriented Discovery
and Analysis., 2010
[11] Stephen P Berczuk and Brad Appleton, Software Configuration
Management Patterns: Effective Teamwork, Practical Integration., 2002
[12] Cor-Paul Bezemer and Andy Zaidman, "Multi-Tenant SaaS
Applications: Maintenance Dream or Nightmare," in IWPSE-EVOL '10
Proceedings of the Joint ERCIM Workshop on Software Evolution
(EVOL) and International Workshop on Principles of Software Evolution
(IWPSE), pages 88 - 92, ACM New York, NY, USA, 2010
[13] William J Brown, Raphael C Malveau, Hays W McCormick III, and
Thomas J Mowbray, AntiPatterns - Refactoring Software, Architectures,
and Projects in Crisis.: Wiley, New York, 1998
[15] Frank Buschmann, Kevlin Henney, and Douglas C Schmidt,
Pattern-Oriented Software Architecture: A Pattern Language for Distributed Computing., 2007
[16] Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad,
and Michael Stal, Pattern-Oriented Software Architecture: A System of
Patterns., 1996
[17] Rajkumar Buyya, James Broberg, and Andrzej Goscinski, Cloud
Computing: Principles and Paradigms., 2011
[18] Rajkumar Buyya, Chee Shin Yeo, and Srikumar Venugopal,
Market-Oriented Cloud Computing: Vision, Hype, and Reality for Delivering IT Services as Computing Utilities., 2008
[19] Antonio Celesti, "How to Enhance Cloud Architectures to Enable
Cross-Federation," in 2010 IEEE 3rd Int Conf on Cloud Computing, Miami,
2010
[20] Peter Coad, Object-oriented patterns., 1992
[21] James O Coplien, Advanced C++ Programming Styles and Idioms.,
1991
[22] James O Coplien, C++ Idioms., 1998
[23] James O Coplien, Idioms and Patterns as Architectural Literature.,
1997
[24] James O Coplien, Software Patterns., 1996
[25] Kelly D Lewis and James E Lewis, "Web Single Sign-On
Authentication using SAML 2009.," in IJCSI International Journal of
Computer Science Issues, 2009
[26] Jeffrey Dean and Sanjay Ghemawat, "MapReduce: Simplified Data
Processing on Large Clusters," in OSDI, San Francisco, 2004
[27] Michael Stal, Hans Rohnert and Frank Buschmann Douglas Schmidt,
"Pattern-Oriented Software Architecture, Patterns for Concurrent and Networked Objects," , 2000
[28] Bill Dudney, Stephen Asbury, Joseph K Krozak, and Kevin Wittkopf,
J2EE Antipatterns.: Wiley, 2003
[29] Brandtzæg Eirik, Sébastien Mosser, and Parastoo Mohagheghi,
"Towards CloudML, a Model-based Approach to Provision Resources in
the Clouds.," in ECMFA, 2012, pp 18-27
[30] Thomas Erl, SOA Design Patterns., 2009
[31] Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of
Software Boston: Addison Wesley, 2003
[32] Christoph Fehling, "An Architectural Pattern Language of Cloud-based
Applications," in Pattern Languages of Programs, Portland, 2011
[33] Christoph Fehling et al., "Capturing Cloud Computing Knowledge and
Experience in Patterns," in Proceedings of the 5th IEEE International
Conference on Cloud Computing, 2012, pp 726 - 733
[34] Christoph Fehling, Frank Leymann, and Ralph Mietzner, "A Framework
for Optimized Distribution of Tenants in Cloud Applications," in 3rd
International Conference on Cloud Computing, 2010, pp 252-259
[35] Bachmann Felix and Len Bass, "Managing Variability in Software
Architectures," ACM SIGSOFT Software Engineering Notes, vol 26, no
3, pp 126-132, 2001
[36] Eduardo B Fernandez, "Patterns for Operating Systems Access Control,"
in Procs of PLoP 2002, 2002
[37] Eduardo B Fernandez, Security Patterns in Practice: Designing Secure
Architectures using Software Patterns Chichester: Wiley, 2013
[38] Nicolas Ferry, Alessandro Rossini, Franck Chauvel, Brice Morin, and Arnor Solberg, "Towards Model-driven Provisioning, Deployment,
Monitoring, and Adaptation of Multi-Cloud Systems," in 6th
International Conference on Cloud Computing, 2013, pp 887-894
[39] Martin Fowler, Analysis patterns: reusable object models., 1997 [40] Martin Fowler et al., Patterns of Enterprise Application Architecture.,
2002
[41] Chong Frederick and Carraro Gianpaolo, "Architecture Strategies for
Trang 10Catching the Long Tail," , 2006
[42] Borko Furht and Armando Escalante, Handbook of Cloud Computing
New York: Springer, 2010
[43] Eric Gamma, Richard Helm, Ralph Johnson, and John Vlissides, Design
Patterns: Elements of Reusable Object-Oriented Software.:
Addison-Wesley, 1994
[44] Sanjay Ghemawat, Howard Gobioff, and Shun-Tak Leung, "The Google
File System," in ACM SIGOPS Operating Systems, 2003
[45] Ian Graham, A pattern language for web usability., 2003
[46] Chang Jie Guo, Wei Sun, Ying Huang, Zhi Hu Wang, and Bo Gao, "A
framework for native multi-tenancy application development and
management," in CEC/EEE 2007, Tokyo, 2007, pp 551 - 558
[47] Dick Hardt, "The OAuth 2.0 Authorization Framework," 2012
[48] Keiko Hashizume, "Cloud Service Model Patterns," in Pattern
Languages of Programs, Tucson, 2012
[49] Robert Hirschfeld, Pascal Costanza, and Oscar Nierstrasz,
"Context-oriented Programming," Journal of Object Technology, vol 7, no 3,
2008
[50] Gregor Hohpe and Bobby Woolf, Enterprise Integration Patterns:
Designing, Building, and Deploying Messaging Solutions., 2003
[51] Alex Holmes, Hadoop in Practice.: Manning Publications Co, 2012
[44] IDC (2015, Sep.) IDC [Online]
http://www.idc.com/getdoc.jsp?containerId=prUS25732415
[53] Michael Kircher and Prashant Jain, Pattern-Oriented Software
Architecture: Patterns for Resource Management., 2004
[54] Somorovsky Juraj, Andreas Mayer, Jorg Schwenk, Marco Kampmann,
and Meiko Jensen, "On Breaking SAML: Be Whoever You Want to Be,"
in USENIX Security Symposium, 2012, pp 397-412
[55] Matjaz B Juric, Business Process Execution Language for Web
Services.: Packt Publishing, 2006
[56] Matjaz B Juric, Ramesh Loganathan, Poornachandra Sarang, and Frank
Jennings, SOA Approach to Integration: XML, Web services, ESB, and
BPEL in real-world SOA projects., 2007
[57] Pohl Klaus, Günter Böckle, and Frank Van Der Linden, Software
Product Line Engineering Berlin: Springer, 2005
[58] A Koenig, "Patterns and Antipatterns," Journal of Object Oriented
Programming, volume 8, number 1, 1995
[59] Thomas Kwok, Thao Nguyen, and Linh Lam, "A software as a service
with multi-tenancy support for an electronic contract management
application," in Services Computing, 2008 SCC '08 IEEE International
Conference, pages 179 - 186, Honolulu, HI, 2008
[60] Neal Leavitt, "Is Cloud Computing Really Ready for Prime Time?," ,
2009
[61] Zaigham Mahmood, Cloud Computing for Enterprise Architectures.,
2011
[62] Zach McCormick and Douglas C Schmidt, "Data Synchronization
Patterns in Mobile Application Design," in PLoP, Tucson, 2012
[63] Peter Mell and Timothy Grance, "The NIST Definition of Cloud
Computing," 2011
[64] Gerard Meszaros, xUnit Test Patterns Refactoring Test Code., 2007
[65] Ralph Mietzner, Andreas Metzger, Frank Leymann, and Klaus Pohl,
"Variability Modeling to Support Customization and Deployment of
Multi-Tenant-Aware Software as a Service Applications," in PESOS '09
Proceedings of the 2009 ICSE Workshop on Principles of Engineering
Service Oriented Systems, pages 18 - 25, 2009
[66] Ralph Mietzner, Tobias Unger, Robert Titze, and Frank Leymann,
"Combining Different Multi-Tenancy Patterns in Service-Oriented
Applications," in EDOC, 2009
[67] Svahnberg Mikael, Jilles Van Gurp, and Jan Bosch, "A Taxonomy of
Variability Realization Techniques," Software: Practice and Experience,
vol 35, no 8, pp 705-754, 2005
[68] Clifford B Neuman and Theodore Ts'o, "Kerberos: An Authentication
Sewice for Computer Networks," IEEE Communications Magazine, pp
33-38, 1994
[69] Milinda Pathirage, Srinath Perera, Indika Kumara, and Sanjiva Weerawarana, "A Multi-tenant Architecture for Business Process
Executions," in Web Services (ICWS), 2011 IEEE International
Conference, pages 121 - 128, Washington, DC, 2011
[70] George Reese, Cloud Application Architectures., 2009
[71] D Riehle, "Composite Design Patterns," in OOPSLA ’97 Conference
Proceedings, published as ACM SIGPLAN Notices, 32(10):218–228, October 1997 ACM Press, 1997
[72] Andreas Rüping, Where Code and Content Meet: Design Patterns for
Web Content Management and Delivery, Personalisation and User Participation., 2009
[73] Julia Schroeter, Sebastian Cech, Sebastian Götz, Claas Wilke, and Uwe Aßmann, "Towards Modeling a Variable Architecture for Multi-Tenant
SaaS-Applications," in VaMoS, New York, 2012
[74] Julia Schroeter, Peter Mucha Marcel, and Malte Lochau, "Dynamic
Configuration Management of Cloud-based Applications," in 16th
International Software Product Line Conference, 2012, pp 171-178
[75] Gautam Shroff, Enterprise Cloud Computing: Technology Architecture
Applications.: Cambridge University Press, 2010
[76] Konstantin Shvachko, Hairong Kuang, Sanjay Radia, and Robert
Chansler, "The Hadoop Distributed File System," in Mass Storage
Systems and Technologies (MSST), 2010 IEEE 26th Symposium, Incline
Village, 2010
[77] Elias Adriano Nogueira da Silva and Daniel Lucredio, "Software
Engineering for the Cloud: A Research Roadmap," in Software
Engineering(SBES), 2012 26th Brazilian Symposium on Computing & Processing (Hardware and Software), Natal, 2012
[78] San-Tsai Sun and Konstantin Beznosov, "The Devil is in the (Implementation) Details: An Empirical Analysis of OAuth SSO
Systems," in ACM conference on Computer and communications
security, New York, 2012, pp 378-390
[79] Bruce Tate, Patrick Linskey, Bob Lee, and Mike Clark, Bitter EJB.,
2003
[80] Eddy Truyen et al., "Context-oriented Programming for Customizable
SaaS Applications," in ACM Symposium on Applied Computing, 2012,
pp 418-425
[81] Mark Turner, David Budgen, and Pearl Brereton, "Turning Software into
a Service," IEEE Computer Society, vol 36, no 10, pp 38 - 44, 2003
[82] Stefan Walraven, Eddy Truyen, and Wouter Joosen, "A Middleware
Layer for Flexible and Cost-Efficient Multi-tenant Applications," in 12th
International Middleware Conference, 2011
[83] Sanjiva Weerawarana, Web Services Platform Architecture: SOAP,
WSDL, WS-Policy, WS-Addressing, WS-BPEL, WS-Reliable Messaging, and More.: Prentice Hall PTR, 2005
[84] Craig D Weissman and Steve Bobrowski, "The Design of the Force.com
Multitenant Internet Application Development Platform," in Proceedings
of the 35th SIGMOD international conference on Management of data, pages 889 - 896, Providence, Rhode Island, USA, 2009
[85] Bill Wilder, Cloud Architecture Patterns.: O'Reilly Media, 2012
[86] Hung-chih Yang, Ali, Hsiao, Ruey-Lung Dasdan, and D Stott Parker,
"Map-Reduce-Merge: Simplified Relational Data Processing," in
SIGMOD '07, New York, 2007