Các mô hình ứng dụng
Mô hình Client/Server, mô hình n lớp (n-tier),.. là những thuật ngữ mà chúng ta thường được nghe nói đến khi xây dựng một ứng dụng mạng. Mỗi mô hình có những đặc điểm khác nhau với những thuận lợi và khó khăn riêng. Là người phát triển ứng dụng thì bạn cần ...
Mô hình Client/Server, mô hình n lớp (n-tier),.. là những thuật ngữ mà chúng ta thường được nghe nói đến khi xây dựng một ứng dụng mạng. Mỗi mô hình có những đặc điểm khác nhau với những thuận lợi và khó khăn riêng. Là người phát triển ứng dụng thì bạn cần phải dựa vào đặc điểm của từng mô hình để đưa ra quyết định đỳng đắn trong việc chọn mô hình phù hợp cho ứng dụng. Ứng dụng sẽ hoạt động hiệu quả, dễ nâng cấp, bảo trì nếu được lựa chọn mô hình phù hợp, ngược lại, ứng dụng sẽ hoạt động kém hiệu quả và khó nâng cấp, bảo trì nếu mô hình ứng dụng không phù hợp. Do vậy việc lựa chọn mô hình phù hợp cho ứng dụng rất quan trọng.
Trong chương này chúng ta sẽ được giới thiệu khái quá về các mô hình ứng dụng. Các đặc điểm chính của từng mô hình, ưu nhược điểm của từng mô hình và cuối cùng là một vài lời khuyên khi lựa chọn mô hình phù hợp cho ứng dụng.
Thời kỳ đầu khi máy tính cá nhân còn rất đắt. khiến người ta nghĩ đến mô hình tính toán tập trung. Trong mô hình này có một máy tính lớn (main frame) và nhiều thiết bị đầu cuối (terminal). Tất cả các xử lý đều được thực hiện trên máy main frame. Các thiết bị đầu cuối chỉ có nhiệm vụ hiển thị giao diện người dựng và tương tác với người sử dụng, chúng không có bất cứ xử lý nào. Chính vì vậy năng lực tính toán của máy main frame nhanh chóng giảm xuống khi có nhiều người sử dụng đồng thời.
Khi giá máy tính cá nhân giảm xuống nhanh chúng thì mô hình tập trung không còn phù hợp nữa. Mỗi người sử dụng sở hữu một máy tính cỏ nhân. Lúc này mô hình của ứng dụng cũng thay đổi theo để phù hợp. Các ứng dụng được viết ra để chạy trên máy tính cỏ nhân. Quá trình xử lý trong các ứng dụng kiểu này được thực hiện toàn bộ trên máy tính đó.
Khi mạng máy tính phát triển, xuất hiện nhu cầu chia sẻ tài nguyên (như CPU, bộ nhớ, CSDL, tệp tin, máy in...). Lúc này xuất hiện mô hình Client/Server. Cả Client và Server đều tham gia vào quá trình xử lý. Mô hình client/server có ảnh hưởng lớn nhất đến ngành cụng nghệ phần mềm. Mô hình client/server giúp cho những máy tính riêng lẻ, khả năng xử lý thấp có thể chạy được những ứng dụng rất lớn, phức tạp. Mô hình client/server giúp phát triển một phương thức phát triển ứng dụng mới là việc phõn chia ứng dụng thành nhiều lớp (tier), mỗi lớp thực hiện những chức năng chuyên biệt.
Mô hình Client/Server được xem là tiêu biểu của mô hình 2lớp (two-tier). Trong mô hình này có nhiều Client và một Server. Giữa các Client và Server liên lạc với nhau qua hệ thống mạng. Ở mô hình này khi client yêu cầu một thông tin gì đó thì client sẽ gửi yêu cầu đến cho server, server xử lý các yêu cầu từ client rồi phản hồi những thông tin mà client cần.
Trong mô hình 2 lớp điển hình thì lớp Server thường là các Server CSDL. Server này có nhiệm vụ quản lý phần dữ liệu của chương trình như: Quản lý dữ liệu, bảo mật, quản lý người dựng, thực thi các truy vấn, ràng buộc và những thủ tục lưu trữ. Còn Client thì thường gồm các tác vụ sau: Hiển thị giao diện người dựng, tương tác với CSDL, kiểm soát lỗi...
M ô hình 2 lớp được chia làm 2 loại:
- Tính toán tập trung ở máy khách (fat client – thin server):
Ở mô hình này, phía client thường phải đảm nhận cả 2 lớp là giao diện và chức năng, còn server thường chỉ đảm nhận nhiệm vụ của lớp CSDL.
Ưu điểm của mô hình này là đơn giản, thớch hợp cho những ứng dụng nhỏ. Tuy nhiên nó cũng có một số nhược điểm sau:
+ Do tính toán nghiêng về phía client nhiều nên đòi hỏi client phải có cấu hình đủ mạnh.
+ Do lớp chức năng của chương trình nằm ở phía client nên khi chương trình cần nâng cấp thì sẽ rất khó khăn vì phải cập nhật lại chương trình nằm ở toàn bộ các client.
+ Do mọi thao tác nằm trên client nên thao tác yêu cầu dữ liệu giữa client và server nhiều dẫn đến tốc độ chương trình chậm.
- Tính toán tập trung ở máy chủ (fat server – thin client):
Ở mô hình này, máy khách chỉ đảm nhiệm phần giao diện còn máy chủ thực hiện chức năng của tầng chức năng và tầng CSDL.
Ngược lại với loại fat client – thin server thì loại này có ưu điểm là giảm sự lưu thông trên mạng và tốc độ nhanh hơn do lớp chức năng của chương trình nằm ở máy chủ cùng với CSDL, do đó mọi thao tác với CSDL của chương trình đều được thực hiện ngay trên máy chủ và thông tin lưu thông trên mạng chỉ là những kết quả được trả về cho người dùng sau khi được tính toán. Mặt khác, do phần lõi của chương trình được đặt tập trung tại máy chủ nên việc cập nhật chương trình sẽ dễ dàng hơn. Tuy nhiên, do công việc được tập trung quá nhiều tại máy chủ nên đòi hỏi cấu hình máy chủ phải đủ mạnh, đặc biệt là khi có nhiều máy khách cùng truy xuất tới máy chủ cùng lúc.
Mô hình Client/Server là bước tiến lớn so với mô hình tính toán tập trung và mô hình Desktop. Các máy Client đó biết chia sẻ gánh nặng xử lý với Server. Điều này có nghĩa là khi có nhiều Client kết nối vào đồng thời cũng không làm năng lực của Server giảm xuống nhanh chúng. Với sự cải tiến của hệ thống mạng, các ứng dụng Client/Server ngày nay chạy tương đối nhanh. Người sử dụng ngồi từ nhiều nơi khác nhau có thể truy cập vào CSDL đặt trên máy Server với thời gian ít hơn. Tuy nhiên, vẫn còn tồn tại nhiều bất lợi trong mô hình này như:
- Thiếu tính mở rộng khi quy mô của ứng dụng lớn lên, chẳng hạn như số máy khách tăng lên. Lúc này nếu có nhiều máy khách kết nối vào đồng thời sẽ làm năng lực của Server giảm xuống nhanh chóng.
- Các kết nối đến máy chủ phải được duy trì. Mà mỗi Server thường chỉ giới hạn số kết nối tối đa. Cho nên không thể có quá nhiều kết nối được mở đồng thời.
- Khó khăn trong việc bảo mật ứng dụng.
- Mã lệnh khó sử dụng lại vì nó thường được tập trung tại phía Client.
- Khó bảo trì hệ thống khi cần thay đổi các quy tắc nghiệp vụ. Mỗi khi cần nâng cấp ứng dụng cần cập nhật lại trên tất cả các máy khách.
Do mô hình Client/Server có các nhược điểm nêu trên nên nó chỉ thích hợp với các ứng dụng có quy mô vừa và nhỏ.
Mô hình 3 lớp ra đời nhằm giải quyết các yếu điểm của mô hình 2 lớp. Một ứng dụng thực tế thường được chia làm 3 lớp:
o Lớp giao diện (Presentation logic): lớp này là cầu nối giữa người dùng với ứng dụng, cung cấp những chức năng ứng dụng cho người dùng và nhận lệnh từ người dựng cho ứng dụng. Lớp này được thiết kế sao cho càng thân thiện với người dựng càng tốt.
o Lớp nghiệp vụ (Business logic): đây là phần lõi của một chương trình, cung cấp tất cả những chức năng nghiệp vụ của chương trình cho lớp giao diện bên trên. Trong mô hình 2 lớp thì các chức năng này thường được nằm ở phía Client nay được chuyển vào lớp nghiệp vụ.
o Lớp CSDL (Data Access logic): lớp này cung cấp khả năng truy xuất đến CSDL cho lớp nghiệp vụ nếu cần. Lớp dịch vụ dữ liệu đại diện cho một hay nhiều kho lưu trữ dữ liệu của chương trình.
Trong mô hình này các xử lý được sẩy ra tại cả ba tầng của ứng dụng. Mỗi lớp sẽ gồm một vài chức năng riêng biệt.
Trong mô hình 3 lớp, các chức năng của chương trình được tách ra thành 3 lớp riêng biệt. Việc tách lớp này làm cho các phần của chương trình độc lập hơn, đáng tin cậy hơn, chương trình trở nên linh động hơn trong việc thay thế, nâng cấp và do đó mô hình này rất thích hợp với những ứng dụng có yêu cầu thay đổi thường xuyên.
Việc phân chia ứng dụng thành nhiều lớp còn giúp cho ứng dụng trở nên dễ dàng thay đổi, cập nhật và đáng tin cậy hơn. Khi quy mô của ứng dụng được mở rộng, mô hình n – tier không còn đáp ứng được nữa thì người ta nghĩ đến mô hình đa lớp (n – tier). Tuy nhiên ta không nên chia ứng dụng thành quá nhiều lớp dẫn đến khó xây dựng, bảo trì và nâng cấp ứng dụng.
Lợi ích của phương pháp lập trình hướng thành phần
Các ứng dụng thông thường thường được viết dưới dạng đơn thể (monolithic) có nghĩa là ứng dụng được biên dịch thành một file thực thi duy nhất. Các ứng dụng này thường không thể tùy biến hoặc không thể nâng cấp các chức năng bên trong nó một cách “động” được. Nó cần phải được sửa đổi chương trình nguồn và biên dịch lại.
Do đó, để chương trình đơn giản hơn trong việc sửa đổi cũng như nâng cấp, người ta thường chia chương trình chính ra thành nhiều thành phần nhỏ chạy tương đối độc lập nhau.
Lợi ích của việc phân chia ứng dụng thành các thành phần:
- Làm cho ứng dụng dễ tùy biến (customize) hơn.
- Có thể xây dựng ứng dụng nhanh hơn bằng cách sử dụng các thành phần có sẵn. Các thành phần có sẵn thường đă được biên dịch và được chứa trong các thư viện các thành phần như DLL, EXE hoặc các ActiveX….
- Dễ dàng chuyển đổi một ứng dụng bình thường thành một ứng dụng phân bố có thể sử dụng các thành phần được phân bố trên mạng.
Lúc này đòi hỏi các thành phần phải thoả mãn các ràng buộc:
- Các thành phần phải độc lập với ngôn ngữ mà nó được tạo ra. Một thành phần nếu được tạo bởi bởi ngôn ngữ VB thì có thể sử dụng được trong các ứng dụng viết bằng VC và ngược lại...
- Vì các thành phần phải dấu đi ngôn ngữ mà nó được tạo ra nên nó phải được sử dụng ở dạng nhị phân.
- Các thành phần có thể được nâng cấp mà không làm hỏng ứng dụng khác. Một thành phần mới có thể chạy tốt với cả ứng dụng cũ và mới.
- Các thành phần phải trong suốt về vị trí trên mạng. Một ứng dụng đối xử với các thành phần nằm trong cùng quá trình, khác quá trình hoặc nằm ở một máy khác đều như nhau.
Lợi ích của các ứng dụng phân tán
Một ứng dụng phân tán có tất cả các lợi ích của phương pháp lập trình hướng thành phần. Ngoài ra nó còn có các lợi ích sau:
- Ứng dụng có khả năng mở rộng cao, nếu tăng thêm người sử dụng chỉ cần tăng thêm số máy chủ ở tầng trung gian.
- Các component có tính sử dụng lại cao.
- Dễ nâng cấp và bảo trì ứng dụng.
- Dễ dàng quản lý bảo mật.
- ..
Có rất nhiều lựa chọn khác nhau cho một ứng dụng. Mỗi mô hình có một vài ưu nhược điểm khác nhau. Vì vậy việc lựa chọn một mô hình đóng đắn là một việc không dễ chút nào. Để lựa chọn đóng mô hình cho ứng dụng thì trước tiên ta cần trả lời các câu hỏi sau:
Cơ sở dữ liệu:
Hệ quản trị CSDL là gì? Việc lựa chọn một hệ CSDL phù hợp cũng góp phần không nhỏ vào sự thành công của ứng dụng. Việc lựa chọn hệ CSDL nào cho phù hợp với ứng dụng của bạn phụ thuộc vào rất nhiều yếu tố như:
- Bạn có đủ tiền để mua một hệ quản trị CSDL lớn như Oracle, SQL Server .. hay không?
- Dữ liệu của bạn có nhiều hay không?
- Dữ liệu có nhậy cảm hay không?
- Các giao dịch có thường xuyên sẩy ra hay không?....
Mô hình
Bạn cần lựa chọn mô hình phù hợp cho ứng dụng, việc lựa chọn một mô hình đóng phụ thuộc vào rất nhiều yếu tố khác nhau như:
- Số người dùng có tăng lên đột ngột trong tương lai hay không?
- Bạn có muốn dễ dàng trong việc bảo trì ứng dụng hay không?
- Cơ sở hạ tầng (hệ thống mạng, khả năng của các máy tính) có tốt hay không?
- Kiến thức nền tảng của đội ngũ lập trình viên?...
Xây dựng các quy tắc nghiệp vụ
Nếu ứng dụng của bạn gồm nhiều tầng thì bạn cần phải quyết định đưa các chức năng nào vào tầng nào. Việc quyết định nên đưa chức năng nào vào tầng nào là một việc tương đối khó và nó ảnh hưởng trực tiếp đến hiệu quả của ứng dụng.