Tiểu luận Lập trình mạng
BỘ GIÁO DỤC & ĐÀO TẠO
ĐẠI HỌC ĐÀ NẴNG
TIỂU LUẬN
LẬP TRÌNH MẠNG
ĐỀ TÀI:
VIẾT CHƯƠNG TRÌNH ĐẢM BẢO GẮN BÓ
DỮ LIỆU KHI CẬP NHẬT TRONG CÁC CSDL PHÂN
TÁN TẠI CÁC NGÂN HÀNG
Giảng viên : PGS.TS. Lê Văn Sơn
Học viên : Bạch Ngọc Dương
Nguyễn Hữu Thị Mỹ Linh
Lớp : Cao học KHMT - K11
GVHD: PGS.TS Lê Văn Sơn HVTH: Bạch Ngọc Dương
Nguyễn Hữu Thị Mỹ Linh
1
Đà Nẵng, tháng 03 năm 2010
Tiểu luận Lập trình mạng
LỜI NÓI ĐẦU
Ngày nay, công nghệ mạng máy tính và Internet đã phát triển mạnh, cho phép
chúng ta khai thác các nguồn tài nguyên là những kho tư liệu vô cùng rộng lớn về các
lĩnh vực, và được bố trí ở những nơi rất xa nhau.
Đối với các hệ thông tin lớn, dữ liệu không chỉ được lưu trữ và quản lý bởi các
server độc lập mà thường được phân tán trên nhiều server và phân bổ ở các vị trí địa lý
khác nhau. Hệ thống cho phép xử lý đa truy cập đồng thời cho phép đăng ký từ xa. Một
trong những lợi ích của việc phân tán dữ liệu như vậy là nhằm chia yêu cầu xử lý dữ
liệu cho nhiều máy nhằm tăng năng lực xử lý thông tin của hệ thống.
Vấn đề gắn bó dữ liệu trong các hệ thống phân tán nói chung và các hệ thống
thông tin đăng ký trên mạng nói riêng như việc đăng ký các tua du lịch, mua bán trong
trò chơi điện tử . . .
Người sử dụng (NSD) ở đây được hiểu theo nghĩa rộng, dưới góc độ của hệ điều
hành, có thể là các nhà chuyên môn, các máy tính, các hệ tự động vận hành, gắn với máy
tính . . . đang khai thác hệ thông qua lệnh điều khiển theo một thuật toán nào đó nhằm
đạt được mục tiêu xác định từ trước .
GVHD: PGS.TS Lê Văn Sơn HVTH: Bạch Ngọc Dương
Nguyễn Hữu Thị Mỹ Linh
3
Tiểu luận Lập trình mạng
Hệ điều hành các máy tính và mạng máy tính gọi tắt là hệ điều hành được đặt sát
phần cứng, nó gắn kết chặt chẽ với phần thiết bị bởi một hệ thống các chương trình, điều
khiển và sắp xếp nhằm khai thác phần cứng phục vụ cho các chương trình ứng dụng khác
nhau của NSD khác nhau với kết quả và hiệu năng chấp nhận được .
Như vậy, hệ tin học bao gồm ba thực thể : phần cứng, phần mềm và dữ liệu, được
mô tả ở hình I-2
Vậy hệ thống tin học (Informatic System) là một hệ thống bao gồm hai thành phần
cơ bản phần cứng (hardware) và phần mềm (software) gắn bó hữu cơ với nhau và có khả
năng xử lý thông tin.
I.1.2 Hệ tin học phân tán
I.1.2.1 Định nghĩa
Hệ tin học phân tán hay nói ngắn gọn là hệ phân tán (Distributed System) là hệ
thống xử lý thông tin bao gồm nhiều bộ xử lý hoặc bộ vi xử lý nằm tại các vị trí khác
nhau được liên kết với nhau thông qua phương tiện viễn thông dưới sự điều khiển thống
nhất của một hệ điều hành.
I.1.2.2 Các thực thể trong hệ phân tán
Hệ phân tán gồm 4 thực thể :
GVHD: PGS.TS Lê Văn Sơn HVTH: Bạch Ngọc Dương
Nguyễn Hữu Thị Mỹ Linh
4
Tiểu luận Lập trình mạng
Tập hợp
phần cứng
Hệ thống
truyền
thông
Hệ thống
truyền
thông
Hình 1: Các thực thể của hệ tin học phân tán
5
Tiểu luận Lập trình mạng
Việc định nghĩa các tài nguyên của hệ như tài nguyên dùng chung sẽ mang đến cho
hệ những hiệu năng tốt trong khai thác ứng dụng
- Tăng tốc độ bình quân trong tính toán xử lý.
- Cải thiện tình trạng luôn sẵn sàng của các loại tài nguyên.
- Tăng độ an toàn cho dữ liệu.
- Đa dạng hóa các loại hình dịch vụ tin học.
- Bảo đảm tính toàn vẹn của thông tin.
Tuy nhiên nó cũng dẫn đến hàng loạt các vấn đề khó khăn trong việc thiết lập hệ
liên quan việc cấp phát tài nguyên dùng chung cho các tiến trình.
Điều quan trọng là để đảm bảo các chức năng, yêu cầu nêu ra trên, hệ tin học phân
tán cần phải có các cơ chế kỹ thuật đủ mạnh nhằm đồng bộ hóa hoạt động của các tiến
trình và sự trao đổi thông tin với nhau sao cho hệ thống tránh được các trường hợp có thể
dẫn đến bế tắc.
I.1.2.5 Các thao tác chuẩn của hệ phân tán
- Tiếp nhận và ghi yêu cầu chỉ dẫn.
- Dịch yêu cầu để có các thông tin cần thiết. Thực hiện một số công việc của hệ
thống cục bộ như kiểm tra quyền truy cập thông tin, lập hóa đơn dịch vụ.
- Gửi kết quả cho hệ thống đã phát yêu cầu.
I.2 LẬP TRÌNH MẠNG
Khi kết nối vào máy chủ, ta có thể yêu cầu máy chủ cung cấp nhiều dịch vụ khác
nhau như: tìm kiếm thông tin, gửi nhận E-mail… Mỗi dịch vụ đều có qui ước riêng cho
các cách gửi/nhận dữ liệu. Giao thức TCP hay UDP chỉ chịu trách nhiệm đưa dữ liệu từ
một máy tính này đến máy tính khác, còn dữ liệu đó sẽ được gửi cho dịch vụ nào thì phải
thông qua một qui định nữa là cổng (port). Mỗi chương trình dịch vụ sẽ sử dụng một
cổng khác nhau để truy xuất thông tin. Cổng là một số nguyên từ 1 đến 16383. Máy chủ
sẽ qui định cổng cho mỗi dịch vụ, thông tin giữa máy khách và máy chủ phải sử dụng
GVHD: PGS.TS Lê Văn Sơn HVTH: Bạch Ngọc Dương
Nguyễn Hữu Thị Mỹ Linh
7
Tiểu luận Lập trình mạng
cổng tương ứng thì mới trao đổi thông tin được, hầu hết các chương trình dịch vụ nổi
tiếng đều có qui định cổng chuẩn riêng:
Dịch vụ Cổng
FTP 21
HTTP 80
Telnet 23
… …
Khi xây dựng một ứng dụng làm dịch vụ trên máy chủ ta phải chọn cho mình một
cổng có giá trị khác với những giá trị cổng mà những dịch vụ nổi tiếng đã sử dụng.
I.2.4 Giao tiếp theo mô hình client/server
I.2.4.1 Giao tiếp theo mô hình client/server
Có rất nhiều dịch vụ hỗ trợ trên Internet như E-mail, nhóm tin (newsgroup), chuyển
tập tin (file transfer), đăng nhập từ xa (remote login), truy tìm thông tin trên Web…
Những mô hình này được kiến trúc theo mô hình khách/chủ (client/server). Các chương
trình ở máy khách (client) như trình duyệt Web (web browser), chương trình gửi nhận E-
mail…; các chương trình dịch vụ trên máy chủ (server) như web server, mail server… sẽ
xử lý những yêu cầu này và gửi kết quả ngược về cho máy khách, thông thường một dịch
vụ trên máy chủ phục vụ cho rất nhiều yêu cầu của máy khách.
I.2.4.2 Các chương trình thường chạy trên máy client
Những thông tin cần thiết cũng phải được cài đặt tách biệt ở máy khách và máy
chủ. Tuy nhiên không nhất thiết phải có hai máy tính riêng biệt. Nhờ có máy ảo Java, khi
mở cửa sổ DOS-Prompt (môi trường DOS dưới Window) để chạy chương trình Java,
chương trình này được xem như chạy trên một máy (ảo) độc lập. Do đó, nếu hai chương
trình Java chạy ở trong hai cửa sổ riêng thì có thể xem như là chúng thực hiện trên hai
máy khác nhau.
I.2.5.2 Mô hình tính toán Client/Server
GVHD: PGS.TS Lê Văn Sơn HVTH: Bạch Ngọc Dương
Nguyễn Hữu Thị Mỹ Linh
9
Tiểu luận Lập trình mạng
Khi nói tới lập trình mạng ta thường nghĩ đến cách trao đổi giữa chương trình phục
vụ (Server) với chương trình khách (Client). Chương trình khách gửi một yêu cầu tới cho
chương trình phục vụ, và chương trình này xử lý dữ liệu để trả lời cho chương trình
khách. Như vậy, chương trình khách muốn gửi được yêu cầu thì trước hết phải tìm cách
kết nối với Server. Server có thể chấp nhận hay từ chối sự kết nối này. Một khi sự kết nối
đã được thiết lập thì Client và Server trao đổi với nhau thông qua Sockets. Các lớp trong
gói java.net cung cấp các phương thức để kết nối mạng và trao đổi tin giữa các máy với
nhau theo mô hình Client/Server.
Socket chính là lớp (trừu tượng) thực hiện sự trao đổi giữa Server và Client. Java
xem sự trao đổi giữa Server và Client dựa trên Socket gần giống như các thao tác vào/ra,
nghĩa là các chương trình có thể đọc, ghi vào Socket dễ dàng như chúng đọc, ghi lên tệp
dữ liệu. Lớp Server tạo ra sự kết nối từ máy Client tới Server thông qua các phương thức
tạo lập đối tượng.
Lớp ServerSocket dùng để tạo kết nối từ máy Server tới máy Client. Đối tượng của
lớp này được tạo ra trên Server và lắng nghe những kết nối từ máy Client theo cổng xác
định. Server phải chạy thường trực trước khi Client bắt đầu thực hiện. Server chờ sự yêu
cầu kết nối của Client. Để thiết lập được một Server, ta phải tạo ra một đối tượng, ví dụ
ServerSocket của lớp Server, gắn nó với một cổng nào đó và lắng nghe xem có Client
nào cần kết nối hay không. Các Socket được xác định tương ứng với địa chỉ của máy và
làm cho việc phân tán trở nên “vô hình” đối với người sử dụng.
Môi trường của hệ cở dữ liệu phân tán được mô tả qua hình 2
Hình I-4: Môi trường của hệ cơ sở dữ liệu phân tán
GVHD: PGS.TS Lê Văn Sơn HVTH: Bạch Ngọc Dương
Nguyễn Hữu Thị Mỹ Linh
11
Trạm 5
Trạm 5
Mạng truyền
dữ liệu
Trạm 5
Trạm 5
Trạm 5
Trạm 5
Trạm 5
Trạm 5
Trạm 5
Trạm 5
Tiểu luận Lập trình mạng
CHƯƠNG II
KỸ THUẬT LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG TRONG JAVA
KẾT NỐI CƠ SỞ DỮ LIỆU VỚI JDBC
II.1 SƠ LƯỢC VỀ JAVA
Java là một ngôn ngữ lập trình đơn giản, hướng đối tượng, hỗ trợ lập trình phân
tán, thông dịch và biên dịch, mạnh mẽ bảo mật, cấu trúc độc lập, khả chuyển, hiệu quả và
linh động.
Sự hỗ trợ lập trình hướng đối tượng là cốt lõi của Java. Mọi câu lệnh của Java đều
tác động đến các đối tượng mà đặc trưng của chúng là lớp (class), đối tượng là thể hiện
(instance) của lớp và phương thức (method) là một thao tác hoặc được thực hiện bởi
chính nó, hoặc thực hiện khi có yêu cầu từ môi trường (thông điệp từ đối tượng khác).
bộ, đây là cách mà lập trình hướng đối tượng truyền thống vẫn sử dụng. Tương tự, tương
tác giữa C1, C2 ,C3 là tương tác cục bộ.
Tuy nhiên, đối tượng Java có thể gọi phương thức của đối tượng nằm trên một máy
khác dựa vào giao thức triệu gọi từ xa RMI.
GVHD: PGS.TS Lê Văn Sơn HVTH: Bạch Ngọc Dương
Nguyễn Hữu Thị Mỹ Linh
Computer A
A2
A1
Computer C
C1
C2
Computer B
B1
C3
13
Tiểu luận Lập trình mạng
Hình II.1: Mô hình triệu gọi các đối tượng từ xa
II.2.2 Gọi phương thức từ xa và các vấn đề phát sinh
Triệu gọi phương thức từ xa phức tạp hơn triệu gọi phương thức cục bộ. Các đối
tượng trên hai Server khác nhau hoạt động trên hai tiến trình khác nhau cho nên việc
tham chiếu: Biến, địa chỉ đối tượng là khác nhau.
Ví dụ: Khi truyền con trỏ cho một phương thức ở xa, trên máy đang sử dụng sẽ tồn
tại nhưng trên Server khác (nơi đối tượng thực thi phương thức) sẽ không có bất kỳ vùng
nhớ nào được cấp phát cho con trỏ.
Trên máy cục bộ: lời gọi hàm, các tham số truyền cho hàm thường được đặt vào
ngăn xếp (stack).
Tham số truyền cho phương thức của đối tượng ở xa được đóng gói và chuyển qua
mạng để đến được phương thức thực sự.
II.2.3 Vai trò các lớp trung gian STUB và SKELETION
A2
A1
Computer C
Computer B
B1
C1
C1_stub
B1_stub
C1_skel
B1_skel
15
Tiểu luận Lập trình mạng
được điều này, đối tượng C1 cần cung cấp một giao tiếp interface tương ứng với các
phương thức cho phép đối tượng A1 gọi nó trên máy A.
Stub thường trực trên máy khách, không ở trên máy chủ. Nó có vai trò đóng gói
các thông tin bao gồm:
Định danh đối tượng từ xa cần sử dụng
Mô tả về phương thức cần triệu gọi
Mã hoá các tham số và truyền cho Skel.
Stub sẽ chuyển những thông tin trên cho máy chủ. Ở phía máy chủ, đối tượng
Skel nhận thực hiện những công việc sau để gọi phương thức từ xa:
Giải mã các tham số
Xác định đối tượng để thực hiện lời gọi hàm tương ứng
Thực hiện lời gọi phương thức theo yêu cầu
Tập hợp kết quả để trả lời hoặc thông báo các lỗi ngoại lệ
Gửi trả lời gói các dữ liệu kết quả cho Stub ở trên máy khách.
II.2.4 Cài đặt ứng dụng phân tán của RMI
Hình vẽ biểu thị: Triệu gọi đối tượng RMI giữa Server2 và Server1. Đối tượng
Calculator/Server2 sẽ được gọi bởi đối tượng CalculatorClient/Server1. Chúng ta xây
dựng lớp đối tượng Calculator với đặc tả interface như sau:
(CalculatorImpl_Stub và CalculatorImpl_Skel).
- Viết chương trình (CalculatorServer.class) cài đặt đối tượng trên máy chủ. Lưu ý
gọi phương thức UnicasRemoteObject. exportObject() để thông báo cho Java nhận dạng
được sự tồn tại của đối tượng ở dạng truy xuất được từ xa bởi các đối tượng khác.
Hình II.5: Đăng ký các đối tượng trên RMIRegistry
- Sử dụng lớp giao tiếp (Calculator.class) và CalculatorImpl_Stub từ máy khách để
gọi phương thức của đối tượng trên máy chủ.
II.2.6 Bộ đăng ký (Registry)
Cơ chế làm việc của máy ảo Java khi đăng ký và gọi đối tượng giữa trình khách và
chủ.
GVHD: PGS.TS Lê Văn Sơn HVTH: Bạch Ngọc Dương
Nguyễn Hữu Thị Mỹ Linh
18
Tiểu luận Lập trình mạng
Trên thực tế nếu hoạt động thực sự qua mạng thì chỉ có thể tách ra làm hai máy vật
lý. Hình dưới là cơ chế hoạt động của các máy ảo Java trên mô hình máy mạng vật lý
thực sự. Máy khách có địa chỉ IP truy xuất đến bộ đăng ký rmiregistry của máy chủ có
địa chỉ IP khác. Trên máy chủ có 2 máy ảo hoạt động. Máy ảo A chạy chương trình
rmiregistry và Máy ảo B chạy phần cài đặt của đối tượng.
Hình II.6: Cơ chế hoạt động của máy ảo Java trên mô hình mạng vật lý
II.3 GIỚI THIỆU JDBC (Java DataBase Connectivity)
JDBC của Sun là một công cụ phổ dụng hỗ trợ việc xây dựng những ứng dụng
tích hợp, dựa trên những CSDL khác nhau được thiết lập ở nhiều nơi khác nhau trên
mạng. JDBC là giao diện để kết nối với CSDL, gồm một tập các lớp đối tượng hỗ trợ để
xử lý CSDL quan hệ và để tương tác với các nguồn dữ liệu khác nhau.
JDBC API (Application Programming Interface) được JavaSoft phát triển và là
một phần của tất cả các cài đặt ứng dụng của JVM. JDBC API cung cấp các chức năng
cơ bản để truy nhập đến hầu hết các CSDL thông qua SQL như:
- Thực hiện các truy vấn vào một CSDL.
- Xử lý kết quả truy vấn.
GVHD: PGS.TS Lê Văn Sơn HVTH: Bạch Ngọc Dương
Nguyễn Hữu Thị Mỹ Linh
20
Tiểu luận Lập trình mạng
Connection con =
DriverManager.getConnection(“url”,”username”,”password”);
Trong đó: url là jdbc:driver:databaseName
Một số hàm:
Public abstract void commit() throws SQLException; ủy quyền thay đổi những
kết quả đã cập nhật, nếu không thì những thay đổi trong quá trình cập nhật CSDL sẽ
không được thực thi.
Public abstract boolean getAutoCommit() throws SQLException;
Public abstract void setAutoCommit(boolean autoCommit) throws
SQLException; khôi phục các thông tin nếu giao dịch không thực hiện thành công.
II.3.3 Giao diện Statement
Giao diện Statement để thực hiện các câu lệnh của SQL.Trong Statement có các
hàm: execute(), executeQuery(), executeUpdate(),
executeBatch()…. nhận các tham đối là các câu lệnh của SQL để thực hiện như:
CREATE, UDATE, INSERT… và có thể xử lý theo lô.
Tạo đối tượng của Statement:
Statement stmt = con.createStatement();
kết quả truy vấn được từ CSDL chỉ cho phép đọc.
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
kết quả truy vấn được từ CSDL cho phép thay đổi dữ liệu.
Hàm addBatch(): cho phép thực hiện cập nhật các trường dữ liệu cùng một lúc.
Hàm executeBatch(): chuyển các lệnh SQL thực hiện theo lô và trả về số bản ghi đã
được cập nhật theo lô.
GVHD: PGS.TS Lê Văn Sơn HVTH: Bạch Ngọc Dương
Nguyễn Hữu Thị Mỹ Linh
Server với 3 cơ sở dữ liệu phân tán tương ứng để mô phỏng cho bài toán đảm bảo gắn bó
dữ liệu khi cập nhật trong cơ sở dữ liệu phân tán tại các ngân hàng.
III.2 XÂY DỰNG CƠ SỞ DỮ LIỆU PHÂN TÁN
Bài toán xây dựng một hệ cơ sở dữ liệu phân tán được đặt ở vị trí khác nhau, tương
ứng với ba Server. Giả sử ba vị trí được đặt là: Hà Nội, Đà Nẵng và Sài Gòn ta có ba cơ
sở dữ liệu tương ứng đó là: HNBank Database, DNBank Database và SGBank Database.
Khi phân mảnh dữ liệu ra các vị trí ta dựa vào tiêu chí phân tán là mã số tài khoản
của (AccID). Những tài khoản nằm ở Server Hà Nội, Đà Nẵng, Sài Gòn có mã số tài
khoản lần lượt bắt đầu bằng hai ký tự: “HN”, “DN”, “SG”.
Ba cơ sở dữ liệu tương ứng:
GVHD: PGS.TS Lê Văn Sơn HVTH: Bạch Ngọc Dương
Nguyễn Hữu Thị Mỹ Linh
23
Tiểu luận Lập trình mạng
Hình III-1: HNBank Database
Hình III-2: DNBank Database
Hình III-3: SGBank Database
III.3 XÂY DỰNG BỘ PHÂN PHỐI KẾT NỐI SERVER
Bài toán xây dựng một bộ điều phối kết nối đến các Server. Bộ điều phối kết nối
căn cứ vào mã số tài khoản do người sử dụng cung cấp mà thực hiện tự động kết nối đến
Server cần thiết để truy vấn. Cụ thể ở đây khi phân tích mã số tài khoản mà nhận thấy mã
số tài khoản được bắt đầu bằng xâu: “HN” thì kết nối đến Server ở Hà nội, “DN” thì kết
nối đến Server ở Đà Nẵng, “SG” thì kết nối đến Server ở Sài Gòn.
GVHD: PGS.TS Lê Văn Sơn HVTH: Bạch Ngọc Dương
Nguyễn Hữu Thị Mỹ Linh
24
Tiểu luận Lập trình mạng
Yêu cầu dịch vụ từ người dùng ở đây được mô tả bằng việc xem tài khoản, cộng
hoặc trừ tài khoản. Khi muốn xem tài khoản người sử dụng cần cung cấp mã số tài khoản
và mã Pin, khi muốn thực hiện gửi vào hoặc rút ra từ tài khoản người sử dụng cần cung