J2EE được xem như bộ chuẩn công nghệ tốt nhất hiện nay cho việc phát triển các hệ thống phần mềm lớn. Tuy nhiên, nhiều dự án sử dụng công nghệ J2EE thường gặp các khó khăn như hệ thống hoạt động quá chậm và có caaud trúc quá phức tạp, trong khi thời gian phát triển thường khá dài, không đáp ứng kịp thời yêu cầu nghiệp vụ. Những khó khăn này nhiều khi xuất phát từ cách chúng ta áp dụng J2EE chưa hợp lý.

Bài viết này trình bày khái quát về việc lựa chọn kiến trúc ứng dụng phù hợp, giúp các nhà thiết kế hệ thống hạn chế một số  rủi ro về công nghệ khi áp dụng J2EE vào các dự án phần mềm lớn.

Các loại mô hình kiến trúc ứng dụng J2EE và đặc điểm   

Các ứng dụng J2EE thường được chia thành 3 tầng kiến trúc chính:

Tầng EIS (Enterprise Information System): Còn được gọi là tầng tích hợp. Tầng này bao gồm các tài nguyên mà ứng dụng J2EE sẽ truy cập đến để làm việc như cơ sở dữ liệu và các ứng dụng di sản (đã được xây dựng từ trước, nay cần được tích hợp).

Tầng giữa (Middle Tier): Tầng này chứa các đối tượng nghiệp vụ và điều phối các truy cập đến tầng EIS.

Tầng giao diện người sử dụng (UI Tier): Còn được gọi là tầng web. Tầng này trình bày các đối tượng nghiệp vụ cho người sử dụng.

Có thể phân loại kiến trúc ứng dụng J2EE thành 2 loại lớn: kiến trúc ứng dụng không phân tán (ứng dụng chỉ chạy trên 1 JVM) và kiến trúc ứng dụng phân tán (ứng dụng có thể chạy trên nhiều JVM). Dưới đây là các mô hình kiến trúc ứng dụng J2EE được phân theo từng loại:

hoc-lap-trinh-java-nang-cao

Kiến trúc ứng dụng J2EE không phân tán

1.Ứng dụng web với các giao diện thành phần nghiệp vụ (Business Component Interface)

Trong hầu hết các trường hợp, công nghệ J2EE được sử dụng để xây dựng các ứng dụng web. Tầng web và tầng giữa của ứng dụng web chạy trên cùng JVM, chúng chỉ được phân biệt với nhau một cách logic. Lớp giao diện nghiệp vụ (business interface) sẽ bao gồm các giao diện Java được triển khai bằng các lớp Java thông thường.

Ưu điểm

Đơn giản: Đây là kiến trúc đơn giản nhất cho các ứng dụng web.

Hiệu năng vận hành tốt: Kiến trúc này tiêu tốn ít nhất chi phí vận hành của máy chủ ứng dụng.

Dễ kiểm thử: Với thiết kế thích hợp, các kiểm thử có thể chạy trên giao diện nghiệp vụ mà không cần tầng web.

Có thể sử dụng thêm các dịch vụ hỗ trợ giao dịch của máy chủ ứng dụng.

Nhược điểm

Chỉ hỗ trợ giao diện web.

Toàn bộ ứng dụng chạy trên 1 JVM, không thể đặt các thành phần ứng dụng trên nhiều máy chủ vật lý khác nhau.

Không sử dụng hỗ trợ giao dịch của EJB Container, chúng ta tự quản lý giao dịch bằng cách viết mã ứng dụng.

Không hỗ trợ xử lý đa luồng (multi-thread).

  1. Ứng dụng web truy cập đến các EJB cục bộ

Trong kiến trúc này, tầng web giống hệt như tầng web ở mô hình ứng dụng web với giao diện nghiệp vụ. Các giao diện nghiệp vụ cũng giống hệt, sự khác nhau chỉ bắt đầu từ phần triển khai của các giao diện này xuống phía dưới. Tầng giữa được chia làm 2 phần, sử dụng 2 Container (Web và EJB) chạy trên cùng 1 JVM. Việc sử dụng EJB ở đây không mang đặc tính cơ bản của kiến trúc, chỉ đơn giản là một lựa chọn triển khai. Bất kỳ giao diện nghiệp vụ nào có thể được triển khai không sử dụng EJB mà không thay đổi thiết kế tổng thể.

Ưu điểm

Ít phức tạp so với ứng dụng EJB phân tán.

Việc sử dụng EJB ở đây không thay đổi thiết kế cơ bản của ứng dụng. Trong kiến trúc này, ta chỉ tạo ra các đối tượng EJB khi cần sử dụng các dịch vụ của EJB Container.

Việc sử dụng EJB ở đây ít ảnh hưởng đến chi phí hiệu năng vận hành vì không có các lời gọi từ xa.

Hưởng lợi từ khả năng quản lý đa luồng và giao dịch của EJB Container

Có thể sử dụng các entity bean nếu muốn.

Nhược điểm

Phức tạp hơn so với ứng dụng web bình thường.

Không hỗ trợ các loại client khác ngoài giao diện web trừ khi ta sử dụng thêm một tầng dịch vụ web.

Toàn bộ ứng dụng vẫn chạy trên 1 JVM, có nghĩa là các thành phần ứng dụng buộc phải chạy trên cùng 1 máy chủ vật lý.

EJB khó để kiểm thử, chúng ta cần phải chạy các trường hợp kiểm thử trên máy chủ J2EE có EJB Container.

Các lời gọi EJB (dù chỉ là lời gọi cục bộ) luôn chậm hơn so với các lời gọi phương thức thông thường.

Kiến trúc ứng dụng J2EE phân tán

  1. Ứng dụng phân tán với các EJB từ xa

Đây được xem như mô hình “kinh điển” nhất của ứng dụng J2EE. Nó cho phép khả năng chia tầng giữa theo cả logic lẫn vật lý bằng cách sử dụng nhiều JVM cho cả các EJB và các thành phần sử dụng EJB đó (ví dụ như các thành phần web).

Ưu điểm

Hỗ trợ nhiều loại J2EE client bằng cách chia sẻ tầng giữa.

Cho phép phân chia các thành phần ứng dụng trên nhiều máy chủ vật lý khác nhau. Điều này dẫn đến khả năng mở rộng hệ thống theo chiều ngang tối ưu khi cần thiết.

Nhược điểm

Đây là kiến trúc rất phức tạp.

Hiệu năng thấp vì các lời gọi từ xa chậm hơn hàng trăm lần so với các lời gọi cục bộ thông thường.

Các ứng dụng phân tán khó để kiểm thử và tìm lỗi.

Các thành phần nghiệp vụ phải chạy trên EJB Container.

Việc điều khiển, xử lý lỗi là rất phức tạp trong các hệ thống phân tán.

4.Ứng dụng web trao đổi qua giao diện dịch vụ web (web service)

Sự xuất hiện của các chuẩn dịch vụ web như  SOAP cho phép các ứng dụng J2EE không còn bắt buộc phải sử dụng RMI và EJB để hỗ trợ các client từ xa. Mô hình ứng dụng web trao đổi qua giao diện dịch vụ web có thể hỗ trợ các client không phải J2EE client.

Bản chất của kiến trúc này là các giao diện từ xa được thêm vào một ứng dụng có sẵn, các giao diện từ xa này không được xây dựng sẵn trong cấu trúc của ứng dụng như kiến trúc EJB phân tán.

Ưu điểm

SOAP là chuẩn mở hơn so với RMI/IIOP. Kiến trúc này có thể hỗ trợ nhiều loại client khác so với các J2EE client, ví dụ như các ứng dụng VB.

Trao đổi qua giao diện dịch vụ web có nhiều lợi ích hơn so với truy xuất qua giao diện RMI/IIOP.

Các giao thức trao đổi dịch vụ web chạy trên HTTP

Khả năng truy cập từ xa chỉ là một tính năng thêm vào ứng dụng khi cần thiết, không ảnh hưởng đến kiến trúc tổng thể.

Nhược điểm

Hiệu năng: Chi phí chuyển các đối tượng qua giao thức SOAP (dựa trên XML) cao hơn so với RMI.

Nếu tất cả các client đều sử dụng công nghệ J2EE, kiến trúc này không phù hợp bằng kiến trúc EJB phân tán.

Dù rằng SOAP đã được phổ biến rộng rãi nhưng không có sự chuẩn hóa chính thức của các dịch vụ web trên Java như đặc tả EJB.

Trên đây là chia sẻ về những điểm mạnh, điểm yếu của các loại kiến trúc ứng dụng J2EE để các bạn có thể lựa chọn tốt công nghệ trong mỗi dự án của mình, không nên đưa vào sử dụng các công nghệ quá phức tạp mà không cần thiết.

Đánh giá của bạn
Lựa chọn kiến trúc phù hợp cho ứng dụng J2EE

Trả lời

Thư điện tử của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *