ĐIỀU KHIỂN ĐỒNG THỜI PHÂN TÁN

Một phần của tài liệu luận văn thạc sĩ xây dựng cơ sở dữ liệu phân tán phục vụ thông tin nhanh về nhân sự tại quảng bình (Trang 87)

6. Tổng quan tài liệu nghiên cứu

3.4.ĐIỀU KHIỂN ĐỒNG THỜI PHÂN TÁN

Điều khiển đồng thời giải quyết các tính chất biệt lập và gắn bó của giao dịch khi tiến hành cập nhật thông tin từ cụm Server xã lên cụm Server huyện và cụm Server sở, ban ngành tương đương. Cơ chế điều khiển đồng thời phân tán của một hệ quản trị cơ sở dữ liệu phân tán bảo đảm tính gắn bó của một cơ sở dữ liệu sẽ được duy trì trong môi trường phân tán. Mức độ đồng thời là tham số quan trọng nhất trong các hệ phân tán. Do vậy, cơ chế điều khiển đồng thời cố tìm ra một phương án thích hợp, vừa duy trì được tính gắn bó của cơ sở dữ liệu, vừa duy trì được mức độ đồng thời cao.

nhóm lớn: các phương pháp điều khiển đồng thời lạc quan và các phương pháp điều khiển đồng thời bi quan. Các thuật toán bi quan đồng bộ hóa việc thực hiện đồng thời của các giao dịch trước khi thực hiện chúng, trong khi đó các thuật toán lạc quan để việc đồng bộ hóa các giao dịch cho đến khi chúng kết thúc.

3.4.2. Điều khiển đồng thời bằng khóa chốt

Ý tưởng chính của việc điều khiển đồng thời bằng khóa chốt là bảo đảm dữ liệu dùng chung cho các thao tác tương tranh chỉ được truy xuất mỗi lần một giao dịch. Điều này được thực hiện bằng cách liên kết một khóa chốt (lock) với mỗi đơn vị khóa. Khóa này được giao dịch đặt ra trước khi nó truy xuất và được điều chỉnh lại vào lúc nó hết sử dụng. Một đơn vị khóa không thể truy xuất được nếu đã bị khóa bởi một giao dịch khác. Vì vậy yêu cầu khóa của một giao dịch chỉ được trao nếu khóa đi kèm hiện không bị một giao dịch khác giữ.

Việc đồng bộ hóa các thao tác tương tranh của các giao dịch tương tranh có hai loại khóa chốt được kèm với mỗi đơn vị khóa: khóa đọc (rl) và khóa ghi (wl). Một giao dịch Ti đang muốn đọc một mục dữ liệu được chứa trong đơn vị khóa x sẽ nhận được một khóa đọc trên x[rli(x)] và cũng tương tự với các thao tác ghi. Hai thể thức khóa là tương thích nếu hai giao dịch truy xuất đến cùng một mục dữ liệu có thể nhận được khóa trên mục dữ liệu đó cùng một lúc. Các khóa đọc là tương thích với nhau, còn các khóa đọc-ghi hoặc ghi-ghi thì không. Vì vậy hai giao dịch vẫn có thể đồng thời đọc cùng một mục.

rlj(x) wlj(x) tương thích không tương thích không tương thích không tương thích

Trong các hệ thống dùng khóa chốt, bộ xếp lịch là bộ quản lý khóa. Bộ quản lý giao dịch sẽ chuyển cho bộ quản lý khóa các thao tác CSDL và các thông tin kèm theo. Sau đó bộ quản lý khóa sẽ kiểm tra xem đơn vị khóa có chứa mục dữ liệu đó đã bị khóa hay chưa. Nếu đã khóa, và thể thức khóa đó không tương thích với thể thức của giao dịch đang yêu cầu, thao tác sẽ bị hoãn. Ngược lại, khóa sẽ được đặt với thể thức mong muốn và thao tác này được chuyển cho bộ xử lý dữ liệu để truy xuất CSDL thực sự. Sau đó bộ quản lý giao dịch được thông tin về các kết quả thực hiện. Việc kết thúc giao dịch sẽ giải phóng các khóa của nó và làm khởi hoạt một giao dịch khác đang đợi truy xuất mục dữ liệu này.

Quy tắc khóa hai pha: một giao dịch không được giải phóng khóa cho đến khi nó đảm bảo không yêu cầu thêm khóa nữa. Phương pháp khóa chốt hai pha (2PL) thực hiện các giao dịch qua 2 pha: pha tăng trưởng, nhận các khóa và truy xuất các mục dữ liệu; pha thu hồi, giải phóng các khóa. Điểm khóa là thời điểm giao dịch đã nhận được tất cả các khóa nhưng chưa bắt đầu giải phóng bất kỳ khóa nào.

dữ liệu, vì thế khóa được giải phóng. Nếu giao dịch bị hủy bỏ sau khi giải phóng một khóa, có thể làm hủy bỏ dây chuyền cả các giao dịch đã truy xuất các mục đã mở khóa.

Để khắc phục các khó khăn nêu trên, các bộ xếp lịch cài đặt khóa chốt hai pha nghiêm ngặt, nó giải phóng toàn bộ các khóa vào lúc kết thúc giao dịch.

Hình 3.7. Biểu đồ khoá 2 pha nghiêm ngặt

a. Thuật toán khoá 2 pha tập trung (C2PL)

Trong môi trường phân tán (nhân bản hoặc phân hoạch), chỉ có một vị trí có bộ quản lý khóa, các bộ quản lý giao dịch ở các vị trí khác phải giao tiếp với vị trí có bộ quản lý khóa đó. Truyền giao giữa các vị trí hợp tác khi thực hiện một giao dịch xảy ra giữa bộ quản lý giao dịch ở vị trí khởi đầu giao dịch (TM điều phối), bộ quản lý khóa tại vị trí trung tâm, các bộ xử lý dữ liệu tại các vị trí có tham gia (vị trí có thao tác xảy ra).

Thuật toán 2PL phân quyền mong muốn có bộ quản lý khóa tại mỗi vị trí. So với C2PL, D2PL có hai sửa đổi: các thông báo gửi đến bộ quản lý khóa của tất cả các vị trí tham gia; các thao tác không do TM điều phối chuyển đến các bộ xử lý dữ liệu mà do các bộ quản lý khóa tham gia chuyển đi. TM điều phối không chờ thông báo “yêu cầu khóa đã được trao”.

tính tuần tự bằng phương pháp độc quyền truy xuất. Chúng chọn trước một thứ tự tuần tự hóa và thực hiện các giao dịch theo thứ tự tuần tự đó. Bộ quản lý giao dịch gán cho mỗi giao dịch Ti một thời dấu duy nhất

ts(Ti) vào lúc khởi đầu.

Thời dấu là một định danh đơn giản dùng để nhận ra mỗi giao dịch một cách duy nhất và cho phép xếp thứ tự chúng. Hai tính chất của nó là tính duy nhất (tính phát sinh thời dấu) và tính đơn điệu (hai thời dấu của một bộ quản lý giao dịch phải tăng đơn điệu).

Quy tắc xếp thứ tự thời dấu như sau:

Quy tắc TO. Cho hai thao tương tranh OijOkl tương ứng thuộc về các giao dịch TiTk, Oij được thực hiện trước Okl nếu và chỉ nếu ts(Ti) <

ts(Tk). Trong trường hợp này, Tiđược gọi là giao dịch già hơn và Tkđược gọi là giao dịch trẻ hơn.

a. Thuật toán thứ tự timestamp cơ bản

Thuật toán TO cơ bản thực hiện minh bạch quy tắc TO. Bộ quản lý giao dịch cộng tác gán timestamp cho mỗi giao dịch, xác định các vị trí nào lưu trữ mục dữ liệu nào và gửi một vài thao tác đến những vị trí nào.

b. Thuật toán thứ tự timestamp bảo lưu

Thuật toán TO cơ bản không bao giờ gây ra các thao tác chờ mà thay vào đó là tái khởi động chúng. Chúng ta cũng chỉ ra rằng nó là ưu điểm cho các deadlock tự phát nhưng nó cũng là nhược điểm bởi vì số lần tái khởi động sẽ giảm hiệu năng thực hiện. Thuật toán TO bảo lưu cố gắng làm giảm sự quá tải của hệ thống bằng việc giảm số lần tái khởi động của giao dịch.

dịch. Hầu như TO đa phiên bản chỉ liên quan đến các CSDL tập trung, vì vậy chúng ta sẽ đề cập đến nó ít hơn. Tuy nhiên, thuật toán TO đa phiên bản là một cơ chế điều khiển tương tranh phù hợp cho các hệ quản lý CSDL được thiết kế để hỗ trợ các ứng dụng có sử dụng các phiên bản của các đối tượng CSDL.

3.4.4. Quản lý khóa gài

Mọi thuật toán điều khiển đồng thời theo khóa chốt có thể gây ra khóa gài do có sự độc quyền truy xuất đến các tài nguyên chung và các giao dịch có thể phải chờ đợi để nhận được khóa. Một số thuật toán TO đòi hỏi giao dịch phải chờ đợi cũng có thể gây khóa gài.

Một khóa gài có thể xảy ra vì một giao dịch phải chờ đợi một giao dịch khác. Một tình huống khóa gài là một tập các yêu cầu không bao giờ được đáp ứng từ cơ chế điều khiển đổng thời.

Có 3 phương thức để điều khiển khóa gài là: ngăn chặn khóa gài, phòng tránh khóa gài, phát hiện và giải quyết khóa gài.

a. Ngăn chặn khóa gài

Ngăn chặn khóa gài đảm bảo không để xảy ra khóa gài. Bộ quản lý giao dịch phải kiểm tra một giao dịch khi nó khởi động và không cho phép nó tiến hành nếu nó có thể gây ra khóa gài: khai báo trước tất cả các mục sẽ truy xuất. Bộ quản lý giao dịch sẽ loại trừ tất cả các mục đã được khai báo trước bởi một giao dịch để có thể cho phép nó tiến hành. (adsbygoogle = window.adsbygoogle || []).push({});

b. Phòng tránh khóa gài

Lược đồ tránh khóa gài sẽ sử dụng các kỹ thuật điều khiển đồng thời không bao giờ gây ra khóa gài hoặc yêu cầu bộ xếp lịch phát hiện trước các tình huống khóa gài tiềm ẩn và bảo đảm chúng không xảy ra được.

nguyên đó theo thứ tự. Các đơn vị khóa trong các CSDL phân tán được xếp theo các thứ tự và các giao dịch luôn yêu cầu khóa theo thứ tự đó. Việc xếp thứ tự các đơn vị khóa được thực hiện toàn cục hoặc cục bộ tại mỗi vị trí.

-Dùng thời dấu để đặt quyền ưu tiên cho các giao dịch và giải quyết các khóa gài bằng cách hủy bỏ giao dịch có quyền ưu tiên cao hơn (hoặc thấp hơn). Nếu một yêu cầu khóa của giao dịch Ti bị từ chối, bộ quản lý khóa không tự động buộc Ti phải chờ đợi, nó thực hiện phép kiểm tra dự phòng cho giao dịch đang yêu cầu và giao dịch hiện đang giữ khóa (giả sử Tj). Nếu việc kiểm tra đúng, Ti được phép chờ Tj, nếu không, một trong hai giao dịch phải hủy bỏ.

c. Phát hiện và giải tỏa khóa gài

Phát hiện và giải tỏa khóa gài là phương pháp quản lý khóa gài thông dụng. Phát hiện được thực hiện bằng cách phân tích đồ thị chờ đợi toàn cục xem có hình thành chu trình hay không. Giải tỏa khóa gài được thực hiện bằng cách chọn ra một hoặc nhiều giao dịch “nạn nhân”, tước quyền rồi hủy bỏ chúng nhằm phá vỡ các chu trình trong đồ thị.

-Phát hiện khóa gài tập trung: một vị trí được chỉ định là thám tử cho toàn bộ hệ thống. Theo đúng định kỳ, mỗi bộ quản lý khóa gửi đồ thị chờ đợi cục bộ cho thám tử và nó sẽ thành lập đồ thị chờ đợi toàn cục rồi tìm kiếm trong chu trình đó. Thực sự, bộ quản lý khóa gài chỉ cần gửi những thay đổi trong đồ thị của nó cho thám tử.

-Phát hiện khóa gài phân cấp: xây dựng một cây phân cấp các thám tử khóa gài. Khóa gài cục bộ của một vị trí sẽ được phát hiện tại vị trí đó qua đồ thị cục bộ của nó. Mỗi vị trí cũng gửi đồ thị của nó đến thám tử ở mức kế tiếp. Vì vậy, khóa gài phân tán của hai hay nhiều vị trí có thể được phát hiện bởi

trung tâm, vì vậy làm giảm chi phí truyền giao. Tuy nhiên, nó phức tạp hơn khi cài đặt và có khi phải sửa đổi nhiều cho các thuật toán quản lý giao dịch và khóa.

-Phát hiện khóa gài phân quyền: thuật toán (System R*) trao trách nhiệm phát hiện khóa gài cho từng vị trí, có nhiều thám tử cục bộ tại mỗi vị trí trao đổi các đồ thị cục bộ với nhau (thực sự chỉ có các chu trình khóa gài tiềm ẩn mới được gửi đi).

Đồ thị chờ đợi cục bộ tại mỗi vị trí được thành lập và sửa đổi như sau: (1) Mỗi vị trí đều nhận được các chu trình khóa gài tiềm ẩn từ những vị trí khác, các cạnh này được thêm vào đồ thị cục bộ.

(2) Các cạnh trong đồ thị cục bộ cho thấy các giao dịch đang chờ đợi các giao dịch tại những vị trí khác sẽ được nối với các cạnh trong các đồ thị cục bộ biểu thị các giao dịch ở xa đang đợi các giao dịch cục bộ.

3.5. KIẾN TRÚC CHƯƠNG TRÌNH ỨNG DỤNG PHÂN TÁN PHỤC VỤ THÔNG TIN NHANH VỀ NHÂN SỰ TỈNH QUẢNG PHỤC VỤ THÔNG TIN NHANH VỀ NHÂN SỰ TỈNH QUẢNG BÌNH

3.5.1. Kiến trúc chương trình

Trong hệ thống chương trình phân chia thành 3 cụm quản lý khác nhau: cụm sở, ban ngành tương đương; cụm huyện và cụm xã. Cụm xã chỉ quản lý thông tin nhân sự của xã mình, thông tin sau khi thêm mới hoặc cập nhật lập tức cập nhật lên cụm huyện và cụm sở, ban ngành tương đương. Đối với cụm huyện, ngoài thông tin nhân sự phòng của huyện mình còn thấy nhân sự ở tất cả các xã mà mình quản lý, đặc thù của phòng nội vụ trực thuộc huyện thấy toàn bộ nhân sự trong huyện và các xã trực thuộc. Riêng cụm các sở, ban ngành tương đương có thể thấy nhân sự ở huyện và xã theo sự phân quyền và chức năng quản lý, tương tự như phòng nội vụ của huyện, sở nội vụ có thể

Kiến trúc chương trình thể hiện qua Hình 3.10, các thành phần nằm trong  thể hiện các chức năng phục vụ ở đầu cuối đối với người sử dụng, chương trình xây dựng trên ngôn ngữ JSP và Java triển khai dưới dạng MVC đảm bảo tính bảo mật và cung cấp giao diện thông qua các trình duyệt Web (Web Browser) thuận tiện cho người dùng mọi lúc mọi nơi qua mạng. Thành phần nằm trong  là hệ thống giám sát, ở đây hệ thống mới chỉ phát triển ở mức giám sát CSDL để đảm bảo tính gắn bó và tính trong suốt của hệ phân tán như đã đề cập ở chương 1. Thành phần quan trọng nhất nằm trong , tại đây các vấn đề phân tích, thiết kế và triển khai hệ tổng hợp tất cả các nguyên lý và các thuật toán đã được mô tả trong chương 1 và 2 được áp dụng để xây dựng hệ; các vấn đề về phân tán CSDL và chương trình mà người dùng không nhìn thấy được.

Đối với hệ thống người sử dụng ở , chức năng lấy thông tin cung cấp dịch vụ, để lấy các thông tin cơ bản và cần thiết để cung cấp cho người sử dụng theo mô tả phân tán dữ liệu trên các cụm Server, thể hiện qua đoạn mã lệnh như sau:

if(action.equals("FormAdd")){ // Lấy thông tin về sở if(!so_id.equals("00")){

PhongDAO phongDAO=new PhongDAO(); ArrayList<Phong>

danhSachPhong=phongDAO.danhSachCacPhongThuocSo(so_id); request.setAttribute("danhSachPhong", danhSachPhong);

}

else {

// Lấy thông tin về phòng thuộc huyện so_id="00";

PhongDAO phongDAO=new PhongDAO(); ArrayList<Phong>

danhSachPhong=phongDAO.danhSachCacPhongThuocSo(so_id); request.setAttribute("danhSachPhong", danhSachPhong);

// Lấy thông tin về xã

XaDAO xaDAO=new XaDAO(); ArrayList<Xa>

danhSachXa=xaDAO.danhSachCacXaThuocHuyen(huyen_id); request.setAttribute("danhSachXa", danhSachXa);

}

// Lấy thông tin về chức danh (adsbygoogle = window.adsbygoogle || []).push({});

ChucdanhDAO chucdanhDAO =new ChucdanhDAO(); ArrayList<Chucdanh>

danhSachChucdanh=chucdanhDAO.danhSachCacChucdanh(); request.setAttribute("danhSachChucdanh", danhSachChucdanh); DantocDAO dantocDAO =new DantocDAO();

ArrayList<Dantoc> danhSachDantoc=dantocDAO.danhSachCacDantoc(); request.setAttribute("danhSachDantoc", danhSachDantoc);

request.setAttribute("danhSachTongiao", danhSachTongiao); request.setAttribute("chon", request.getParameter("chon")); urlDispatcher="cbvc_add.jsp";

}

Việc phân tán dữ liệu và cập nhật mảnh thể hiện qua Hình 3.11, CSDLPT trên cụm 3 đặc trưng cho dữ liệu ở cấp xã, tương ứng cụm 2 cấp huyện và cụm 1 cấp sở, ban ngành tương đương. Một dữ liệu ở cụm 3 được chèn vào cụm 3 ngay lập tức sẽ cập nhật mảnh của mình ở cụm 2 và 1, cụm 2 khi chèn dữ liệu vào chỉ cập nhật ở cụm 1. Như vậy, cụm 1 sẽ không thực hiện cập nhật phân mảnh ở các cụm khác mà chỉ cập nhật cục bộ.

Hình 3.11. Mô hình phân tán và cập nhật mảnh trên các cụm Server

Câu truy vấn để tạo bảng dữ liệu trên cụm 3 thể hiện như sau: CREATE TABLE `cbvc` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`macbvc` varchar(12) COLLATE utf8_unicode_ci DEFAULT NULL, `holot` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, `ten` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,

`diachi` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, `sodienthoai` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, `soCMND` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, `dantoc_id` int(11) DEFAULT NULL,

`tongiao_id` int(11) DEFAULT NULL, `dang` date DEFAULT NULL,

`doan` date DEFAULT NULL,

`loaicanbo` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, `noisinh` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, `email` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, `trangthai` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Câu lệnh truy vấn liên kết tạo mảnh dọc từ xa trên cụm 2 thể hiện: CREATE TABLE `cbvc` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`macbvc` varchar(12) COLLATE utf8_unicode_ci DEFAULT NULL, `holot` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,

Một phần của tài liệu luận văn thạc sĩ xây dựng cơ sở dữ liệu phân tán phục vụ thông tin nhanh về nhân sự tại quảng bình (Trang 87)