Kiểu Cổng đa năng như USB dùng cho Enterprise Service Bus: Phần 2: Khái niệm, quy trình và triển khai

Tìm hiểu về khái niệm và thực hiện Các Cổng đa năng với một ESB

Trong phần 1 của loạt bài này, bạn đã tìm hiểu về các chức năng cơ bản của các ESB (Enterprise Service Bus – Bus dịch vụ doanh nghiệp) hiện nay. Bạn cũng đã biết về một số khó khăn trong việc sử dụng các ESB hiện nay. Trong phần 2 này, bạn sẽ tìm hiểu khái niệm mới về các kiểu Cổng đa năng cho ESB và cách triển khai các Cổng đa năng. Các Cổng đa năng cung cấp giải pháp cho nhiều vấn đề mà những người dùng ESB hiện nay đang trải nghiệm. Một Cổng đa năng hoạt động tương tự như cổng USB của máy tính, nó giúp kết nối các loại thiết bị khác nhau để nối tới máy tính. Theo cách tương tự, có thể sử dụng một Cổng đa năng để kết nối bất kỳ ứng dụng nào với ESB và, một cách gián tiếp, với các ứng dụng khác. Các ứng dụng này có thể sử dụng các dạng dịch vụ khác nhau để trưng ra một số hoặc tất cả chức năng của chúng mà vẫn sử dụng một kiểu cổng duy nhất. Trong phần 3 sắp tới của loạt bài này bạn sẽ tìm hiểu về nhiều lợi ích của các Cổng đa năng.

Dr. Waseem Roshen, Kiến trúc sư CNTT, IBM  

Ảnh của Tiến Sĩ Waseem RoshenTiến sĩ Waseem Roshen có bằng tiến sĩ của Đại học Bang Ohio, Columbus, Ohio (Mỹ) và đã có hơn 18 năm kinh nghiệm thực tế trong lĩnh vực Công nghệ thông tin (CNTT). Hiện nay Tiến sĩ Roshen là một kiến trúc sư CNTT trong Trung tâm Công nghệ xuất sắc và Kiến trúc doanh nghiệp tại Tập đoàn IBM. Ông có nhiều kinh nghiệm với điện toán phân tán, bao gồm Kiến trúc hướng dịch vụ (SOA). Ngoài ra, ông có chuyên môn về phát triển tùy chỉnh, kiến trúc tích hợp và J2EE (bây giờ được gọi là JEE). Mối quan tâm hiện nay của ông là các dịch vụ web và SOA, Các máy tính lượng tử và điện toán đám mây. Tiến sĩ Roshen có hơn 62 ấn phẩm và 37 bằng sáng chế và là một thành viên của IEEE và Hiệp hội máy tính IEEE. Ông là tác giả duy nhất của cuốn sách: Tích hợp doanh nghiệp dựa trên SOA: Một hướng dẫn từng bước để tích hợp ứng dụng dựa trên các dịch vụ.



27 12 2012

Giới thiệu

Enterprise Service Bus (ESB) là một phần quan trọng của cơ sở hạ tầng Kiến trúc hướng dịch vụ (SOA). Một ESB cung cấp phương tiện hiệu quả để nối các ứng dụng với nhau. Các ứng dụng này có thể sử dụng dạng dịch vụ khác nhau để trưng ra một số hoặc tất cả các chức năng của chúng. Điều này được thể hiện dưới dạng lược đồ trong Hình 1 với ESB hiện nay. Điều quan trọng nhất cần lưu ý từ hình này là mỗi ứng dụng nối với ESB đang sử dụng một kiểu cổng cụ thể. Nói cách khác, mỗi kiểu cổng phục vụ cho các ứng dụng của một kiểu cụ thể đang sử dụng giao thức truyền thông và kiểu định dạng thông báo/dữ liệu cụ thể để trưng ra các chức năng của chúng.

Kết nối các ứng dụng thông qua ESB khi sử dụng các kiểu cổng cụ thể
Kết nối các ứng dụng thông qua ESB khi sử dụng các kiểu cổng cụ thể

Ở phần 1, bạn đã tìm hiểu về các chức năng cơ bản được ESB hiện nay cung cấp, trong đó bao gồm nội dung và bối cảnh dựa trên định tuyến, chuyển đổi giao thức và chuyển đổi định dạng dữ liệu/thông báo. Trong bài đầu tiên, bạn cũng đã tìm hiểu một số vấn đề phổ biến về sử dụng ESB hiện nay. Những vấn đề này và những bất tiện bao gồm việc sử dụng nhiều giao thức truyền thông của một ứng dụng, chuyển đổi giao thức truyền thông của một ứng dụng, mở rộng việc sử dụng ESB với giao thức truyền thông mới, khả năng mở rộng quy mô cho số lượng lớn các ứng dụng và bảo trì và cập nhật chung một ESB.

Ở phần 2 này, bạn sẽ được giới thiệu về một kiểu ESB mới, sử dụng kiểu Cổng đa năng. Trong phần tiếp theo, bạn tìm hiểu về khái niệm cơ bản của các Cổng đa năng. Quy trình chung về thực hiện USB sẽ được mô tả trong phần 3 của bài này. Trong phần 4, bạn sẽ tìm hiểu hai phương pháp để phát hiện giao thức truyền thông được một ứng dụng kết nối sử dụng. Phần cuối cùng của bài này sẽ bao gồm một số nhận xét kết luận.

Khái niệm về Cổng đa năng

Để khắc phục những khiếm khuyết của ESB hiện nay như đã được nêu trong phần 1, thì bài này sẽ đề xuất ra một kiểu ESB mới. Kiểu ESB mới này sẽ sử dụng một kiểu cổng đa năng duy nhất có thể phục vụ cho hầu hết hoặc tất cả các kiểu ứng dụng như hiển thị trong Hình 2. Điều này sẽ loại bỏ sự cần thiết phải phát triển và triển khai kiểu cổng mới cho mỗi kiểu ứng dụng mới và sẽ dẫn đến việc sử dụng lại mã hơn nhiều.

Kết nối các ứng dụng với ESB khi sử dụng một kiểu cổng duy nhất (Cổng đa năng)
Kết nối các ứng dụng với ESB khi sử dụng một kiểu cổng duy nhất (Cổng đa năng)

Để hiểu khái niệm về kiểu Cổng đa năng, một sự tương đồng với phần cứng máy tính chẳng hạn như một Máy tính cá nhân (PC) sẽ có ích. Trước sự ra đời của các cổng USB, để kết nối các thiết bị khác nhau chẳng hạn như một máy in, một bộ nhớ flash hoặc một ổ đĩa cứng có thể tháo lắp được với máy tính, máy tính đó đã cần có sự tồn tại của các kiểu cổng khác nhau. Mỗi kiểu cổng phục vụ cho một kiểu thiết bị cụ thể. Vì vậy, để kết nối máy in tới máy tính, sẽ phải xây dựng một kiểu cổng cụ thể trong máy tính đó. Tương tự như vậy, một kiểu cổng khác đã phải có mặt trong máy tính để nối một ổ đĩa cứng bổ sung. Tuy nhiên, gần đây với sự phát minh ra các cổng USB, nhu cầu đối với các kiểu cổng riêng biệt cho mỗi kiểu thiết bị đã được loại bỏ và bây giờ hầu như bất kỳ thiết bị nào đều có thể được nối với máy tính bằng cách sử dụng một kiểu cổng duy nhất được gọi là cổng USB.

Quy trình

Một quy trình chung về hoạt động của một ESB với các Cổng đa năng được thể hiện trong Hình 3. Quy trình này bao gồm các bước sau:

  1. Quy trình bắt đầu khi một ứng dụng kết nối với ESB thông qua một cổng như USB và gửi đi một mẩu tin. Mẩu tin này có thể theo bất kỳ định dạng nào và được gửi đi bằng cách sử dụng bất kỳ giao thức nào.
  2. Mẩu tin bị chặn bởi một thành phần phần mềm của bộ phát hiện giao thức, để xác định giao thức truyền thông được ứng dụng sử dụng.
  3. Một khi đã xác định được giao thức truyền thông, mẩu tin được gửi đến một bộ phận xử lý giao thức thích hợp. Lưu ý rằng hệ thống sẽ có một bộ phận xử lý cho một giao thức cụ thể. Vì vậy chúng ta sẽ có các bộ xử lý giao thức riêng cho các giao thức HTTP, SMTP, IIOP, v.v. Mục đích của các bộ xử lý giao thức này là trích ra phần thân của mẩu tin, phần thân này cần độc lập với giao thức đang được ứng dụng sử dụng.
  4. Sau đó, các mẩu tin trích ra sẽ được gửi đến một thành phần của phần mềm khác, được gọi là bộ phát hiện định dạng. Thành phần này chịu trách nhiệm xác định định dạng của mẩu tin. Đây là một số ví dụ về định dạng của các mẩu tin, bao gồm: SOAP, XML(thô), sách (copybook), v.v.
  5. Sau khi xác định định dạng mẩu tin, thành phần bộ phát hiện định dạng chuyển tiếp (forward) mẩu tin đó đến một thành phần thích hợp để biến đổi sang một định dạng hợp quy (phổ biến).
  6. Tiếp theo định dạng hợp quy được biến đổi sang một định dạng đích bằng một thành phần phần mềm biến đổi. Định dạng đích này phụ thuộc vào kiểu ứng dụng của ứng dụng đích.
  7. Sau đó, thành phần phần mềm biến đổi gửi mẩu tin tới một thành phần bộ tạo giao thức đích. Sau khi nhận được mẩu tin, thành phần bộ tạo giao thức đích tạo ra giao thức đích với mẩu tin đó theo định dạng đích.
  8. Cuối cùng, thành phần bộ tạo giao thức đích gửi mẩu tin đó đến ứng dụng đích.
Quy trình thực hiện ESB với kiểu Cổng đa năng
Quy trình thực hiện ESB với kiểu Cổng đa năng

Nhấp vào để xem ảnh lớn

Quy trình thực hiện ESB với kiểu Cổng đa năng

Quy trình thực hiện ESB với kiểu Cổng đa năng

Lưu ý rằng hầu hết các bước (3 - 8), có thể được thực hiện bên ngoài thành phần cổng và bên trong thân ESB. Việc di chuyển bước 3 - 8 vào bên trong phần thân sẽ dẫn đến việc sử dụng lại mã nhiều hơn. Bước còn lại của Cổng đa năng (Universal Port) là xác định giao thức truyền thông mà ứng dụng kết nối sử dụng. Điều này được hiển thị dưới dạng lược đồ trong Hình 4. Vì vậy, Cổng đa năng là một thành phần rất nhẹ. Trong phần tiếp theo, chúng ta mô tả hai phương pháp để xác định giao thức truyền thông.

Cổng đa năng như là một thành phần nhẹ có hầu hết quá trình xử lý xảy ra bên trong thân ESB
Cổng đa năng như là một thành phần nhẹ

Phát hiện giao thức truyền thông

Bây giờ chúng ta mô tả hai phương pháp mới sẽ cho phép triển khai một Cổng đa năng như một thành phần phần mềm nhẹ.

Phương pháp siêu giao thức

Phương pháp đầu tiên giới thiệu một siêu giao thức hay còn gọi là Meta Protocol, sẽ được sử dụng làm một bao bọc cho mỗi giao thức cấp cao. Bao bọc của siêu giao thức sẽ gồm một tiêu đề có thông tin về kiểu giao thức cấp cao (ví dụ như HTTP hoặc IIOP hoặc JRMP, hoặc JMS/MQ) đang được một ứng dụng sử dụng. Tiêu đề này sẽ được ứng dụng kết nối đưa vào làm dòng đầu tiên của mẩu tin. Phần còn lại của mẩu tin sẽ chứa các tiêu đề giao thức cấp cao hơn và nội dung thông điệp thực tế. Nếu siêu giao thức này được sử dụng, thì Cổng đa năng sẽ chỉ phải phân tích cú pháp dòng đầu tiên của mẩu tin nhận được để xác định xem giao thức cấp cao nào đang được ứng dụng kết nối sử dụng. Sau khi xác định giao thức cấp cao, thành phần phần mềm cấu thành nên Cổng đa năng sẽ chỉ đơn giản chuyển tiếp mẩu tin đó tới trình nghe giao thức thích hợp trong phần thân của ESB để xử lý. Do đó, Cổng đa năng sẽ là một thành phần phần mềm rất nhẹ chỉ phải phân tích cú pháp dòng đầu tiên của mẩu tin. Ngoài ra, mã trình nghe giao thức cao cấp sẽ được sử dụng lại rất nhiều vì mỗi trình nghe giao thức cao cấp là một phần trong thân ESB và có thể được bất kỳ các thành phần Cổng đa năng nào sử dụng. Một nhược điểm nhỏ của phương pháp này là sẽ cần phải sửa đổi mã ứng dụng một chút để cho phép sử dụng siêu giao thức này.

Một ví dụ về sử dụng siêu giao thức làm một bao bọc cho các giao thức cấp cao (HTTP) được cung cấp dưới đây:

Liệt kê 1. Mã ví dụ về sử dụng một siêu giao thức làm một bao bọc cho các giao thức cấp cao như HTTP
Protocol: HTTP Format: SOAP
GET /intro.html HTTP/1.1
User-Agent: Mozilla/5.0 (Windows;en-GB;...
Accept: text/*,image/jpeg, */*
Accept-Language: en-gb
...
...

Do dòng đầu tiên chứa thông tin cần thiết, nên mã ở Cổng đa năng sẽ chỉ cần phân tích cú pháp dòng đầu tiên để xác định xem giao thức cấp cao nào đang được sử dụng. Sau khi phát hiện ra giao thức này, mã của Cổng đa năng chỉ cần gọi bộ xử lý giao thức thích hợp trong phần thân của ESB, như thể hiện trong Hình 4.

Nhận dạng mức chân cắm (socket level)

Phương pháp thứ hai nói về các vấn đề được đề cập trong phần đầu tiên là nhận thức rõ rằng tất cả các giao thức cấp cao như HTTP, IIOP, JRMP, JMS/MQ, v.v được xây dựng dựa trên TCP/IP. Nói cách khác, tất cả các giao thức này sử dụng socket TCP/IP ở chế độ nền để cho phép giao tiếp giữa các ứng dụng và ESB. Hơn nữa, tất cả các giao thức này gồm có các tiêu đề và có thể sử dụng thông tin trong các tiêu đề này để phát hiện xem giao thức cấp cao nào đang được ứng dụng kết nối sử dụng. Những tiêu đề này dễ nhìn/dễ đọc nếu mẩu tin đến được đọc ở mức socket. Do đó, phương pháp phát hiện ra giao thức này sẽ dựa vào việc lắng nghe mẩu tin đến ở mức socket. Điều này sẽ làm cho Cổng đa năng trở thành một thành phần rất nhẹ do chỉ phải đọc tiêu đề/dòng đầu tiên của mẩu tin và sau đó chuyển tiếp mẩu tin này đến trình nghe giao thức thích hợp trong phần thân ESB. Như trong phương pháp đầu tiên, điều này cũng sẽ dẫn đến việc sử dụng lại nhiều đoạn mã do mỗi trình nghe giao thức sẽ là một phần trong thân ESB và bất kỳ các Cổng đa năng nào đều có thể sử dụng trình nghe giao thức tương tự.

Để minh họa việc sử dụng phương pháp này, bây giờ chúng tôi cung cấp một ví dụ về sử dụng phương pháp này. Với ví dụ này, chúng ta xem xét một yêu cầu được gửi qua giao thức HTTP. Nếu bạn đọc yêu cầu ở mức socket, các tiêu đề của yêu cầu HTTP đến sẽ trông như sau.

Liệt kê 2. Phát hiện mức socket
GET /intro.html HTTP/1.1
User-Agent: Mozilla/5.0 (Windows;en-GB;...
Accept: text/*,image/jpeg, */*
Accept-Language: en-gb
...
...

Mục quan trọng nhất cần lưu ý trong những tiêu đề này là tiêu đề đầu tiên trên dòng 1. Tiêu đề này là bắt buộc đối với giao thức này. Trong tiêu đề này, sự xuất hiện của chuỗi HTTP cũng là bắt buộc. Vì vậy, chỉ cần nhìn vào dòng đầu tiên, chúng ta có thể xác định giao thức này là HTTP. Ngoài ra, giao thức cụ thể này bắt đầu từ một từ trong một danh sách các từ khóa. Cụ thể như GET, PUT, DELETE, v.v. Vì vậy, người ta cũng có thể nhìn vào từ đầu tiên của dòng đầu tiên của yêu cầu gửi đến và nếu từ này trùng khớp với bất kỳ từ nào trong danh sách đó, người ta có thể kết luận rằng yêu cầu đến đang sử dụng giao thức HTTP.

Với các ngôn ngữ lập trình phổ biến hiện nay như Java, C++ thì việc đọc các mẩu tin ở mức socket là khá dễ dàng. Chúng tôi cung cấp một đoạn mã Java có thể dùng cho mục đích của chúng ta làm mã ví dụ.

Liệt kê 3. Mã dùng để đọc mẩu tin ở mức socket
import java.io.*;
import java.net.*;

public class testServer {

//declare a socket server and a socket //client
SocketServer myServer = null;
ClientServer myClient = null;

//declare an input stream and an output //stream
DataInputStream in;
PrintStream out;

//declare a variable to hold the first //line of the incoming message
String firstLine = null;

//open a socket for listening at the port //number 8080
myServer = new ServerSocket (8080);
//accept connection
myClient = myServer.accept();

//get the incoming message
in = new DataInputStream ( myClient.getInputStream());

//store the first line of the message in a //local variable
firstLine = in.getLine();


...
...

}

Lưu ý rằng biến firstLine trong đoạn mã trên chứa thông tin tiêu đề mà chúng ta cần xác định giao thức cấp cao đang được ứng dụng kết nối sử dụng. Với mã ngắn và đơn giản này, Cổng đa năng trở nên nhẹ, rồi nó gọi trình nghe/bộ xử lý giao thức thích hợp trong thân ESB như thể hiện trong Hình 4. Điều này cũng dẫn đến một mức độ cao về sử dụng lại mã vì mỗi trình nghe/bộ xử lý giao thức có thể được nhiều Cổng đa năng khác nhau sử dụng.

Kết luận

Trong bài này, chúng tôi đã mô tả khái niệm về các Cổng đa năng dùng cho một ESB. Một Cổng đa năng có thể được sử dụng để nối hầu như bất kỳ ứng dụng nào với ESB và, do đó, nối gián tiếp với bất kỳ ứng dụng khác nào được nối với ESB. Ứng dụng có thể sử dụng bất kỳ giao thức truyền thông hoặc kiểu định dạng mẩu tin nào mà vẫn sử dụng kiểu Cổng đa năng duy nhất này.

Trong bài này, bạn cũng đã học về quy trình triển khai thực hiện một Cổng đa năng. Điều quan trọng cần nhắc nhở bản thân bạn là trong quá trình này Cổng đa năng là một thành phần nhẹ, mà chức năng duy nhất của nó là phát hiện ra giao thức truyền thông đang được một ứng dụng kết nối sử dụng. Ngoài ra, trong bài này, bạn đã học hai phương pháp khác nhau về phát hiện giao thức truyền thông được một ứng dụng cụ thể sử dụng.

Trong bài đăng tiếp theo, bạn sẽ tìm hiểu nhiều lợi thế về sử dụng các cổng đa năng trong một ESB.

Tài nguyên

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

Thông tin gửi đi được đảm bảo an toàn.

Chọn tên hiển thị của bạn



Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Thông tin gửi đi được đảm bảo an toàn.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=SOA và dịch vụ Web
ArticleID=853603
ArticleTitle=Kiểu Cổng đa năng như USB dùng cho Enterprise Service Bus: Phần 2: Khái niệm, quy trình và triển khai
publish-date=12272012