Tài liệu Đề tài Công nghệ .net remoting: MỤC LỤC
Danh mục các hình vẽ
Hình 11 : Cấu trúc ứng dụng chạy trên Java platform 19
Hình 12 : Sơ đồ kiến trúc J2EE 21
Hình 13 : Cấu trúc ứng dụng chạy trên Java platform 23
Hình 14 : Các ngôn ngữ lập trình trên môi trường .NET 24
Hình 15 : Cấu trúc ứng dụng chạy trên .NET platform 25
Hình 16 : Cấu trúc ứng dụng phân tán (nhiều lớp) trên .NET 26
Hình 17 : Đồ thị thể hiện mức đỉnh của tải đạt được 29
Hình 18 : Đường cong tải khi máy chủ ứng dụng sử dụng 2 CPU 30
Hình 19: Đường cong tải khi máy chủ sử dụng 4 CPU 30
Hình 110: Đường cong tải khi máy chủ sử dụng 8 CPU 31
Hình 21 : .NET Framework 34
Hình 22 : Tập hợp thành phần cấu tử trong một file 41
Hình 23 : Tập hợp thành phần cấu tử trong nhiều file 41
Hình 24 : Phân loại kiểu 46
Hình 31 : Mô hình 1 lớp – toàn bộ chương trình chạy trên 1 máy tính 48
Hình 32 : Mô hình 2 lớp 50
Hình 33 : Kiến trúc nhiều lớp 54
Hình 34 : Cấu trúc ứng dụng phân tán trên môi trường .NET 57
Hình 35: Cấu trúc giao tiếp giữ...
115 trang |
Chia sẻ: hunglv | Lượt xem: 1884 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Công nghệ .net remoting, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
MỤC LỤC
Danh mục các hình vẽ
Hình 11 : Cấu trúc ứng dụng chạy trên Java platform 19
Hình 12 : Sơ đồ kiến trúc J2EE 21
Hình 13 : Cấu trúc ứng dụng chạy trên Java platform 23
Hình 14 : Các ngôn ngữ lập trình trên môi trường .NET 24
Hình 15 : Cấu trúc ứng dụng chạy trên .NET platform 25
Hình 16 : Cấu trúc ứng dụng phân tán (nhiều lớp) trên .NET 26
Hình 17 : Đồ thị thể hiện mức đỉnh của tải đạt được 29
Hình 18 : Đường cong tải khi máy chủ ứng dụng sử dụng 2 CPU 30
Hình 19: Đường cong tải khi máy chủ sử dụng 4 CPU 30
Hình 110: Đường cong tải khi máy chủ sử dụng 8 CPU 31
Hình 21 : .NET Framework 34
Hình 22 : Tập hợp thành phần cấu tử trong một file 41
Hình 23 : Tập hợp thành phần cấu tử trong nhiều file 41
Hình 24 : Phân loại kiểu 46
Hình 31 : Mô hình 1 lớp – toàn bộ chương trình chạy trên 1 máy tính 48
Hình 32 : Mô hình 2 lớp 50
Hình 33 : Kiến trúc nhiều lớp 54
Hình 34 : Cấu trúc ứng dụng phân tán trên môi trường .NET 57
Hình 35: Cấu trúc giao tiếp giữa tiến trình khách và tiến trình chủ trong .NET Remoting 67
Hình 36 : Kiến trúc hạ tầng của Webservice 70
Hình 37 : Một chu trình hoạt động của Webservice 72
Hình 38 : Kênh truyền an toàn cho .NET Remoting 78
Hình 41 : Kiến trúc hệ thống Quản lý yêu cầu khách hàng 84
Hình 42 : Mô hình báo cáo truyền thống 86
Hình 43 : Mô hình báo cáo từ xa sử dụng Webservice 87
Hình 01 : Kênh truyền an toàn 90
Hình 02: Vị trí của lớp đồng bộ thông tin người dùng trong Cấu trúc giao tiếp khách - chủ của .NET Remoting 92
Hình 03: Vị trí của lớp bảo mật trong Cấu trúc giao tiếp khách - chủ của .NET Remoting 95
Hình 04 : Quá trình mã hóa và giải mã 96
Danh mục các bảng
Bảng 31 : So sánh .NET Remoting và Webservice 64
Bảng 32 : So sánh kênh TCP và kênh HTTP 78
Bảng 01: Quá trình kiểm tra quyền trong hệ thống khách – chủ 91
Bảng 02: Một phiên giao dịch giữa máy trạm và máy chủ có mã hóa bảo mật 98
Các thuật ngữ và từ viết tắt
API
Viết tắt của Application Programming Interface : Giao diện lập trình. Một modul chương trình được viết độc lập và muốn "nhúng" vào một ứng dụng cụ thể, nó phải cung cấp một giao diện để người lập trình sử dụng các dịch vụ mà modul này cung cấp. Giao diện này được gọi là giao diện lập trình. Một giao diện lập trình là tập hợp các phương thức để chương trình sử dụng và modul viết sẵn tương tác với nhau.
ASP.NET
Là phiên bản tiếp theo của ASP (Active Server Page). ASP.NET cung cấp một mô hình phát triển thống nhất, cùng với các dịch vụ hỗ trợ phát triển các ứng dụng web. Khác với ASP, ASP.NET có thể hỗ trợ bất cứ ngôn ngữ lập trình .NET nào. Thêm vào đó, ứng dụng ASP.NET cũng có thể sử dụng toàn bộ các tính năng hỗ trợ của môi trường .NET Framework.
Byte code
Mã trung gian của platform Java.
Cấu tử
(Assembly) Là đơn vị tạo nên chương trình .NET. Mỗi cấu tử là một tập các mã thực hiện một phần nào đó của ứng dụng, được dịch, đánh phiên bản và triển khai trong một đơn vị logic, dưới dạng 1 hay nhiều file. Các cấu tử lưu trữ mã của chương trình và được lưu dưới dạng các file dll hoặc exe.
CdiT
Viết tắt của tên tiếng Anh của Trung tâm công nghệ Thông tin (Center for Development of Information Technology).
CORBA
Common Object Request Broker Architecture. Cấu trúc trung gian yêu cầu đối tượng chung
CRM
Customer Relationship Management. Hệ thống quản lý quan hệ khách hàng.
DBMS
Viết tắt của Database Management System: Hệ quản trị cơ sở dữ liệu.
Designtime
Thời điểm thiết kế chương trình.
Dial-up
Đường kết nối (Internet hoặc tới một máy tính khác) sử dụng đường điện thoại thường (64k). Tốc độ kết nối của phương thức này thương thấp so với các phương thức khác như ADSL, ISDN.
end – user
Người sử dụng cuối cùng. Đối với một chương trình, người sử dụng cuối cùng là người đơn thuần chỉ sử dụng các chức năng mà chương trình cung cấp, không làm thay đổi đi các tính năng cơ bản của chương trình.
ERP
Enterprise Resource Planning. Hệ thống quản trị tài nguyên doanh nghiệp.
HTTP
(Hypertext Transfer Protocol) Giao thức truyền siêu văn bản World Wide Web được xây dựng dựa trên môi trường Internet và sử dụng TCP/IP để truyền tải thông tin giữa Web Client và Web Server.
IPSec
IP Security.
Kênh truyền an toàn
Khái niệm chỉ kênh truyền trên đó dữ liệu được áp dụng các biện pháp chống lại các tấn công như chữ ký điện tử, mã hóa bảo mật…
Khả năng giao tiếp
Interoperability. Chỉ mức độ sẵn sàng giao tiếp của một ứng dụng hay một thành phần ứng dụng với các ứng dụng hay thành phần ứng dụng trên các nền công nghệ khác.
Khách/Chủ
Trong mạng máy tính, máy khách là một trạm công tác có khả năng xử lý (ví dụ như một máy tính cá nhân). Nó có thể yêu cầu lấy thông tin hoặc các chương trình ứng dụng từ máy chủ. Trong các ứng dụng, tiến trình khách là một tiến trình sử dụng các đối tượng và/hoặc dữ liệu của tiến trình khác gọi là tiến trình chủ.
Không gian tên
Namespace. Một không gian tên là một cơ chế đánh tên logic cho các kiểu, trong đó một tên kiểu được dẫn trước bằng một cấu trúc tên ngăn cách bởi dấu chấm (.). Cơ chế đánh tên này chỉ có ý nghĩa đối với người lập trình tại thời điểm thiết kế (design time). Chú ý rằng không gian tên không liên quan tới tên của cấu tử. Một cấu tử có thể chứa các kiểu thuộc nhiều không gian tên gốc, và tập hợp các kiểu của một không gian tên có thể nằm trong hơn 1 cấu tử.
Kiểm tra quyền
(Authorization) Một ứng dụng có thể có rất nhiều người sử dụng với các quyền truy cập khác nhau. Sau khi đăng nhập, chương trình xác định được các quyền mà người sử dụng sở hữu, từ đó thực hiện việc kiểm tra quyền trong mỗi thao tác mà người dùng thực hiện.
Lớp
Khái niệm lớp thường được dùng để chỉ 2 khái niệm trong tiếng Anh là layer (lớp) và tier (còn gọi là tầng). Layer là khái niệm chỉ một lớp OSI, trong khi đó tier thường được sử dụng để chỉ các thành phần ứng dụng thực hiện các công việc khác nhau và được triển khai tại các máy khác nhau.
Mã có kiểm soát / không kiểm soát
Managed code/ unmanaged code. Có kiểm soát là khái niệm chỉ mã chương trình hoàn toàn sử dụng các dịch vụ của môi trường chạy thực để truy xuất các dịch vụ của hệ điều hành. Nếu không sử dụng các dịch vụ của môi trường chạy thực, chẳng hạn truy xuất trực tiếp vào các địa chỉ vùng nhớ sử dụng con trỏ, mã chương trình được gọi là mã không kiểm soát.
Miền ứng dụng
(Application domain). Khái niệm chỉ các vùng tài nguyên mà một ứng dụng sử dụng khi chạy. Các miền ứng dụng tạo nên các vùng tách biệt để chứa các ứng dụng, trong đó ứng dụng này lỗi sẽ không ảnh hưởng tới ứng dụng khác.
Môi trường chạy thực
Là môi trường hỗ trợ chạy chương trình. Môi trường chạy thực cung cấp các dịch vụ cơ bản cho các mã chương trình để truy cập tới hệ điều hành như quản lý bộ nhớ, kiểm soát lỗi. Tên của môi trường chạy thực trong .NET platform là Common Language Runtime (CLR).
Ngôn ngữ trung gian
Intermediate Language(IL). Là kết quả của quá trình dịch mã nguồn ứng dụng trong môi trường .NET. Thay vì dịch thẳng ra mã máy, việc dịch ra mã theo ngôn ngữ trung gian cho phép chương trình có thể chạy trên các phần cứng khác nhau. Trước khi một ứng dụng được chạy, các đoạn mã dưới dạng ngôn ngữ trung gian được dịch thành mã máy. Đây không phải là quá trình thông dịch.
Ngữ cảnh an ninh
Trên môi trường Windows, mỗi ứng dụng đều được kích hoạt nhân danh một người sử dụng nào đó. Tập hợp các tham số về quyền truy cập của người sử dụng sẽ tạo nên ngữ cảnh an ninh mà trong đó chương trình chạy.
Nhận thực
(Authentication) Là quá trình một người dùng nhập vào các thông tin xác nhận về cá nhân (thường bao gồm một tên người dùng và mật khẩu) cho chương trình phần mềm thực hiện kiểm tra quyền được sử dụng chương trình.
OSI
Open Systems Interconnection. Mô hình OSI hay mô hình liên kết các hệ thống mở định nghĩa kiến trúc nhiều lớp, trong đó các lớp sẽ trao đổi thông tin với lớp ngang hàng ở đầu bên kia và cung cấp các dịch vụ cho các tầng bên trên nó.
Platform
Công nghệ nền.
Proxy
Đối tượng đại diện. Đối tượng này thường không trực tiếp công việc, mà chỉ nhận các yêu cầu đầu vào, sau đó chuyển tiếp cho một đối tượng khác (thường là ở xa) thực hiện công việc. Kỹ thuật này được sử dụng phổ biến trong các môi trường phân tán, trong đó trình khách chỉ cần gọi đối tượng đại diện mà không cần quan tâm tới vị trí thực tế của đối tượng thực hiện công việc mà mình yêu cầu.
Remoting
Xử lý từ xa. Trong môi trường .NET, .NET Remoting là cơ chế cho phép máy khách có thể kích hoạt các hàm chạy trên tiến trình chủ.
RPC
Remote Procedure Call. Gọi thủ tục từ xa.
Runtime
Thời điểm một chương trình đang chạy. Phân biệt với designtime là thời điểm thiết kế chương trình (ví dụ khi viết mã, thiết kế giao diện người dùng...)
SOAP
(Simple Object Access Protocol) Giao thức truy xuất dữ liệu giản đơn. Giao thức này cho phép các ứng dụng có thể giao tiếp với nhau sử dụng XML qua giao thức HTTP. Giao thức này khá đơn giản, không phụ thuộc nền cũng như không phụ thuộc vào một ngôn ngữ lập trình cụ thể nào. Đây là giao thức sử dụng để truy cập Web service.
SSL
Secure Sockets Layer. Đây là giao thức Web dùng để thiết lập bảo mật giữa máy chủ và khách. Tất cả dữ liệu truyền đều được mã hóa. S-HTTP (Secure HTTP) là một giao thức tương tự chỉ thực hiện mã hóa ở mức HTTP, trong khi SSL mã hóa tất cả dữ liệu truyền qua lại giữa chủ và khách ở mức IP.
TCP
Transmisssion Control Protocol. Đây là một giao thức nằm trong của tầng chuyển tải (transport layer) trong bộ giao thức TCP/IP của Internet.
Tính khả chuyển
Portability. Chỉ mức độ sẵn sàng triển khai của một ứng dụng hay thành phần ứng dụng trên các nền phần cứng khác nhau.
Tuyến đoạn
Thread. Các tuyến đoạn là những quá trình riêng lẻ thực hiện đồng thời trong các hệ điều hành đa nhiệm. Những người phát triển chương trình cho hệ điều hành đa nhiệm có thể thiết kế các quá trình sao cho chúng được tách ra thành nhiều luồng và được xử lý cùng một lúc.
Unicode
Bộ mã tiêu chuẩn quốc tế hỗ trợ đa ngôn ngữ. Khác với các bộ mã đầu tiên, bộ mã Unicode sử dụng nhiều byte hơn (có thể là 2 byte hoặc 4 byte hoặc số byte thay đổi) để lưu trữ ký tự, và cho phép thể hiện hầu hết mọi ngôn ngữ viết trên thế giới bằng một tập ký tự đơn nhất.
Webservice
Là một dịch vụ ứng dụng được cung cấp thông qua các giao diện chuẩn của Internet, cho phép các lập trình viên có thể sử dụng trong chương trình của mình thông qua việc thực hiện kết nối tới máy chủ chứa Webservice và thực hiện kích hoạt. Webservice được sử dụng rất phổ biến trong các giải pháp thương mại điện tử.
WSDL
(Web Service Description Language) Ngôn ngữ mô tả Web service. WSDL thực chất là một tài liệu mô tả Web service, được viết sử dụng XML. Nó chỉ ra vị trí của Web service và các dịch vụ (hàm) mà Web service đó thực hiện.
XML
Extensible Markup Language. Đây là một ngôn ngữ đánh dấu sử dụng trong các tài liệu, cho phép chứa các thông tin có cấu trúc. Không giống như HTML, các tag của XML có thể được quy định và thay đổi tùy ý.
Nội dung đề tài
Tên đề tài : "Nghiên cứu công nghệ phân tán trên nền .NET Framework áp dụng cho việc phát triển và tích hợp các hệ thống phần mềm".
Nội dung :
Nghiên cứu tổng quan công nghệ nền .NET Framework.
Môi trường runtime của .NET Framework.
Các thành phần của ứng dụng .NET: Tìm hiểu các thành phần cấu thành nên một ứng dụng .NET (assembly), việc phân miền ứng dụng (application domains)…
Phát triển ứng dụng trên .NET Framework: Tìm hiểu các vấn đề cơ bản khi phát triển ứng dụng trên .NET Framework: cơ chế truy xuất đối tượng giữa các miền ứng dụng, vấn đề xử lý lỗi, quản lý bộ nhớ…
Các vấn đề về an toàn ứng dụng trên .NET Framework: Các hình thức tấn công phổ biến và cách thức kiềm chế chúng trên trong môi trường .NET Framework.
So sánh công nghệ nền .NET Framework với công nghệ nền Java: Thực hiện so sánh hai công nghệ nền hiện được sử dụng rộng rãi nhất này trên các mặt kiến trúc ứng dụng, tính khả chuyển (portability), khả năng giao tiếp (interoperablity) và hiệu suất (performance).
Nghiên cứu các giải pháp phát triển ứng dụng phân tán trên môi trường .NET:
Cấu trúc ứng dụng phân tán trên môi trường .NET: nghiên cứu và đưa ra các khuyến nghị về cách thức thực hiện và phạm vi ứng dụng của các cấu trúc ứng dụng phân tán trên môi trường .NET.
Giải pháp tích hợp giữa các ứng dụng trên môi trường .NET và giữa các ứng dụng .NET với ứng dụng trên platform khác: nghiên cứu và đưa ra các khuyến nghị về phạm vi ứng dụng của mỗi phương pháp.
Các vấn đề về bảo mật trên môi trường .NET khi thực hiện ứng dụng phân tán.
Xử lý lỗi trong các thành phần ứng dụng phân tán.
Áp dụng các kết quả nghiên cứu trong việc phát triển hệ thống thử nghiệm
Hệ thống Tiếp nhận và xử lý yêu cầu dịch vụ: kiểm nghiệm các kết quả nghiên cứu về tích hợp giữa các thành phần .NET với nhau sử dụng .NET Remoting trong môi trường mạng LAN.
Hệ thống Báo cáo từ xa: kiểm nghiệm các kết quả nghiên cứu về tích hợp giữa các thành phần ứng dụng trên các platform khác nhau sử dụng .NET Webservice, trong môi trường mạng LAN và Internet.
Đánh giá các kết quả nghiên cứu thông qua hệ thống thử nghiệm.
Tổng quan
Giới thiệu chung
Công nghệ .NET đã được Microsoft đưa ra lần đầu tiên vào tháng 7 năm 2000. Kể từ đó, .NET đã chứng tỏ được ưu thế của mình trong việc hỗ trợ phát triển các ứng dụng trên môi trường Windows. Các hãng sản xuất phần mềm lớn như IBM (với bộ công cụ phân tích thiết kế hệ thống Rational Rose), BusinessObjects (với bộ công cụ báo cáo Crystal Reports) và nhiều hãng khác đều có các giải pháp tích hợp sản phẩm của mình vào môi trường phát triển .NET. Microsoft đã cam kết .NET sẽ là môi trường phát triển ứng dụng trong mọi hệ điều hành Windows tiếp theo.
Nhu cầu phát triển ứng dụng trên nền .NET
Một trong các nhiệm vụ quan trọng mà Trung tâm công nghệ thông tin được giao là nghiên cứu phát triển hệ thống ERP/CRM với đặc thù của ngành Viễn thông, trước mắt áp dụng cho các Bưu điện Tỉnh/Thành phố. Các hệ thống ERP/CRM là các hệ thống quy mô lớn, gồm nhiều thành phần xây dựng trên nhiều platform tích hợp với nhau. Trong đó, các thành phần trên Windows là không thể thiếu được do hiện nay, môi trường Windows là môi trường được sử dụng rộng rãi bởi các người dùng cuối tại các Bưu điện Tỉnh thành. Cùng với sự ra đời của các công nghệ mới như .NET platform, cần có một nghiên cứu về lựa chọn công nghệ và các phương thức phát triển ứng dụng phù hợp cho các thành phần ứng dụng kể trên.
Hệ thống BCSS của Trung tâm Công nghệ thông tin đã được triển khai rộng rãi tại nhiều Bưu điện Tỉnh/Thành. Đáp ứng tốt cho việc điều hành sản xuất kinh doanh, các chương trình trong hệ thống này sẽ là cơ sở vững chắc cho hệ thống CRM. Tuy nhiên, do công nghệ sử dụng, các chương trình BCSS có một số khó khăn trong việc tích hợp phát triển với hệ thống CRM. Xác định được vấn đề này, một số ứng dụng trong hệ thống BCSS đã được xác định nâng cấp lên phiên bản .NET. Công nghệ .NET cũng đã được lựa chọn để phát triển mới một số module trong hệ thống CRM.
Ngoài ra, còn có một nhu cầu không thể không kể đến trong việc chuẩn hóa sử dụng Unicode. Bộ mã các ký tự chữ Việt theo tiêu chuẩn Unicode TCVN 6909:2001 đã được Thủ tướng chính phủ quyết định thống nhất sử dụng trong trao đổi thông tin điện tử từ ngày 10/06/2002. Mặc dù đã được sử dụng phổ biến trong các văn bản điện tử, TCVN 6909:2001 vẫn chưa được sử dụng nhiều trong các ứng dụng công nghệ thông tin, trong đó có nhiều ứng dụng hỗ trợ điều hành sản xuất kinh doanh đang được sử dụng tại Tổng Công ty Bưu chính Viến thông.
Như vậy, có thể thấy rõ các nhu cầu thực tế cho việc nghiên cứu công nghệ .NET Framework áp dụng cho việc phát triển và tích hợp các hệ thống phần mềm là cần thiết. Một số nhu cầu tiêu biểu bao gồm:
Hỗ trợ TCVN 6909:2001: Nhiều chương trình hiện tại trong hệ thống BCSS được phát triển sử dụng các bộ công cụ cũ như VS6, Delphi. Vì vậy các ứng dụng này đều không hỗ trợ hoàn toàn Unicode. Việc nâng cấp lên phiên bản .NET sẽ giúp giải quyết vấn đề này.
Tích hợp hệ thống ở mức ứng dụng: Mức độ tích hợp của các ứng dụng hiện tại thấp, chủ yếu dừng lại ở mức CSDL. Môi trường .NET sẽ xóa nhòa ranh giới giữa các ứng dụng, mở ra khả năng tích hợp hệ thống ở mức ứng dụng. Đây là điều kiện tiên quyết để có thể xây dựng được các ứng dụng theo mô hình CRM.
Cấu trúc ứng dụng phân tán trên môi trường Windows: Cấu trúc ứng dụng phân tán đã chứng minh được tính hiệu quả của nó qua nhiều đề tài và sản phẩm của CDiT. Tuy nhiên, hiện tại, cấu trúc này mới được nghiên cứu áp dụng trên Java. Trong khi đó, nhu cầu phát triển các ứng dụng trên môi trường Windows cũng rất lớn, đòi hỏi một nghiên cứu về cách thực hiện ứng dụng phân tán sử dụng .NET Framework.
.NET và Java
Hiện nay có rất nhiều công nghệ nền để xây dựng ứng dụng theo kiến trúc phân tán. Đứng đầu trong danh sách này có thể kể đến 2 công nghệ nền: Java của Sun Microsystems và Windows của Microsoft.
Java
Java được giới thiệu đầu tiên vào năm 1995 bởi James Gosling và Henry McGilton và được xem là một kết quả tất yếu do phát triển mạnh mẽ của Internet.
Java thường hay nhắc tới với tư cách là một ngôn ngữ lập trình. Tuy nhiên, đầy đủ hơn, nó cần phải được hiểu là một hệ thống các công nghệ nền hỗ trợ phát triển ứng dụng.
Java với tư cách là một ngôn ngữ lập trình
Java là một ngôn ngữ bậc cao với nhiều ưu điểm:
Đơn giản, hướng đối tượng và thân thiện: Một trong những mục tiêu chính của Java là cung cấp 1 ngôn ngữ đơn giản dễ sử dụng và phát triển. Do sự phức tạp ngày càng cao của môi trường tính toán và xử lý trên mạng, Java cung cấp mô hình phát triển hướng đối tượng với các đặc điểm như: đa hình, có tính kế thừa, cơ chế trao đổi qua message và có khả năng tái sử dụng. Java được cài đặt với các thư viện gồm nhiều đối tượng đã được kiểm tra cung cấp đầy đủ các chức năng cho người phát triển ví dụ như: vào ra, giao tiếp mạng, quản lý bảo mật, giao diện người dùng,.... các đối tượng này có thể sử dụng trực tiếp đồng thời cũng có thể mở rộng theo nhu cầu riêng của người phát triển. Với cú pháp giống C++ nhưng một số điểm phức tạp dễ mắc lỗi đã được loại bỏ đã giúp cho java thân thiện với người dùng hơn.
An toàn: các đặc điểm của java định hướng và giúp người lập trình có một thói quen lập trình có độ tin cậy cao. Mô hình quản lý bộ nhớ đã được đơn giản hóa, không có các kiểu dữ liệu con trỏ và các phép tính số học trên con trỏ như trong C++. Việc loại bỏ con trỏ đã tạo ra cho Java một số ưu điểm : cơ chế tự động giải phóng bộ nhớ, loại bỏ được các lỗi gây treo hệ thống như khi làm việc với C và C++. Tuy nhiên, điều này cũng đồng nghĩa với việc giảm khả năng tác động sâu vào hệ thống của người lập trình, do đó ít nhiều làm giảm sức mạnh của Java.
Kiến trúc dung hòa và có tính khả chuyển: môi trường mạng hiện nay rất đa dạng về các chủng loại thiết bị phần cứng cũng như hệ điều hành. Để hỗ trợ khả năng chạy trên các nền tảng và hệ điều hành khác nhau, bộ biên dịch java tạo ra các mã bytecode một dạng mã trung gian dung hòa về mặt cấu trúc để chuyển mã sang các phần cứng và các hệ hiều hành khác nhau một cách có hiệu quả. Đặc điểm thông dịch của java giải quyết được các vấn đề liên quan tới việc: phân phối mã lệnh nhị phân và quản lý phiên bản, điều này giúp cho java có thể chạy trên mọi nền tảng khác nhau. Có thể nói đây là một trong những ưu điểm lớn nhất của Java.
Java với tư cách là một công nghệ nền (platform)
Một công nghệ nền là môi trường phần cứng hoặc phần mềm để các ứng dụng có thể chạy trên đó, ví dụ như các hệ điều hành: Windows 2000, Linux, Solaris, and MacOS. Phần lớn các công nghệ nền đều là sự kết hợp giữa hệ điều hành và phần cứng. Java platform thuần tuý là phần mềm, chạy ở lớp trên của các hệ điều hành khác nhau. Có 2 thành phần tạo nên Java platform:
Máy ảo Java (Java Virtual Machine -JVM)
Thư viện Java lập trình Java API:
Hình 11 : Cấu trúc ứng dụng chạy trên Java platform
Ứng dụng nhiều lớp trên Java
Có 3 thư viện lập trình với Java
J2SE (Java Standard Second Edition) : là thư viện lập trình cho các ứng dụng Java cơ bản, chạy trên 1 máy. Thư viện này chứa các giao diện tới máy ảo Java và là nền cho các ứng dụng Java cũng như cho các thư viện lập trình mức cao khác.
J2ME : Là thư viện lập trình cho các ứng dụng Java chạy trên các thiết bị cầm tay (máy tính bỏ túi Pocket PC, thiết bị hỗ trợ cá nhân PDA, điện thoại di động…). Thư viện này được thiết kế đặc biệt để phù hợp với những đặc điểm của các thiết bị bỏ túi : yêu cầu phần mềm đơn giản trên một cấu hình không cao.
J2EE (Java Enterprise Second Edition): Là thư viện lập trình cho các ứng dụng triển khai rộng (quy mô doanh nghiệp). J2EE không chỉ là một thư viện lập trình. Nó còn là một hệ thống các quy định, khuyến nghị về các thành phần của một ứng dụng phân tán. Có thể coi J2EE gồm 2 phần : một thư viện lập trình mức cao xây dựng trên nền J2SE và một tập các mô tả các thành phần ứng dụng, quy cách trao đổi giữa các thành phần…
Hình 12 : Sơ đồ kiến trúc J2EE
Hình 12 mô tả các thành phần trong kiến trúc của J2EE platform, lưu ý rằng hình vẽ chỉ mô tả quan hệ logic của các thành phần chứ không đề cập đến kiến trúc về mặt vật lý, các thành phần có thể được cài đặt trên các máy tính, tiến trình, máy ảo,... khác nhau.
Các Container được mô tả bởi các hình chữ nhật riêng rẽ là các môi trường chạy cung cấp các dịch vụ cần thiết cho các thành phần ứng dụng được biểu diễn ở nửa phía trên. Các dịch vụ được thể hiện qua các hộp ở nửa phía dưới. Ví dụ như: Application Client Container cung cấp dịch vụ thư viện Java Messaging Service (JMS API) cho các ứng dụng client.
Các mũi tên mô tả nguyên tắc truy nhập, trao đổi giữa các thành phần của J2EE Platform. Ví dụ Application Client Container cung cấp khả năng truy nhập trực tiếp tới cơ sở dữ liệu qua thư viện JDBC API, tương tự như vậy đối với các Web Container và EJB container.
Các thư viện API được hỗ trợ bởi môi trường chạy J2SE (Java 2 Platform, Standard Edition) cho từng loại thành phần ứng dụng.
Có thể thấy rằng kiến trúc của J2EE trên Hình 12 tuân theo kiến trúc cơ bản của ứng dụng phân tán trên Hình 33, trong đó Java Applet và Java Application đóng vai trò lớp trình diễn, các thành phần chạy trên Web Container và EJB Container đóng vai trò lớp xử lý nghiệp vụ và cơ sở dữ liệu đóng vai trò lớp cơ sở dữ liệu.
Đánh giá
Ưu điểm
Ngôn ngữ Java là ngôn ngữ lập trình hướng đối tượng, thuân lợi cho việc phát triển các ứng dụng có độ phức tạp cao, quy mô lớn.
Java hỗ trợ hoàn toàn chuẩn Unicode. Đây là một yếu tố quan trọng trong việc xác định một ngôn ngữ lập trình, vì chuẩn Unicode đang từng bước trở thành chuẩn quốc gia ở Việt Nam và chuẩn quốc tế.
Java hỗ trợ tính năng “dịch một lần, chạy mọi nơi”. Điều này là do Java được trình biên dịch dịch ra một loại mã trung gian (bytecode). Mã bytecode này sau đó có thể chạy được trên các hệ điều hành khác nhau, nhờ một máy ảo Java (Java Virtual Machine - JVM) cài đặt trên các hệ điều hành này. Nhiệm vụ xây dựng máy ảo Java trên các hệ điều hành khác nhau là của Sun Microsystems. Đây là một trong những ưu điểm lớn nhất của Java. Tuy nhiên, nó cũng khiến cho các ứng dụng viết bằng Java có một số nhược điểm được đề cập ở phần sau.
Các thư viện và các chuẩn của Java giúp phát triển nhiều loại ứng dụng : Java Application, Web Application, applets, máy chủ ứng dụng (với EJB – Enterprise Java Beans).
Nhược điểm
Ngôn ngữ lập trình Java không có được các tính năng mạnh mẽ như C++ hay C#. Điều này chính là do Java không được viết cho một hệ điều hành cụ thể nào, vì vậy không có các tính năng truy cập tới mức sâu của hệ điều hành như xử lý bộ nhớ… Vì vậy, đối với các ứng dụng đòi hỏi các thao tác này, Java không nằm trong danh sách lựa chọn.
Như trên đã đề cập, ứng dụng viết bằng Java được dịch ra mã byte code. Mã bytecode sau đó được chạy trên máy ảo Java để tương tác với hệ điều hành thực sự (Hình 13 vẽ lại từ Hình 11 để tiện tham khảo).
Hình 13 : Cấu trúc ứng dụng chạy trên Java platform
Trong cấu trúc này có thể thấy rõ mức gián tiếp giữa ứng dụng Java và hệ điều hành. Đây là nguyên nhân chính khiến cho các ứng dụng Java thường chạy với tốc độ chậm và không sử dụng được các tính năng đặc biệt của hệ điều hành.
Nhận xét
Java đã nhanh chóng phát triển trên môi trường Internet, mà sự độc lập với phần cứng chính là một trong những lý do chủ yếu. Để có được ưu điểm này, Java đã đánh đổi các tiêu chí như tốc độ và tính năng. Với các ứng dụng rộng rãi như các ứng dụng Internet, cộng với các máy chủ ứng dụng tập trung với cấu hình cực mạnh, điều này là hoàn toàn chấp nhận được.
Tuy nhiên, với những ứng dụng ở quy mô doanh nghiệp, khi mà tốc độ xử lý, độ thân thiện của giao diện người sử dụng… là một trong các yêu cầu quan trọng cần được đáp ứng thì Java không phải là lựa chọn số 1. Hơn nữa, trong các môi trường kiểu này, ưu điểm không phụ thuộc nền của Java thường không có cơ hội để phát huy tác dụng.
.NET
Công nghệ .NET đã được Microsoft đưa ra lần đầu tiên vào tháng 7 năm 2000. Kể từ đó, .NET đã chứng tỏ được ưu thế của mình trong việc hỗ trợ phát triển các ứng dụng trên môi trường Windows. Khả năng hỗ trợ hoàn toàn Unicode, mô hình lập trình hướng đối tượng thông qua nhiều loại ngôn ngữ lập trình cùng với các tính năng mạnh mẽ của bộ công cụ phát triển là các ưu điểm của .NET. Cam kết hỗ trợ trong mọi hệ điều hành Windows tiếp theo (trong đó có Windows Longhorn) khiến cho môi trường .NET trở thành một trong các môi trường phát triển ứng dụng phân tán hứa hẹn nhất.
Các ngôn ngữ lập trình của .NET
Với .NET, Microsoft đã phá vỡ rào cản giữa các ngôn ngữ lập trình bằng việc cho phép Common Language Runtime (các dịch vụ chung chạy trên hệ điều hành, tạo môi trường giúp một ứng dụng có thể chạy - CLR) của .NET chạy trên ngôn ngữ trung gian (Intermediate Language Bytecode), thay vì trực tiếp trên mã máy (native code) như trước đây. Điều này có nghĩa là bất kỳ ngôn ngữ lập trình nào có thể dịch được ra ngôn ngữ trung gian đều có thể chạy được bởi CLR. Kết quả là có khoảng 20 ngôn ngữ lập trình khác nhau có thể sử dụng với CLR của .NET. Như vậy các chương trình viết với các ngôn ngữ khác nhau này có thể cung cấp các giao diện lập trình cho nhau, hay gọi lẫn nhau.
CLR viết bằng IL
Ngôn ngữ Hệ điều hành
C#, Visual Basic .NET, C++ .NET,…
Các ngôn ngữ có thể dịch ra IL (Perl,…)
Hình 14 : Các ngôn ngữ lập trình trên môi trường .NET
Trên Hình 14, có thể thấy các ngôn ngữ được chia thành 2 nhóm. Một bên là các ngôn ngữ được hỗ trợ bởi Visual Studio .NET (là bộ công cụ để phát triển các ứng dụng trên .NET cung cấp bởi Microsoft) , bao gồm C#, Visual Basic .NET, C++ .NET, J#… Người lập trình sử dụng Visual Studio .NET có thể viết chương trình bằng các ngôn ngữ này. Visual Studio .NET là bộ công cụ hỗ trợ lập trình mạnh nhất hiện nay, với các tính năng soạn thảo, biên dịch, sửa lỗi…
Nhóm còn lại là các ngôn ngữ lập trình hiện có thể dịch được ra IL. Chú ý rằng trên lý thuyết, bất kỳ ngôn ngữ lập trình nào cũng có thể được dịch ra ngôn ngữ cấp thấp hơn. Tuy nhiên, trên thị trường phần mềm, vì các lý do bản quyền, cạnh tranh giữa các nhà sản xuất…, các trình dịch đó chỉ được phát triển một cách hạn chế. Kết quả là chỉ có một số ngôn ngữ có trình biên dịch có khả năng dịch ra IL, trong đó có thể kể đến Perl.
Nếu như khả năng hỗ trợ đa ngôn ngữ của .NET vượt trội như vậy, khả năng triển khai trên các hệ điều hành khác nhau lại bị hạn chế. Điều này là do CLR của .NET chỉ được thiết kế để chạy trên môi trường Windows. Hiện đã có một số dự án mã nguồn mở nhằm xây dựng một bộ CLR hỗ trợ đa hệ điều hành. Trong số đó có thể kể đến mono (www.oo-mono.com ). Dự án này đã đạt được nhiều bước tiến khả quan.
.NET với tư cách là một công nghệ nền (platform)
Hệ điều hành Windows
CLR
Ứng dụng .NET
Hình 15 : Cấu trúc ứng dụng chạy trên .NET platform
.NET cũng thường được nhắc đến với tư cách là một công nghệ nền (platform). Nền .NET bao gồm .NET Framework (gồm các dịch vụ common language runtime và một bộ thư viện chung cho các ứng dụng .NET) và hệ điều hành Windows bên dưới. Tuy nhiên, thông thường, hệ điều hành Windows thường được bỏ qua, và .NET Framework đóng vai trò platform. Như đã đề cập tới ở trên, .NET Framework không chạy trực tiếp trên hệ điều hành Windows, mà thông qua một ngôn ngữ trung gian (IL). Vì vậy, .NET Framework có thể được sử dụng được bởi bất kỳ ngôn ngữ nào có thể được dịch ra ngôn ngữ IL.
Ứng dụng nhiều lớp trên .NET
Ứng dụng desktop (Windows Form)
Web services
.NET Framework
.NET Framework
ASP.NET
.NET Framework
Các đối tượng .NET (.NET Components)
.NET Framework
CSDL
Hình 16 : Cấu trúc ứng dụng phân tán (nhiều lớp) trên .NET
Trên Hình 16 là cấu trúc cơ bản của ứng dụng trên .NET. Chú ý rằng dựa trên cấu trúc cơ bản này còn có thể có rất nhiều biến thể. Lý do là vì thông qua các phương thức khác nhau, các đối tượng .NET, dù ở trong lớp trình diễn hay trong lớp nghiệp vụ đều có thể gọi lẫn nhau, khiến cho cấu trúc trên có thể mở rộng ra thêm nhiều mức. Điều này được làm rõ thêm khi tìm hiểu về từng thành phần của cấu trúc.
Lớp giao diện
Lớp giao diện có thể là một web server cung cấp các trang web tới các trình duyệt, một ứng dụng desktop bình thường với giao diện cửa sổ, hoặc là một web service - cung cấp giao diện sử dụng dịch vụ tới cho các ứng dụng khác.
Trong trường hợp là web service, ranh giới giữa lớp giao diện và lớp nghiệp vụ trở nên mờ nhạt. Đó là do web service, đóng vai trò giao diện trong cấu trúc này, lại có thể được gọi bởi một thành phần đóng vai trò bất kỳ trong một cấu trúc khác. Trong cấu trúc khác này, có thể coi web service kể trên là một phần của lớp nghiệp vụ.
Lớp nghiệp vụ
Lớp nghiệp vụ được thực hiện bởi các đối tượng, được chứa trong các tiến trình chủ và được truy cập thông qua một số giao thức. Có thể có nhiều lựa chọn khi thực hiện lớp nghiệp vụ. Một trong các lựa chọn đó là webservice. Sự lựa chọn giữa các phương thức được dựa trên các tiêu chí về quy mô của hệ thống, tốc độ đòi hỏi, khả năng hoạt động trên các hệ điều hành khác nhau. Web service thường được sử dụng cho các ứng dụng có quy mô rất lớn, thông qua Internet. Là một chuẩn được công nhận rộng rãi, Webservice có khả năng vượt qua ranh giới giữa các hệ điều hành khác nhau. Tuy nhiên, với quy mô doanh nghiệp, giải pháp gọi hàm từ xa.NET Remoting tỏ ra phù hợp hơn, đáp ứng được các yêu cầu về tốc độ trong khi vẫn đảm bảo được quy mô của hệ thống.
Đánh giá
Ưu điểm
Nền tảng của ứng dụng phân tán là khả năng gọi hàm từ xa, giữa các tiến trình nằm trên cùng một máy tính hay giữa các máy tính khác nhau. Trong môi trường .NET, khả năng này được cung cấp với nhiều phương án:
Webservice cung cấp khả năng kết nối qua Internet các tiến trình trên các hệ điều hành khác nhau.
.NET Remoting cung cấp khả năng kết nối các tiến trình với rất nhiều lựa chọn về giao thức, khuôn dạng dữ liệu.
Nhược điểm
Nhược điểm đáng kể nhất của .NET platform là sự gắn liền của nó với hệ điều hành Windows. Tuy nhiên, hệ điều hành Windows cũng đã là hệ điều hành phổ biến nhất cho các máy trạm và Microsoft đang từng bước xây dựng thành công những phiên bản Windows dành cho các máy chủ. Các máy tính sử dụng Windows chiếm một tỷ trọng rất lớn trên thế giới nói chung và tại Việt Nam nói riêng. Mặt khác, có thể coi việc .NET Framework được chạy trên ngôn ngữ trung gian IL là một bước tiến đưa platform này tới khả năng chạy trên mọi hệ điều hành.
So sánh tốc độ giữa .NET plattform và Java plattform
Nhiều nghiên cứu đã được thực hiện để so sánh giữa 2 plattform. Các báo cáo chi tiết về kết quả cũng như mã nguồn có thể tải miễn phí từ Internet, do đó phần này không thực hiện mô tả chi tiết, mà chỉ cung cấp đánh giá tổng quát kết quả so sánh. Nghiên cứu được xem xét ở đây là ứng dụng Nile, sử dụng để so sánh giữa .NET và J2EE (
Ứng dụng Nile
Ứng dụng Nile là một ứng dụng thương mại điện tử điển hình đuợc sử dụng rộng rãi bởi các phòng thí nghiệm nhằm mục đích kiểm tra hoạt động của các sản phẩm máy chủ ứng dụng. Ứng dụng này khá đơn giản và bao gồm các đặc điểm điển hình của một ứng dụng Web:
90% số trang được dùng để hiển thị dữ liệu.
Sử dụng mã trên máy chủ để xử lý logic nghiệp vụ và logic dữ liệu
Có các giao tác CSDL (đặt hàng sản phẩm, tạo mới tài khoản khách hàng…)
Đăng nhập/đăng xuất.
Dữ liệu thực tế (1.000.000 bản ghi khách hàng, 2.000.000 bản ghi sản phẩm).
Có duy trì thông tin về phiên làm việc của khách hàng.
Sự so sánh được tiến hành giữa các phiên bản của ứng dụng Nile sử dụng các công nghệ khác nhau:
ASP.NET viết bằng C#(Windows 2000)
ASP và VB6 sử dụng COM+ (Windows 2000)
ISAPI/ATL Server C++ (Windows2000)
JSP, chạy trên một máy chủ ứng dụng Java (Linux 7.1)
EJB, chạy trên một máy chủ ứng dụng Java (Linux 7.1)
Phần cứng sử dụng để kiểm tra
Bao gồm:
Một máy chủ cơ sở dữ liệu Compaq® ProLiantTM 8500 (8 CPU 550 MHz Intel® Pentium® III, 3 GB RAM).
Một máy chủ ứng dụng Compaq® ProLiantTM 8500 (với 2, 4 và 8 CPU 550 MHz Intel® Pentium® III, 2 GB RAM). Máy chủ có 2 card mạng riêng để xử lý tải máy trạm.
100 máy trạm Dell (1 CPU 500MHz với 128 MB RAM), sử dụng Windows 2000 Server, cài đặt phần mềm tạo tải để thực hiện so sánh Quest Software Benchmark Factory 2.5.
Một Benchmark Factory Controller để kiểm soát quá trình test, thu thập dữ liệu và phân tích kết quả
Kết quả so sánh
Nguồn (Microsoft .NET and J2EE, An Autoscribe whitepaper, March 2004, Autoscribe Ltd, Wellington House, Riseley Business Park,Basingstoke Road, Riseley, Berkshire, RG7 1NW)
Hình 17 : Đồ thị thể hiện mức đỉnh của tải đạt được
Hình 18 : Đường cong tải khi máy chủ ứng dụng sử dụng 2 CPU
Hình 19: Đường cong tải khi máy chủ sử dụng 4 CPU
Hình 110: Đường cong tải khi máy chủ sử dụng 8 CPU
Kết luận
Hiệu năng và khả năng mở rộng là một tiêu chí tối quan trọng khi lựa chọn một công nghệ nền. Một bài kiểm tra sử dụng để so sánh hiệu năng phải dựa trên một bối cảnh ứng dụng sát với thực tế, bao gồm kết nối cơ sở dữ liệu, thông tin về phiên làm việc… và các yếu tố khác phổ biến trong các ứng dụng web. Ứng dụng Nile đạt được các tiêu chuẩn này. So sánh cho thấy ứng dụng Nile sử dụng ASP.NET cho hiệu năng tốt hơn 345% trên một máy chủ 8 CPU so với khi sử dụng EJB, với cùng chức năng bộ đệm được sử dụng. Khi không sử dụng bộ đệm, hiệu suất của hệ thống dùng ASP.NET cao hơn 421% so với hệ thống sử dụng EJB.
Nghiên cứu công nghệ nền .NET Framework
Giới thiệu
Kiến trúc khung .NET (.NET Framework) là một thành phần tích hợp của môi trường Windows, hỗ trợ việc xây dựng và chạy các ứng dụng thế hệ mới và các Web services. .NET Framework:
Cung cấp một môi trường lập trình hướng đối tượng, trong đó đối tượng được chứa và kích hoạt tại chỗ hoặc kích hoạt tại chỗ nhưng phân tán qua internet, hoặc kích hoạt từ xa.
Cung cấp một môi trường chạy ứng dụng cho phép tối thiểu hóa các xung đột phiên bản và xung đột triển khai ứng dụng.
Đẩy mạnh việc chạy các đoạn mã an toàn.
Loại bỏ các vấn đề về hiệu năng của các môi trường biên dịch hoặc kịch bản (script).
Cho phép người lập trình có thể sử dụng các kinh nghiệm thống nhất trong việc phát triển các loại ứng dụng khác nhau, chẳng hạn ứng dụng kiểu Windows và ứng dụng Web.
Xây dựng các phương thức giao tiếp dựa trên các chuẩn công nghiệp nhằm mục đích bảo đảm rằng các mã chương trình dựa trên .NET Framework có thể tích hợp với các mã chương trình khác.
.NET Framework gồm 2 thành phần chính: môi trường chạy thực(common language runtime - CLR) và thư viện lớp .NET Framework.
Môi trường chạy thực là nền tảng của .NET Framework. Môi trường này đóng vai trò một tác nhân quản lý mã chương trình lúc chạy, cung cấp các dịch vụ cốt lõi như quản lý bộ nhớ, quản lý tiến trình, gọi hàm từ xa…,đồng thời kiểm tra thực hiện ràng buộc an toàn kiểu và các quy tắc khác của mã chương trình nhằm nâng cao tính bảo mật và độ an toàn. Mã chương trình gọi tới môi trường chạy thực được gọi là mã có kiểm soát (managed code), trong khi mã không gọi tới môi trường chạy thực được gọi là mã không kiểm soát (unmanaged code).
Thư viện lớp, thành phần thứ hai của .NET Framework, là một hệ thống các kiểu đối tượng được viết sẵn và có thể sử dụng để phát triển các ứng dụng khác nhau, từ các ứng dụng dòng lệnh tới các ứng dụng sử dụng giao diện người dùng phức tạp.
.NET Framework có thể được chứa trong các trình chủ không kiểm soát. Các trình chủ này thực hiện nạp môi trường chạy thực vào trong các tiến trình của chúng và khởi tạo việc chạy các mã có kiểm soát, tạo nên một môi trường cho phép khai thác cả các tính năng có kiểm soát và không kiểm soát. Một vài trình chủ như vậy đã được cung cấp sẵn, tuy nhiên người sử dụng có thể phát triển các trình chủ của riêng mình. ASP.NET là một trình chủ như vậy. ASP.NET chứa môi trường chạy thực cho phép chạy các mã có kiểm soát phía máy chủ. ASP.NET làm việc trực tiếp với môi trường chạy thực để chạy các ứng dụng ASP.NET và các Web services. Chi tiết về các ứng dụng ASP.NET và các Web services sẽ được đề cập ở phần sau. Internet Explorer cũng là một ví dụ về một ứng dụng không kiểm soát đóng vai trò một trình chủ cho môi trường chạy thực. Điều này cho phép các điều khiển có thể được nhúng vào trong trang HTML.
Các ứng dụng không kiểm soát
Các ứng dụng có kiểm soát
Hệ điều hành/ Phần cứng
ASP.NET (chạy thực)
Các ứng dụng Web có kiểm soát
Môi trườngchạy thực
Thư viện .NET
Thư viện các đối tượng tự tạo
Internet Information Services
Hình 21 : .NET Framework
Môi trường chạy thực của .NET Framework
Giới thiệu
Môi trường chạy thực quản lý bộ nhớ, tiến trình, kích hoạt mã chương trình, kiểm tra độ an toàn kiểu, biên dịch và các cung cấp các dịch vụ khác của hệ thống. Các trình biên dịch và các bộ công cụ khai thác các tính năng của môi trường chạy thực và cho phép người lập trình sử dụng các tính năng này trong mã nguồn. Mã nguồn phát triển với các bộ biên dịch huớng tới môi trường này được gọi là mã có kiểm soát. Các mã này thừa hưởng được các tính năng như tích hợp giữa các loại ngôn ngữ khác nhau, tăng độ an toàn bảo mật, quản lý phiên bản và hỗ trợ lập trình, các dịch vụ debug….
Để cho phép môi trường chạy thực có thể cung cấp các dịch vụ cho mã có kiểm soát, các trình biên dịch phải tạo ra các dữ liệu đặc tả (metadata). Các dữ liệu này mô tả các kiểu, các thành viên và các truy vấn (references) trong đoạn mã. Dữ liệu đặc tả được lưu cùng với mã nguồn, trong các file chạy của môi trường chạy thực (portable executable – PE files). Khi chạy, môi trường chạy thực sẽ sử dụng thông tin này để định vị và nạp các lớp, thực hiện tạo đối tượng trong bộ nhớ, xử lý các lời gọi hàm, tạo ra mã máy, kiểm tra an toàn bảo mật…
Môi trường chạy thực cho phép thiết kế các thành phần ứng dụng và ứng dụng mà trong đó các đối tượng có thể dễ dàng giao tiếp với nhau, không phụ thuộc vào ngôn ngữ tạo ra chúng. Chẳng hạn, có thể định nghĩa một lớp bằng một ngôn ngữ và sau đó sử dụng một ngôn ngữ khác để tạo một lớp kế thừa từ lớp này, hoặc gọi hàm của lớp này. Cũng có thể thực hiện truyền một đối tượng của một lớp viết bằng ngôn ngữ này vào trong một hàm của một đối tượng của một lớp viết bằng ngôn ngữ khác. Sở dĩ có khả năng tích hợp đa ngôn ngữ này là nhờ các trình biên dịch và các công cụ hướng môi trường chạy thực đều sử dụng một hệ thống kiểu chung định nghĩa bởi môi trường chạy thực, và tuân theo các quy định của môi trường chạy thực khi định nghĩa các kiểu mới, cũng như khi tạo và sử dụng các đối tượng.
Khi tính đến yếu tố an toàn, mỗi thành phần ứng dụng có kiểm soát được cấp các mức độ tin cậy khác nhau, tùy thuộc vào một số tác nhân trong đó có nguồn gốc của ứng dụng (Internet, mạng LAN hay ngay tại máy trạm). Điều này có nghĩa là một đoạn mã có kiểm soát có thể hoặc không thể thực hiện các hoạt động truy xuất file, truy xuất registry hay các hoạt động có tính nhạy cảm khác, ngay cả khi được sử dụng trong cùng một ứng dụng.
Môi trường chạy thực kiểm tra bảo mật truy cập mã ứng dụng. Chẳng hạn, một ứng dụng nhúng trong trang Web có thể thực hiện chạy một hình hoạt họa hay chơi một bản nhạc, nhưng sẽ không được phép truy cập vào hệ thống file hay hệ thống mạng.
Môi trường chạy thực cũng giúp loại bỏ nhiều vấn đề của các phần mềm. Nó tự động xử lý quá trình duy trì đối tuợng, quản lý các con trỏ tới đối tượng và tự động hủy chúng khi không cần sử dụng tới. Quá trình này giúp giải quyết 2 lỗi thường gặp nhất khi phát triển ứng dụng: rò rỉ bộ nhớ hoặc truy xuất sai địa chỉ bộ nhớ.
Môi trường chạy thực cũng giúp tăng tốc độ phát triển ứng dụng. Người lập trình có thể viết các ứng dụng bằng ngôn ngữ mình ưa thích, trong khi đó vẫn sử dụng được các tính năng của môi trường chạy thực, các thư viện và các thành phần ứng dụng khác viết bởi các lập trình viên khác trên những ngôn ngữ khác. Bất kỳ các trình biên dịch nào hướng tới .NET Framework cũng sẽ cho phép các chương trình viết bằng ngôn ngữ đó sử dụng được các tính năng của .NET Framework.
Trong khi hỗ trợ phương thức lập trình có kiểm soát, .NET Framework vẫn cho phép thực hiện các tương tác giữa mã có kiểm soát và mã không kiểm soát, cho phép người lập trình tiếp tục sử dụng các thành phần sử dụng COM và các DLL.
Môi trường chạy thực cũng được thiết kế để tối ưu hiệu năng chạy của mã chương trình. Mặc dù môi trường chạy thực cung cấp rất nhiều các dịch vụ chạy thực chuẩn, các mã chương trình có kiểm soát không phải chạy theo chế độ thông dịch. Tính năng “dịch đúng lúc” (just-in-time compiling - JIT) cho phép các mã có kiểm soát chạy trên ngôn ngữ máy. Trong khi đó, chức năng kiểm soát bộ nhớ sẽ giúp tăng cường hiệu năng nhờ thực hiện các tính năng tối ưu vùng nhớ như thu gom vùng nhớ…
Mã có kiểm soát
Quá trình chạy của mã có kiểm soát (mã chạy trong môi trường chạy thực của .NET Framework) bao gồm các bước sau:
Trình biên dịch
Để mã chương trình có thể sử dụng được các tính năng mà môi trường chạy thực cung cấp, phải sử dụng các trình biên dịch có hỗ trợ môi trường chạy thực. Các trình biên dịch này bao gồm Visual Basic, C#, Visual C++, Jscript hay các trình biên dịch được cung cấp bởi nhà cung cấp thứ ba như Eiffel, Perl, COBOL…
Là môi trường hỗ trợ đa ngôn ngữ, môi trường chạy thực cung cấp nhiều các kiểu dữ liệu và tính năng ngôn ngữ. Trình biên dịch sẽ quyết định các tính năng nào chương trình có thể sử dụng được. Trình biên dịch cũng quyết định cú pháp mà mã nguồn phải sử dụng. Nếu muốn một thành phần ứng dụng có thể được gọi từ các ngôn ngữ khác, thành phần đó chỉ cung cấp ra các tính năng ngôn ngữ quy định bởi .NET Framework.
Ngôn ngữ trung gian MSIL
Khi dịch mã nguồn thành mã có kiểm soát, trình biên dịch đã thực hiện chuyển đổi mã nguồn thành một ngôn ngữ trung gian (Microsoft Intermediate language - MSIL). Ngôn ngữ này gồm một tập hợp các lệnh không phụ thuộc vào phần cứng nhưng có thể chuyển đổi dễ dàng thành ngôn ngữ của phần cứng (mã máy). MSIL gồm các lệnh thực hiện nạp, chứa, khởi tạo và gọi hàm đối với các đối tượng, cũng như các lệnh thực hiện các phép toán số học và logic, các cấu trúc điều khiển, truy cập bộ nhớ, xử lý lỗi và một số hoạt động khác. Trước khi chương trình chạy, MSIL phải được chuyển đổi thành mã máy, thường nhờ vào một bộ dịch đúng lúc (just-in-time JIT compiler). Các bộ dịch này được cung cấp bởi môi trường chạy thực trên nhiều kiến trúc máy tính mà nó hỗ trợ.
Khi trình biên dịch tạo ra MSIL, nó cũng tạo ra thông tin đặc tả dữ liệu. Thông tin này mô tả các kiểu trong mã nguồn, bao gồm định nghĩa của mỗi kiểu, khai báo của mỗi thành viên của kiểu… Khối lệnh MSIL và thông tin đặc tả dữ liệu được lưu trong một file chạy (portable executable - PE). Khuôn dạng này cho phép mô tả về các mã chương trình, cũng có nghĩa là không cần tới các thư viện kiểu hay ngôn ngữ định nghĩa giao diện IDL. Trong quá trình chạy, môi trường nhận thực tiến hành xác định vị trí và lấy ra các thông tin đặc tả từ file PE khi cần thiết.
Dịch MSIL thành ngôn ngữ máy
Khi chương trình chạy, ngôn ngữ MSIL trong file PE phải được dịch thành ngôn ngữ máy bởi một bộ dịch đúng lúc (JIT). Cùng với môi trường nhận thực, Microsoft cung cấp các bộ dịch JIT cho mỗi kiến trúc CPU mà nó hỗ trợ, vì vậy một tập ngôn ngữ MSIL có thể được dịch và chạy trên nhiều kiến trúc. Tuy nhiên, nếu một đoạn mã có kiểm soát có gọi tới các hàm API phụ thuộc nền hay các thư viện phụ thuộc nền, đoạn mã đó sẽ trở nên phụ thuộc nền.
Trong quá trình dịch MSIL thành mã máy, mã MSIL cũng được kiểm tra (trừ khi người quản trị đã thiết đặt chế độ bỏ qua kiểm tra). Quá trình này sẽ xem xét mã MSIL và các thông tin đặc tả dữ liệu để đảm bảo rằng mã là an toàn kiểu, tức là chỉ truy cập các địa chỉ bổ nhớ mà nó được phép. Tính an toàn kiểu giúp cách ly các đối tượng và do đó tránh khỏi các phá hoại do cố ý hoặc vô ý. Nếu yêu cầu an toàn kiểu được thiết lập và mã không qua được quá trình kiểm tra, một lỗi sẽ được tạo ra khi mã chương trình chạy.
Chạy chương trình
Môi trường chạy thực cung cấp một cơ sở hạ tầng cho phép chạy chương trình và kích hoạt các dịch vụ trong quá trình chạy chương trình. Khi lần đầu tiên một hàm được gọi, bộ dịch JIT tiến hành dịch hàm đó thành ngôn ngữ máy. Trong những lần sau, đoạn ngôn ngữ máy đó sẽ được sử dụng mà không phải tiến hành dịch lại.
Trong quá trình dịch, mã có kiểm soát sử dụng các dịch vụ như thu hồi đối tượng không sử dụng, bảo mật, tương tác với mã không kiểm soát, debug đa ngôn ngữ…
Quản lý bộ nhớ tự động
Quản lý bộ nhớ tự động là một trong các dịch vụ mà môi trường nhận thực cung cấp. Người lập trình không phải viết mã để thực hiện các công việc quản lý bộ nhớ khi viết mã có kiểm soát. Điều này giúp tránh các lỗi thường gặp như quên giải phóng đối tượng gây rò rỉ bộ nhớ, hoặc truy xuất vào vùng nhớ của một đối tượng đã được giải phóng.
Khởi tạo vùng nhớ
Khi một tiến trình mới được khởi tạo, môi trường chạy thực dành ra một miền bộ nhớ có địa chỉ liên tiếp dành cho tiến trình. Vùng địa chỉ này được gọi là heap. Heap lưu trữ một con trỏ tới địa chỉ tiếp theo có thể dùng để lưu trữ đối tượng.
Khởi tạo vùng nhớ từ heap nhanh hơn khởi tạo vùng nhớ sử dụng các phương thức không kiểm soát. Vì môi trường chạy thực khởi tạo vùng nhớ cho một đối tượng bằng cách cộng một giá trị vào con trỏ, quá trình này diễn ra rất nhanh. Thêm và đó, các đối tượng mới được khởi tạo liên tiếp sẽ chiếm các vùng nhớ liên tiếp trong bộ nhớ, vì vậy chương trình có thể truy cập tới các đối tượng nhanh hơn.
Hoàn trả vùng nhớ
Hệ thống thu thập vùng nhớ (garbage collector) sẽ quyết định thời điểm nào thích hợp nhất để thu hồi lại vùng nhớ cho một đối tượng. Hệ thống này quyết định rằng một đối tượng không được dùng nữa căn cứ vào thông tin về các gốc của chương trình, cung cấp bởi môi trường chạy thực và bộ dịch JIT. Hệ thống lên danh sách các đối tượng có thể được truy xuất từ các gốc này. Các đối tượng nằm ngoài danh sách sẽ được lựa chọn để hủy. Khi một đối tượng được hủy, vùng nhớ cho các đối tượng còn lại sẽ được nén lại (sắp xếp liên tiếp lại) nhờ việc sao chép bộ nhớ. Vì quá trình nén vùng nhớ làm giảm hiệu năng hoạt động, nên nó chỉ được thực hiện khi số lượng đối tượng bị hủy đạt đến một mức nhất định. Để tăng hiệu năng, môi trường nhận thực còn sử dụng một phương pháp khác, đó là tạo vùng nhớ cho các đối tượng lớn ở trong một vùng riêng. Trong vùng này, khi các đối tượng bị hủy, bộ nhớ không bị nén lại, để tránh việc sao chép vùng nhớ kích thước lớn sẽ làm giảm hiệu năng.
Hoàn trả vùng nhớ cho các tài nguyên không kiểm soát
Hệ thống thu hồi vùng nhớ tự động có thể thực hiện quản lý vùng nhớ đối với phần lớn các đối tượng. Tuy nhiên, đối với các tài nguyên không kiểm soát, cần thực hiện giải phóng trực tiếp. Ví dụ điển hình nhất của các loại tài nguyên không kiểm soát là các đối tượng bao bọc tài nguyên hệ điều hành như file, cửa sổ hay kết nối mạng. Mặc dù hệ thống thu hồi vùng nhớ tự động có thể theo dõi chu trình sống của một đối tượng như vậy, nó không biết làm thế nào để giải phóng tài nguyên gắn với đối tượng đó. Khi viết một đối tượng truy xuất tài nguyên không kiểm soát, người lập trình cần cung cấp phương thức cần thiết để giải phóng tài nguyên, trong một hàm Dispose kiểu public. Các đối tượng sử dụng đối tượng này sẽ có thể sử dụng hàm này để thực hiện giải phóng tài nguyên khi cần thiết.
Cấu tử
Cấu tử (assembly) là các khối cấu thành nên các ứng dụng .NET Framework. Cấu tử là một khái niệm quan trọng trong lập trình với .NET Framework. Một cấu tử thực hiện các chức năng sau:
Chứa mã chương trình mà môi trường chạy thực có thể kích hoạt. Các mã MSIL trong một file chạy PE sẽ không thể được kích hoạt nếu không có một bản kê cấu tử kèm theo.
Là một miền an ninh. Cấu tử chính là một đơn vị để thực hiện gán quyền.
Là một miền kiểu. Mỗi tên kiểu đầy đủ chứa tên của cấu tử chứa nó. Một kiểu tên là MyType nạp trong phạm vi một cấu tử sẽ khác với một kiểu MyType nạp trong phạm vi cấu tử khác.
Là một đơn vị cho việc đánh phiên bản. Cấu tử là đơn vị nhỏ nhất có thể tiến hành đánh phiên bản. Tất cả các kiểu và tài nguyên trong cùng một cấu tử được đánh cùng một phiên bản. Hai cấu tử cùng tên nhưng khác nhau bởi chỉ số phiên bản được coi là 2 cấu tử hoàn toàn khác nhau.
Cấu tạo của cấu tử
Thông thường, một cấu tử gồm 4 thành phần:
Bản kê cấu tử, chứa thông tin đặc tả cấu tử.
Thông tin đặc tả các kiểu trong cấu tử.
Mã MSIL.
Tập hợp các tài nguyên.
Trong các thành phần trên, chỉ có bản kê cấu tử là bắt buộc. Tuy nhiên một cấu tử có ý nghĩa phải có chứa hoặc các kiểu, hoặc các tài nguyên.
Có nhiều cách để chứa các thành phần cấu tử. Cách đầu tiên là tập hợp lại trong một file vật lý.
Hình 22 : Tập hợp thành phần cấu tử trong một file
Các thành phần cấu tử cũng có thể chứa trong nhiều file. Các loại file bao gồm các file chứa module mã đã dịch (*.netmodule), các file tài nguyên (*.bmp hoặc *.jpg) và một số loại file khác.
Hình 23 : Tập hợp thành phần cấu tử trong nhiều file
Các file tạo nên cấu tử không có liên kết nào về mặt vật lý. Chúng chỉ được liên kết thông qua bản kê cấu tử, và được môi trường chạy thực coi như một đơn vị.
Cấu tử nhiều file thích hợp khi cần kết hợp các thành phần ứng dụng viết bởi các ngôn ngữ khác nhau. Phương pháp này cũng được sử dụng để lưu các kiểu ít sử dụng trong một module riêng, thay vì phải download toàn bộ ứng dụng với kích thước lớn, người dùng chỉ phải download mỗi module khi cần sử dụng đến.
Bộ đệm cấu tử
Mỗi máy tính có cài môi trường chạy thực .NET có một bộ đệm chung gọi là bộ đệm cấu tử. Bộ đệm này chứa các cấu tử chia sẻ bởi các ứng dụng khác nhau trên máy.
Các cấu tử chỉ được cài đặt vào bộ đệm cấu tử khi thật sự cần thiết. Nếu một trong các cấu tử của ứng dụng được lưu trong bộ đệm, việc cài đặt ứng dụng sẽ không còn chỉ đơn giản là copy thư mục ứng dụng, mà còn phải chuyển cấu tử vào trong bộ đệm.
Có nhiều cách để đăng ký một cấu tử vào bộ đệm:
Sử dụng một bộ cài đặt được thiết kế để làm việc với bộ đệm. Đây là phương án tiện lợi nhất, và được khuyến nghị sử dụng trong trường hợp triển khai ứng dụng.
Sử dụng công cụ Gacutil.exe được cung cấp bởi .NET Framework SDK.
Sử dụng Windows Explorer để kéo thả cấu tử vào trong bộ đệm.
Hai phương pháp sau chỉ nên sử dụng trong môi trường phát triển và test ứng dụng.
Đối với đa số các ứng dụng .NET Framework, các cấu tử của một ứng dụng được chứa trong thư mục của ứng dụng hoặc một thư mục con của thư mục này, hoặc trong bộ đệm. Nếu file cấu tử được lưu ở các thư mục khác, cần chỉ ra đường dẫn sử dụng tag trong file cấu hình.
Các cấu tử tồn tại song song
Tồn tại song song là khả năng lưu và kích hoạt nhiều phiên bản của một ứng dụng hoặc thành phần ứng dụng trên cùng một máy tính. Điều này cũng có nghĩa là có thể có nhiều phiên bản của môi trường chạy thực, hay nhiều phiên bản ứng dụng hay thành phần ứng dụng sử dụng 1 phiên bản của môi trường chạy thực trên cùng một máy tại cùng một thời điểm.
Miền ứng dụng
Các hệ điều hành và các môi trường chạy thực thường cung cấp các mức phân cách giữa các ứng dụng. Sự phân tách này đảm bảo rằng mã chạy trong ứng dụng này không ảnh hưởng tới một ứng dụng không liên quan khác.
Miên ứng dụng cung cấp một dạng phân cách như vậy. Các miền ứng dụng thường được tạo ra bởi các trình chủ, là các tiến trình có nhiệm vụ khởi tạo môi trường chạy thực trước khi một ứng dụng bắt đầu kích hoạt.
Trước đây, tiến trình được sử dụng để phân cách các ứng dụng chạy trên cùng một máy. Mỗi ứng dụng được nạp vào trong một tiến trình riêng biệt, ngăn cách giữa các ứng dụng với nhau. Đó là vì địa chỉ bộ nhớ có liên quan mật thiết tới tiến trình. Một con trỏ bộ nhớ sử dụng trong tiến trình này không có nghĩa gì trong tiến trình khác. Thêm vào đó, không thể thực hiện gọi trực tiếp giữa 2 tiến trình, mà phải thực hiện thông qua các proxy. Quá trình này làm giảm nhiều hiệu năng của hệ thống.
Miền ứng dụng cung cấp một mức phân cách độc lập tương tự với tiến trình, nhưng với chi phí thấp hơn nhiều. Có thể chạy nhiều miền ứng dụng trong cùng một tiến trình, được phân cách độc lập, nhưng giữa các miên ứng dụng với nhau không có các quá trình làm giảm hiệu năng của hệ thống như giữa tiến trình với tiến trình. Khả năng chạy nhiều ứng dụng trong cùng một tiến trình làm tăng đáng kể khả năng của máy chủ.
Miền ứng dụng có các đặc điểm sau:
Lỗi trong một ứng dụng này không ảnh hưởng tới các ứng dụng khác. Vì mã an toàn kiểu không thể tạo ra các lỗi về bộ nhớ, mã trong một miền ứng dụng không thể ảnh hưởng các ứng dụng khác trong cùng tiến trình.
Từng chương trình riêng biệt có thể được dừng, trong khi toàn bộ tiến trình vẫn chạy.
Mã trong một ứng dụng không thể truy xuất trực tiếp mã hay tài nguyên của ứng dụng khác. Môi trường chạy thực đảm bảo điều này nhờ chặn các lời gọi trực tiếp giữa các đối tượng khác miền ứng dụng. Đối tượng truyền giữa các miền được sao chép hoặc truy xuất qua proxy. Nếu đối tượng được sao chép, lời gọi đến đối tượng được coi là cục bộ: cả đối tượng gọi và đối tượng bị gọi đều trong cùng một miền. Nếu đối tượng được truy xuất thông qua proxy, lời gọi là từ xa: đối tượng gọi và đối tượng bị gọi nằm trong các miền khác nhau. Các lời gọi từ xa giữa các miền sử dụng kiến trúc tương tự với gọi từ xa giữa các tiến trình hay giữa các máy, trong đó, thông tin đặc tả đối tượng bị gọi phải được cung cấp cho cả hai miền ứng dụng, để lời gọi hàm có thể được dịch thành mã máy khi chạy.
Miền ứng dụng lưu các thiết đặt cấu hình như chính sách phiên bản của ứng dụng, đường dẫn tới các cấu tử mà ứng dụng truy xuất…
Quan hệ giữa miền ứng dụng và cấu tử
Để chạy một ứng dụng, ít nhất một cấu tử phải được nạp vào một miền. Một ứng dụng điển hình gồm nhiều cấu tử nạp vào một miền. Mặc định, môi trường chạy thực nạp một cấu tử vào trong miền ứng dụng chứa mã gọi đến nó. Như vậy, mã và dữ liệu của một cấu tử là độc lập đối với ứng dụng sử dụng cấu tử.
Nếu một cấu tử được sử dụng trong nhiều miền của một tiến trình, mã của cấu tử (chứ không phải dữ liệu) có thể được chia sẻ bởi các miền này. Khả năng này giúp giảm dung lượng bộ nhớ cần thiết. Một cấu tử được coi là không phụ thuộc miền nếu mã của nó có thể được chia sẻ bởi tất các các miền trong tiến trình.
Có thể nạp các cấu tử theo chế độ không phụ thuộc miền hoặc không. Nếu nạp theo chế độ không phụ thuộc miền, hiệu năng sẽ giảm đi, nhưng lượng bộ nhớ đòi hỏi được giảm đi.
Quan hệ giữa miền ứng dụng và tuyến đoạn
Miền ứng dụng tạo nên vùng phân tách cho mã có kiểm soát. Trong khi đó, tuyến đoạn (thread) là kiến trúc của hệ điều hành sử dụng bởi môi trường chạy thực để chạy mã. Tại thời điểm chạy, mã có kiểm soát được nạp vào trong miền ứng dụng và chạy bởi một tuyến đoạn của hệ điều hành.
Không có sự tương ứng 1-1 giữa miền ứng dụng và tuyến đoạn. Nhiều tuyền đoạn có thể cùng chạy trong một miền ứng dụng tạo một thời điểm và một tuyến đoạn cũng không bị hạn chế trong một miền ứng dụng.
Tại một thời điểm, một tuyến đoạn chỉ chạy trong một miền ứng dụng. Có thể xác định miền ứng dụng hiện đang chứa tuyến đoạn sử dụng hàm Thread.GetDomain.
Hệ thống kiểu chung
Hệ thống kiểu chung định nghĩa cách thức định nghĩa và sử dụng các kiểu trong môi trường chạy thực. Hệ thống này cho phép khả năng tích hợp giữa các thành phần ứng dụng khác ngôn ngữ. Các chức năng chính bao gồm:
Cung cấp một nền tảng cho phép tích hợp đa ngôn ngữ, thực hiện an toàn kiểu và chạy ứng dụng với tốc độ cao.
Định nghĩa các quy tắc mà các ngôn ngữ phải tuân thủ để đảm bảo các đối tượng viết bằng các ngôn ngữ khác nhau có thể giao tiếp được với nhau.
Phân loại kiểu
Hệ thống kiểu chung hỗ trợ 2 loại kiểu. Mỗi loại kiểu lại được chia thành các loại nhỏ hơn
Kiểu giá trị
Kiểu giá trị lưu trực tiếp dữ liệu. Các kiểu giá trị chia làm 3 loại : sẵn có (cung cấp sẵn bởi môi trường chạy thực), người dùng định nghĩa hay các kiểu liệt kê.
Kiểu
Các kiểu tham chiếu chứa tham chiếu tới một địa chỉ bộ nhớ. Kiểu tham chiếu có thể là các kiểu tự mô tả, kiểu con trỏ hoặc kiểu giao diện. Kiểu tự mô tả tiếp tục được chia thành mảng và các lớp. Chi tiết về phân loại kiểu có thể được tham khảo trong Hình 24.
Hình 24 : Phân loại kiểu
Giá trị và đối tượng
Giá trị là các biểu diễn dữ liệu dưới dạng nhị phân, và kiểu cung cấp cách thức đọc ra ý nghĩa của dữ liệu đó. Giá trị của một kiểu giá trị được lưu trực tiếp dưới dạng nhị phân, còn giá trị của kiểu tham chiếu lại là địa chỉ của một vùng nhớ, vùng nhớ này mới là nơi lưu dữ liệu của kiểu.
Giá trị của các kiểu tự mô tả được gọi là đối tượng. Giá trị của một kiểu thực hiện một giao diện cũng được coi là giá trị của kiểu giao diện đó. Tương tự, giá trị của một kiểu dựa trên một kiểu gốc cũng được coi là một giá trị của kiểu gốc.
Kiểu và không gian tên
Đối với môi trường chạy thực, một không gian tên (namespace) chỉ là một tập hợp các tên kiểu. Môi trường chạy thực chỉ nhận biết các kiểu thông qua tên đầy đủ.
Tích hợp đa ngôn ngữ
Môi trường chạy thực hỗ trợ tích hợp đa ngôn ngữ. Tuy nhiên, để đảm bảo rằng mã viết ra có thể được sử dụng bởi bất kỳ ngôn ngữ này, người lập trình phải tuân theo một số nguyên tắc, được định nghĩa trong các nguyên tắc ngôn ngữ chung (Common Language Specification -CLS).
Thư viện .NET Framework
Thư viện .NET Framework là một hệ thống các kiểu đối tượng được tích hợp chặt chẽ với môi trường chạy thực. Dựa trên mô hình lập trình hướng đối tượng, thư viện cung cấp các đối tượng có thể sử dụng làm lớp cơ sở cho các ứng dụng của người lập trình có thể kế thừa. Ví dụ, các lớp kiểu tập hợp của .NET Framework đều sử dụng một tập các giao diện mà người lập trình có thể dựa trên đó để phát triển một kiểu tập hợp cho riêng mình. Kiểu tập hợp mới này, nhờ tuân theo các giao diện định trước, có thể làm việc với các kiểu khác trong thư viện .NET Framework.
Thư viện .NET Framework hỗ trợ các thao tác lập trình cơ bản như xử lý chuỗi, truy xuất cơ sở dữ liệu, truy xuất file… Bên cạnh đó, thư viện cũng cung cấp các kiểu dành riêng cho các kiểu ứng dụng khác nhau. Có thể sử dụng thư viện .NET Framework để phát triển các loại chương trình và dịch vụ sau:
Các ứng dụng console (ứng dụng giao tiếp dòng lệnh)
Các ứng dụng có giao diện cửa sổ.
Các ứng dụng ASP.NET
Các Web service.
Các Windows service.
Phát triển và tích hợp ứng dụng trên môi trường .NET
Kiến trúc ứng dụng
Các kiến trúc ứng dụng truyền thống và ưu nhược điểm
Kiến trúc 1 lớp (1-tier)
Kiến trúc này gắn với giai đoạn đầu khi máy tính ra đời. Trong giai đoạn này, mỗi máy tính chỉ là một thiết bị có khả năng tính toán độc lập, không được nối với nhau. Vì vậy, các ứng dụng sử dụng kiến trúc 1 lớp là các ứng dụng có quy mô nhỏ, chạy trên các máy tính độc lập. Một ví dụ cho loại ứng dụng này là các chương trình xử lý văn bản, các chương trình có sử dụng cơ sở dữ liệu quy mô nhỏ sử dụng foxpro, access.
Trình diễn
Xử lý
Lưu trữ
Hình 31 : Mô hình 1 lớp – toàn bộ chương trình chạy trên 1 máy tính
Khi các máy tính bắt đầu được kết nối với nhau, để tận dụng được các ưu thế của môi trường mạng, một giải pháp tình thế cho các ứng dụng với kiến trúc 1 lớp là chia sẻ tài nguyên cơ sở dữ liệu. Tuy nhiên, việc chia sẻ tài nguyên này thuần túy là sự chia sẻ ở mức hệ điều hành – cụ thể là chia sẻ file.
Trong mô hình File server này, máy chủ chỉ đóng vai trò là nơi lưu trữ chương trình, lưu trữ dữ liệu. Thực chất việc xử lý dữ liệu đều do các máy trạm đảm nhận. Các vấn đề như xử lý tương tranh, bảo mật… chỉ được thực hiện ở máy trạm. Do vậy kiến trúc này có rất nhiều hạn chế về năng lực xử lý, an toàn dữ liệu, giá thành nâng cấp phần cứng, khả năng mở rộng hệ thống… Các nhược điểm của kiến trúc này khiến cho việc phát triển những hệ thống lớn, phức tạp là không thể thực hiện được.
Trong kiến trúc này, toàn bộ logic của chương trình chỉ được chạy ở máy trạm, bao gồm việc truy cập dữ liệu, xử lý yêu cầu, hiển thị kết quả. Máy chủ chỉ là nơi lưu dữ liệu thuần túy. Kiến trúc này được gọi là kiến trúc 1 lớp (1-tier).
Kiến trúc 2 lớp (2-tier)
Tiếp sau mô hình File server, người ta thường phát triển các ứng dụng mạng theo mô hình Client/Server. Trong mô hình này, khi có yêu cầu thực hiện công việc, client sẽ gửi yêu cầu tới server. Chương trình server sẽ thực hiện yêu cầu. Khi có kết quả, server sẽ gửi lại cho client.
Trong một số ứng dụng, một chương trình ứng dụng khi thì đóng vai trò client, khi thì đóng vai trò server tuỳ theo ngữ cảnh cụ thể thường được coi là các client/server kiểu Peer-to-Peer.
Trong mô hình Client/Server, giao diện client trong các hệ thống này thường là giao diện GUI Application, và một số giao diện đã được cung cấp dưới dạng Web browser với điểm mạnh là tích hợp ngôn ngữ script. Mô hình client/server thực chất đồng thời xử lý tác nghiệp (business process) và hiển thị thông tin (data presentation).
Các ứng dụng sử dụng các hệ cơ sở dữ liệu tập trung cũng được xếp vào loại này. Khác biệt giữa trường hợp chia sẻ file của kiến trúc 1 lớp và cấu trúc này nằm ở tính chất chủ động của máy chủ. Một cơ sở dữ liệu tiên tiến không chỉ là một tập các file chứa dữ liệu, mà còn bao gồm các tiến trình xử lý phức tạp chạy trên máy chủ để thực hiện các vấn đề xử lý tương tranh, kiểm tra ràng buộc dữ liệu, xử lý dữ liệu… Ví dụ của các hệ thống ứng dụng kiểu này là một chương trình chạy trên máy trạm kết nối tới cơ sở dữ liệu Oracle.
Mô hình này đã giải quyết được nhiều điểm hạn chế của mô hình File server. Một phần khối lượng xử lý đã được chuyển cho máy chủ thực hiện. Tuy vậy, khối lượng công việc xử lý này thường chỉ ở mức tương đối nhỏ và chủ yếu thực hiện các công việc xử lý có tính kỹ thuật chứ không phải là nghiệp vụ, chẳng hạn xử lý tương tranh trong các hệ cơ sở dữ liệu. Điều này khiến cho mô hình 2 lớp, mặc dù đã giải quyết được nhiều vấn đề của mô hình 1 lớp, vẫn chưa phải là giải pháp thích hợp cho các hệ thống lớn, đòi hỏi khả năng tích hợp, mở rộng cao.
Xử lý giao diện + Xử lý nghiệp vụ
Xử lý kỹ thuật chung
Máy chủ
Máy trạm 1
Máy trạm 2
Hình 32 : Mô hình 2 lớp
Trên Hình 32 biểu diễn cấu trúc của mô hình 2 lớp. Cải tiến của mô hình này so với mô hình 1 lớp là các xử lý kỹ thuật đã được chuyển lên chung trên máy chủ. Tuy nhiên có thể thấy rằng phần xử lý nghiệp vụ vẫn được thực hiện tại máy trạm. Vì vậy, mô hình này vẫn còn tồn tại nhiều hạn chế.
Những điểm hạn chế trong mô hình 2 lớp
Hạn chế trong công tác triển khai và bảo hành bảo trì hệ thống
Đối với các ứng dụng được viết theo mô hình client/server thông thường, cần phải cài chương trình cho từng máy trạm làm việc của người sử dụng. Sẽ không có vấn đề gì lớn nếu như số lượng máy trạm làm việc là không đáng kể và nằm tại cùng trong 1 khu vực, tuy nhiên đối với các ứng dụng phục vụ công tác quản lý và điều hành sản xuất kinh doanh của 1 bưu điện tỉnh, số lượng người sử dụng là rất lớn, địa bàn lại trải rộng thì việc cài đặt ứng dụng, cập nhật, quản lý các phiên bản và khắc phục sự cố rất mất nhiều thời gian, nhân lực và chi phí.
Ví dụ: hệ thống Quản lý yêu cầu khách hàng triển khai cho 1 BĐ tỉnh cỡ trung bình sẽ có khoảng 100 người dùng, và cần phải cài đặt tại tại rất nhiều vị trí, trong nội thành có khoảng 2 đến 10 điểm giao dịch, 20 phòng ban và khoảng từ 5 đến 10 huyện (mỗi huyện có ít nhất 1 điểm giao dịch khách hàng)
Hạn chế về năng lực xử lý của hệ thống
Trong các ứng dụng theo mô hình client/server hiện tại, trên server chỉ xử lý một số tác nghiệp đơn giản và trả lại dữ liệu cho máy trạm tiếp tục xử lý, dẫn đến lưu lượng thông tin truyền trên mạng là rất lớn, server gần như chỉ giải quyết bài toán lưu trữ cơ sở dữ liệu và xử lý một số chức năng như: truy nhập đồng thời, tính toàn vẹn và xử lý bảo mật. Điều này dẫn đến khi số lượng người dùng, khối lượng dữ liệu cần xử lý tăng lên, tốc độ đường truyền thấp thì năng lực xử lý của toàn hệ thống sẽ bị ảnh hưởng nghiêm trọng.
Đối với các bài toán có nhiều máy trạm Client (VD như các đầu chương trình tiếp nhận yêu cầu, thu phí của hệ thống Quản lý yêu cầu khách hàng), nếu dùng các ứng dụng Client/Server thông thường, số lượng các kết nối dữ liệu (connection) từ các ứng dụng đến cơ sở dữ liệu thường khá lớn (có thể lên tới vài trăm client). Đặc biệt, khi hệ thống được mở rộng để khách hàng có thể tự chăm sóc qua mạng internet (selfcare), số lượng các kết nối dữ liệu này có thể tới hàng nghìn. Tuy vậy, thực tế các hệ quản trị cơ sở dữ liệu lại giới hạn số kết nối. Đối với hệ quản trị cơ sở dữ liệu Oracle, khi số lượng kết nối nhiều, năng lực xử lý của máy chủ dữ liệu sẽ giảm đáng kể.
Trong trường hợp khối lượng công việc tại server quá lớn chỉ có cách giải quyết duy nhất là nâng cấp server, tuy nhiên việc nâng cấp là có giới hạn.
Hạn chế về khả năng tích hợp (integration)
Trong môi trường có rất nhiều nhà cung cấp dịch vụ nhự hiện nay, khách hàng không còn là của riêng 1 doanh nghiệp nào, họ có thể sử dung rất nhiều các dịch vụ khác nhau từ các nhà cung cấp khác nhau. Vì vậy hệ thống các ứng dụng của một doanh nghiệp không những phải tương tác, tích hợp được với nhau (trong nội bộ doanh nghiệp) mà còn phải có khả năng tích hợp với ứng dụng của các doanh nghiệp khác, hay nói cách khác các ứng dụng của các doanh nghiệp khác nhau phải liên kết được với nhau để tạo thành một môi trường cộng tác (Collaboration) để cung cấp sự tiện lợi tối đa cho khách hàng khi sử dụng dịch vụ.
Trong khi đó nếu sử dụng mô hình client/server khả năng tích hợp là rất yếu. Lý do của các khó khăn trong tích hợp là một tỷ lệ khối lượng xử lý nghiệp vụ của các chương trình vẫn chạy độc lập trên các máy trạm. Việc tích hợp giữa các chương trình chỉ có thể thực hiện ở mức cơ sở dữ liệu, chứ chưa thể thực hiện ở mức nghiệp vụ chương trình. Các ứng dụng 2 lớp vẫn là những chương trình đóng kín rời rạc và nếu chạy trên cùng một máy, chúng không thể truy cập tới các hàm của nhau – và do đó không thể tích hợp được ở mức ứng dụng.
Hạn chế về khả năng cung cấp dịch vụ cho khách hàng
Do hạn chế về khả năng tích hợp, các ứng dụng chỉ giải quyết được phần nghiệp vụ trong nội bộ doanh nghiệp của minh mà không kết hợp được với các dịch vụ do các doanh nghiệp khác cung cấp.
Ví dụ: đối với bài toán lắp đặt thuê bao mới, ta có thể cung cấp giao diện web cho khách hàng đăng ký một cách tự động nhưng do không liên kết được với các ứng dụng của ngân hàng để kiểm tra số dư tài khoản của khách hàng, dẫn đến khách hàng vẫn phải đến các điểm giao dịch để nộp tiền hoặc phải có 1 nhân viên đến thu tại nhà khách hàng.
Hạn chế về tính mềm dẻo của hệ thống
Do tính cạnh tranh rất gay gắt hiện nay, các quy trình nghiệp vụ thường xuyên có sự thay đổi để tạo điều kiện thuận lợi tối đa cho khách hàng,dẫn đến các ứng dụng phần mềm cũng phải được cập nhật và sửa đổi theo, do chưa phân tách được lớp biểu diễn số liệu, lớp xử lý tác nghiệp và lớp cơ sở dữ liệu nên chi phí chỉnh sửa là rất lớn, thời gian dài và rất dễ gây lỗi.
Hạn chế về chi phí cấu hình hệ thống
Trong mô hình client/server, phần lớn logic nghiệp vụ được xử lý ở máy trạm. Vì vậy, khi triển khai hệ thống, cấu hình của các máy trạm đều phải ở mức cao. Số máy trạm trong hệ thống thường từ vài chục tới vài trăm trong một hệ thống nhỏ, nhưng với các hệ thống lớn, số máy trạm có thể lên tới vài nghìn. Chi phí cho phần cứng của hệ thống trở nên rất lớn.
Kiến trúc ứng dụng phân tán (kiến trúc nhiều lớp)
Mô hình Client/Server truyền thống ở trên thường được gọi là mô hình 2 lớp. Ưu điểm của mô hình này so với mô hình 1 lớp xuất phát ở chỗ, trong mô hình này, máy chủ không chỉ còn là nơi lưu trữ dữ liệu, mà đã trở thành nơi chạy một phần logic của chương trình. Tuy nhiên, phần logic này chủ yếu để xử lý các vấn đề kỹ thuật chứ không phải nghiệp vụ của chương trình. Điều này là nguyên nhân tạo nên các nhược điểm kể trên của mô hình này. Với các điểm hạn chế như vậy, việc xây dựng một hệ thống theo chuẩn mới là điều cần thiết.
Kiến trúc phân tán (distributed applications) hay kiến trúc đa lớp (multi-tiers) giải quyết được các vấn đề kể trên. Khái niêm “phân tán” hay “nhiều lớp” được sử dụng để chỉ ra sự phân bổ logic của chương trình trên các máy. Kiến trúc này là một bước kế tiếp của mô hình 2 lớp ở chỗ: nó phát triển tiếp ý tưởng chuyển logic chương trình lên xử lý tập trung ở máy chủ. Điểm khác biệt là ở chỗ, nếu như trong kiến trúc 2 lớp, phần xử lý nghiệp vụ chủ yếu nằm ở máy chủ thì trong kiến trúc phân tán, phần xử lý nghiệp vụ được chuyển lên xử lý ở các máy chủ. Máy trạm lúc này chỉ đóng vai trò thiết bị đầu cuối để nhập dữ liệu.
Lớp hiển thị (Máy trạm)
Lớp nghiệp vụ (Máy chủ ứng dụng)
Lớp cơ sở dữ liệu (Máy chủ cơ sở dữ liệu)
Hình 33 : Kiến trúc nhiều lớp
Hình 33 biểu diễn kiến trúc đơn giản của mô hình nhiều lớp. Trong mô hình này, người ta thường sử dụng một hay nhiều lớp trung gian giữa máy trạm (có thể là các trình duyệt web hoặc ứng dụng) và các máy chủ khác (thường là hệ thống máy chủ cơ sở dữ liệu Enterprise Information System EIS ). Các lớp ở giữa này đóng vai trò máy chủ ứng dụng, trên đó các ứng dụng sẽ được triển khai. Các mã nguồn cần để trao đổi thông tin hoặc để có thể tái sử dụng sẽ được lưu giữ trên máy chủ ứng dụng này. Mô hình máy trạm/ máy chủ ứng dụng/ máy chủ cơ sở dữ liệu sẽ giải quyết tất cả các yếu tố hạn chế trông mô hình client/server thuần tuý.
Vấn đề triển khai và bảo hành bảo trì hệ thống
Trong phần lớn các hệ thống, phần logic xử lý nghiệp vụ chiếm thành phần rất lớn. Với mô hình nhiều lớp, phần xử lý nghiệp vụ được triển khai tập trung tại một số ít máy chủ có cấu hình mạnh. Còn lại phần xử lý giao diện chiếm tỷ trọng nhỏ có thể được chạy theo 2 dạng: trình duyệt web đối với các ứng dụng thin client và Chương trình giao diện đối với các ứng dụng thick client. Đối với dạng thứ nhất, hoàn toàn không cần triển khai gì trên máy trạm. Với dạng thứ hai, Chương trình xử lý giao diện thường ít phải thay đổi và nâng cấp, trong trường hợp phải thay đổi thì khối lượng cũng không nhiều. Vì vậy việc triển khai, bảo trì hệ thống sẽ tập trung ở phần xử lý nghiệp vụ tại các máy chủ, khiến cho công việc cài đặt, sửa chữa, nâng cấp có thể tiến hành dễ dàng.
Vấn đề năng lực xử lý của hệ thống
Trong mô hình nhiều lớp, phần xử lý nghiệp vụ được chạy trên máy chủ ứng dụng. Vì vậy máy chủ ứng dụng mới là phần giao tiếp trực tiếp với máy chủ cơ sở dữ liệu, chứ không phải là các máy trạm như trong mô hình 2 lớp. Kết nối giữa máy chủ cơ sở dữ liệu và máy chủ ứng dụng không nhiều và phân bố rộng như giữa máy trạm và máy chủ ứng dụng trong mô hình 2 lớp. Vì vậy các kết nối này thường được sử dụng với chế độ dành riêng và có tốc độ cao.
Trên các kết nối giữa máy trạm và máy chủ ứng dụng, thông tin truyền đi thường là các thông tin đã được xử lý để hiển thị hay là các thông tin nhập liệu đầu vào, vì vậy lưu lượng trên các kết nối này rất thấp so với mô hình 2 lớp.
Vấn đề tích hợp
Trong mô hình nhiều lớp, phần xử lý nghiệp vụ được tập trung ở máy chủ ứng dụng. Điều này khiến cho việc tích hợp có thể được thực hiện ở mức ứng dụng, thay vì dừng lại ở mức cơ sở dữ liệu như trong mô hình 2 lớp. Việc gọi hàm giữa các tiến trình trên máy chủ ứng dụng có thể được thực hiện bởi rất nhiều kỹ thuật như Web service, .NET Remoting… tùy thuộc vào hệ điều hành. Ranh giới giữa các ứng dụng nhờ vậy trở nên trong suốt đối với người dùng.
Vấn đề cung cấp dịch vụ cho khách hàng
Giải quyết được vấn đề tích hợp, việc các nhà sản xuất ứng dụng phối hợp với nhau để xây dựng nên những hệ thống lớn trở nên khả thi. Vì vậy, các ứng dụng cung cấp cho khách hàng cũng trở nên đơn giản, thuận tiện và chính xác hơn.
Vấn đề tính mềm dẻo và khả chuyển của hệ thống
Các quy trình nghiệp vụ được xử lý tập trung tại các máy chủ. Vì vậy, khi cần thay đổi quy trình nghiệp vụ, nói chung chỉ cần xử lý tập trung tại máy chủ mà người sử dụng ở máy trạm vẫn có thể sử dụng giao diện cũ quen thuộc.
Vấn đề chi phí cấu hình hệ thống
Trong mô hình nhiều lớp, các thiết bị đầu cuối chỉ cần sử dụng để thực hiện công việc xử lý giao diện, vì vậy không cần đòi hỏi cấu hình mạnh. Khi triển khai các hệ thống, khối lượng các thiết bị đầu cuối là lớn hơn rất nhiều so với số lượng máy chủ, có thể tới vài trăm hoặc vài ngàn. Vì vậy, mặc dù chi phí cho các máy chủ tăng lên, chi phí cho toàn bộ hệ thống vẫn được giảm đi đáng kể.
Khuyến nghị
Qua các phân tích ở trên, có thể thấy rõ đặc điểm của mỗi kiến trúc ứng dụng. Kiến trúc 1 lớp (file server) chỉ phù hợp với các ứng dụng nhỏ, chạy trên 1 máy tính. Kiến trúc 2 lớp phù hợp với các ứng dụng cỡ vừa, chạy trên mạng LAN, trong phạm vi một vài phòng ban của doanh nghiệp Kiến trúc phân tán (mô hình nhiều lớp) phù hợp với các ứng dụng có quy mô lớn, đòi hỏi tích hợp giữa nhiều ứng dụng trên các plattform khác nhau, trong phạm vi doanh nghiệp thông qua mạng LAN hoặc trên toàn cầu thông qua Internet.
Cấu trúc ứng dụng phân tán trên .NET
Giao diện người dùng
Người dùng
CSDL
Xử lý tiến trình giao diện
Giao diện cung cấp dịch vụ
Tiến trình nghiệp vụ
Tác nghiệp
Thực thể dữ liệu
Truy xuất cơ sở dữ liệu
Giao diện sử dụng dịch vụ
Dịch vụ từ các hệ thống khác
1
2
3
4
5
8
6
7
Giao tiếp giữa các thành phần
An toàn hệ thống
Hình 34 : Cấu trúc ứng dụng phân tán trên môi trường .NET
Trên Hình 34 là cấu trúc điển hình của một ứng dụng phân tán sử dụng .NET platform.
Giao diện nguời dùng
Hầu hết các ứng dụng phần mềm đều cần có một giao diện để người sử dụng có thể giao tiếp được với ứng dụng. Giao diện người dùng có thể thực hiện được bằng Windows Forms, các trang web ASP, các điều khiển hay bất kỳ kỹ thuật nào có thể sử dụng để hiển thị, định dạng dữ liệu cho người dùng hoặc thu thập và kiểm tra dữ liệu do người dùng nhập vào.
Các thành phần xử lý tiến trình giao diện
Trong nhiều trường hợp, các thao tác của người dùng với hệ thống được tiến hành theo một tiến trình định trước. Ví dụ, tiến trình thực hiện đặt hàng có thể bao gồm: cửa sổ hiển thị thông tin về hàng hóa, cửa sổ cho phép người dùng lựa chọn các sản phẩm, cửa sổ cho phép người dùng nhập các thông tin thanh toán và địa chỉ để gửi hàng hóa. Để thực hiện đồng bộ và tối ưu hóa các quá trình như vậy, có thể sử dụng các thành phần xử lý tiến trình giao diện. Theo cách này, logic điều khiển luồng thực hiện tiến trình (workflow) có thể được tách rời khỏi các thành phần giao diện người dùng. Đồng thời, logic điều khiển này có thể được sử dụng lại cho các loại giao diện khác nhau (web, windows form,..).
Các thành phần xử lý tiến trình nghiệp vụ
Sau khi các dữ liệu yêu cầu đã được thu thập bởi thành phần xử lý tiến trình giao diện, dữ liệu đó có thể được sử dụng để thực hiện một tiến trình nghiệp vụ. Ví dụ, sau khi các thông tin về sản phẩm, hình thức thanh toán và phương thức giao hàng đã được cung cấp cho chương trình, tiến trình thanh toán và sắp xếp việc giao hàng có thể được tiến hành. Các tiến trình này là các tiến trình nghiệp vụ, và thường bao gồm nhiều bước, được thực hiện theo các thứ tự nhất định. Chẳng hạn, thứ tự của quá trình thanh toán có thể bao gồm các bước: tính toán tổng số trị giá của hàng đặt, kiểm tra các thông tin của tài khoản khách hàng, sau đó trừ tiền trong tài khoản của khách hàng và thực hiện lên lịch cho quá trình giao hàng. Các thành phần xử lý tiến trình nghiệp vụ được sử dụng để quản lý chuỗi công việc được sắp xếp như vậy.
Các thành phần tác nghiệp (thực hiện nghiệp vụ)
Đây chính là các bước trong tiến trình nghiệp vụ. Chẳng hạn trong ứng dụng bán hàng trực tuyến, có thể sẽ có một hàm thực hiện việc tính tổng giá trị của đơn đặt hàng, cộng thêm chi phí vận chuyển.... Các thành phần thực hiện nghiệp vụ là các bước làm nên quá trình nghiệp vụ của ứng dụng.
Các thành phần giao tiếp sử dụng dịch vụ
Khi một thành phần thực hiện nghiệp vụ cần gọi tới một dịch vụ cung cấp bởi một hệ thống khác, sẽ cần thực hiện các công việc kết nối, kích hoạt, truyền tham số, lấy dữ liệu trả về... từ dịch vụ đích đó. Những công việc đó được thực hiện bởi các thành phần giao tiếp sử dụng dịch vụ. Ví dụ, quá trình xử lý đơn đặt hàng có thể tại một thời điểm có nhu cầu gọi dịch vụ kiểm tra tính hợp lệ của tài khoản – một quá trình được thực hiện bởi một hệ thống khác. Quá trình gọi này sẽ được thực hiện bởi một thành phần giao tiếp sử dụng dịch vụ. Các thành phần này sẽ tách biệt phần xử lý nghiệp vụ của một ứng dụng với phần logíc phức tạp để kết nối dịch vụ từ ứng dụng khác. Ngoài ra, các thành phần này có thể cung cấp các chức năng như chuyển đổi giữa khuôn dạng dữ liệu mà dịch vụ cung cấp với khuôn dạng dữ liệu mà ứng dụng cần.
Các giao diện cung cấp dịch vụ
Một hệ thống cung cấp dịch vụ cho các hệ thống khác thông qua các giao diện cung cấp dịch vụ. Giao diện này quy định các cách thức yêu cầu và sử dụng dịch vụ.
Các thành phần truy xuất dữ liệu
Hầu hết các ứng dụng đều cần truy xuất dữ liệu tại các điểm nào đó trong một tiến trình xử lý nghiệp vụ. Chẳng hạn, chương trình bán hàng trên mạng sẽ cần lấy dữ liệu về các mặt hàng trong cơ sở dữ liệu để cung cấp cho khách hàng, và cần nhập dữ liệu về đơn đặt hàng vào cơ sở dữ liệu khi khách hàng quyết định mua hàng. Phần công việc truy xuất dữ liệu đó được thực hiện trong các thành phần truy xuất dữ liệu, tách riêng khỏi các phần khác của ứng dụng, nhằm mục đích tránh cho các phần còn lại bị phụ thuộc vào loại hình cơ sở dữ liệu cụ thể.
Các thực thể dữ liệu
Hầu hết trong các ứng dụng, dữ liệu cần được truyền giữa các thành phần của ứng dụng, qua các lớp ứng dụng. Ví dụ, danh sách các sản phẩm cần được truyền từ các thành phần truy xuất dữ liệu tới lớp giao diện của chương trình. Các thông tin này được lưu vào trong các thực thể dữ liệu, có thể là các đối tượng DataSet, DataReader, hoặc các luồng XML, hoặc đơn giản là một nhóm các biến thông thường được sắp xếp thành các cấu trúc (structure).
Giao tiếp giữa các thành phần của ứng dụng
Các phương pháp truyền thống trên các môi trường phi .NET
Ngày nay, việc xây dựng các ứng dụng phân tán đã trả nên phổ biến. Các ứng dụng như vậy bao gồm các thành phần phân bố trong một mạng các máy tính, kết hợp với nhau để hợp thành ứng dụng. Trước đây, các ứng dụng phân tán thường sử dụng một trong các công nghệ quen thuộc, bao gồm Mô hình đối tượng có thành phần phân tán của Microsoft (Microsoft® Distributed Component Object Model -DCOM), Cấu trúc trung gian yêu cầu đối tượng chung (Common Object Request Broker Architecture - CORBA) của OMG hay Kỹ thuật gọi hàm từ xa (Remote Method Invocation - RMI) của Sun. Các kỹ thuật này cung cấp các kiến trúc ổn định và có tính mở cho ứng dụng.
Các kỹ thuật kể trên hoạt động tương đối tốt trong môi trường mạng nội bộ. Tuy nhiên trong môi trường Internet, chúng có 2 nhược điểm cơ bản. Thứ nhất, các kỹ thuật trên không thể kết hợp được với nhau. Mặc dù về tổng thể, chúng đều làm việc với đối tượng, nhưng khi đi vào chi tiết lại khác nhau. Ví dụ, chúng khác nhau về sự kiểm soát chu trình sống của đối tượng, về hỗ trợ hàm tạo, cấp độ thừa kế.... Thứ hai và quan trọng hơn, các kỹ thuật trên đều tập trung vào các phương thức giao tiếp theo kiểu RPC (gọi thủ tục từ xa - Remote Procedure Call). Các giao tiếp theo kiểu này thường dẫn tới việc phụ thuộc chặt chẽ vào nhau giữa các thành phần tham gia vào quá trình giao tiếp.
Trái với các công nghệ trên, các ứng dụng Web dựa trên trình duyệt lại có thể kết hợp với nhau khá tốt mà không dẫn tới sự phụ thuộc lẫn nhau. Các ứng dụng này giao tiếp với nhau sử dụng HTTP để trao đổi các dữ liệu với các khuôn dạng khác nhau. Web service là một sự mở rộng của các phương thức kết nối ứng dụng web. Nó có thể được sử dụng cho tất cả các loại ứng dụng, chứ không chỉ ứng dụng Web dựa trên trình duyệt. Web service cho phép các đối tác trao đổi các bản tin SOAP sử dụng HTTP và các giao thức Internet khác. Vì Web service được xây dựng dựa trên các chuẩn công nghiệp, bao gồm HTTP, XML, SOAP và WSDL, chúng không bị phụ thuộc vào bất cứ ngôn ngữ lập trình, nền (platform) hay thiết bị nào.
Các phương pháp giao tiếp trên môi trường .NET
.NET Framework cung cấp 2 cơ chế giao tiếp : ASP.NET Webservice và .NET Remoting.
ASP.NET Webservice
ASP.NET Webservice cung cấp một giao diện lập trình đơn giản dựa trên việc ánh xạ các bản tin SOAP với các lời gọi hàm. Các cá thể gọi hàm (sử dụng Web service) không cần phải biết thông tin nào về nền, mô hình đối tượng hay ngôn ngữ lập trình đã sử dụng để xây dựng nên Web service đó, mà vẫn có thể sử dụng được nó. Ngược lại, Web service cũng không cần biết các thông tin về đối tác đang gửi các tin nhắn tới nó. Yêu cầu duy nhất giữa bên yêu cầu và bên cung cấp là cả 2 bên phải thống nhất định dạng của các bản tin SOAP, được định nghĩa sử dụng WSDL.
.NET Remoting
.NET Remoting cung cấp một cơ sở hạ tầng cho các đối tượng phân tán. Khác với ASP.NET Web service chủ yếu sử dụng các phương thức giao tiếp dựa trên bản tin, .NET Remoting cung cấp các tính năng phức tạp hơn, bao gồm truyền đối tượng bằng tham trị (sao chép đối tượng) hoặc tham biến (tham chiếu tới đối tượng), kiểm soát chu kỳ sống của đối tượng.... Để có thể sử dụng được .NET Remoting, chủ thể yêu cầu kết nối (client) cần phải được xây dựng sử dụng .NET (hoặc một môi trường hỗ trợ .NET Remoting – hiện nay chỉ có Ja.NET cho Java của Intrinsyc). .NET Remoting cũng cho phép truyền các bản tin SOAP, nhưng các yêu cầu về chủ thể yêu cầu kết nối vẫn không thay đổi, tức là vẫn phải hiểu được các đặc tính của đối tượng .NET.
So sánh ASP.NET Webservice và .NET Remoting
Việc .NET cung cấp hỗ trợ 2 mô hình phân tán đã đặt các nhà phát triển phần mềm trước một câu hỏi : Web service hay .NET Remoting? Để trả lời câu hỏi này, cần so sánh 2 cơ chế này trên một số tiêu chí : giao thức sử dụng, tiến trình chủ, bảo mật, tốc độ, khả năng lưu thông tin trạng thái và khả năng hỗ trợ Giao tác (transaction).
Giao thức sử dụng và tiến trình chủ
Webservice dựa rất nhiều vào SOAP. Mặc dù SOAP không nhất thiết chỉ dùng được với HTTP, ASP.NET Webservice vẫn chỉ có thể truy cập được thông qua HTTP, vì đây là giao thức duy nhất mà ASP.NET hỗ trợ.
Với .NET Remoting, tiến trình chủ (tiến trình chứa đối tượng cung cấp dịch vụ) có thể bao gồm rất nhiều loại : một ứng dụng desktop thông thường, một service của hệ điều hành (Windows Service), một ứng dụng dòng lệnh (console application) hay thậm chí là một tiến trình phụ (worker process) của ASP.NET. .NET Remoting cung cấp 2 giao thức chuẩn TCP và HTTP (thường được gọi là kênh (channel)).
Kênh HTTP thường được sử dụng trong trường hợp IIS (máy chủ web của Microsoft xây dựng trên hệ điều hành Windows) được dùng để chứa tiến trình chủ của .NET Remoting. Khi đó, hệ thống sẽ có được các ưu điềm:
Khả năng tự động chạy tiến trình chủ khi có yêu cầu (khi có yêu cầu, IIS có khả năng tự khởi động và chạy một tiến trình phụ, ở đây chính là tiến trình chủ).
Sử dụng dịch vụ bảo mật của ASP.NET cho các cuộc gọi .NET Remoting giữa các tiến trình.
Bên cạnh SOAP và dữ liệu nhị phân, .NET Remoting còn cho phép tạo ra các định dạng dữ liệu truyền riêng. Tương tự như vậy, ngoài HTTP và TCP, các kênh do người dùng tự định nghĩa cũng có thể sử dụng được với .NET Remoting.
Dịch vụ bảo mật
ASP.NET Web service dựa trên HTTP, do đó nó được tích hợp với kiến trúc bảo mật chuẩn trên Internet. Trước khi kích hoạt Webservice, Dịch vụ Thông tin Internet (Internet Information Service) sẽ tiến hành kiểm tra nhân thực tiến trình gọi. Ngoài ra, với giao thức HTTP, SSL có thể được sử dụng để mã hóa bảo mật các thông tin truyền trên mạng.
Khác với ASP.NET Webservice, .NET Remoting mặc định không hỗ trợ phương thức bảo mật nào trong quá trình gọi hàm giữa các tiến trình. Tuy nhiên, khi một bên của quá trình giao tiếp được chứa trong IIS, các dịch vụ bảo mật của ASP.NET vẫn có thể áp dụng đượcvới .NET Remoting, bao gồm cả việc sử dụng SSL để bảo mật trên toàn tuyến truyền dẫn. Nếu .NET Remoting sử dụng kênh TCP hoặc HTTP nhưng chứa trong các tiến trình bình thường, người sử dụng phải tự thực hiện quá trình nhận thực và kiểm tra quyền.
Khả năng lưu trữ thông tin trạng thái
Các dịch vụ cung cấp qua ASP.NET Webservice mặc định không hỗ trợ thông tin trạng thái. Điều này có nghĩa là Webservice không lưu lại thông tin trạng thái liên quan tới tiến trình khách. Thêm vào đó, mỗi lần một tiến trình khách kích hoạt một Webservice, một đối tượng mới được tạo ra để phục vụ cho yêu cầu của tiến trình khách. Đối tượng này được hủy ngay khi lời gọi kết thúc. Để lưu lại trạng thái giữa các lời gọi tới Webservice, có thể sử dụng cùng kỹ thuật sử dụng với các trang ASP.NET (sử dụng kho thuộc tính Phiên (session) và kho thuộc tính Ứng dụng (application)), hoặc tùy biến một quá trình thích hợp.
.NET Remoting hỗ trợ nhiều lựa chọn về quản lý trạng thái. Các đối tượng được chứa trong tiến trình chủ được phân thành 3 loại:
Các đối tượng SingleCall không lưu thông tin trạng thái – chúng giống với các đối tượng được sử dụng bởi Webservice. Mỗi khi một tiến trình khách thực hiện gọi hàm, tiến trình chủ lại tạo ra một đối tượng SingleCall để đáp ứng lời gọi hàm đó. Đối tượng này bị hủy khi quá trình gọi hàm kết thúc.
Các đối tượng Singleton được tạo ra 1 lần bởi tiến trình chủ và dùng chung cho mọi tiến trình khách. Đối tượng Singleton sẽ lưu lại trạng thái chung cho tất cả các tiến trình khách (tiến trình khách nào khi truy cập vào đối tượng loại này đều có thể sửa các thông tin thuộc tính mà một tiến trình trước đã lưu lại).
Cuối cùng là các đối tượng có thể được khởi tạo bởi tiến trình khách. Đối với các đối tượng này, chu trình sống được quản lý bởi tiến trình khách, mặc dù chúng “sống” trong tiến trình chủ. Mỗi tiến trình khách có thể tạo ra một đối tượng kiểu này trên tiến trình chủ, lưu lại các trạng thái giữa các lời gọi hàm tới đối tượng đó qua các thuộc tính và chủ động hủy đối tượng khi không cần sử dụng nữa.
Hiệu suất hoạt động
Trong các cấu hình kết nối, .NET Remoting cho tốc độ kết nối cao nhất khi sử dụng khuôn dạng nhị phân truyền trên kênh TCP. Tuy nhiên, khi sử dụng khuôn dạng SOAP cho các bản tin, .NET Remoting tỏ ra thua kém ASP.NET Webservice về tốc độ, dù sử dụng kênh TCP hay HTTP. Khi sử dụng khuôn dạng nhị phân trên kênh HTTP, .NET Remoting cho hiệu suất tương đương với ASP.NET Webservice.
Bảng 31 tổng hợp các khác biệt giữa .NET Remoting và Webservice.
.NET Remoting
Webservice
Có thể duy trì hoặc không duy trì trạng thái của đối tượng giữa các lời gọi hàm.
Tất cả các lời gọi hàm đều không duy trì trạng thái
Không cần IIS (có thể dùng IIS với kênh HTTP để sử dụng các tính năng an toàn)
Phải có IIS cài đặt trên máy chủ.
Hỗ trợ tất cả các kiểu biến
Chỉ hỗ trợ một số kiểu cơ bản
Có thể truyền tham số là đối tượng theo kiểu tham biến hoặc tham trị
Không hỗ trợ truyền tham số là đối tượng
Hỗ trợ một kiến trúc truyền dẫn có thể mở rộng được
Chỉ có thể truyền sử dụng XML trên giao thức HTTP
Có thể thêm vào các lớp để tùy biến các bản tin gửi đi
Không thể tùy biến các bản tin
Giao thức SOAP bị giới hạn và chỉ có thể dùng kiểu mã hóa RPC
Giao thức SOAP có thể sử dụng kiểu mã hóa kiểu RPC hoặc văn bản.
Phụ thuộc chặt chẽ về kiến trúc giữa hệ thống khách và chủ
Phụ thuộc lỏng về kiến trúc giữa hệ thống khách và chủ
Bảng 31 : So sánh .NET Remoting và Webservice
Khuyến nghị sử dụng
Khi xây dựng ứng dụng phân tán trên nền .NET, có thể sử dụng các nguyên tắc sau đây để lựa chọn phương thức giao tiếp giữa các thành phần phân tán.
Thứ nhất, ASP.NET Webservice là lựa chọn đầu tiên. Các webservice có thể sử dụng và triển khai một cách dễ dàng. Khi một dịch vụ được cung cấp dưới dạng Webservice, khả năng kết nối từ các máy trạm sử dụng các nền khác nhau là lớn nhất.
Nếu cần xây dựng một mô hình phân tán với các tính năng lập trình mạnh hơn, đồng thời không cần tính đến giao tiếp với các ứng dụng trên nền khác Windows, .NET Remoting là một lựa chọn thích hợp. Nếu sử dụng .NET Remoting, cấu trúc giao tiếp ưu tiên số 1 là kênh HTTP (HTTP Channel – xem thêm phần 3.4 : .NET Remoting) tích hợp với IIS và ASP.NET. Nếu không dùng phương án này, cần phát triển một kiến trúc bảo mật riêng cho chương trình. Do cả máy trạm và máy chủ đều sử dụng .NET, nên sử dụng khuôn dạng nhị phân (binary formatter – xem thêm phần 3.4 : .NET Remoting) thay cho khuôn dạng SOAP. Khi đó hiệu suất sẽ tăng lên đáng kể.
Nếu như hệ thống đòi hỏi yêu cầu cao về hiệu năng, có thể sử dụng .NET Remoting với kênh TCP. Sự kết hợp này cho hiệu quả tốt nhất về mặt tốc độ. Tuy nhiên, như đã đề cập ở trên, với phương án này cần phát triển một kiến trúc bảo mật riêng cho chương trình. Trong phần Phụ lục 1 : Xây dựng kênh truyền an toàn cho giao tiếp .NET Remoting sẽ đề cập tới việc xây dựng một kênh truyền bảo mật giữa máy chủ và máy trạm trong một kết nối .NET Remoting.
.NET Remoting
Trong cấu trúc giao tiếp của .NET Remoting, tiến trình trạm không giao tiếp trực tiếp với đối tượng trên tiến trình chủ mà giao tiếp với một đối tượng đại diện (để đơn giản, thuật ngữ proxy sẽ được sử dụng để đề cập tới đối tượng đại diện). Proxy là một đối tượng, được kích hoạt và chạy trên tiến trình khách, có giao diện giống hệt với giao diện của đối tượng thực trên tiến trình chủ mà nó đại diện. Khi cần gọi các hàm trên đối tượng thực sự trên tiến trình chủ, tiến trình khách sẽ thực hiện gọi tới đối tượng proxy. Proxy sẽ có nhiệm vụ chuyển các lời gọi đó tới đối tượng thực sự chứa trên tiến trình chủ, sau đó trả về các kết quả cho tiến trình khách.
Như biểu diễn trên Hình 35, lời gọi hàm từ tiến trình khách sẽ được truyền từ Proxy qua kênh giao tiếp trước khi đến được đối tượng trên tiến trình chủ. Trong kênh giao tiếp, lời gọi hàm sẽ được truyền qua nhiều lớp. Các lớp này có thể được nhìn nhận như là các lớp trong mô hình phân lớp OSI. Mỗi lớp truyền đi các bản tin cho lớp tương ứng ở đầu bên kia bằng cách ghi vào luồng dữ liệu truyền qua nó. Một ví dụ là quá trình mã hóa và giải mã dữ liệu.
Nếu đặt mô hình này vào trong mô hình phân lớp OSI, có thể thấy rằng toàn bộ kênh giao tiếp sẽ nằm từ tầng thứ 4 - tầng giao vận trở lên trên. Chú ý rằng các thuật ngữ sử dụng cho mỗi lớp, cũng như chức năng của mỗi lớp ở đây và trong mô hình OSI không hoàn toàn giống nhau. Điểm quan trọng mà mô hình OSI đưa ra là sự phân lớp và giao tiếp giữa các lớp cùng mức, chứ không phải là ở quy định về chức năng cụ thể cũng như tên gọi của mỗi lớp. Chính vì vậy mà các mô hình phân lớp mà các nhà sản xuất khác nhau đưa ra không hoàn toàn giống nhau về số lớp, tên gọi lớp hay chức năng mà mỗi lớp thực hiện.
Kênh giao tiếp và giao thức: Trên Hình 35, kênh giao tiếp bao gồm toàn bộ các lớp bên dưới, phục vụ cho quá trình giao tiếp giữa các thành phần ứng dụng. Khái niệm kênh giao tiếp như vậy bao gồm cả các lớp thực hiện định dạng bản tin, các lớp tùy biến do người dùng tự phát triển và giao thức sử dụng. Người dùng có thể thực hiện tùy biến đối với kênh giao tiếp thông qua các lớp tùy biến, chứ không thể thực hiện tùy biến đối với giao thức.
.NET Remoting hỗ trợ 1 trong các loại kênh giao tiếp:
TcpChannel
HttpChannel
Kênh giao tiếp TcpChannel sử dụng lớp định dạng nhị phân hoặc định dạng SOAP để định dạng các bản tin trước khi truyền tới đích sử dụng giao thức TCP. Kênh giao tiếp TcpChannel thực hiện các chức năng sau:
Thực hiện giao tiếp giữa bên gửi và bên nhận sử dụng các socket TCP.
Thực hiện định dạng nhị phân hoặc SOAP đối với các bản tin.
Kênh giao tiếp HttpChannel sử dụng lớp định dạng nhị phân hoặc định dạng SOAP để định dạng các bản tin trước khi truyền tới đích sử dụng giao thức HTTP. Đối với định dạng SOAP, các bản tin được chuyển thành XML, thêm vào một số các header của giao thức SOAP trước khi truyền đi. Kênh giao tiếp HttpChannel thực hiện các chức năng sau:
Thực hiện giao tiếp giữa bên gửi và bên nhận sử dụng các yêu cầu (request) và đáp ứng (response) HTTP.
Thực hiện định dạng nhị phân hoặc SOAP đối với các bản tin.
Có thể nhận thấy rằng tổ hợp định dạng nhị phân và giao thức truyền TCP tạo nên một kênh giao tiếp cho hiệu suất tốc độ cao nhất.
Tiến trình chủ
Kênh giao tiếp
Khách
Proxy
Lớp định dạng
Lớp tùy biến
Lớp giao vận
Đối tượng
Lớp định dạng
Lớp tùy biến
Lớp giao vận
TCP, HTTP
Hình 35: Cấu trúc giao tiếp giữa tiến trình khách và tiến trình chủ trong .NET Remoting
Lớp giao vận (Transport Sink)
Lớp này được gắn vào giao thức truyền dữ liệu cụ thể và không thể thực hiện tùy biến. Chẳng hạn, khi sử dụng giao thức HTTP, lớp giao vận sử dụng sẽ là lớp giao vận tương ứng với HTTP. Người lập trình không thể thực hiện tùy biến đối với lớp giao vận.
Lớp định dạng (Formatter Sink)
Quyết định khuôn dạng của các bản tin truyền đi.
Binary Formatter :Truyền trực tiếp các lời gọi hàm mà không qua biến đổi nào. Phương thức này cho hiệu quả tốc độ tốt nhất.
SOAP Formatter: Chuyển các lời gọi hàm và các giá trị trả về thành các tin nhắn SOAP dưới dạng XML.
Các lớp tùy biến (Custom sinks)
Người lập trình có thể tự phát triển các lớp tùy biến để thực hiện một công việc nào đó, chẳng hạn như mã hóa – giải mã. Trong ứng dụng Quản lý yêu cầu khách hàng, chúng ta sẽ thực hiện 2 lớp như vậy. Lớp thứ nhất thực hiện đồng bộ thông tin người dùng hiện tại giữa tiến trình khách và tiến trình chủ. Lớp thứ hai, ở mức thấp hơn, thực hiện việc mã hóa và giải mã luồng dữ liệu truyền trên kênh nhằm mục đích bảo mật.
Web service
Một web service là một thực thể cung cấp một dịch vụ, ví dụ như xử lý logic. Webservice có thể được truy cập bởi các hệ thống khác nhau sử dụng các chuẩn Internet như XML và HTTP.
Webservice có thể được sử dụng nội bộ trong một ứng dụng hoặc cung cấp ra bên ngoài qua Internet. Webservice cung cấp giải pháp cho phép tích hợp ứng dụng và dữ liệu. Nó sử dụng cơ chế trao đổi tin nhắn dựa trên XML, nhờ vậy cho phép kết nối các hệ thống trên các hệ điều hành khác nhau, với các ngôn ngữ lập trình khác nhau. Cơ chế trao đổi tin nhắn này cũng cho phép cả 2 đầu sử dụng và cung cấp webservice không cần biết thông tin nào khác về đối tác ngoài các thông tin về đầu vào, đầu ra và địa chỉ của webservice.
Các ứng dụng của Webservice
Cung cấp dịch vụ
Trường hợp phổ biến nhất là webservice cung cấp một tính năng cho các đầu cuối. Ví dụ, việc tính chi phí vận chuyển là một chức năng phổ biến trong một ứng dụng thương mại điện tử. Một chức năng như vậy thường cần thông tin chi phí cập nhật thường xuyên từ các nhà cung cấp dịch vụ vận chuyển để sử dụng trong phép tính.
Thay vào đó, nếu nhà cung cấp dịch vụ sử dụng Webservice, ứng dụng chỉ cần gửi một bản tin XML qua Internet tới Webservice đó. Tin nhắn này cung cấp khối lượng và kích thước của gói hàng, địa chỉ gửi – nhận và các thông số khác (như loại hàng). Webservice sẽ tính toán chi phí chuyển hàng sử dụng thông tin cước phí của họ, và trả về thông tin này trong một bản tin trả lời tới cho ứng dụng.
Tích hợp ứng dụng
Webservice có thể sử dụng để tích hợp các ứng dụng có các đặc điểm rất khác biệt với nhau. Trong môi trường các doanh nghiệp lớn, thường có rất nhiều các ứng dụng triển khai ở hầu khắp các phòng ban. Các ứng dụng này thường bị ngăn cách với nhau cả về mặt dữ liệu và logic. Sử dụng Webservice, mỗi ứng dụng như vậy có thể cung cấp các giao diện cho các ứng dụng khác trên các plattform khác sử dụng.
Giải pháp cho thương mại điện tử
Webservice là nền tảng cho một cơ cấu cho phép các ứng dụng có thể tích hợp với nhau, trở thành các giải pháp tổng thể cho các giao dịch thương mại điện tử.
Cơ sở hạ tầng của Webservice
Các đặc điểm của Webservice
Không tạo ràng buộc chặt chẽ giữa các hệ thống. Hai hệ thống tích hợp qua Webservice chỉ có ràng buộc duy nhất là hiểu được các bản tin XML. Các phương thức tích hợp khác đòi hỏi trao đổi một khối lượng thông tin lớn hơn, cũng như đòi hỏi hệ thống này phải có những thông tin nhất định về hệ thống kia.
Phổ dụng. Các hệ điều hành đã, đang và sẽ đều phải có khả năng kết nối với Internet. Webservice cung cấp khả năng kết nối hầu như tất cả các hệ thống có kết nối qua Internet.
Khuôn dạng chuẩn hóa. Webservice sử dụng các tiêu chuẩn phổ biến và mở, nhờ vậy bất kỳ hệ thống nào có hỗ trợ các chuẩn này đều có thể hiểu được Webservice.
Cơ sở hạ tầng của Webservice được biểu diễn trên Hình 36.
Trả về kết quả Webservice
Máy trạm gọi Webservice
Trả về tài liệu mô tả Webservice
Máy trạm yêu cầu mô tả Webservice
Trả về tài liệu khám phá Webservice
Máy trạm yêu cầu tài liệu khám phá Webservice
Trả về URL tới tài liệu khám phá Webservice
Máy trạm tìm kiếm vị trí của Webservice
Sử dụng Webservice
UDDI
Webservice
Thư mục
Khám phá
Mô tả
Giao tiếp
Hình 36 : Kiến trúc hạ tầng của Webservice
Trên Hình 36, kiến trúc thành phần của Webservice bao gồm 4 thành phần
Các thư mục Webservice
Cũng giống như các tài nguyên khác trên Internet, Webservice cũng cần có một cơ chế để cho phép thực hiện tìm kiếm đối với chúng. Các thư mục Webservice cung cấp một nơi tập trung thông tin về các Webservice cung cấp bởi các tổ chức hoặc doanh nghiệp. Một thư mục như vậy cũng có thể là một Webservice, có thể được truy cập và cung cấp kết quả tìm kiếm cho các yêu cầu từ các khách hàng.
UDDI (Universal Description, Discovery, and Integration) là một tiêu chuẩn định nghĩa cách thức công bố và khai thác thông tin về Webservice.
Một máy trạm sử dụng Webservice có thể cần hoặc không cần tới một thư mục webservice.
Khám phá Webservice
Đây là quá trình định vị các tài liệu mô tả một Webservice sử dụng ngôn ngữ mô tả Webservice (WSDL - Web Services Description Language). Nếu một khách hàng của Webservice đã biết vị trí của các tài liệu này, nó có thể bỏ qua quá trình này.
Mô tả Webservice
Để biết cách giao tiếp với một Webservice cụ thể, khách hàng cần đến một mô tả trong đó định nghĩa các giao tiếp mà Webservice đó hỗ trợ.
Các khuôn dạng sử dụng trong giao tiếp
Để có thể thực hiện giao tiếp rộng rãi, Webservice sử dụng các khuôn dạng mở. Đây là những giao thức có thể hiểu được bởi bất kỳ hệ thống nào hỗ trợ các tiêu chuẩn Web chuẩn. SOAP là một giao thức đóng vai trò quan trọng trong giao tiếp Webservice.
Hoạt động của Webservice
Quá trình gọi một Webservice tương tự như quá trình gọi một hàm bình thường. Sự khác biệt cơ bản là thay vì gọi một hàm nằm trong bản thân ứng dụng, lời gọi Webservice sẽ tạo ra một bản tin yêu cầu dựa trên một giao thức nào đó, chẳng hạn HTTP. Webservice có thể nằm trên một máy khác với máy đang thực hiện gọi, vì vậy thông tin mà Webservice cần để xử lý bản tin yêu cầu này cũng được truyền qua mạng tới máy chủ chạy Webservice. Webservice sau đó xử lý các thông tin và gửi kết quả trở về qua mạng tới ứng dụng khách đã yêu cầu Webservice.
Hình 37 : Một chu trình hoạt động của Webservice
Thứ tự các sự kiện xảy ra khi một Webservice được gọi bao gồm:
Ứng dụng khách tạo ra một đối tượng proxy của Webservice tương ứng. Đối tượng này nằm trên cùng một máy với ứng dụng khách.
Ứng dụng khách gọi một hàm của đối tượng proxy, truyền vào các tham số cần thiết cho Webservice. Hàm này sẽ tương ứng với một hàm trên Webservice.
Hệ thống cơ sở hạ tầng của Webservice (mô tả trong phần 3.5.2) sẽ thực hiện chuyển các tham số tới Webservice vào trong một bản tin SOAP và gửi bản tin này qua mạng tới Webservice.
Ở đầu bên kia (máy chủ Webservice), hệ thống hạ tầng Webservice sẽ thực hiện lấy ra các thông tin về lời gọi hàm từ bản tin SOAP, sau đó tạo ra một đối tượng Webservice và gọi hàm của Webservice, truyền vào các tham số đã lấy ra từ bản tin SOAP.
Webservice chạy hàm của nó, trả về kết quả.
Hệ thống hạ tầng Webservice trên máy chủ chuyển các kết quả trả về và các tham số đầu ra vào trong một bản tin SOAP và gửi trả về ứng dụng khách.
Hệ thống hạ tầng trên ứng dụng khách nhận bản tin SOAP, lấy ra các kết quả trả về và truyền cho đối tượng proxy.
Ứng dụng khách nhận được các kết quả trả về.
An toàn hệ thống
Kiến trúc phân tán mang lại nhiều ưu điểm. Tuy nhiên, kiến trúc này cũng làm nảy sinh nhiều vấn đề cần giải quyết. An toàn hệ thống vốn là một vấn đề rất quan trọng trong các hệ thống công nghệ thô
Các file đính kèm theo tài liệu này:
- BaoCaoNET_NghiemThu.doc