Lập trình mạng phân
tán, thường có 2 khái niệm chính: peer to peer và client -
server ... peer to peer là lập trình ngang hàng giữa 2 máy tính ...
còn lập trình client -
server là lập trình cho phép n máy client kết nối tới m máy
server - đây cũng là mô hình chúng ta sẽ gặp nhiều trong thực tế
...
Có thể chia lập trình mạng thành 3 cấp độ, căn cứ theo mức độ thân thiện
với developer và khả năng triển khai:
+ Mức thấp nhất là lập trình sử dụng
socket - có thể truyền từng byte, từng stream lên trên mạng, ứng dụng này thường
gặp trong các ứng dụng mạng cỡ nhỏ (vd: trong 2 máy tính, trong 1 mạng LAN
...).
+ Mức cao hơn là lập trình sử dụng, triển khai ứng dụng theo mô hình
dịch vụ (service) - quản lí mạng theo mô hình: kết nối, tạo tham chiếu client
trên
server và trả về, gọi hàm và truyền dữ liệu thông qua proxy của đối
tượng trả về từ
server (vd: RMI trên Java hay Remoting trên .NET...), mô hình này
thường gặp trong các ứng dụng mạng cỡ trung bình và lớn, đòi hỏi tính
performance cao (vd: các ứng dụng mạng đòi hỏi kết nối nhiều - liên tục và sử
dụng diện rộng như các dịch vụ chat, game online ...), ưu điểm chính của mô hình
này là tính performance cao, bảo mật, nhưng nhược điểm là tính đa nền
(multiplatform) và tính khả chuyển chưa cao (server và client phải cùng 1 công
nghệ phát triển.)
+ Mức cao nhất là triển khai ứng dụng theo mô hình triển
khai trên web, điển hình nhất ta có thể thấy là các web application và web
service, mới nhất giờ có công nghệ WCF của M$ (tổng hợp tất cả trong 1) ... mô
hình này cho phép triển khai trên diện rộng, phục vụ lượng khách hàng lớn ...
nhưng cũng có nhược điểm là tính performance chưa cao, bù lai, nó có khả năng
mềm dẻo (flexibility) cao (server và client không cần sử dụng chung một công
nghệ). Chúng ta thường thấy những ứng dụng loại này trong các ứng dụng được cung
cấp từ một nhà cung cấp nào đó (vd: các số liệu chứng khoán, thời tiết
...)
Để học lập trình mạng, chúng ta cần những kiến thức căn bản nào
?
- Đầu tiên, cái chúng ta xét tới là kiến thức nền tảng ... để học lập trình
mạng, các bạn nên nắm một chút về lí thuyết mạng (môn mạng của thày Gia Hiểu và
thực hành quản trị mạng của thày Long b ở năm 3 ấy), nhưng mình nghĩ là không
cần quá sâu lắm, cũng không lăn tăn nếu điểm mấy môn ấy thấp (bản thân mình được
có 5 môn thày Hiểu thôi...), thay vì đó, ta chỉ cần nắm được nguyên tắc hoạt
động của các mạng máy tính như: địa chỉ IP, các mạng con ... (1 chút kiến thức
CCNA sẽ tốt hơn cho bạn).
- Tiếp đó, chúng ta cần một chút kiến thức hểu biết
về công nghệ lập trình, công cụ lập trình ... Trước "các cụ" sử dụng VC++/VB 6.0
với nền tảng winsock, DCOM ... để lập trình mạng (khi học môn lí thuyết mạng,
thày Hiểu sẽ cho các bạn 1 ví dụ về sử dụng Winsock trên VB6 để thử...). Giờ thì
cái đó ít sử dụng, đa phần giờ người ta sử dụng 2 nền tảng Java và .NET, hai nền
này cũng na ná nhau thôi, ta chỉ cần chọn 1 trong 2 là được, tùy theo thói quen
của bạn ...
- Tư tưởng, cách thức lập trình đa luồng (multi threading) cũng
giúp bạn rất nhiều khi lập trình phân tán (do chúng ta phải xử lý nhiều thứ
trong 1 thời điểm) ... kiến thức input output với luồng (stream);
- Các kiến
thức căn bản về ngôn ngữ - nền tảng lập trình. Trong khuôn khổ bài viết này,
mình sử dụng ngôn ngữ lập trình Java - một ngôn ngữ lập trình khá phổ biến trên
thế giới