Áp dụng mẫu thiết kế trong xử lý phân tán - Ngô Thị Lan

Controller: Có một Parent-child hierarchy. Trong một tầng có một cotroller. Trong tầng trên nhất, đối tượng controller sẽ truyền sự kiện xuống hệ thống phân cấp. Khi sự kiện truyền đến bộ điều khiển cần xử lý nó có thể hoặc không truyền tiếp. - Model: Điều khiển thay đổi mô hình khi nó nhận được một sự kiện yêu cầu cập nhập dữ liệu. Nếu mô hình thay đổi, nó sẽ thay đổi trạng thái và thông báo cho view. Thành phần view lắng nghe sự kiện và thay đổi theo. Bên phía server, có đối tượng điều khiển mức trên riêng. Tất cả các yêu cầu được đưa lên bộ điều khiển cấp cao nhất này. Khi yêu cầu được nhận, dữ liệu được lấy từ chuỗi đầu vào. Để không vượt ra ngoài phạm vi nghiên cứu trong bài báo này, chúng tôi giả sử rằng các máy chủ biết được định dạng dữ liệu được chấp nhận bên phía client. Các dữ liệu cần phải được đưa tới đúng thành phần. Dữ liệu được chuyển thành các sự kiện và truyền xuống các controller dưới trong cây phân cấp của mẫu HMVC. Khi thông tin được chuyển đến đúng thành phần nhận, nó sẽ thực thi hành động của yêu cầu, trả kết quả về cho Controller gốc. Điều khiển của Controller gốc sẽ đưa kết quả ra theo đúng định dạng chấp nhận của client. THẢO LUẬN Chúng tôi đã nghiên cứu, tổng hợp, đưa ra các vấn đề cơ bản trong xử lý phân tán và cách áp dụng mẫu thiết kế vào để thiết kế hệ thống phân tán sao cho hệ thống dễ dàng thay đổi mở rộng. Nghiên cứu của chúng tôi là nền tảng cơ sở ban đầu để xây dụng ứng dụng thực tế. Hiện chúng tôi đã áp dụng để xây dựng hệ thống phân tán: Hệ thống quản lịch cá nhân của giảng viên trường CNTT & TT – Đại học Thái Nguyên. Do chương trình cần thời gian để chạy thử nên chúng tôi xin trình bày kết quả thử nghiệm của mình trong nghiên cứu tiếp theo.

pdf6 trang | Chia sẻ: thucuc2301 | Lượt xem: 479 | Lượt tải: 0download
Bạn đang xem nội dung tài liệu Áp dụng mẫu thiết kế trong xử lý phân tán - Ngô Thị Lan, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Ngô Thị Lan và Đtg Tạp chí KHOA HỌC & CÔNG NGHỆ 99(11): 73 - 78 73 ÁP DỤNG MẪU THIẾT KẾ TRONG XỬ LÝ PHÂN TÁN Ngô Thị Lan*, Phạm Thị Thương, Lê Thu Trang Trường Đại học Công nghệ thông tin và Truyền thông – ĐH Thái Nguyên TÓM TẮT Hiện nay hầu hết các hệ thống thông tin đều được xây dựng phân tán. Phát triển một hệ thống phân tán là khó khăn do tính phức tạp vốn có của việc giao tiếp phân tán. Mặt khác phần mềm hiện đại ngày càng đòi hỏi tính linh động, mở rộng cao để sẵn sàng đáp ứng được các yêu cầu thường xuyên thay đổi của người sử dụng. Một yêu cầu không thể thiếu đối với phần mềm hiện đại là tính tái sử dụng cao. Mẫu thiết kế được coi là giải pháp hữu hiệu để nâng cao tính tái sử dụng của phần mềm. Trong bài báo này, chúng tôi trình bày kết quả nghiên cứu của mình về việc áp dụng mẫu thiết kế trong tiến trình xây dựng và phát triển hệ thống phân tán sao cho hệ thống có khả năng tái sử dụng và bảo trì cao. Từ khóa: Xử lý phân tán, mẫu thiết kế, hệ thống phân tán, giao tiếp phân tán, chia sẻ tài nguyên ĐẶT VẤN ĐỀ* Phát triển một hệ thống phân tán là khó khăn do tính phức tạp vốn có của việc giao tiếp phân tán. Xây dựng một hệ thống phân tán có khả năng mở rộng, linh động, dễ sửa đổi còn khó hơn. Erich Gamma cùng các đồng sự đã đề xuất 23 mẫu thiết kế, nhằm đáp ứng được nhiều yêu cầu đối với sản phẩm phần mềm: dễ bảo trì, dễ nâng cấp, chất lượng cao và tiết kiệm thời gianTrong đó, đáp ứng được tiêu chí quan trọng là khả năng sử dụng lại các đơn thể, thừa kế được các kinh nghiệm của các chuyên gia trong quá trình phát triển phần mềm [5]. Trong bài báo này chúng tôi nghiên cứu áp dụng mẫu thiết kế vào giải quyết một số vấn đề cơ bản khi thiết kế hệ thống phân tán. Bài báo có cấu trúc như sau: Sau phần đặt vấn đề là phần trình bày về hệ phân tán và các vấn đề của hệ phân tán. Tiếp theo, chúng tôi trình bày tổng quan về mẫu thiết kế. Trong phần kế tiếp, chúng tôi trình bày về cách áp dụng các mẫu thiết kế vào giải quyết một số vấn đề cụ thể của hệ thống phân tán. Cuối cùng là thảo luận và tài liệu tham khảo. CÁC VẤN ĐỀ CƠ BẢN CỦA HỆ PHÂN TÁN Một hệ thống phân tán là một hệ thống máy tính, trong đó một số thành phần hợp tác bằng cách giao tiếp qua mạng. Nói một cách tổng quát hơn thì hệ thống phân tán là một hệ * Tel: 0943 870272, Email: ntlan@ictu.edu.vn thống gồm các thành phần xử lý phân tán, giao tiếp với nhau qua một cơ sở hạ tầng truyền thông chung (www, internet, mạng điện thoại..) [6]. Các vấn đề của hệ phân tán: - Tính chia sẻ tài nguyên: Hệ thống phân tán phải chia sẻ được tài nguyên trong hệ thống. - Tính mở: Hệ thống có thể dễ dàng bổ sung thêm dịch vụ mới mà không ảnh hưởng tới các hoạt động đã có. - Tính tương tranh: Trong hệ phân tán ta cần xử lý được tính tương tranh, tính đồng bộ của hệ thống. - Khả năng thay đổi quy mô. - Khả năng chịu lỗi: Hệ thống phân tán có nguy cơ mất an toàn rất lớn. Vì vậy đòi hỏi hệ thống phải có khả năng chịu lỗi cao. - Tính co dãn: Thể hiện khả năng tương thích của hệ thống. - Tính trong suốt: Ẩn giấu sự rời rạc và những nhược điểm nếu có của hệ phân tán đối với người sử dụng (end-user) và những nhà lập trình ứng dụng. MẪU THIẾT KẾ Định nghĩa về mẫu thiết kế Mẫu thiết kế là cặp bài toán (vấn đề) và giải pháp cho một vấn đề thiết kế thông dụng. Nó không đơn thuần là một bước nào đó trong các giai đoạn phát triển phần mềm và cũng không phải là luật mà là các ý tưởng, sáng kiến kinh nghiệm đã được kiểm tra, đúc kết Ngô Thị Lan và Đtg Tạp chí KHOA HỌC & CÔNG NGHỆ 99(11): 73 - 78 74 qua thực tế. Nó là lời khuyên cho người thiết kế phần mềm áp dụng vào ngữ cảnh cụ thể. Mỗi mẫu mô tả một vấn đề xảy ra lặp đi lặp lại, và mô tả cốt lõi giải pháp của vấn đề đó, ta có thể sử dụng một mẫu hơn triệu lần mà không bao giờ thực hiện hai lần giống nhau [5]. Sự góp mặt của mẫu thiết kế sẽ giúp cho việc xác định bài toán cần giải quyết nhanh gọn hơn, từ đó đưa ra cách giải quyết hợp lý sao cho phần mềm được xây dựng có tính tái sử dụng cao, tránh bị thoái hóa thiết kế. Các yếu tố xác định mẫu thiết kế Một mẫu thiết kế được xác định qua các yếu tố sau: - Tên mẫu (pattern name): Mỗi mẫu đặc trưng bởi tên của nó. Dựa vào tên mẫu ta có thể hình dung một cách nhanh chóng và hiệu quả về mẫu. - Vấn đề (Problem): Mô tả tình huống áp dụng mẫu. - Giải pháp (Solution): Thể hiện các lớp và đối tượng tham gia giải quyết vấn đề và mối quan hệ, trách nhiệm của các thành phần tham gia vào mẫu. Mẫu cung cấp một mô tả trừu tượng của vấn đề được thiết kế và việc sắp xếp các phần tử cần thiết để giải quyết vấn đề đó. - Kết quả: Cho chúng ta thấy việc áp dụng các giải pháp để giải quyết các vấn đề đặt ra có hiệu quả hay không. Kết quả sẽ đặt ra cho chúng ta các lựa chọn, để từ đó có thể xem xét lựa chọn nào là phù hợp nhất, tốt nhất. Các bước để lựa chọn mẫu thiết kế Để lựa chọn mẫu thiết kế phù hợp với ngữ cảnh cụ thể của hệ thống ta thực hiện các bước sau: [9] - Xác định được cần thiết kế gì, các vấn đề phát sinh trong khi thiết kế, các vấn đề đó thuộc loại nào và tham khảo xem ứng với loại vấn đề đó có thể dùng mẫu nào để giải quyết. - Tham khảo lần lượt từng mẫu được chọn, xem mục đích sử dụng, đối chiếu với các vấn đề thiết kế gặp phải (Design Problems). Bước này giúp ta hiểu rõ hơn về các mẫu và tác dụng thực của mẫu lên vấn đề cần giải quyết. - Tìm hiểu sự tương tác giữa các mẫu thiết kế để xác định được các nhóm mẫu phù hợp với bài toán của mình. - Cố gắng tìm kiếm, khảo sát các nguyên nhân có thể dẫn tới việc thoái hóa thiết kế (redesigning) để cô lập hóa, nhằm tránh các thay đổi không cần thiết. - Xác định các thành phần (module, lớp đối tượng) có thể thay đổi trong tương lai. Từ đó quyết định xem phải làm gì để có thể thay đổi hệ thống mà không cần phải thiết kế lại. ÁP DỤNG MẪU THIẾT KẾ TRONG XỬ LÝ PHÂN TÁN Hệ thống phân tán thông thường được xây dựng trên mô hình client – server và truyền thông với nhau qua giao thức TCP/IP. Server sẽ chịu trách nhiệm trả lời các yêu cầu của client. Khi thiết kế phía server nên thiết kế sao cho độ ghép cặp thấp để dễ mở rộng trong tương lai nhưng phải kết dính chặt với các chức năng sẽ bổ sung. Đồng thời, các thành phần khác nhau phía server nên thiết kế sao cho dễ dàng chuyển giao. Client sẽ cung cấp các yêu cầu dữ liệu đến server, xử lý các phản hồi từ server. Để thực hiện giao tiếp giữa server và client trở nên trong suốt đối với người dùng và tối ưu thời gian xử lý của hệ thống khi client truy xuất các tài nguyên hay yêu cầu các dịch vụ từ server thì chúng ta sử dụng mẫu proxy. Proxy trì hoãn việc khởi tạo đối tượng cho đến khi cần thiết nó sẽ chuyển lời gọi hàm tới đối tượng mà nó đại diện để yêu cầu khởi tạo. Mặt khác khi dùng mẫu proxy ta có thể hạn chế được các nguy cơ mất an toàn đối với server do client truy cập đến. Do proxy có thể thực hiện các chính sách được thiết lập cho hệ thống trước khi thực hiện yêu cầu của Client. Nếu server phát hiện có tấn công phá hoại từ một client nào đó thông qua proxy, thì server chỉ cần xóa bỏ tiến trình của proxy hiện tại để chấm dứt cuộc tấn công [1,3]. - Client Object: yêu cầu một dịch vụ từ server và triệu gọi một phương thức của nó. - Server Object: Cung cấp dịch vụ cho Client Object. - Client-Side Proxy: Đại diện cho đối tượng của client. Nó chịu trách nhiệm truyền đối số cho đối tượng cục bộ từ xa (remote object location). Nó sử dụng đối tượng tham chiếu Reference Manager để chuyển đổi đối tượng tham chiếu gửi tới tên phân tán (distributed Ngô Thị Lan và Đtg Tạp chí KHOA HỌC & CÔNG NGHỆ 99(11): 73 - 78 75 names) và nhận distributed names từ đối tượng tham chiếu. Nó cũng sử dụng Reference Manager để lấy một một đối tượng Data Interface. Hình 1: Cấu trúc mẫu proxy trong xử lý phân tán - Server-Side Proxy: chịu trách nhiệm hỗ trợ phân tán cho đối tượng Server Object trên server. Nó là điểm truy cập cho yêu cầu từ xa tới server. - Reference Manager: Chịu trách nhiệm kết nối với đối tượng tham chiếu cục bộ và proxy, với distributed names. - Client-Side Communicator và Server- SideCommunicator: Chịu trách nhiệm cài đặt giao tiếp phân tán ở tầng vật lý. Để xử lý các trường hợp nhiều đối tượng liên quan đến nhau mà khi một đối tượng trong số đó thay đổi trạng thái thì các đối tượng còn lại cần biết được và cập nhập theo thì ta sử dụng mẫu Observer. Trong hệ phân tán, ta cần đồng bộ một số đối tượng ở server và client. Các đối tượng trong phần 1 (hình 2) được thiết kế bên server thì các đối tượng trong phần 2 (hình 2) sẽ được thiết kế bên client và ngược lại. Tần suất sử dụng mẫu Observer là cao. Tuy nhiên, trong hệ thống phân tán khi sử dụng mẫu Observer, ta cần chú ý một số vần đề nảy sinh sau: Hình 2: Mẫu Observer trong hệ thống phân tán - Đố tượng Subject và Observer có thể được đặt ở các nút mạng khác nhau. - Giao tiếp giữa 2 bên có tốc độ khác nhau, giao tiếp không đáng tin cậy và khả năng của các bên là giới hạn. Khi đó, để giải quết các vấn đề trên, ta cố gắng giảm số lượng cập nhập, giảm kích thước của các cập nhập, giảm số lượng các đối tượng Observer. Khi các cập nhập quá phức tạp ta có thể kết hợp mẫu Meditor. Sử dụng mẫu Meditor để quản lý các thay đổi cần thực hiện. Hình 3: Mẫu Observer khi chiến lược update phức tạp Mẫu Command đóng gói các yêu cầu vào trong các đối tượng riêng biệt. Trong hệ thống phân tán, ta sử dụng mẫu Command để quản lý các yêu cầu từ phía client gửi đến, quản lý đăng nhập, thực hiện hủy thao tác (undo) ClientObject ReenceInterface> +m() Client-SideProxy +convertArgument() ServerObject DataInterface> +invoke() ReferenceManager Client-SideCommunicator +marshaling() +unMarshaling() +sendMessage() Server-SideProxy +convertArguments() Server-SideCommunication +marshaling() +unMarshaling() +returnMessage() SimpleChangeManager +Register(Subjects, Observer) +unRegister(Subjects, Observer) +notyfy() DAGChangeManager +Register(Subjects, Observer) +unRegister(Subjects, Observer) +notyfy() Subjects +attach(Observer o) +detach(Observer o) +notyfy() ChangeManager -subjectObserverMapping +Register(Subjects, Observer) +unregister(Subjects, Observer) +notyfy() Obsever +update(Subjects) +subject +observer Ngô Thị Lan và Đtg Tạp chí KHOA HỌC & CÔNG NGHỆ 99(11): 73 - 78 76 hoặc lấy lại thao tác vừa hủy (redo) hoặc khi cần thực hiện chậm các yêu cầu (Command sẽ đưa các yêu cầu vào hàng đợi và thực thi sau). Nhờ mẫu này mà khi muốn mở rộng chương trình thêm các yêu cầu mới vào ta không phải sửa lại chương trình mà chỉ cần thay đổi ở lớp Command. Hình 4: Mẫu Command Đối tượng Client yêu cầu tạo Command trên nút nhận cục bộ (local Receiver node). Đối tượng Receiver phải cung cấp tập các yêu cầu cụ thể (ConcreteCommand), chỉ tạo yêu cầu khi cần truyền đi. Việc tạo và điều phối các yêu cầu được thực hiện tại client. Trong hệ phân tán, client gửi yêu cầu tới server, server gửi kết quả trả về cho client. Yêu cầu gửi server và kết quả trả về có thể hiển thị ở các định dạng khác nhau. Ta sử dụng mẫu Strategy để xác định các thuật toán hiển thị, thực hiện đóng gói đối với từng thuật toán, cho phép client lựa chọn thuật toán cụ thể trong số đó để sử dụng. Hình 5: Mẫu Strateggy Trong những hệ thống phân tán có kết nối tới cơ sở dữ liệu lớn, để hệ thống tối ưu về tốc độ thì thay vì làm việc với nhiều đối tượng cơ sở dữ liệu ta dùng mẫu Sinleton để tạo ra một thể hiện duy nhất của cơ sở dữ liệu. Ta có thể sử dụng mẫu MVC (Model – View – Controller) để tách các thành phần mô hình, trình diễn, điều khiển riêng biệt, giúp hệ thống dễ xây dựng và bảo trì hay mở rộng. Mẫu MVC có 3 thành phần: - Model nắm giữ dữ liệu. - View: (tầng giao diện) hiển thị các dữ liệu trong Model theo Controller. - Controller điều khiển việc tương tác giữa đối tượng giao diện với người sử dụng cũng như những đối tượng khác. Mẫu MVC thường sử dụng mẫu Observer khi nó làm mới lại để hiển thị các lớp dữ liệu thay đổi. Một biến thể cải tiến của MVC là mẫu Hierarchical Model View Controller (HMVC) [7]. Bên phía client, mô hình HMVC sẽ phân tầng client vào cấu trúc phân cấp cha – con (parent-child MVC) cho phép thiết kế hữu hiệu các tầng kiến trúc của client. Hình 6: Mẫu HMVC - View: Là nơi diễn ra tương tác. Trong tương tác, view liên kết với controller để đưa ra một sự kiện. Controller Model View Layer 1 Controller Model View Layer Controller Model View Layer Ngô Thị Lan và Đtg Tạp chí KHOA HỌC & CÔNG NGHỆ 99(11): 73 - 78 77 - Controller: Có một Parent-child hierarchy. Trong một tầng có một cotroller. Trong tầng trên nhất, đối tượng controller sẽ truyền sự kiện xuống hệ thống phân cấp. Khi sự kiện truyền đến bộ điều khiển cần xử lý nó có thể hoặc không truyền tiếp. - Model: Điều khiển thay đổi mô hình khi nó nhận được một sự kiện yêu cầu cập nhập dữ liệu. Nếu mô hình thay đổi, nó sẽ thay đổi trạng thái và thông báo cho view. Thành phần view lắng nghe sự kiện và thay đổi theo. Bên phía server, có đối tượng điều khiển mức trên riêng. Tất cả các yêu cầu được đưa lên bộ điều khiển cấp cao nhất này. Khi yêu cầu được nhận, dữ liệu được lấy từ chuỗi đầu vào. Để không vượt ra ngoài phạm vi nghiên cứu trong bài báo này, chúng tôi giả sử rằng các máy chủ biết được định dạng dữ liệu được chấp nhận bên phía client. Các dữ liệu cần phải được đưa tới đúng thành phần. Dữ liệu được chuyển thành các sự kiện và truyền xuống các controller dưới trong cây phân cấp của mẫu HMVC. Khi thông tin được chuyển đến đúng thành phần nhận, nó sẽ thực thi hành động của yêu cầu, trả kết quả về cho Controller gốc. Điều khiển của Controller gốc sẽ đưa kết quả ra theo đúng định dạng chấp nhận của client. THẢO LUẬN Chúng tôi đã nghiên cứu, tổng hợp, đưa ra các vấn đề cơ bản trong xử lý phân tán và cách áp dụng mẫu thiết kế vào để thiết kế hệ thống phân tán sao cho hệ thống dễ dàng thay đổi mở rộng. Nghiên cứu của chúng tôi là nền tảng cơ sở ban đầu để xây dụng ứng dụng thực tế. Hiện chúng tôi đã áp dụng để xây dựng hệ thống phân tán: Hệ thống quản lịch cá nhân của giảng viên trường CNTT & TT – Đại học Thái Nguyên. Do chương trình cần thời gian để chạy thử nên chúng tôi xin trình bày kết quả thử nghiệm của mình trong nghiên cứu tiếp theo. TÀI LIỆU THAM KHẢO [1]. Alan H. Karp, Kevin Smathers, Three Design Patterns for Secure Distributed Systems, HP Laboratories Palo Alto, HPL-2003-40, February 25th, 2003 [2]. Ant´onio Rito Silva1, Francisco Assis Rosa2, Teresa Gonc¸alves2 and Miguel Antunes1, Distributed Proxy:A Design Pattern for the Incremental Development of Distributed Applications, 2000 [ =10.1.1.32.7664] [3]. DONG T. B. Thuy and TRAN D. Thu, User Interface Design by Applying Object – Oriented Design Patterns, Addendum Contributions to the 4th IEEE International Conference on Computer Sciences Research, Innovation & Vision for the Future, February 12-16, Hochiminh City, Vietnam, 2006. [4]. Gamma, Erich; Richard Helm, Ralph Johnson, and John Vlissides (1995). Design Patterns: Elements of Reusable Object-Oriented Software, hardcover, 395 pages, Addison-Wesley. ISBN 0- 201-63361-2. [5]. George Coulouris, Jean Dillimore and Tim Kindberg, Distributed Systems: Concepts and Design, Edition 4, Addison Wesley 2005. [6]. HMVC: The layered pattern for developing strong client tiers [ 2000/jw-0721-hmvc.html] [7]. Karli Kirsimäe, Classical Design Patterns in Distributed Computing, Research Paper, University Tartu of mathematic and ìnormatics, 2008. [8]. Nguyễn Quý Minh, Tăng Nguyễn Trung Hiếu, Phạm Anh Vũ, Lê Hải Dương, Phương Lan, Design Patterns. Nhà xuất bản Phương Đông, 2005 [9]. Observer (Java 2 Platform SE v 1.4.2) [ bserver.html] [10]. Trương Đình Huy, Võ Trung Hùng, Ứng dụng mẫu thiết kế trong quá trình phát triển phần mềm, Tạp chí khoa học và công nghệ Đà Nẵng, số 3(38), 2010. Ngô Thị Lan và Đtg Tạp chí KHOA HỌC & CÔNG NGHỆ 99(11): 73 - 78 78 SUMMARY APPLICATION OF DESIGN PATTERNS TO DISTRIBUTED COMPUTING Ngo Thi Lan*, Pham Thi Thuong, Le Thu Trang College of Information and Communication Technology - TNU Nowadays most of information systems are built distributed. Development of a distributed system is difficult due to the inherent complexity of distributed communication. On the other hand modern software increasingly requires highly flexible expansion to be ready to meet the constantly changing requirements of the user. An indispensable requirement for the modern software is highly reusable. Design is considered to be an effective measure to improve the reuse of software. In this paper, we present the results of their research on the application of design patterns in the process of construction and development of distributed systems so that the system has the ability to re-use and high maintenance. Key words: design pattern, distributed computing Ngày nhận bài: 12/11/2012, ngày phản biện: 20/11/2012, ngày duyệt đăng:10/12/2012 * Tel: 0943 870272, Email: ntlan@ictu.edu.vn

Các file đính kèm theo tài liệu này:

  • pdfbrief_36951_40534_20320139192773_2543_2052156.pdf