Kiến trúc phần mềm hai tầng truyền thống chỉ thích hợp với những ứng dụng vừa và nhỏ trong một phạm vi địa lý hẹp.. Luận văn "Phát triển các hệ thống phân tán dựa trên kiến trúc phần mề
Trang 2Mở đầu
Chương 1 Giới thiệu về kiến trúc phần mềm ba tầng
1.1 Lịch sử phát triển của kiến trúc phần mềm ba tầng
1.3.2 Middleware hướng cơ sở dữ liệu
1.3.3 Middleware hướng thông điệp
1.3.4 Middleware hướng đối tượng
1.3.5 Middleware dựa trên các thành phần n
Chương 2 Kiến trúc phần mềm đa tầng của J2ee
2.1 Các công nghệ nền tảng của J2EE
Trang 32.3.2 Java Server Page (JSP)
2.4 Tầng EJB
2.4.1 Bean phiên
2.4.2 Bean thực thể
2.4.3 Bean hướng thông điệp
2.4.4 Giao diện truy cập enterprise bean
3.4 Các môđun của website ứng dụng
3.4.1 Môđun Xem hàng (Catalog)
3.4.2 Môđun Mua hàng (ShoppingCart)
3.4.3 Môđun Đăng nhập (Signon) và Đăng k{ khách hàng
3.4.4 Môđun khách hàng
3.4.5 Môđun Điều khiển(Control)
3.4.6 Môđun truyền thông điệp không đồng bộ
66 Kết luận
Tài liệu tham khảo
Trang 4Trong nhiều năm qua, kiến trúc phần mềm hai tầng khách/chủ được
sử dụng rất phổ biến Kiến trúc này phân chia một ứng dụng phần mềm làm hai tầng: tầng khách và tầng chủ Tầng khách thường được cài đặt trên các máy tính để bàn, với chức năng là tương tác với người sử dụng và xử lý hầu hết các yêu cầu nghiệp vụ Còn tầng chủ thường là một hệ quản trị dữ liệu quan hệ, lưu trữ dữ liệu của ứng dụng Kiến trúc phần mềm hai tầng truyền thống chỉ thích hợp với những ứng dụng vừa và nhỏ trong một phạm vi địa lý hẹp Để khắc phục những nhược điểm của kiến trúc hai tầng, kiến trúc phần mềm ba tầng ra đời Việc xử lý các yêu cầu nghiệp vụ được tách khỏi tầng khách và tạo thành một tầng mới, gọi là tầng lôgíc nghiệp
vụ Tuy ra đời từ những năm 1990, nhưng mãi đến vài năm gần đây kiến trúc phần mềm này mới được giới phát triển phần mềm chú ý nhiều, được đánh giá là một trong những xu hướng chính trong phát triển phần mềm của thế kỷ XXI
Luận văn "Phát triển các hệ thống phân tán dựa trên kiến trúc
phần mềm ba tầng" với mục đích nghiên cứu về kiến trúc phần
mềm ba tầng, hy vọng sẽ có cái nhìn sâu sắc hơn về kiến trúc phần mềm này cũng như góp một phần nhỏ trong quá trình nghiên cứu phát triển kiến trúc phần mềm ba tầng ở Việt Nam
Luận văn được chia thành 3 chương:
Chương 1: Giới thiệu lịch sử phát triển của các hệ tính toán phân tán, kiến trúc phần mềm ba tầng nói chung Ngoài ra, trong
Trang 5chương còn đánh giá phân tích giữa mô hình kiến trúc phần mềm
ba tầng với mô hình kiến trúc phần mềm hai tầng truyền thống Chương 2: Luận văn nghiên cứu một kiến trúc phần mềm ba tầng
cụ thể, kiến trúc J2EE Trong chương, luận văn sẽ nghiên cứu về các công nghệ trong kiến trúc đa tầng J2EE cũng như chi tiết từng tầng trong kiến trúc này
Chương 3: Mục đích của chương này là phân tích thiết kế kiến trúc
của ứng dụng thương mại điện tử điển hình “Bán hàng qua mạng”
nhằm minh họa cho kiến trúc đa tầng đã được đề cập trong các chương trước Với mục đích đó, thiết kế tập trung vào kiến trúc mức cao của ứng dụng như cách chia ứng dụng thành các tầng, các chức năng được thể hiện trong các tầng ứng dụng tương ứng, thiết
kế các lớp (class) tương ứng với những chức năng trong các tầng ứng dụng đó
Trang 6GIỚI THIỆU VỀ KIẾN TRÚC PHẦN MỀM BA
TẦNG
Chương này sẽ giới thiệu các kiến trúc phần mềm: mainframe, khách/chủ, hai tầng, ba tầng và sự phân tích, so sánh giữa kiến trúc phần mềm ba tầng và kiến trúc phần mềm hai tầng truyền thống Đồng thời các phương thức giao tiếp giữa các tầng trong kiến trúc phần mềm ba tầng cũng được đề cập đến
1.1 Lịch sử phát triển của kiến trúc phần mềm ba tầng
Trước khi có kiến trúc phần mềm ba tầng các ứng dụng phần mềm đã qua các kiến trúc mainframe, kiến trúc chia sẻ tệp, kiến trúc phần mềm hai tầng Kiến trúc phần mềm ba tầng được phát triển từ kiến trúc phần mềm hai tầng bằng cách tách phần xử lý nghiệp vụ ra một tầng mới, tầng nghiệp vụ
1.2 So sánh kiến trúc ba tầng với kiến trúc hai tầng truyền thống
Kiến trúc phần mềm ba tầng có những điểm khác biệt như sau so với kiến trúc phần mềm hai tầng:
Quy mô hệ thống: Các kiến trúc hai tầng chỉ thích hợp với những ứng
dụng vừa và nhỏ khi mà số lượng người dùng không vượt qúa con số
100, và thường được sử dụng trong một mạng cục bộ Ngược lại, kiến trúc ba tầng có thể đáp ứng một lượng người dùng lớn hơn, và hỗ trợ nhiều kiểu kết nối hơn, phạm vi hoạt đông rộng hơn
Trang 7Quản trị hệ thống: Việc quản trị hệ thống trong các ứng dụng hai
tầng phải thực hiện phân tán trên cả máy khách và máy chủ, vì lôgíc nghiệp vụ nằm trên máy khách là chủ yếu Với kiến trúc ba tầng, lôgíc nghiệp vụ tập trung ở tầng nghiệp vụ được cài đặt trên một máy hoặc vài máy chủ, làm cho việc quản trị được tập trung hơn nên cũng dễ dàng hơn
Tính bảo mật: Tính bảo mật trong ứng dụng hai tầng kém hơn do bảo
mật được thực hiện ở mức dữ liệu Còn việc bảo mật trên hệ thống ba tầng được thực hiện ở mức dịch vụ, phương thức và đối tượng
Tính bao gói dữ liệu: Tính bao gói dữ liệu của ứng dụng hai tầng rất
thấp, toàn bộ dữ liệu của các bảng được phô ra Ngược lại, ứng dụng
ba tầng cho phép bao gói dữ liệu tốt hơn nhiều Chương trình ở máy khách chỉ giao tiếp với các dịch vụ, hoặc các đối tượng ở tầng nghiệp
vụ, không cần biết rõ cấu trúc dữ liệu thực như thế nào
Mạng truyền thông: ứng dụng hai tầng đòi hỏi chất lượng mạng tốt,
băng thông rộng vì dữ liệu phải được tải về máy khách trước khi xử
lý Trong khi đó, ứng dụng ba tầng cho phép việc sử dụng hạ tầng mạng đa dạng hơn, có thể là mạng cục bộ LAN, mạng diện rộng, mạng Internet và thậm chí cả mạng không dây Bởi vì truyền thông trong ứng dụng ba tầng chỉ đơn thuần là các lời gọi dịch vụ trên máy chủ, sau khi máy chủ xử lý xong, kết quả (thường là nhỏ) mới trả về cho máy khách
Khả năng mở rộng hệ thống: Đối với ứng dụng hai tầng, khả năng
mở rộng hệ thống kém vì bị giới hạn bởi việc quản lý các liên kết với
Trang 8máy khách Ngược lại, trong hệ thống ba tầng có thể dễ dàng mở rộng hệ thống để đáp ứng một lượng lớn các máy khách nhờ khả năng chia tải bằng cách tăng số lượng máy chủ ở tầng nghiệp vụ
Cơ sở dữ liệu hỗn tạp: Các ứng dụng hai tầng rất khó khăn trong việc
hỗ trợ nhiều kiểu cơ sở dữ liệu khác nhau Trong khi đó hệ thống ba tầng cho phép thao tác với nhiều cơ sở dữ liệu khác nhau trong cùng một giao dịch Thậm chí tầng nghiệp vụ còn có khả năng làm việc với nhiều nguồn dữ liệu khác nhau như hệ thống các tệp dữ liệu cũng như việc truy cập các hệ thống máy chủ mainframe
Các hình thức truyền thông: Các ứng dụng hai tầng sử dụng phương
thức truyền thông đồng bộ, chủ yếu là gọi thủ tục từ xa RPC Đối với các ứng dụng ba tầng thì các hình thức truyền thông rất phong phú như: Gọi thủ tục từ xa RPC, gọi phương thức từ xa RMI, cơ chế truyền thông điệp,…
Chi phí phát triển: Các ứng dụng hai tầng được phát triển rất nhanh
vì có thể sử dụng rất nhiều ngôn ngữ lập trình trực quan Còn việc phát triển ứng dụng ba tầng đòi hỏi nhiều công sức hơn vì tầng nhiệp
vụ thường được xây dựng bằng những ngôn ngữ lập trình không trực quan như ngôn ngữ lập trình C
1.3 Phần mềm kết nối giữa các tầng - Middleware
Middleware là phần mềm kết nối, bao gồm một tập hợp các dịch vụ cho phép nhiều tiến trình chạy trên một hoặc nhiều máy tính có thể tương tác với nhau thông qua mạng máy tính Middleware là công nghệ quan trọng trong việc phát triển ứng dụng theo kiến trúc ba tầng
Trang 9Sau đây là một số loại middleware thường được dùng trong các ứng dụng ba tầng:
- Middleware hướng thủ tục (Procedure-Oriented Middleware): cho phép một trình khách chuyển các tham số của một lời gọi thủ tục thành một thông điệp và được gửi tới máy chủ, tại máy chủ thông điệp lại được chuyển thành các tham số
- Middleware hướng cơ sở dữ liệu cung cấp khả năng tương tác với các cơ sở dữ liệu, các kho dữ liệu và các tệp dữ liệu Trong các ứng dụng ba tầng, middleware hướng cơ sở dữ liệu thường được dùng để kết nối tầng nghiệp vụ với tầng dữ liệu
- Middleware hướng thông điệp MOM (Message-Oriented Middleware): là phần mềm lưu trú trong cả hai phần khách và chủ trong kiến trúc khách/chủ và sử dụng cơ chế truyền thông điệp
- Middleware hướng đối tượng (Object-Oriented Middleware): hỗ trợ việc yêu cầu các đối tượng phân tán Truyền thông giữa các đối tượng có thể là đồng bộ, hoặc không đồng bộ
- Middleware dựa trên các thành phần (component-based): Mỗi thành phần là một chương trình thực hiện một chức năng nhất định và được thiết kế để dễ dàng thực hiện với các thành phần khác và với các ứng dụng Middleware dựa trên các thành phần (Component-Base Middleware) là một cấu hình các thành phần Các thành phần này được lựa chọn cả lúc dịch cũng như lúc chạy
Trang 10KIẾN TRÚC PHẦN MỀM ĐA TẦNG CỦA J2EE
Ngày nay, nhiều nhà phát triển phần mềm muốn phát triển các ứng dụng phân tán, đảm bảo về mặt tốc độ, có tính bảo mật và độ tin cậy cao dựa trên công nghệ phía máy chủ (server-side) Cùng với sự phát triển nhanh của thương mại điện tử, công nghệ thông tin, với cùng một lượng tài nguyên như trước đây, các ứng dụng cho doanh nghiệp được thiết kế và xây dựng với chi phí thấp hơn, tốc độ nhanh hơn Để đáp ứng yêu cầu đó của các nhà phát triển phần mềm, hãng phần mềm Sun Microsystem đã đưa ra đặc tả J2EE (Java 2 Plaform, Enterprise Edition) J2EE cung cấp một cách tiếp cận dựa trên các thành phần (component-based) để thiết kế, xây dựng và triển khai một ứng dụng cho doanh nghiệp J2EE cung cấp một mô hình ứng dụng phân tán đa tầng, khả năng sử dụng lại các thành phần, một mô hình bảo mật thống nhất, kiểm soát các giao dịch một cách mềm giẻo, và hỗ trợ các dịch vụ Web
Trong kiến trúc phần mềm đa tầng của J2EE, một ứng dụng lôgíc được chia thành các thành phần tùy theo chức năng, và các thành phần ứng dụng khác nhau Điều này làm cho ứng dụng J2EE được cài đặt trên nhiều máy tính khác nhau tùy thuộc vào các thành phần trong mỗi tầng của môi trường đa tầng Các thành phần trong các ứng dụng đa tầng J2EE bao gồm:
- Các thành phần trên tầng khách (client-tier), chạy trên máy tính khách
- Các thành phần trên tầng Web (Web-tier) chạy trên máy chủ J2EE
Trang 11- Các thành phần trên tầng nghiệp vụ chạy trên máy chủ J2EE Phần mềm của tầng hệ thống thông tin doanh nghiệp (Enterprise Information System tier, EIS-tier) chạy trên các máy chủ EIS
2.1 Các công nghệ nền tảng của J2EE
Các công nghệ nền tảng của J2EE hỗ trợ rất tốt việc phát triển các ứng dụng đa tầng Những công nghệ này được chia làm ba loại: các thành phần (component), dịch vụ (service) và truyền thông
2.2 Tầng khách - Client Tier
Các máy khách J2EE có thể chạy trên nhiều nền tảng phần cứng khác nhau như máy tính xách tay, máy tính để bàn, máy tính cầm tay (palm) và điện thoại di động Chúng có thể được kết nối ngay trong mạng cục bộ hoặc qua Internet Trong quá trình thiết kế một kiểu giao diện nào đó mà ta đã chọn, người thiết kế cần chú ý đến các vấn đề về mạng, bảo mật, nền tảng phần cứng
Xét về khía cạnh mạng truyền thông: Các kết nối từ các trình khách
J2EE tới các tầng ứng dụng trên máy chủ J2EE rất đa dạng Sự đa dạng thể hiện ở kiểu kết nối (qua mạng LAN, quay số hoặc mạng không dây) và thời gian kết nối Kiểu kết nối và thời gian kết nối với máy chủ J2EE ảnh hưởng lớn tới thiết kế các trình khách J2EE, nên khi thiết kế chúng ta cần chú ý đến thực tế của mạng truyền thông
Xét về khía cạnh bảo mật: Các kiểu mạng truyền thông khác nhau có
các yêu cầu về bảo mật thông tin khác nhau, nó là sự ràng buộc khi máy khách kết nối với ứng dụng máy chủ
Trang 12Xét về khía cạnh nền tảng (platform) của máy khách: Nền tảng
của các máy khách có ảnh hưởng lớn đến thiết kế ứng dụng
Nền tảng J2EE khuyến khích việc dùng kiến trúc thin-client (một phần rất nhỏ của ứng dụng nằm trên máy khách), nhưng điều đó không có nghĩa là trình khách J2EE là một trương trình “câm” Một trình khách J2EE có những nhiệm vụ sau:
- Hiển thị giao diện người sử dụng
- Kiểm tra việc nhập liệu
- Giao tiếp với máy chủ
- Quản lý các trạng thái giao tiếp
Trong kiến trúc J2EE có thể tồn tại hai loại trình khách: trình khách dạng trình duyệt và trình khách dạng chương trình Java
2.2.1 Thiết kế các trình khách sử dụng trình duyệt
Các trình duyệt là các trình khách nhỏ gọn nhất Chúng hiển thị dữ liệu và dựa trên các chức năng được đặt trên máy chủ Xét trên khía cạnh triển khai, thì các trình khách sử dụng trình duyệt (browser clients) là rất hấp dẫn Thứ nhất, chúng giảm thiểu sự cập nhật Mỗi khi có yêu cầu thay đổi về nghiệp vụ, ta chỉ cần thay đổi chương trình trên máy chủ mà không phải thay đổi chương trình trên các máy khách Việc này đặc biệt có ý nghĩa khi số lượng máy khách lớn và phân tán trên nhiều vị trí địa lý khác nhau Thứ hai là các trình duyệt
có mặt ở khắp nơi, hầu như tất cả các máy tính cá nhân đều có trình duyệt Web và nhiều thiết bị di động hỗ trợ các trình duyệt dạng nhỏ
Trang 13Tuy nhiên khi thiết kế các trình khách sử dụng trình duyệt cần phải chú ý các vấn đề sau:
Hiển thị giao diện người sử dụng: Các trình khách sử dụng trình
duyệt tải các tài liệu từ máy chủ Nội dung các tài liệu này thường được sinh ra một cách động thông qua JSP (Java Sever Page) hoặc Java Servlet Nội dung các trang tài liệu phụ thuộc hoàn toàn vào máy chủ nên mỗi khi cần thay đổi giao diện, trình khách lại phải tạo kết nối với máy chủ, việc này có thể gây ra những tiềm ẩn về mạng
Kiểm tra việc nhập liệu: Trong môi trường đa lớp, việc bắt các lỗi
nhập liệu càng sớm càng tốt, làm được điều này người sử dụng không phải truyền dữ liệu lên máy chủ nhiều lần, vừa tiết kiệm đường truyền, vừa giảm thiểu sự khó chịu từ phía người dùng
Truyền thông với máy chủ: Các trình khách sử dụng trình duyệt kết
nối với ứng dụng máy chủ J2EE thông qua Web, nên chúng sử dụng giao thức HTTP để truyền nhận dữ liệu
Quản lý trạng thái giao tiếp: Giao thức HTTP là một giao thức dạng
hỏi-đáp (request-response), nên mỗi yêu cầu đều đóng vai trò độc lập
Vì vậy, một ứng dụng dạng Web cần xác định được một trình khách nhất định cũng như các trạng thái mà ứng dụng đã trao đổi với trình khách đó
2.2.2 Thiết kế trình khách Java
Các trình khách Java được chia làm ba loại sau: Trình khách ứng dụng, applet, và MIDlets Khi thiết kế các trình khách Java cần xét các vấn đề sau:
Trang 14Hiển thị giao diện người sử dụng: Xây dựng giao diện cho trình
khách Java thường vất vả hơn việc xây dựng giao diện cho trình khách
sử dụng trình duyệt Tuy nhiên, nó lại có khả năng cung cấp giao diện thân thiện hơn và tiết kiệm đường truyền hơn trình khách sử dụng trình duyệt
Kiểm tra việc nhập liệu: Đối với các trình khách sử dụng trình duyệt,
người phát triển phải cân nhắc giữa việc tiết kiệm đường truyền và kiểm tra nhập liệu được tốt Ngược lại, các trình khách Java có thể thực hiện tốt cả hai tiêu chí đó vì nó không phải tải phần kiểm tra tính lôgic của dữ liệu từ máy chủ
Giao tiếp với máy chủ: Các trình khách Java có thể kết nối với máy
chủ thông qua: HTTP, RMI-IIOP, hoặc JDBC
2.3 Tầng Web
Tầng Web có nhiệm vụ tiếp nhận các yêu cầu từ các trình khách sử dụng trình duyệt, tương tác với tầng xử lý nghiệp vụ, rồi trả nội dung các trang web về cho trình khách dưới dạng HTML hoặc XML Trong ứng dụng J2EE, tầng Web có những nhiệm vụ sau:
- Quản lý sự tương tác giữa các trình khách Web với tầng ứng dụng nghiệp vụ
- Sinh các trang Web mang tính động (có nội dụng thay đổi theo yêu cầu) theo nhiều định dạng khác nhau như: HTML, ảnh, âm thanh, và video
- Dịch các hành động PUT và GET của giao thức HTTP thành các lệnh mà tầng nghiệp vụ có thể hiểu được