NGHIÊN CỨU THỬ NGHIỆM GIẢI PHÁP CÂN BẰNG TẢI CHO HỆ QUẢN TRỊ CSDL MYSQL VỚI MYSQL PROXY Trần Thị Giang Khóa QH-2008-I/CQ, ngành Công nghệ thông tin Tóm tắt Khóa luận tốt nghiệp: Sự bù
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Trang 2ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Trang 3VIETNAM NATIONAL UNIVERSITY, HANOI UNIVERSITY OF ENGINEERING AND TECHNOLOGY
Tran Thi Giang
RESEARCH INTO EXPERIMENT OF LOAD BALANCING SOLUTION FOR MYSQL DATABASE MANAGEMENT SYSTEM WITH MYSQL PROXY
Major: Information technology
Supervisor: Nguyen Hai Chau, PhD
HA NOI – 2012
Trang 4LỜI CẢM ƠN
Lời đầu tiên, tôi xin gửi lời cảm ơn và lòng biết ơn sâu sắc nhất tới Tiến sĩ Nguyễn Hải Châu, người đã tận tình hướng dẫn và chỉ bảo tôi trong suốt quá trình thực hiện khóa luận tốt nghiệp
Tôi chân thành cảm ơn các thầy, cô trong bộ môn Hệ thống thông tin đã tạo điều kiện thuận lợi để tôi tiến hành thực nghiệm khóa luận của mình Tôi cũng xin gửi lời cảm
ơn đến tất cả các thầy cô trong trường Đại học Công nghệ đã cho tôi một môi trường rất tốt để học tập và nghiên cứu Các thầy cô đã giảng dạy và cho tôi những kiến thức quý báu, làm nền tảng để tôi hoàn thành khóa luận cũng như công việc trong tương lai
Tôi cũng xin gửi lời tri ân tới các bạn trong lớp K53CC và K53CLC đã luôn bên cạnh, ủng hộ và giúp đỡ tôi trong suốt quá trình học tập tại trường
Cuối cùng, tôi muốn gửi lời cảm ơn vô hạn tới gia đình và bạn bè – những người thân yêu luôn ở bên, khuyến khích và động viên tôi trong cuộc sống cũng như trong học tập
Tôi xin chân thành cảm ơn
Hà nội, tháng 5 năm 2012 Sinh viên
Trần Thị Giang
Trang 5NGHIÊN CỨU THỬ NGHIỆM GIẢI PHÁP CÂN BẰNG TẢI CHO HỆ QUẢN
TRỊ CSDL MYSQL VỚI MYSQL PROXY
Trần Thị Giang
Khóa QH-2008-I/CQ, ngành Công nghệ thông tin
Tóm tắt Khóa luận tốt nghiệp:
Sự bùng nổ của internet trong những năm gần đây khiến số lượng người dùng truy cập qua internet đến các máy chủ cơ sở dữ liệu ngày càng tăng mạnh Với hàng triệu lượt truy cập mỗi ngày thì đòi hỏi hệ thống máy chủ cơ sở dữ liệu phải cực kỳ mạnh mẽ, nếu không máy chủ sẽ bị quá tải Một hệ thống máy chủ mạnh mẽ là hệ thống có khả năng đáp ứng được tất cả các truy vấn của client trong khoảng thời gian nhanh nhất – hệ thống có khả năng cân bằng tải Bên cạnh khả năng cân bằng tải, thì hệ thống cũng cần có khả năng mở rộng và tính sẵn sàng cao Ba yếu
tố này liên hệ mật thiết với nhau để đảm bảo hệ thống hoạt động ổn định Nếu một hệ thống mà không đáp ứng được một trong ba yêu cầu trên thì thảm họa có thể xảy ra bất cứ lúc nào Điều này gây ra một tổn thất vô cùng nặng nề cho doanh nghiệp Do vậy, cân bằng tải, khả năng mở rộng và tính sẵn sàng cao quyết định đến yếu tố sống còn của một doanh nghiệp
Đã có rất nhiều giải pháp cân bằng tải được các nhà nghiên cứu đưa ra cho các hệ quản trị CSDL Tuy nhiên nhiều giải pháp không giải quyết được đầy đủ cả ba yếu tố trên cho hệ thống máy chủ Vì vậy, khóa luận lựa chọn giải pháp sử dụng MySQL proxy để cân bằng tải cho các máy chủ cơ sở dữ liệu MySQL MySQL proxy nhận các truy vấn từ phía client, lọc ra các truy vấn để gửi đến các máy chủ phù hợp dựa trên thuật toán cân bằng tải, sau đó nhận dữ liệu từ các máy chủ để trả lại cho khách hàng Không chỉ đáp ứng được yêu cầu cân bằng tải, giải pháp này còn đáp ứng được nhu cầu mở rộng và đảm bảo tính sẵn sàng cao của hệ thống nhờ việc sử dụng phương pháp Replication cho MySQL
Thực nghiệm được tiến hành với hai mô hình, một mô hình chỉ có hai máy chủ - mô hình với một master và một slave, và một mô hình mở rộng hơn với ba máy chủ – mô hình một master và hai slave Kết quả thu được từ các tham số đánh giá tải và hiệu năng của server cho thấy rằng, giải pháp được kiểm nghiệm là khả quan và áp dụng được trong thực tế
Từ khóa: MySQL Proxy, cân bằng tải
Trang 6RESEARCH INTO EXPERIMENT OF LOAD BALANCING SOLUTION FOR MYSQL DATABASE MANAGEMENT SYSTEM WITH MYSQL PROXY
Tran Thi Giang
QH-2008-I/CQ course, Information Technology major
Abstract of thesis:
In recent years, the boost of internet cause the number of user who access to database server through Internet increase rapidly With millions of clients access every day, this require server system powerfull, otherwise the system will be overload A powerfull server system is system can be satisfy all clients requests within the shortest possible time – the system is capable
of load balancing In addition, the system also need scalability and high availability These three factors combine together closely to ensure stable system operation If the system is lacks of one factor, disater will happen any time This cause an extremely heavy loss for businesses Therefore, load balancing, scalability and high availability factors determine survival of businesses
The researchers in over the world gave a lot of load balancing solutions for database mannagement systems However, there are some solutions do not satisfy fully three factors above So the thesis chooses a load balancing solution for MySQL database management system that uses a load balancer, called MySQL Proxy MySQL Proxy is a program that sits between clients and MySQL servers All of MySQL Proxy‟s activities based on the Lua scripting language and Load Balancing Algorithms It receives queries from clients, monitors, analyzes them, passes them to the MySQL server and returns the responses from the MySQL Server to the appropriate client Not only load balancing, this solution also solves the scalability and high availability problem base on the Replication MySQL method
The experiment based on three models of Replication, the first model there is only one MySQL server, the second model is the simple replication model (one master and one slave), and last model is the master – multi slaves replication model (one master and two slaves) The load parameters assessment and the performance of the servers show that the results is satisfactory and this solution can apply in fact
Keywords: MySQL Proxy, Load balancing
Trang 7LỜI CAM ĐOAN
Tôi xin cam đoan giải pháp cân bằng tải hệ quản trị CSDL MySQL sử dụng MySQL Proxy và thực nghiệm được trình bày trong khóa luận này là do tôi thực hiện dưới sự hướng dẫn và chỉ bảo của Tiến sĩ Nguyễn Hải Châu
Tất cả các tài liệu tham khảo từ các nghiên cứu liên quan đều được nêu nguồn gốc một cách rõ ràng từ danh mục Tài liệu tham khảo trong khóa luận trong khóa luận, không có việc sao chép tài liệu, công trình nghiên cứu của người khác mà không chỉ rõ về tài liệu tham khảo
Trang 8MỤC LỤC
MỞ ĐẦU 1
CHƯƠNG 1: SỰ CẦN THIẾT CỦA VIỆC CÂN BẰNG TẢI TRUY VẤN ĐỌC CHO HỆ QUẢN TRỊ CSDL MYSQL 3
1.1 CÁC KIỂU QUÁ TẢI MÁY CHỦ [8] 3
1.1.1 Số lượng truy cập hợp lệ đến máy chủ quá lớn 3
1.1.2 Máy chủ bị tấn công 3
1.1.3 Internet 4
1.2 SỰ CẦN THIẾT CỦA VIỆC CÂN BẰNG TẢI CHO CÁC HỆ QUẢN TRỊ CSDL NÓI CHUNG VÀ MYSQL NÓI RIÊNG 5
1.2.1 Sự cần thiết của việc cân bằng tải cho các hệ quản trị nói chung 5
1.2.2 Sự cần thiết của việc cân bằng tải hệ quản trị CSDL MySQL với việc sử dụng bộ cân bằng tải là MySQL Proxy 6
1.3 MỘT SỐ TIÊU CHÍ ĐÁNH GIÁ TẢI VÀ HIỆU NĂNG CỦA MÁY CHỦ 7
1.3.1 CPU Utilization 7
1.3.2 Memory usage 8
1.3.3 Thời gian phản hồi 8
1.4 XÁC ĐỊNH MỤC TIÊU NGHIÊN CỨU CỦA KHÓA LUẬN LÀ CÁC ỨNG DỤNG QUÁ TẢI TRUY VẤN ĐỌC 8
CHƯƠNG 2: CÁC GIẢI PHÁP CÂN BẰNG TẢI CHO CÁC HỆ QUẢN TRỊ CSDL 10
2.1 CÁC GIẢI PHÁP CÂN BẰNG TẢI CHO HỆ QUẢN TRỊ CSDL MYSQL 10
2.1.1 Giải pháp sử dụng Replication cơ sở dữ liệu với MySQL Proxy 10
2.1.2 Giải pháp sử dụng Clustering [3] 10
2.2 GIẢI PHÁP CÂN BẰNG TẢI CHO HỆ QUẢN TRỊ CSDL POSTGRESQL 12
2.2.1 Giải pháp sử dụng Replication cơ sở dữ liệu 12
Trang 92.2.2 Giải pháp sử dụng Partitioning cơ sở dữ liệu - Cân bằng tải các truy vấn ghi
với PL/Proxy 17
2.3 GIẢI PHÁP CÂN BẰNG TẢI CHO HỆ QUẢN TRỊ CSDL ORACLE 18
2.3.1 Giải pháp cân bằng tải phía client 18
2.3.2 Giải pháp cân bằng tải phía server 19
2.3.3 Giải pháp Oracle Real Application Cluster 19
2.4 GIẢI PHÁP CÂN BẰNG TẢI CHO HỆ QUẢN TRỊ CSDL SQL 21
2.4.1 Giải pháp sử dụng Replication cơ sở dữ liệu 21
2.4.2 Giải pháp Database mirroring 26
2.4.3 Giải pháp Network Load Balancing 27
2.5 Các thuật toán cân bằng tải 29
2.5.1 Giải thuật thuật Roun-robin 29
2.5.2 Hàm băm 30
2.5.3 Giải thuật xác định tổng số kết nối nhỏ nhất 32
CHƯƠNG 3: BÀI TOÁN CÂN BẰNG TẢI READ CHO HỆ QUẢN TRỊ CSDL MYSQL VỚI MYSQL PROXY 33
3.1 GIỚI THIỆU VỀ MYSQL PROXY VÀ NGÔN NGỮ KỊCH BẢN LUA 33
3.1.1 Giới thiệu về mysql proxy 33
3.1.2 Giới thiệu về ngôn ngữ kịch bản Lua 34
3.1.3 Nguyên lý hoạt động của MySQL Proxy với ngôn ngữ kịch bản Lua [25] 35
3.2 GIỚI THIỆU VỀ GIẢI PHÁP REPLICATION TRONG HỆ QUẢN TRỊ CSDL MYSQL 37
3.3 GIỚI THIỆU VỀ CÔNG CỤ MYSQLSLAP 42
3.4 PHÁT BIỂU BÀI TOÁN 43
3.5 MÔ HÌNH GIẢI QUYẾT BÀI TOÁN 44
3.4.1 Mô hình MySQL Proxy – một master – một slave 44
Trang 103.4.2 Mô hình MySQL Proxy – một master – multi slave 44
CHƯƠNG 4: THỰC NGHIỆM VÀ ĐÁNH GIÁ 46
4.1 MÔI TRƯỜNG THỰC NGHIỆM 46
4.2 TIẾN HÀNH THỰC NGHIỆM 46
4.2.1 Cài đặt MySQL Proxy 46
4.2.2 Cấu hình cho giải pháp replication trong hệ quản trị CSDL MySQL [7] 49
4.2.3 Kịch bản Lua 51
4.2.4 Thử nghiệm 53
4.3 PHÂN TÍCH, ĐÁNH GIÁ KẾT QUẢ THỰC NGHIỆM 55
4.3.1 Client gửi truy vấn trực tiếp đến máy chủ MySQL 55
4.3.2 Mô hình MySQL Proxy – một master – một slave 56
4.3.3 Mô hình MySQL Proxy – một master – hai slave 64
4.4 NHẬN XÉT 74
4.4.1 Khả năng chịu tải của server 74
4.4.2 Khả năng mở rộng 74
4.4.3 Tính sẵn sàng cao 75
KẾT LUẬN 76
Trang 11DANH SÁCH CÁC BẢNG
Bảng 1: Cấu hình các máy 46Bảng 2: Kết quả thời gian chạy các truy vấn trong mô hình chỉ có một MySQL server 56
Bảng 3: Kết quả thời gian chạy các truy vấn trong mô hình MySQL Proxy-master-slave 64Bảng 4: Kết quả thời gian chạy các truy vấn trong mô hình MySQL Proxy-master-multi slave 72
Trang 12DANH SÁCH CÁC HÌNH VẼ
Hình 1: Mô hình PGCluster trong giải pháp cân bằng tải 12
Hình 2: Mô hình của Slony-I trong cân bằng tải 14
Hình 3: Mô hình pgpool-II trong cân bằng tải 15
Hình 4: Giải pháp cân bằng tải hệ quản trị CSDL PostgreSQL với PL/Proxy 17
Hình 5: Giải pháp cân bằng tải cho hệ quản trị CSDL Oracle phía client 18
Hình 6: Giải pháp cân bằng tải phía server cho hệ quản trị CSDL Oracle 19
Hình 7: Giải pháp cân bằng tải cho hệ quản trị CSDL Oracle Real Application Cluster 20 Hình 8: Giải pháp Merge replication cân bằng tải cho hệ quản trị CSDL SQL 22
Hình 9: Giải pháp Transaction replication cân bằng tải cho hệ quản trị CSDL SQL 24
Hình 10: Giải pháp Log shipping để cân bằng tải cho hệ quản trị CSDL SQL 25
Hình 11: Giải pháp Database Mirroring cân bằng tải cho hệ quản trị CSDL SQL 27
Hình 12: Giải pháp Network load balancing cân bằng tải cho hệ quản trị CSDL SQL 29
Hình 13: Các thủ tục cần thực hiện khi client gửi một truy vấn đến server qua MySQL Proxy 36
Hình 14: Mô hình replication đơn giản master – slave trong MySQL 39
Hình 15: Mô hình replication master – multi slave trong MySQL 39
Hình 16: Mô hình master – relay slave trong MySQL 40
Hình 17: Mô hình replication master – master trong MySQL 41
Trang 13Hình 18: Mô hình master-slave replication với MySQL Proxy 44
Hình 19: Mô hình master – multi salve replication với MySQL Proxy 45
Hình 20: Hiệu năng của server trong mô hình chỉ có duy nhất MySQL server 56
Hình 21: Hiệu năng CPU của master 73
Hình 22: Hiệu năng về Processes 73
Hình 23: Hiệu năng trung bình tải 74
Trang 14DANH SÁCH CÁC TỪ VIẾT TẮT
1 CPU Central Processing Unit Đơn vị xử lý trung tâm
2 RAM Random Access Memory Bộ nhớ truy cập ngẫu nhiên
3 RAC Real Application Cluster Cụm ứng dụng thực
Trang 15DANH SÁCH CÁC THUẬT NGỮ
15 Real Application Cluster
Trang 1620 Subscriber Người mua
22 Transactional replication Nhân rộng giao dịch
30 transaction log Bản ghi giao dịch
Trang 171
MỞ ĐẦU
Sự bùng nổ của internet trong những năm gần đây khiến số lượng người dùng truy cập qua internet đến các máy chủ cơ sở dữ liệu ngày càng tăng mạnh Với hàng triệu lượt truy cập mỗi ngày thì đòi hỏi hệ thống máy chủ cơ sở dữ liệu phải cực kỳ mạnh mẽ, nếu không máy chủ sẽ bị quá tải Một hệ thống máy chủ mạnh mẽ là hệ thống có khả năng đáp ứng được tất cả các truy vấn của client trong khoảng thời gian nhanh nhất – hệ thống
có khả năng cân bằng tải Bên cạnh khả năng cân bằng tải, thì hệ thống cũng cần có khả năng mở rộng và tính sẵn sàng cao Ba yếu tố này liên hệ mật thiết với nhau để đảm bảo
hệ thống hoạt động ổn định Nếu một hệ thống mà không đáp ứng được một trong ba yêu cầu trên thì thảm họa có thể xảy ra bất cứ lúc nào Điều này gây ra một tổn thất vô cùng nặng nề cho doanh nghiệp Do vậy, cân bằng tải, khả năng mở rộng và tính sẵn sàng cao quyết định đến yếu tố sống còn của một doanh nghiệp
Đã có rất nhiều phương pháp cân bằng tải được đưa ra cho các hệ quản trị CSDL Tuy nhiên nhiều phương pháp không giải quyết được đầy đủ cả ba yếu tố trên cho hệ thống máy chủ Vì vậy, khóa luận đưa ra phương pháp sử dụng MySQL proxy để cân bằng tải cho các máy chủ cơ sở dữ liệu MySQL MySQL proxy không chỉ đáp ứng được yêu cầu cân bằng tải mà còn đáp ứng được nhu cầu mở rộng và đảm bảo tính sẵn sàng cao của hệ thống nhờ việc sử dụng phương pháp Replication cho MySQL Do vậy, ý nghĩa thực tiễn của giải pháp này là rất lớn Ngoài ra, nó còn có ý nghĩa trong việc nghiên cứu và phát triển các giải pháp cân bằng tải tốt hơn khi số lượng người dùng truy cập tăng lên rất nhiều Do các truy cập đến máy chủ cơ sở dữ liệu chủ yếu là đọc dữ liệu, nên khóa luận tập trung nghiên cứu về giải pháp cân bằng tải cho máy chủ cơ sở dữ liệu MySQL sử dụng MySQL Proxy cho các truy vấn đọc
Chương 1: Trình bày về các nguyên nhân gây quá tải máy chủ, từ đó xác định tính
cần thiết của việc cân bằng tải cho các hệ quản trị CSDL nói chung và cho hệ quản trị CSDL MySQL Chương 1 cũng giới thiệu về các tiêu chí đánh giá tải và hiệu năng của máy chủ
Chương 2: Giới thiệu một số giải pháp cân bằng tải cho các hệ quản trị CSDL:
MySQL, PostgreSQL, Oracle và SQL Trình bày một số thuật toán được sử dụng trong các giải pháp cân bằng tải
Trang 182
Chương 3: Trình bày bài toán cân bằng tải cho hệ quản trị CSDL MySQL với Load
Balancer là MySQL Proxy Chương này tìm hiểu về giải pháp replication trong hệ quản trị CSDL MySQL, nguyên lý hoạt động của MySQL Proxy, ngôn ngữ kịch bản Lua được
sử dụng để điều khiển các hành động của MySQL Proxy và công cụ mysqlslap để giả lập các client, sinh truy vấn đến các máy chủ
Chương 4: Thực nghiệm và đánh giá Tiến hành thực nghiệm cân bằng tải các truy
đọc cho các máy chủ với hai mô hình MySQL Proxy – một master – một slave và mô hình MySQL Proxy – một master – multi slave Công cụ được sử dụng để sinh ra các truy vấn là mysqlslap
Phần kết luận và hướng phát triển khóa luận: Tóm lược những điểm chính của khóa luận Chỉ ra những điểm cần khắc phục, đồng thời đưa ra hướng nghiên cứu trong thời gian tiếp theo
Trang 193
CHƯƠNG 1: SỰ CẦN THIẾT CỦA VIỆC CÂN BẰNG TẢI TRUY VẤN
ĐỌC CHO HỆ QUẢN TRỊ CSDL MYSQL
1.1 CÁC KIỂU QUÁ TẢI MÁY CHỦ [8]
1.1.1 Số lượng truy cập hợp lệ đến máy chủ quá lớn
Trong một khoảng thời gian ngắn có thể có đến hàng nghìn hoặc thậm chí là hành triệu client kết nối đến server Do vậy, nếu hệ thống server không mạnh thì việc quá tải server là không thể tránh khỏi
Những yêu cầu truy cập từ client đến server được phân chia thành hai loại:
- Truy vấn ghi: các client gửi yêu cầu ghi vào cơ sở dữ liệu của server Các yêu cầu ghi này là: CREATE (cơ sở dữ liệu, bảng, ), UPDATE (dữ liệu), INSERT (dữ liệu vào bảng) và DELETE (hàng, trường dữ liệu) hay DROP (bảng, cơ sở dữ liệu, )
- Truy vấn đọc: các client gửi yêu cầu đọc một hoặc nhiều đối tượng trong cơ sở dữ liệu của server Các yêu cầu đọc này là: SELECT
Trong số các truy vấn từ client đến server thì phần lớn là các truy vấn đọc Bởi vì đối với các ứng dụng web thì người dùng thường yêu cầu hiển thị dữ liệu nhiều hơn là cập nhật dữ liệu
Bên cạnh đó, nếu server được bảo dưỡng, hoặc nâng cấp một phần cứng hay một phần mềm bị thất bại thì một tài nguyên nào đó của server không có sẵn Khi client kết nối đến server và cần dùng tài nguyên này thì nó sẽ phải chờ và với một lượng truy cập lớn server sẽ bị quá tải
1.1.2 Máy chủ bị tấn công
a) Tấn công từ chối phân tán dịch vụ (Distributed Denial of Service attacks)
Một tấn công từ chối dịch vụ (DoS attack) hay tấn công từ chối phân tán dịch vụ (DDoS attack) là một xâm phạm để làm cho một tài nguyên máy tính hoặc tài nguyên mạng không có sẵn đối với người sử dụng
Thủ phạm của cuộc tấn công DoS thường nhằm đến mục tiêu là các website hoặc các dịch vụ lưu trữ trên web server cấu hình cao như ngân hàng, cổng thanh toán thẻ tín dụng hay thậm chí là cả root namserver
Trang 204
Một phương pháp phổ biến của cuộc tấn công liên quan đến bão hòa server với các yêu cầu thông tin liên lạc bên ngoài Nó buộc server phải thiết lập lại hoặc tiêu thụ tài nguyên của server để server không thể cung cấp dịch vụ dự định của mình, cản trở các phương tiện truyền thông giao tiếp giữa client với server Do vậy, server không thể đáp ứng được các truy vấn hợp lệ của client hoặc đáp ứng rất chậm Các cuộc tấn công như vậy thường dẫn đến tình trạng quá tải của server
b) Sâu máy tính (computer worms):
Một con sâu máy tính là một phần mềm dộc hại, một chương trình độc hại mà nó
có thể tự tái tạo để lây lan ra các máy tính khác Thông thường, sâu máy tính sử dụng một mạng lưới máy tính để lây lan Vì thế, mạng lưới ấy bị nhiễm sâu và được kiểm soát bởi tác giả sâu Sâu máy tính gây ra sự gián đoạn lớn bằng cách làm tăng lưu lượng mạng và các hiệu ứng không mong muốn khác, nó còn có thể xóa các tập tin trên server
c) Viruss XSS
Một virus máy tính là một chương trình máy tính có thể tự tái tạo và lây lan từ một máy tính khác Virus có thể làm tăng nguy cơ lây lan sang máy tính khác bằng cách lây nhiễm các tập tin trên một hệ thống tập tin mạng hoặc một hệ thống tập tin được truy cập bởi các máy tính khác
Virus XSS có thể gây ra lượng truy cập cao có thể đến hàng triệu truy cập trong một khoảng thời gian rất ngắn, vì hàng triệu các trình duyệt bị nhiễm bệnh và/hoặc ngay cả các server cũng bị nhiễm bệnh Do vậy, nó gây ra tình trạng quá tải của server
1.1.3 Internet
a) Internet bots
Internet bots (Botnet) còn được gọi là web robots, WWW robots hay đơn giản là bots, là ứng dụng phần mềm tự động thực thi các nhiệm vụ trên mạng Internet Thông thường Bot thực hiện các nhiệm vụ đơn giản được lập trình sẵn và có cấu trúc lặp đi lặp lại với tốc độ cao hơn một người bình thường
Một Botnet được định nghĩa là một “mạng gồm rất nhiều máy tính bị xâm nhập và
có thể được kẻ tấn công điều khiển từ xa” “Máy tính bị xâm nhập” là máy tính bị lây nhiễm phần mềm độc hại (Bot) Như vậy, Botnet là tập hợp các Bot được sử dụng với mục đích xấu Botmaster là một người hoặc một nhóm người điều khiển Botnet
Trang 215
Mục đích kiểm soát Botnets của tin tặc là một số hình thức hoạt động bất hợp pháp Những hoạt động này bao gồm, tấn công từ chối dịch vụ phân tán (DDoS), phát tán thư giác (spamming), theo dõi lưu lượng dữ liệu trên hệ thống mạng (sniffing network traffic), theo dõi bàn phím (keylogging), phát tán mã độc (spreading malware), v.v [2] Nếu lưu lượng không được lọc hoặc giới hạn trên các web site lớn với rất ít tài nguyên (như băng thông, v.v…) thì sẽ gây ra tình trạng quá tải cho server
b) Mạng chậm
Khi mạng chậm thì các yêu cầu của khách hàng được phục vụ chậm hơn và số lượng kết nối tăng lên rất nhiều vượt quá giới hạn server đạt được Do vậy, nguy cơ máy chủ bị quá tải là rất cao
1.2 SỰ CẦN THIẾT CỦA VIỆC CÂN BẰNG TẢI CHO CÁC HỆ QUẢN TRỊ CSDL NÓI CHUNG VÀ MYSQL NÓI RIÊNG
1.2.1 Sự cần thiết của việc cân bằng tải cho các hệ quản trị nói chung
Sự phát triển của internet khiến cho số lượng người dùng truy cập đến các web server ngày càng tăng mạnh, đặc biệt là các mạng xã hội hoặc các website chia sẻ trực tuyến Các website này không chỉ cho phép người dùng trao đổi và chia sẻ thông tin, giao lưu và kết bạn mà còn cho phép người dùng lưu trữ tài liệu với dung lượng khá lớn Đầu năm 2012, hãng nghiên cứu thị trường Nielsen1 đã công bố 10 website được truy cập nhiều nhất vào năm 2011, trong đó, đứng đầu là Google2 trung bình có khoảng 153,44 triệu người dùng Mỹ truy cập mỗi tháng; đứng thứ hai trên bảng xếp hạng là Facebook3với 137,64 triệu người dùng; Apple4 là 61,6 triệu người dùng [9]. Với hàng triệu lượt truy cập mỗi ngày đòi hỏi hệ thống máy chủ phải cực kỳ mạnh mẽ, nếu không máy chủ sẽ bị quá tải Một hệ thống hoạt động tốt khiến người dùng hài lòng, từ đó số lượng người dùng ngày càng tăng lên, gây quá tải máy chủ, dẫn đến yêu cầu nâng cấp hệ thống Cứ như vậy, hệ thống được nâng cấp và người dùng ngày càng tăng Vòng tuần hoàn này dẫn đến nhu cầu phải xây dựng một hệ thống có khả năng đáp ứng được số lượng lớn người dùng trong thời gian dài, và khi người dùng tăng lên thì có thể mở rộng hệ thống một cách dễ dàng mà không ảnh hưởng đến hoạt động của hệ [1]
Bên cạnh sự bùng nổ của các website chia sẻ trực tuyến, một số đơn vị như các hãng hàng không, ngân hàng, các doanh nghiệp lớn thì mạng máy tính có thể ví như hệ thần kinh điều khiển hoạt động của toàn doanh nghiệp và máy chủ là trái tím của mạng
Trang 226
máy tính Sự ngưng hoạt động của máy chủ làm tê liệt toàn bộ các hoạt động chính của doanh nghiệp, và thiệt hại khó có thể lường trước được Ngoài ra, như đã giới thiệu ở trên, kẻ xấu lợi dụng khi các máy chủ của doanh nghiệp quá tải sẽ tấn công doanh nghiệp, lấy đi những tài liệu quan trọng hay những khoản tiền lớn – ví dụ như trong ngân hàng Nếu điều này xảy ra thì tổn thất cho doanh nghiệp là rất lớn, có thể bị phá sản
Với các tình trạng trên, nhu cầu cân bằng tải hệ thống máy chủ, đặc biệt là cân bằng tải cho các máy chủ cơ sở dữ liệu là điều kiện tất yếu Ngoài nhu cầu cân bằng tải, nhu cầu mở rộng hệ thống và tính sẵn sàng cao của các máy chủ cũng rất cần thiết Cân bằng tải là khả năng chia tải cho các database server của hệ thống để đáp ứng được tất cả các yêu cầu của người dùng một cách nhanh nhất, không bị bất kỳ một thời gian trễ nào Khi người dùng tăng và phạm vi người dùng mở rộng ra, do vậy hệ thống phải được triển khai trên quy mô rộng lớn như trên một quốc gia hay toàn cầu Với khả năng cân bằng tải
và khả năng mở rộng quy mô như vậy làm tính sẵn sàng của hệ thống cao hơn rất nhiều Khi một database server bị lỗi, thì một server khác thay thế server bị lỗi ngay tức khắc
Ba yếu tố này liên hệ mật thiết với nhau, hỗ trợ nhau để đảm bảo hệ thống hoạt động tốt,
ổn định trong thời gian dài
1.2.2 Sự cần thiết của việc cân bằng tải hệ quản trị CSDL MySQL với việc sử dụng
bộ cân bằng tải là MySQL Proxy
Hệ quản trị CSDL MySQL đã trở thành hệ quản trị CSDL mã nguồn mở phổ biến nhất thế giới Bởi vì MySQL có hiệu suất cao, độ tin cậy cao và dễ sử dụng MySQL chạy trên hơn 20 nền tảng bao gồm cả Linux, Windows, Mac OS, Solaris, IBM AIX, tạo
ra sự linh hoạt để kiểm soát Bên cạnh đó, MySQL cung cấp một loạt các công cụ cơ sở
dữ liệu, hỗ trợ, đào tạo và các dịch vụ tư vấn để quản trị cơ sở dữ liệu thành công Nó cũng là hệ quản trị CSDL của sự lựa chọn cho một thế hệ ứng dụng mới được xây dụng trên LAMP (Linux, Apache, MySQL / Perl / Python) Nhiều tổ chức lớn nhất thế giới và phát triển nhanh nhất bao gồm Facebook, Google, Adobe, Alcatel Lucent, Youtube, và Zappos đều dựa trên MySQL để tiết kiệm thời gian, tiền bạc và cung cấp năng lượng cao cho các Website, các hệ thống kinh doanh quan trọng và các phần mềm đóng gói [9] Cũng như các hệ quản trị CSDL khác, với sự phổ biến của mình, hệ quản trị CSDL MySQL cần thiết phải được cân bằng tải Ban đầu khi triển khai hệ thống Website các doanh nghiệp, tổ chức thường hay chọn giải pháp Webserver và Database Server trên cùng một server Giải pháp này giúp các doanh nghiệp tiết kiệm được khá nhiều chi phí
Trang 237
đầu tư thiết bị phần cứng, nhưng sau thời gian đưa vào vận hành thì server hiện tại không thể đáp ứng được nhu cầu truy cập rất lớn của người dùng hoặc quá trình truy cập rất chậm Ngoài ra, khi server gặp sự cố thì tất cả các hoạt động của nó bị ngừng lại làm cho các hoạt động của doanh nghiệp cũng bị ảnh hưởng nghiêm trọng và có thể gây ra tổn thất rất lớn đến uy tín và tài chính của doanh nghiệp
Doanh nghiệp đã nghĩ đến giải pháp sao lưu và phục hồi dữ liệu Một phần hay toàn bộ cơ sở dữ liệu của doanh nghiệp được sao lưu, hay chỉ sao lưu các thông tin biểu diễn cấu trúc cơ sở dữ liệu như tạo cơ sở dữ liệu (CREAT DATABASE), tạo bảng (CREAT TABLE) và nội dung của các câu lệnh làm thay đổi cơ sở dữ liệu như câu lệnh INSERT Nếu các sự kiện như nguồn điện, hỏng thiết bị có thể làm cho hỏng hoặc mất
dữ liệu, thì giải pháp này tránh được tình trạng đó bằng cách phục hồi dữ liệu đã được sao lưu Tuy nhiên, giải pháp này chưa giải quyết được vấn đề cân bằng tải cho server Hai giải pháp trên đều không khả thi khi thì giải pháp replication cơ sở dữ liệu với
bộ cân bằng tải MySQL Proxy đã được đưa ra cho hệ quản trị CSDL MySQL Giải pháp này đang được các doanh nghiệp ưu tiên hàng đầu vì nó giải quyết được các vấn đề mà hai giải pháp trên chưa làm được: cân bằng tải, khả năng mở rộng và tính sẵn sàng cao
1.3 MỘT SỐ TIÊU CHÍ ĐÁNH GIÁ TẢI VÀ HIỆU NĂNG CỦA MÁY CHỦ
1.3.1 CPU Utilization
CPU – đơn vị xử lý trung tâm – được xem như là bộ não của máy tính, nó là tài nguyên quan trọng nhất vì nó liên quan trực tiếp đến khả năng xử lý, tính toán của hệ thống Tốc độ xử lý của CPU thường được tính theo số xung nhịp đồng hồ hoặc số lượng phép tình cơ bản được thực hiện trong một giây Đơn vị tốc độ được tính theo MHz (tần
số xung nhịp của đồng hồ trong một giây) hoặc MIPS (Million Instruction Per Second – triệu phép tính cơ bản trong một giây)
CPU Utilization (hay còn được gọi là CPU usage) là tổng thời gian mà CPU được
sử dụng cho quá trình tính toán và xử lý một chương trình máy tính CPU Utilization là một trong những yếu tố đánh giá hiệu năng của máy chủ Nếu tỉ lệ phần trăm của CPU là cao thì thời gian xử lý một chương trình máy tính là lớn, những chương trình khác muốn thực thi thì phải chờ cho đến khi CPU được giải phóng, do vậy hiệu suất của máy chủ là thấp Nếu tỉ lệ phần trăm của CPU thấp, thì thời gian xử lý một chương trình máy tính là nhỏ, hiệu suất của máy tính là cao
Trang 248
1.3.2 Memory usage
Memory – bộ nhớ - là một thành phần quan trọng của máy tính, được sử dụng để lưu trữ các chương trình và dữ liệu trước khi chương trình được thi hành Các đặc trưng
cơ bản của bộ nhớ là thời gian truy cập dữ liệu và dung lượng bộ nhớ Thời gian truy cập
là khoảng thời gian cần thiết kể từ khi phát tín hiệu điều khiển đọc/ghi đến khi việc đọc/ghi hoàn thành Tốc độ truy cập là một yếu tố quyết định đến tốc độ chung của máy tính Dung lượng bộ nhớ chỉ khối lượng dữ liệu mà bộ nhớ có thể lưu trữ đồng thời Trong linux, yếu tố quan trọng trong việc xác định hiệu suất là dung lượng bộ nhớ sẵn có trong RAM – bộ nhớ vật lý – và bộ nhớ ảo – SWAP space
RAM – bộ nhớ truy cập ngẫu nhiên – là một loại bộ nhớ chính của máy tính để lưu trữ mã chương trình và dữ liệu trong suốt thời gian thực thi, chúng sẽ bị xóa khi mất nguồn điện Đây là loại bộ nhớ có thể ghi và đọc dữ liệu và thời gian truy cập đến bất kỳ
ô nhớ nào cũng như nhau
Bộ nhớ ảo là một không gian trong đĩa cứng, được sử dụng khi dung lượng của RAM đã đầy Bộ nhớ ảo là một kỹ thuật cho phép xử lý một chương trình không được nạp toàn bộ vào RAM Trong RAM chỉ lưu trữ các lệnh và dữ liệu phục vụ cho hoạt động của chương trình tại một thời điểm nhất định Khi cần tới các lệnh hoặc dữ liệu mới hệ thống sẽ nạp chúng vào bộ nhớ tại vị trí trước đó bị chiếm giữ bởi các lệnh không dùng vào thời điểm này Các lệnh và dữ liệu không dùng đến được chuyển vào bộ nhớ ảo Thông số “free” trong RAM và “swap” trong bộ nhớ ảo cho biết dung lượng bộ nhớ
có sẵn trong là bao nhiêu, từ đó có thể đánh giá hiệu suất của máy chủ Nếu dung lượng
bộ nhớ càng lớn thì hiệu suất của máy chủ càng cao và ngược lại
1.3.3 Thời gian phản hồi
Thời gian phản hồi các truy vấn của client gửi đến server chính là một yếu tố để đánh giá tải và hiệu năng của máy chủ Nếu thời gian phản hồi các truy vấn là thấp thì hiệu suất của máy chủ cao, các truy vấn của client được đáp ứng nhanh mà không có sự chậm chễ Ngược lại, nếu thời gian phản hồi các truy vấn là lớn thì hiệu suất của máy chủ giảm, client sẽ phải đợi một thời gian lâu để có kết quả trà về từ máy chủ
1.4 XÁC ĐỊNH MỤC TIÊU NGHIÊN CỨU CỦA KHÓA LUẬN LÀ CÁC ỨNG DỤNG QUÁ TẢI TRUY VẤN ĐỌC
Trang 259
Trong hầu hết các ứng dụng web như các website báo điện tử (dantri, vnexpress,…), website chia sẻ trực tuyến (Youtube,…) hay các mạng xã hội thì yêu cầu truy vấn dữ liệu của người dùng chủ yếu là truy vấn đọc (đọc tin tức, xem video,…) Giả
sử các truy vấn đọc xảy ra hàng giây thì truy vấn ghi xảy ra hàng phút hoặc có thể là hàng giờ Vì thế, tần suất các truy vấn đọc xảy ra là lớn hơn rất nhiều so với các truy vấn ghi
Do nhu cầu trên, nên khóa luận tập trung nghiên cứu và thử nghiệm giải pháp cân bằng tải cho các truy vấn đọc
Trang 2610
CHƯƠNG 2: CÁC GIẢI PHÁP CÂN BẰNG TẢI CHO CÁC HỆ QUẢN
TRỊ CSDL.
2.1 CÁC GIẢI PHÁP CÂN BẰNG TẢI CHO HỆ QUẢN TRỊ CSDL MYSQL
2.1.1 Giải pháp sử dụng Replication cơ sở dữ liệu với MySQL Proxy
Giải pháp này là mục tiêu nghiên cứu của khóa luận, chi tiết được trình bày trong chương 3 và chương 4
2.1.2 Giải pháp sử dụng Clustering [3]
Clustering là một kiến trúc nhằm đảm bảo nâng cao khả năng sẵn sàng cho các hệ thống mạng máy tính Clustering cho phép sử dụng nhiều máy chủ kết hợp với nhau tạo thành một cụm và có khả năng chịu được lỗi nhằm nâng cao độ sẵn sàng cho hệ thống
Nó có thể bao gồm nhiều máy chủ kết nối với nhau theo dạng song song hoặc phân tán, nếu một máy chủ ngừng hoạt động do bị sự cố hoặc để nâng cấp bảo trì thì luôn luôn có một bản sao dự phòng tương tự của máy chủ đó sẽ đảm nhiệm công việc giúp
MySQL Cluster là một công cụ lưu trữ dữ liệu dựa trên giải pháp clustering, được thiết kế cho khả năng chịu lỗi, dự phòng, khả năng sẵn sàng, khả năng mở rộng và hiệu suất cao Dữ liệu được lưu trữ và nhân rộng trên các nút dữ liệu riêng biệt, mỗi nút dữ liệu cài đặt trên một máy chủ và luôn luôn có chứa một bản sao dữ liệu giống hệt nó trong hệ thống Mỗi cụm chứa các nút quản lý, giúp quản lý, kiểm tra, giám sát toàn hệ thống Các phiên bản ban đầu của MySQL Cluster lưu trữ tất cả các thông tin trong bộ nhớ chính với khả năng lưu trữ không ổn định Nhưng các phiên bản sau này đã khắc phục được nhược điểm này của MySQL Cluster cho phép lưu trữ dữ liệu trên đĩa giúp MySQL Cluster có thể làm việc với lượng dữ liệu lưu trữ rất lớn, lớn hơn bộ nhớ chính của máy Sự quan trọng của MySQL Cluster còn ở khả năng sử dụng máy chủ MySQL như là một cộng cụ truy vấn để truy vấn đến cơ sở dữ liệu nằm trên các nút chứa dữ liệu
Vì thế, có thể di chuyển các ứng dụng thiết kế để tương tác với MySQL sang MySQL Cluster tốt Ngoài ra khái niệm nút ngang hàng cho phép một cập nhật được thực hiện trên một máy chủ sẽ được nhìn thấy ngay lập tức trên các máy chủ khác Và việc truyền tải các thay đổi sử dụng một cơ chế thông tin liên lạc tinh vi được thiết kế cho việc truyền thông qua mạng hiệu quả rất cao Mục đích của tất cả các việc đó là để MySQL Cluster đạt được một hiệu suất cao nhất có thể, để phân phối tải, và thỏa mãn khả năng sẵn sàng cao và tính dự phòng
Trang 2711
Mô hình MySQL Cluster trong bài toán cân bằng tải Trên máy 192.168.1.50 sẽ cài đặt Load balancer mà cụ thể là các chương trình ldirectord và ipvsadm Chương trình ipvsadm có nhiệm vụ phân tải khi có yêu cầu truy vấn đến máy chủ cơ sở dữ liệu thì sẽ phân phối đều đến các máy chủ thành viên
để xử lý Chương trình ldirectord có nhiệm vụ giám sát và kiểm tra tín hiệu của các máy chủ cơ sở dữ liệu thành viên thông qua các truy vấn kiểm tra Trong trường hợp dịch vụ của một máy chủ cơ sở dữ liệu bị lỗi thì máy chủ đó sẽ bị loại ra khỏi danh sách và các truy vấn sẽ được dồn đến các máy chủ còn lại
Máy Load balancer sẽ tạo ra một dịa chỉ ip ảo 192.168.1.100 và các ứng dụng sẽ truy cập tới địa chỉ này, Load balancer sau đó sẽ tự động gửi yêu cầu của ứng dụng tới các MySQLD (192.168.1.70 và 192.168.1.80) thật MySQLD nhận truy vấn, xử lý và gửi lại kết quả cho ứng dụng
Trang 2812
2.2 GIẢI PHÁP CÂN BẰNG TẢI CHO HỆ QUẢN TRỊ CSDL POSTGRESQL
PostgreSQL là hệ quản trị CSDL đối tượng - quan hệ mạnh mẽ và mã nguồn mở
Nó đã được phát triển 15 năm, và đã được chứng mình là hệ quản trị CSDL có độ bền mạnh, tính toàn vẹn dữ liệu và tính đúng đắn [11] PostgreSQL cũng đưa ra một số giải pháp cân bằng tải cho hệ thống:
2.2.1 Giải pháp sử dụng Replication cơ sở dữ liệu
Bốn phương pháp replication phổ biến trong hệ quản trị CSDL PostgreSQL đại diện cho bốn phương thức hoạt động của replication: multi-master đồng bộ, multi-master không đồng bộ, master to multi-salve không đồng bộ và statement-based middelware là:
a) PGCluster
PGCluster là hệ thống replication đồng bộ của các thành phần multi-master cho PostgreSQL PGCluster bao gồm ba kiểu server, một Load Balancer, Cluster DB và một Replication server
Hình 1: Mô hình PGCluster trong giải pháp cân bằng tải
Chức năng của PGCluster: PGCluster có hai chức năng chính:
Trang 2913
- Chức năng cân bằng tải
Các yêu cầu tham chiếu của client được Load Balancer phân phối đến các Cluster DB Nó hiệu quả với các ứng dụng Web với yêu cầu tham chiếu lớn
Một đối tượng replication có thể được chỉ định cho mỗi bảng Khi các bảng nhận được một yêu cầu cập nhật và các yêu cầu tham chiếu là khác nhau, PGCluster có thể phân phối các bảng để nhận các yêu cầu cập nhật và có thể chỉ sao chép các bảng mà nhận yêu cầu tham chiếu
- Tính sẵn sàng cao
Khi thất bại xảy ra trong cơ sở dữ liệu Cluster, Load Balancer và Replication server tách cơ sở dữ liệu bị lỗi từ hệ thống và tiếp tục dịch vụ với việc sử dụng các cơ sở dữ liệu còn lại
Dữ liệu được sao chép tự động vào cơ sở dữ liệu phục hồi hoặc bổ sung từ
cơ sở dữ liệu khác Trong quá trình phục hồi, các truy vấn nhận được sẽ được thực thi từ Replication server [12]
b) Bucardo
Bucardo là một hệ thống replication không đồng bộ, cho phép cả hai phương pháp
multi-master và multi-slave Nó được phát triển ở Backcountry.com bởi Jon Jensen và
Greg Sabino Mullane của End Point Corporation, và hiện tại nó được sử dụng ở nhiều tổ thức khác nhau Bucardo là phần mềm mã nguồn mở và miễn phí [13]
Bucardo là không đồng bộ Thay vào đó, hy vọng rằng các nút thường xuyên liên lạc với nhau như hầu hết các giải pháp replication trong các hệ quản trị CSDL, Bucardo cho phép một master ngắt kết nối để thực hiện một số lượng công việc tùy ý và sau đó tái đồng bộ khi master kết nối lại với các server còn lại Điều này làm cho nó thích hợp với kịch bản mà cơ sở dữ liệu lưu trữ trên một hệ thống điện thoại di động Một máy tính xách tay có thể chạy các server cơ sở dữ liệu, trước khi bắt đầu chuyến đi, công việc đồng
bộ hóa được thực hiện, sau đó cập nhật theo cả hai hướng với tất cả các thay đổi được thực hiện khi quay trở lại văn phòng
Bucardo không phải là một giải pháp replication thích hợp cho hầu hết các yêu cầu chuyển đổi dự phòng và tính sẵn sàng cao Nhưng nó có thể phù hợp với việc phân chia
Trang 30Hình 2: Mô hình của Slony-I trong cân bằng tải
Slony-I có những tính năng sau:
- Replication: Slony-I được trang bị với một hệ thống không đồng bộ, master có thể thực hiện truy vấn mà không đợi cho quá trình đồng bộ diễn ra ở slave, thậm chí đặt một slave ở một vị trí từ xa trong một mạng chậm, như mạng WAN, thì hiệu suất xử lý của master không hề giảm xuống Điều này rất hữu ích khi sử dụng replication cho các mục đích sao lưu
- Phân tầng: trong Slony-I có thể kết nối giữa slave với các slave khác Khi đó, một slave có thể vừa là một master của một số slave và vừa là một slave của một master khác Nếu chỉ có một master thì tải trọng trên master là rất lớn Giải pháp Slony-I với cơ chế phân tầng sẽ giảm tải cho master, làm tăng hiệu suất của master nói riêng và của toàn bộ hệ thống nói chung Tuy nhiên, khi dữ liệu được cập nhật, thông tin về dữ liệu đó phải thông qua nhiều server nên sự khác biệt về
cơ sở dữ liệu tại một số điểm trở nên lớn hơn
Trang 3115
- Chuyển đổi dự phòng: là khả năng chuyển vai trò từ master sang slave Master cũ
có các hành vi tương đương như slave sau khi quá trình failover diễn ra Chức năng Switchover là rất hữu ích trong trường hợp khi master server bảo trì hay bị lỗi Do vậy, không làm gián đoạn các dịch vụ cung cấp cho client
- Cân bằng tải: Với tất cả các tính năng trên, thì Slony-I có một đặc tính quan trọng
là cân bằng tải Các truy vấn từ ứng dụng của client sẽ được phân phối đến các server: truy vấn ghi được gửi đến master và truy vấn đọc được gửi đến các slave
Do vậy, sự quá tải hệ thống là không còn và hiệu suất của hệ thống được nâng cao[14]
d) Pgpool-II
pgpool-II là một trung gian giữa PostgreSQL server và một PostgreSQL client
Hình 3: Mô hình pgpool-II trong cân bằng tải
pgpool-II cung cấp các tính năng sau:
- Kết nối Pooling: pgpool-II duy trì các kết nối đã được thiết lập đến PostgreSQL server, và sử dụng lại chúng bất cứ khi nào mà một kết nối mới với cùng một thuộc tính kết nối đến (ví dụ như cùng thuộc tính username, database, protocol version) Nó làm giảm chi phí kết nối và cải thiện thông lượng tổng thể của hệ thống
Trang 3216
- Replication: pgpool-II có thể quản lý nhiều PostgreSQL server Kích hoạt tính năng replication làm cho nó có thể tạo ra một bản sao lưu thời gian thực trên hai hay nhiều hơn PostgreSQL cluster, để dịch vụ có thể tiếp tục mà không bị gián đoạn nếu một trong số các cluster bị lỗi
- Load Balancing: Khi một cơ sở dữ liệu được nhân rộng, thực hiện một truy vấn SELECT trên bất kỳ server nào cũng sẽ trả lại cùng một kết quả pgpool-II mang lại những lợi thế của tính năng replication để giảm tải trên mỗi PostgreSQL server Nó thực hiện điều đó bằng cách phân phối các truy vấn SELECT giữa các server có sẵn, do đó cải thiện hiệu suất tổng thể của hệ thống Trong một kịch bản lý tưởng, hiệu suất đọc có thể nâng cao tỉ lệ thuận với số lượng PostgreSQL server Cân bằng tải hoạt động tốt nhất trong một kịch bản mà có rất nhiều người dùng thực hiện nhiều truy vấn đọc cùng một lúc
- Hạn chế kết nối khi quá nhiều kết nối: có một giới hạn về số lượng tối đa các kết nối đồng thời tới PostgreSQL server, và các kết nối mới bị từ chối khi mà số lượng này đạt được Có thể nâng cao số lượng tối đa các kết nối này, tuy nhiên, điều này sẽ làm tăng tiêu thụ tài nguyên và có tác động tiêu cực đến hiệu suất tổng thể pgpool-II cũng có một giới hạn kết nối về số lượng tối đa các kết nối, nhưng các kết nối mới sẽ được thêm vào hàng đợi thay vì trả lại một lỗi ngay lập tức
- Truy vấn song song: sử dụng tính năng truy vấn song song, dữ liệu có thể được phân chia giữa nhiều server, do đó một truy vấn có thể được thực thi đồng thời trên tất cả các server, điều này làm giảm thời gian thực hiện tổng thể Truy vấn song song hoạt động tốt nhất khi tìm kiếm dữ liệu với quy mô lớn pgpool-II cho biết giao thức của PostgreSQL back-end và front-end và tiếp nhận các thông điệp giữa một back-end và một front-end Vì vậy, một ứng dụng cơ sở dữ liệu (front-end) nghĩ rằng pgpool-II là một PostgreSQL thật sự và server (back-end) nhìn pgpool-II như một trong số các client của mình Bởi vì pgpool-II là minh bạch cho cả server và client, một ứng dụng cơ sở dữ liệu hiện có có thể được sử dụng với pgpool-II mà gần như không có một sự thay đổi về mã nguồn của nó [15] Như vậy, pgpool-II không chỉ là một phương pháp replication của hệ quản trị CSDL PostgreSQL mà nó còn đóng vai trò là một Load Balancer
Trang 33PL/Proxy được thiết kế để phân phối các cuộc gọi stored procedure Nó tự động
phân phối dự liệu và đảm bảo rằng một phần nhất định của dữ liệu kết thúc tại một nút nhất định Khi một yêu cầu đến, PL/Proxy sẽ tự động tìm các phân mảnh, nơi mà chứa dữ liệu cần cho yêu cầu từ client và nó sẽ lấy dữ liệu trả về cho client Thuật toán được
PL/Proxy sử dụng để tìm các phân mảnh là thuật toán Hàm băm, dựa trên hastext của
trường đang chia tách, cái mà cho phép chia tách công bằng giữa một vài các nút mà
không cần biết trước sự phân bố của dữ liệu Hastext cung cấp hàm nội bộ mà lấy bất kỳ
đầu vào là text và tạo ra đầu ra là một số nguyên như một mã băm Một ưu điểm chính là các ứng dụng không biết được dữ liệu thực sự đến từ đâu - điều này được xử lý bởi PL/Proxy – nó chỉ cần gọi một stored procedure và chờ đợi câu trả lời [5]
Hình 4: Giải pháp cân bằng tải hệ quản trị CSDL PostgreSQL với PL/Proxy
Trang 3418
2.3 GIẢI PHÁP CÂN BẰNG TẢI CHO HỆ QUẢN TRỊ CSDL ORACLE
Oracle là một hệ quản trị CSDL đối tượng – quan hệ được cung cấp và phát triển bởi tập đoàn Oracle Đây là một hệ quản trị CSDL có tính an toàn, bảo mật cao, tính nhất quán và toàn vẹn dữ liệu, cho phép người dùng truy cập tới cơ sở dữ liệu phân tán như một khối thống nhất [16]
2.3.1 Giải pháp cân bằng tải phía client
Phương pháp cân bằng tải này có sẵn từ Oracle 8i Khi một phiên người dùng cố gắng để kết nối với cơ sở dữ liệu, cơ sở dữ liệu của người nghe sẽ chỉ định phiên ngẫu nhiên đến một trong số nhiều thiết bị đầu cuối được liệt kê để lắng nghe
Hình 5: Giải pháp cân bằng tải cho hệ quản trị CSDL Oracle phía client
Phương pháp cân bằng tải này dễ dàng được thực hiện, tuy nhiên nó cũng có một giới hạn rõ ràng: người lắng nghe không có ý tưởng nếu phiên người dùng không được giao cho một thiết bị đầu cuối tương ứng với cơ sở dữ liệu khi máy chủ đã quá tải Hơn nữa, khi người nghe chủ yếu được chọn các kết nối hoàn toàn ngẫu nhiên thì không có đảm bảo rằng kết nối đã chọn đang sẵn sàng ở thời điểm đó Điều này có thể buộc các phiên người dùng chờ đợi trong một thời gian tương đối dài – thậm chí là vài phút - cho
Trang 3519
đến khi hệ điều hành chỉ ra cho người nghe rằng kết nối không sẵn sàng, làm cho phiên
người dùng thất bại với lỗi ORA-01034ORACLE not available[17]
2.3.2 Giải pháp cân bằng tải phía server
Do hạn chế của phương pháp trên nên rõ ràng, một giải pháp tốt hơn là cần thiết, và
từ Oracle 9i đã cung cấp một cân bằng tải phía server Phương pháp cân bằng tải phía này chia đều tải kết nối giữa tất cả các server có sẵn bằng cách xác định tổng số các kết nối trên mỗi server, và sau đó phân bố các yêu cầu kết nối phiên người dùng đến server có tải
ít nhất dựa trên tổng số phiên đã được kết nối [17]
Hình 6: Giải pháp cân bằng tải phía server cho hệ quản trị CSDL Oracle
2.3.3 Giải pháp Oracle Real Application Cluster
Oracle Real Application Cluster (RAC) cung cấp các tùy chọn cho các ứng dụng
mở rộng quy mô vượt quá khả năng của một server Điều này cho phép khách hàng tận dụng lợi thế của chi phí phần cứng thấp để giảm tổng chi phí sở hữu của họ và cung cấp môi trường có khả năng mở rộng tính toán mà hỗ trợ khối lượng công việc ứng dụng của
họ
Trang 36cardinality tối thiểu (tức là số lƣợng nút mà trên đó các ứng dụng cần chạy ở tất cả các
lần) cho một hoặc nhiều ứng dụng quan trọng [18]
Hình 7: Giải pháp cân bằng tải cho hệ quản trị CSDL Oracle Real Application Cluster
Trang 3721
2.4 GIẢI PHÁP CÂN BẰNG TẢI CHO HỆ QUẢN TRỊ CSDL SQL
Hệ quản trị CSDL SQL là một hệ quản trị CSDL quan hệ, được phát triển bởi tập đoàn Microsoft
2.4.1 Giải pháp sử dụng Replication cơ sở dữ liệu
a) Merge replication
Merge replication được thực hiện bởi SQL Server Snapshot Agent và Merge Agent Nếu publication (publication được định nghĩa trong một hoặc nhiều cơ sở dữ liệu trong Publisher, publication thiết lập các bảng, cột và các bộ lọc) không được lọc hoặc sử dụng
bộ lọc tĩnh, Snapshot Agent tạo ra một ảnh chụp duy nhất Nếu publication sử dụng bộ lọc tham số, Snapshot Agent tạo ra một ảnh chụp cho mỗi phân mảnh của dữ liệu Merge Agent áp dụng cho các ảnh chụp ban đầu đến các Subscriber Khi dữ liệu thay đổi và lược đồ được sửa đổi ở Publisher thì Subscriber được theo dõi với các thay đổi đó Subscriber đồng bộ với Publisher khi kết nối mạng và trao đổi tất cả những thay đổi giữa Publisher và Subcriber kể từ khi đồng bộ hóa xảy ra ở thời điểm gần nhất [19]
Merge replication thường được sử dụng trong môi trường server-client Merger replication thích hợp trong bất kỳ tình huống sau:
- Subscriber có thể có nhiều cập nhật cùng một dữ liệu ở các thời điểm khác nhau
và sau đó lan truyền những thay đổi đó đến Publisher và đến các Subscriber khác
- Subscriber cần để nhận dữ liệu, làm thay đổi ngoại tuyến, và sau đó đồng bộ các thay đổi với Publisher và các Subscriber khác
- Mỗi Subscriber yêu cầu các phân mảnh khác nhau của dữ liệu
- Xung đột có thể xảy ra, khi đó cần có khả năng phát hiện và giải quyết chúng
- Ứng dụng yêu cầu dữ liệu
Trang 3822
Hình 8: Giải pháp Merge replication cân bằng tải cho hệ quản trị CSDL SQL
Đây là một loại cấu hình lý tưởng, kể từ khi Subscriber được truy vấn/cập nhật suốt
cả ngày, trong khi kho cung cấp thông tin có thể được cập nhật hàng trăm hoặc hàng ngìn lần trước khi một cập nhật được thông qua Publisher Một hệ thống như vậy sẽ giữ cho
độ trễ mạng ở mức tối thiểu cũng như giảm tải mạng cần thiết cho một hệ thống chức năng
b) Transactional replication
Transactional replication thường bắt đầu với một ảnh chụp của các đối tượng và dữ liệu từ publication Ngay sau khi ảnh chụp ban đầu được thực hiện, những thay đổi dữ liệu và sửa đổi biểu đồ được thực hiện tại Publisher sẽ thường xuyên được phân phối đến Subscriber khi chúng xảy ra (gần thời gian thực) Những thay đổi dữ liệu được áp dụng cho Subscriber trong cùng một thứ tự và trong phạm vi giao dịch giới hạn khi chúng xảy
ra ở Publisher; vì vậy, trong một publication, thống nhất giao dịch được đảm bảo
Transactional replication thường được sử dụng trong môi trường server-to-server và thích hợp trong mỗi trường hợp sau:
- Các thay đổi tăng nhanh cần được truyền đến Subcriber ngay khi chúng xảy ra
Trang 39- Publisher có khối lượng các hoạt động insert, update và delete rất lớn
- Máy chủ cơ sở dữ liệu của Publisher hoặc Subscriber không phải là máy chủ cơ
sở dữ liệu SQL, chẳng hạn như Oracle
Mặc định, các Subscriber được coi là read-only, bởi vì các thay đổi không được truyền lại cho Publisher Transactional replication không cung cấp các tùy chọn cho phép cập nhật ở Subscriber
Transaction replication được thực hiện bởi SQL Server Snapshot Agent, Log Reader Agent và Distribution Agent Snapshot Agent chuẩn bị các file ảnh chụp bao gồm
sơ đồ và dữ liệu của các bảng published và các đối tượng cơ sở dữ liệu, lưu trữ các file
trong một thư mục ảnh chụp, và đồng bộ hóa các bản ghi trong cơ sở dữ liệu distributor
trên Distributor server
Log Reader Agent giám sát các transaction log của mỗi cơ sở dữ liệu được cấu hình
cho transaction replication và sao lưu các giao dịch được đánh dấu cho replication từ bản ghi transaction trong cơ sở dữ liệu distributor, đóng vai trò như một hàng đợi lưu trữ và chuyển tiếp Distribution Agent sao chép các file ảnh chụp ban đầu từ thư mục ảnh chụp
và các giao dịch lưu giữ trong các bảng của cơ sở dữ liệu distribution đến Subscriber Các thay đổi tăng lên sẽ tạo ra ở Publisher một luồng đến Subscriber theo lịch trình của Distribution Agent, cái mà có thể chạy liên tiếp cho độ trễ tối thiểu, hoặc trong khoảng thời gian theo lịch trình Bởi vì các thay đổi từ dữ liệu phải được tạo ra ở Publisher (khi transation replication được sử dụng mà không cập nhật ngay tức khắc hoặc tùy chọn cập nhật theo hàng đợi), tránh khỏi xung đột cập nhật Cuối cùng, tất cả Subscriber sẽ nhận được cùng một giá trị như Publisher Nếu cập nhật ngay tức khắc hoặc tùy chọn cập nhật theo hàng đợi được sử dụng với transaction replication, cập nhật
có thể được tạo ra ở Subscriber và với cập nhật theo hàng đợi thì xung đột có thể xảy ra
Trang 4024
Các Subscriber sẽ trả lời các truy vấn chỉ đọc từ client gửi đến và Publisher sẽ chịu trách nhiệm trả lời các truy vấn ghi với các lệnh cập nhật dữ liệu nhƣ : CREATE, UPDATE, INSERT, DELETE, DROP,… Công việc phân phối các truy vấn đến các Subscriber và Publisher đƣợc giao cho một Load Balancer Load Balancer phải lọc ra các truy vấn chỉ đọc gửi đến Subsriber và các truy vấn còn lại gửi về Publisher Nếu có nhiều Subscriber thì Load Balancer sẽ sử dụng một thuật toán để phân tải đều cho các
Subscriber [20]
Hình 9: Giải pháp Transaction replication cân bằng tải cho hệ quản trị CSDL SQL
c) Log shipping