Ket-noi.com diễn đàn công nghệ, giáo dục
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
──────── * ───────
ĐỒ ÁN
TỐT NGHIỆP ĐẠI HỌC
NGÀNH CÔNG NGHỆ THÔNG TIN
CÂN BẰNG TẢI CHO CÁC HỆ
WEBSERVER LỚN VÀ ĐẢM BẢO
SCALABILITY
Sinh viên thực hiện : Võ Duy Pho
Lớp CNPM - K49
Giáo viên hướng dẫn: TS. Nguyễn Khanh Văn
HÀ NỘI 6-2009
PHIẾU GIAO NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP
1. Thông tin về sinh viên
Họ và tên sinh viên: Võ Duy Pho
Điện thoại liên lạc: 0944599926
Email:
Lớp: CNPM-K49
Hệ đào tạo: Chính qui
Đồ án tốt nghiệp được thực hiện tại: Trường đại học Bách Khoa Hà Nội
Thời gian làm ĐATN: Từ ngày 22/02/2009 đến ngày 29/05/2009
2. Mục đích nội dung của ĐATN
Tìm hiểu về lý thuyết cân bằng tải cho các hệ thống web server lớn bao gồm nhiều web
server được cài đặt ở nhiều nơi khác nhau, tìm hiểu về lý thuyết xây dựng bộ cân bằng tải
cho các web server, cài đặt các thuật toán cân bằng tải, khắc phục một số nhược điểm của
các thuật toán này. Tìm hiểu các phương án cài đặt và cấu hình các bộ cân bằng tải vào hệ
thống web server nhằm đảm bảo được tính mở rộng cao và khả năng chống lỗi.
3. Các nhiệm vụ cụ thể của ĐATN
- Tìm hiểu về kiến trúc website với khả năng mở rộng
- Tìm hiểu về cân bằng tải cho các hệ thống web-server lớn, các kỹ thuật cân bằng tải
server
- Tìm hiểu về lý thuyết xây dựng bộ cân bằng tải, cân bằng tải cho server, cân bằng tải cho
server toàn cầu và cân bằng tải cho cache
- Tìm hiểu và cài đặt một số thuật toán cân bằng tải bằng ngôn ngữ C dựa trên một sản
phẩm cân bằng tải mã nguồn mở, đề xuất một số phương pháp cải tiến thuật toán.
- Cấu hình và cài đặt các bộ cân bằng tải vào hệ thống theo các kiến trúc khác nhau, đảm
bảo được khả năng mở rộng và khả năng chống lỗi của hệ thống.
4. Lời cam đoan của sinh viên:
Tôi – Võ Duy Pho - cam kết ĐATN là công trình nghiên cứu của bản thân tôi dưới sự
hướng dẫn của TS Nguyễn Khanh Văn.
Các kết quả nêu trong ĐATN là trung thực, không phải là sao chép toàn văn của bất kỳ
công trình nào khác.
Hà Nội, ngày 25 tháng 5 năm 2009
Tác giả ĐATN
Võ Duy Pho
5. Xác nhận của giáo viên hướng dẫn về mức độ hoàn thành của ĐATN và cho phép
bảo vệ:
Hà Nội, ngày tháng năm
Giáo viên hướng dẫn
TS. Nguyễn Khanh Văn
LỜI CẢM ƠN
Trong suốt 5 năm học tại trường đại học Bách Khoa Hà Nội vừa qua, em đã
thu nhận được rất nhiều kiến thức bổ ích từ trong sách vở, và quý báu hơn là từ
kinh nghiệm, tâm huyết của chính các thầy cô truyền lại. Em xin gửi lời cảm ơn
chân thành tới các thầy cô đã tận tình chỉ bảo và giúp đỡ em trong thời gian qua.
Đặc biệt, em xin gửi lời cảm ơn sâu sắc nhất tới thầy TS. Nguyễn Khanh Văn
đã trực tiếp hướng dẫn và giúp đỡ em hoàn thành đồ án tốt nghiệp này.
Em cũng xin gửi lời cảm ơn chân thành tới anh Nguyễn Vũ, các anh tại công
ty ERAS Việt Nam và các bạn đã nhiệt tình chia sẻ kinh nghiệm cũng như cung cấp
các tài liệu, công cụ giúp em hoàn thành đồ án tốt nghiệp này.
Em xin chân thành cảm ơn!
TÓM TẮT NỘI DUNG ĐỒ ÁN TỐT NGHIỆP
Sự bùng nổ của ngành dịch vụ web trong những năm gần đây khiến số lượng người
truy cập vào mạng internet ngày càng tăng mạnh, đặc biệt là các website mạng xã hội và
các website chia sẻ video trực tuyến. Với hàng trăm triệu lượt truy cập mỗi ngày, các
website này đòi hỏi phải có một hệ thống server cực kỳ mạnh mẽ. Một hệ thống hoạt động
tốt sẽ khiến người dùng hài lòng, sau một thời gian hoạt động số lượng người dùng sẽ tăng
lên, máy chủ của hệ thống sẽ bị quá tải, dẫn đến yêu cầu nâng cấp. Sau khi nâng cấp lại
tiếp tục như cũ. Vòng tuần hoàn này dẫn đến nhu cầu cần phải xây dựng một hệ thống
website với khả năng đáp ứng người dùng trong một thời gian đủ dài và dễ dàng nâng cấp
mở rộng khi cần. Đó chính là kiến trúc web với khả năng mở rộng.
Vấn đề quan trọng nhất trong kiến trúc web với khả năng mở rộng chính là cân
bằng tải cho hệ thống web server. Một website toàn cầu sẽ có rất nhiều web-server đặt ở
nhiều nơi trên thế giới, cân bằng tải cho hệ thống web-server này nghĩa là làm cách nào để
các webserver không bị quá tải, luôn đáp ứng được nhu cầu của người dùng trong thời gian
nhanh nhất. Trong sự cạnh tranh khốc liệt giữa các website dịch vụ, nhà quản trị nào có thể
đáp ứng được nhu cầu của người dùng một cách tốt nhất, người đó sẽ thắng, vì vậy nhu cầu
cân bằng tải là vô cùng cần thiết và là vấn đề sống còn đối với các nhà cung cấp dịch vụ
web.
Có nhiều phương pháp để cân bằng tải, tuy nhiên lý thuyết chung là cần phải có
một bộ cân bằng tải đứng giữa người dùng và hệ thống webserver. Bộ cân bằng tải này sẽ
nhận yêu cầu từ phía người dùng, sau đó chuyển hướng các yêu cầu này đến các server phù
hợp dựa trên các thuật toán phân tải, sau đó nhận dữ liệu từ server và trả về cho người
dùng.
Trong đồ án tốt nghiệp này, người viết luận văn (NVLV) sẽ đưa tổng quan về các
vấn đề cần phải giải quyết trong quá trình thiết kế hệ thống web với khả năng mở rộng. Sau
đó sẽ đi sâu vào lý thuyết cân bằng tải cho các hệ thống webserver lớn, các kỹ thuật và
phương pháp cân bằng tải hiện đang được sử dụng. Tiếp theo sẽ là kiến trúc và các thành
phần cần xây dựng của một bộ cân bằng tải, các thuật toán phân tải đã và đang được dùng
trên thế giới, các phương pháp cài đặt bộ cân bằng tải vào hệ thống để đạt được hiệu quả
về khả đáp ứng người dùng cũng như khả năng mở rộng. Phần tiếp xin đưa ra cài đặt một
số thuật toán cân bằng tải cụ thể dựa trên một số phần mềm cân bằng tải mã nguồn mở và
một số cải tiến cho các thuật toán này. Cuối cùng là định hướng xây dựng một bộ cân bằng
tải hoàn toàn độc lập thực thi các thuật toán phân tải cải tiến nhằm áp dụng cho các website
đang hoạt động.
Sinh viên thực hiện: Võ Duy Pho - Khóa 49 - Lớp CNPM
Page 1
ABSTRACT OF THESIS
The boost of website services, especially the social network and online videosharing websites, in recent years causes the number of clients using Internet rapidly
increase. These websites are required to have a very powerful server system to match the
demand of over hundred millions of clients. An interesting website certainly attracts a lot
of users, then the clients go up, that makes servers overload and need to be improved. This
process is repeated when there are more and more clients access to server again. This
problem raise the question of how to build an website system which have ability to meet
the accessing demand of people within long enough time and easily improved if there is
necessary. That is scalable web architecture.
The most important factor in scalable web architecture is load balancing for web
server system. A global website have web servers in many different places. Load balancing
for the web server system is how to minimize clients response time without overloading. In
the competition between web services, a manager who successfully match users’ demands
will become winner. Therefore, load balancing demand is very crucial for the survival of
web service industry.
There many methods for load balancing but the general point is the necessity of
load balancer between clients and web server system. This load balancer receives the
requests from clients then directs them to suitable servers base on load distribution
algorithms, next it gets the response and returns to clients.
We will present a general view on the problems which need to be solved in the
process of webs ever designs with scalable ability. Then, we focus on the theory of load
balancing for large server systems, techniques and methods of load balancer in use. We
also mention the architecture and necessary factors for a load balancer, load distribution
algorithms which have been used globally, methods of installing a load balancer into
system for matching the demands as well as the scalable capability. The next part will
introduce some specific load balancing algorithms base on an open source load balancer
and improvements for these. The final part will provide a possible direction for building a
completely independent load balancer which implements improved load distribution
algorithms in order to apply in operating websites.
Sinh viên thực hiện: Võ Duy Pho - Khóa 49 - Lớp CNPM
Page 2
MỤC LỤC
TÓM TẮT NỘI DUNG ĐỒ ÁN TỐT NGHIỆP................................................................1
ABSTRACT OF THESIS....................................................................................................2
DANH MỤC CÁC TỪ VIẾT TẮT VÀ THUẬT NGỮ.....................................................5
Sinh viên thực hiện: Võ Duy Pho - Khóa 49 - Lớp CNPM
Page 3
DANH MỤC CÁC HÌNH
STT
H 1.2-1
H 1.2-2
H 1.2-3
H 1.2-4
H 1.2-5
H 1.2-6
H 1.2-7
H 1.2-8
H 1.2-9
H 2.1-1
H 2.1-2
H 2.1-3
H 2.1-4
H 2.1-5
H 2.1-6
H 2.1-7
H 2.1-8
H 2.1-9
H 2.1-10
H 2.1-11
H 2.1-12
H 2.1-13
H 2.1-14
H 2.1-15
H 2.1-16
H 2.1-17
H 2.1-18
H 3.1-1
H 3.1-2
H 3.1-3
H 3.1-4
H 3.3-1
H 3.3-2
H 3.3-3
H 3.3-4
Tên hình
So sánh scale out và scale up
Bảng so sánh giá thành 2 phương pháp
Mô hình cân bằng tải web server
Mở rộng database server sử dụng kiến trúc SAN
Mở rộng database server theo chiều ngang
Real Application Cluster
Mô hình mở rộng database nên dùng
Ví dụ về mô hình CDN
Simple Cache
Cách làm việc của cookie user=1
Cookie read
Cookie-insert
Bộ cân bằng tải chèn một cookie
Bộ cân bằng tải ghi đè một cookie
Mô hình Global Server Load Balancing
Bộ cân bằng tải hoạt động như một authoritative DNS
Bộ cân bằng tải hoạt động như một forward DNS proxy
Sự kết hợp GSLB và SLB trong bộ cân bằng tải
Cài đặt cache ở trình duyêt của người dùng
Cài đặt cache như một transparent proxy
Cân bằng tải cho transparent-proxy cache
Cài đặt cache như mọt reverse-proxy
Bộ cân bằng tải cho Reverse proxy caches
Transparent-reverse proxy caches
Phương pháp hash buckets dùng trong caching
Ví dụ về luật giúp bỏ qua các ngữ cảnh động
Cân bằng tải sử dụng phần cứng
Mô hình cân bằng tải đơn giản với một bộ cân bằng tải
Luồng dữ liệu trong mô hình đơn giản
Mô hình phức tạp với 2 bộ cân bằng tải chia sẻ 1 địa chỉ IP ảo
Luồng dữ liệu trong mô hình 2 bộ cân bằng tải với keepalived
Cấu hình firewall cho CentOS
Cấu hình firewall cho CentOS (tiếp)
Kiểm tra thông số server trong HAProxy
Thông số các server của website www.tamtay.vn sử dụng HaProxy
Trang
15
15
16
17
17
19
19
21
22
27
27
28
29
29
31
32
33
34
38
38
40
40
41
42
44
46
47
57
58
59
61
70
70
74
75
Hình vẽ được đánh theo định dạng: H [Chương].[Mục lớn] [Số thứ tự]
Sinh viên thực hiện: Võ Duy Pho - Khóa 49 - Lớp CNPM
Page 4
Authoritative DNS
DNS
DANH MỤC CÁC TỪ VIẾT TẮT VÀ THUẬT NGỮ
Authoritative Domain
Một website sẽ lưu thông tin về tên của nó trong nhiều
Name Server
server tên. Đây là server tên có thẩm quyền cao nhất
Client
Khách hàng, người truy cập vào website nói chung
Cluster
Dùng để chỉ một cụm máy chủ trong mạng LAN
Hệ thống phân giải tên trong internet, thiết lập tương
Domain Name System ứng giữa địa chỉ IP của một website và tên miền của nó.
Proxy bên phía client, dùng để tăng tốc client, client
Forward-proxy
phải chỉ đến proxy này để truy cập internet
Khá giống proxy, tuy nhiên chỉ có nhiệm vụ tạo kết nối
Gateway
giữa người dùng và server.
HTTP
Global Server Load
Balancing
Hypertext Transfer
Protocal
LB
Load balancing
LBer
Load Balancer
LC
Least connections
Local
DNS
Local Domain Name
Server
GSLB
Proxy – Proxy Server
Reverse-proxy
RR
Round Robin
SAN
Storage Area Networks
Scalable - Scalability
Scale - Scaling
SLB
Server
Server Load Balancing
Socket
SPOF
TCP
Single point of failure
Transmission Control
Protocol
WWW
Transparent-proxy
World Wide Web
Cân bằng tải cho các máy server được cài đặt ở khắp nơi
trên thế giới
Giao thức truyền tải siêu văn bản, được sử dụng trong
WWW
Cân bằng tải: phân phối tải giữa các server nhằm đảm
bảo sự cân bằng giữa chúng
Bộ cân bằng tải: thiết bị phần cứng hoặc phần mềm
dùng để thực thi hoạt động cân bằng tải
Thuật toán phân tải cho các server dựa trên số kết nối
hiện tại của chúng
Server tên nằm trong mạng LAN của client, trình duyệt
của client sử dụng local DNS để liên lạc với Domain
Name System
Server đứng giữa người dùng và webserver, có nhiệm vụ
trao đổi thông tin.
Proxy bên phía server, tăng tốc server
Thuật toán phân tải cho các server theo thứ tự xoay
vòng
Kiến trúc kết nối những thiết bị lưu trữ từ xa để xem
chúng như là cục bộ với nhau
Khả năng mở rộng: khả năng một website có thể đáp
ứng được số lượng người dùng ngày một tăng
Mở rộng, tăng khả năng hoạt động
Máy phục vụ, chứa các thông tin, ứng dụng cho phép
người dùng truy cập vào
Cân bằng tải cho các máy server
Sự kết hợp giữa địa chỉ IP và cổng nhằm xác định đích
của một ứng dụng đang chạy trên server
Một node trong hệ thống mà nếu nó bị “chết” thì toàn bộ
hệ thống sẽ bị tê liệt
Giao thức điều khiển truyền vận, sử dụng tạo kết nối để
trao đổi các gói tin
Proxy bên phía client, hoạt động “trong suốt” với người
dùng
Mạng máy tính toàn cầu
Sinh viên thực hiện: Võ Duy Pho - Khóa 49 - Lớp CNPM
Page 5
ĐẶT VẤN ĐỀ
1. Tính cấp thiết của đề tài
Sự phát triển của ngành dịch vụ web khiến cho số lượng người truy cập vào
các website ngày càng tăng mạnh, đặc biệt là các mạng xã hội ảo hoặc website chia
sẻ video 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,
tìm kiếm bạn bè, người thân, hay thậm chí cả đối tác kinh doanh. Mặc dù chỉ mới
bắt đầu phát triển trong vòng 5 năm trở lại đây nhưng mạng xã hội và các trang chia
sẻ video trực tuyến đã có cố lượng người dùng lên đến con số hàng trăm triệu và
vẫn đang tăng với tốc độ chóng mặt.
Với mạng xã hội, người dùng có thể chat, email, voice chat, chia sẻ file, viết
nhật ký cá nhân (blog) và cùng nhau bàn luận về những vấn đề mà họ cùng quan
tâm. Thêm nữa, người dùng có thể thông qua mạng tìm kiếm bạn bè hay đối tác
theo tên (tên sử dụng hoặc email), sở thích cá nhân (như thể thao, phim ảnh, ca
nhạc) hoặc lĩnh vực quan tâm (công nghệ, điện ảnh, kinh doanh…). Chính những
tính năng đó làm cho người dùng tìm đến các mạng xã hội ngày càng nhiều hơn và
thời gian hàng ngày họ dành cho nó cũng tăng lên. Có thể kể ra hàng loạt các mạng
xã hội đang có số lượng người dùng lớn như MySpace, Facebook, Hi5, Friendster,
LinkdeIn…Theo số liệu cập nhập tháng 1/2009, myspace có 255 triệu tài khoản
đăng ký và đứng thứ 9 trong bảng xếp hạng các website hàng đầu thế giới theo
Alexa, FaceBook có 177 triệu tài khoản và đứng thứ 4. Các website mạng xã hội
khác như Hi5, Friendster…đều có số lượng tài khoản đã đăng ký trên 50 triệu.
Với các website chia sẻ video trực tuyến cũng vậy, sự phát triển của công
nghệ kỹ thuật số giúp cho mọi người có thể dễ dàng tạo ra các đoạn clip vui nhộn,
hay các video gia đình, họ muốn lưu trữ, muốn gửi cho bạn bè khắp nơi, vì vậy họ
tìm đến các website chia sẻ video trực tuyến. www.youtube.com, website chia sẻ
video lớn nhất hiện nay, có trên 6 tỉ video và 100 triệu video được xem mỗi ngày.
Youtube đứng thứ 3 trong bảng xếp hạng thông lượng website của Alexa.
Sự cạnh tranh giữa các website mạng xã hội và các trang chia sẻ video trực
tuyến là không thể tránh khỏi, bất cứ một nhà quản trị nào cũng muốn tăng số lượng
người dùng cũng như muốn website của mình ngày càng nổi tiếng. Để làm được
điều đó, ngoài nội dung hấp dẫn và phong phú, website cần phải đáp ứng được nhu
cầu của người dùng một cách tốt nhất. Với 100 triệu video được xem mỗi ngày, tính
trung bình mỗi giây có gần 1200 video được xem trên Youtube, con số này đòi hỏi
Youtube phải có một hệ thống server mạnh mẽ và linh hoạt. Một website với số
lượng truy cập ngày càng tăng sẽ khiến máy chủ của website đó không đáp ứng
được hết nhu cầu của người dùng và bị quá tải.
Sinh viên thực hiện: Võ Duy Pho - Khóa 49 - Lớp CNPM
Page 6
Yêu cầu đặt ra đối với người quản trị website là cần phải giải quyết vấn đề
quá tải này, làm sao để bất cứ người dùng nào truy cập vào website đều được phục
vụ một cách nhanh nhất. Để làm được điều đó, người quản trị phải nâng cấp hệ
thống server. Nghĩa là, cần phải tăng cấu hình máy server hoặc tăng số lượng
server, đó chính là một trong hai phương án mở rộng server: mở rộng theo chiều
dọc (scaling up) và mở rộng theo chiều ngang (scaling out). Mở rộng theo chiều
dọc nghĩa là nâng cấp một server có cấu hình ngày càng mạnh hơn tùy theo nhu cầu
của người dùng, phương pháp này khá tốt trong trường hợp số lượng người dùng
không nhiều tuy nhiên giá thành của nó đắt và khả năng mở rộng kém. Mở rộng
theo chiều ngang nghĩa là sử dụng một hệ thống nhiều server nhỏ với chi phí thấp
hơn và mỗi server phục vụ một lượng người dùng nhất định, phương pháp này có
khả năng mở rộng tốt (lắp thêm server khi cần) và hoạt động khá hiệu quả. Với
những trang có số lượng người truy cập nhiều và tỉ lệ truy cập cao, các nhà quản trị
hệ thống thường lựa chọn phương án thứ hai – mở rộng theo chiều ngang.
Nâng cấp server cũng giống như là một hoạt động có chu kì trong vòng đời
của hệ thống. Khi hệ thống server không đáp ứng được nhu cầu của người dùng, nó
sẽ được nâng cấp. Sau khi nâng cấp, tốc độ cải thiện sẽ kiến người tin tưởng vào
khả năng phục vụ của website, số lượng người dùng lại tăng lên, hệ thống server lại
không đáp ứng được nhu cầu của người dùng và lại cần nâng cấp…Vòng luẩn quẩn
đó khiến các nhà quản trị mong muốn tìm kiếm một giải pháp nào đó, mà website
của họ có thể hoạt động ổn định trong một thời gian dài, và dễ dàng nâng cấp khi
cần thiết. Đó chính là phương án mà hầu hết các mạng xã hội và các trang chia sẻ
video trực tuyến như myspace, google video…đã chọn - sử dụng kiến trúc web
với khả năng mở rộng (scalable web architecture). Cách tiếp cận này cho phép
nhà quản trị tăng hiệu năng của hệ thống, cho khả năng mở rộng và khả năng có sẵn
cao, đáp ứng được yêu cầu trong suốt đối với người dùng (user-transparent), tuy
nhiên có rất nhiều thách thức cần phải vượt qua để xây dựng được các chức năng
của một hệ thống website trên nền trình duyệt web và HTTP.
Để xây dựng được một website theo kiến trúc này, nhà quản trị website phải
thiết kế một cách “nhịp nhàng” các thành phần của hệ thống, các thành phần chính
bao gồm xây dựng hệ thống web-server, xây dựng hệ thống database-server, quản lý
session, thiết kế bộ cache cho hầu hết các thành phần của hệ thống. Một website xây
dựng theo kiến trúc này khi muốn nâng cấp mở rộng sẽ theo chiều hướng scaling
out, nghĩa là hệ thống sẽ có nhiều web-server và nhiều database-server kết nối với
nhau, khi cần mở rộng sẽ lắp đặt thêm các server mới.
Khi hệ thống có nhiều server thì vấn đề đặt ra là khi một người dùng truy cập
vào website, yêu cầu của người dùng đó sẽ được chuyển đến server nào xử lý, lấy
dữ liệu ở database-sever nào? Làm thế nào để các server trong hệ thống nhận được
Sinh viên thực hiện: Võ Duy Pho - Khóa 49 - Lớp CNPM
Page 7
lượng tải phù hợp với server đó, đảm bảo cho không server nào bị quá tải? Làm sao
để hệ thống có thể đáp ứng được số lượng người dùng cao nhất? Đó chính là bài
toán cân bằng tải (Load Balancing – LB) cho các server, cũng chính là phần quan
trọng nhất trong việc giữ cho hệ thống hoạt động ổn định, là nhân tố quyết định đến
khả năng đáp ứng người dùng của hệ thống. Thuật ngữ cân bằng tải không những
chỉ dùng cho server, mà còn dùng trong hầu hết các thành phần còn lại của kiến trúc
web với khả năng mở rộng, đó là cân bằng tải cho database, cân bằng tải cho cache,
cân bằng tải cho firewall…Một website được cân bằng tải tốt sẽ tận dụng được cao
nhất nguồn lực sẵn có. Chẳng hạn như website với 1 web-server có thể đáp ứng
được cho 1000 người dùng cùng lúc, khi nâng cấp lên 4 servers, nếu cân bằng tải tốt
sẽ có khả năng đáp ứng cho 4000 người cùng lúc, ngược lại sẽ chỉ có thể đáp ứng
được 2000 người, thậm chí còn ít hơn số đó. Một trang web được xử lý tốt vấn đề
cân bằng tải sẽ đáp ứng được người dùng một cách tốt nhất và có khả năng mở rộng
cao.
Để cân bằng tải cho cụm server, cần phải xây dựng các bộ cân bằng tải
(Load Balancer). Các bộ cân bằng tải này được cài đặt ở giữa người dùng và hệ
thống server, nhận yêu cầu từ phía người dùng, sau đó chuyển chúng đến webserver phù hợp. Bộ cân bằng tải lúc đó đóng vai trò là web-server duy nhất đối với
tất cả mọi người dùng, chỉ cần truy cập đến địa chỉ chứa bộ cân bằng tải, người
dùng sẽ nhận được thông tin mình cần, không cần biết phía sau đó hệ thống có bao
nhiêu server, cũng không cần nhớ địa chỉ của các server này. Vậy làm cách nào để
xây dựng được một bộ cân bằng tải hoạt động hiệu quả, nhằm đảm bảo tải được
phân phối một cách cân đối giữa các web-server?
Một bộ cân bằng tải cần đáp ứng được hai yêu cầu chính. Thứ nhất, cũng là
quan trọng nhất, đó là khả năng xử lý và chuyển yêu cầu của người dùng đến server
phù hợp, để giải quyết vấn đề này, cần phải xây dựng một thuật toán phân tải hoạt
động “mềm dẻo” trên nhiều yếu tố khác nhau. Thứ hai, nó cần phải kiểm tra và cập
nhập được các thông số kỹ thuật cũng như trạng thái của các server, kiểm tra xem
server nào đang hoạt động, server nào đang tạm nghỉ, server nào vừa được thêm vào
cụm server, hay vừa được đưa ra (để sửa chữa, bảo trì…) trong hệ thống, kiểm tra
sự thay đổi trong khả năng phục vụ (chẳng hạn số kết nối lớn nhất) hay trọng số của
các server. Giải quyết tốt hai bài toán trên sẽ cho ra một bộ cân bằng tải hoạt động
hiệu quả và ổn định.
Các bộ cân bằng tải thường được chia ra làm hai loại: loại hoạt động dựa trên
phần cứng và hoạt động dựa trên phần mềm. Hoạt động dựa trên phần cứng nghĩa là
nó sử dụng một thiết bị phần cứng hoạt động ở tầng mạng (network layer) và tầng
giao vận (transport layer) của mô hình OSI, thiết bị này được thiết kế trên mô hình
chuyển mạch và nó phân bố tải rất hiệu quả. Tuy nhiên giá của những thiết bị phân
Sinh viên thực hiện: Võ Duy Pho - Khóa 49 - Lớp CNPM
Page 8
tải này thường rất đắt, vượt ngoài khả năng của những nhà phát triển hệ thống vừa
và nhỏ. Bộ cân bằng tải phần mềm là một phần mềm được cài đặt trên một máy
riêng biệt hoặc trên máy server, lưu giữ địa chỉ của các máy server trong hệ thống
để phân tải. Bộ cân bằng tải phần mềm có khả năng phân tải kém hơn các thiết bị
phần cứng, tuy nhiên giá thành của nó rẻ hơn và phù hợp với các nhà phát triển hệ
thống vừa và nhỏ, thậm chí còn có rất nhiều phần mềm mã nguồn mở hoạt động rất
tốt. Một phần mềm hoạt động hiệu quả cũng có khả năng phân tải tương đương với
các phần cứng có giá thành trung bình. Hơn nữa, dù có sử dụng phần cứng, các
website vẫn cần phần mềm để hỗ trợ phân tải.
Điểm mẫu chốt trong hoạt động của các bộ cân bằng tải là thuật toán phân
phối tải. Không có một thuật toán nào thực sự phù hợp cho mọi môi trường. Với
những điều kiện hệ thống nhất định, yêu cầu đặt ra là phải chọn thuật toán nào cho
phù hợp. Các thuật toán phân tải đang được sử dụng thường được chia ra làm hai
loại chính, đó là thuật toán phân tải tĩnh và thuật toán phân tải động. Các thuật toán
phân tải tĩnh dễ thiết kế, hoạt động đơn giản nhưng hiệu suất không cao. Chúng
được gọi là thuật toán tĩnh vì phương pháp chọn server để gửi yêu cầu tiếp theo
được dựa trên các yếu tố tĩnh, không thay đổi. Ngược lại, các thuật toán phân tải
động dựa trên các nhân tố động, thay đổi liên tục, do đó các thuật toán động này
hoạt động linh hoạt hơn và đáp ứng yêu cầu phân tải một cách tốt hơn. Tuy vậy
không có một thuật toán nào có thể đáp ứng được trong mọi trường hợp. Cần phải
có một sự kết hợp mềm dẻo dựa các thuật toán này mới có thể xây dựng được một
bộ cân bằng tải hoạt động tốt. Việc nghiên cứu các thuật toán phân tải mềm dẻo sẽ
giúp cho các bộ cân bằng tải hoạt động hiệu quả hơn và đáp ứng được nhu cầu phân
tải cao hơn.
Với sự bùng nổ của dịch vụ web, số lượng website ngày càng nhiều đem đến
cho người dùng rất nhiều sự lựa chọn. Để tồn tại và phát triển, các website phải giữ
được người dùng hiện tại của mình và lôi kéo thêm được nhiều người dùng mới. Để
làm được điều này, các nhà quản trị hệ thống phải đảm bảo cho hệ thống của mình
hoạt động tốt nhất, do đó yêu cầu lắp đặt thêm nhiều server mới cũng như yêu cầu
cân bằng tải sẽ cho các server thực sự là nhu cầu cấp thiết. Đứng trước sự cạnh
tranh về giá thành, việc phát triển và xây dựng các phần mềm cân bằng tải trở nên
vô cùng hữu ích. Đứng trước yêu cầu đó, NVLV quyết định tìm hiểu về nguyên lý
hoạt động cũng như các thuật toán cân bằng tải nhằm xây dựng nên một nền tảng
vững chắc về chủ đề này, từ đó góp phần thúc đẩy quá trình xây dựng nên một bộ
cân bằng tải hoạt động hiệu quả có khả năng đáp ứng nhu cầu cho các website đang
hoạt động trong và ngoài nước.
2. Mục đích nghiên cứu
Sinh viên thực hiện: Võ Duy Pho - Khóa 49 - Lớp CNPM
Page 9
-
-
-
Nghiên cứu tổng quan về kiến trúc web với khả năng mở rộng, tìm hiểu lý
thuyết chung về cân bằng tải server, cân bằng tải database, cân bằng tải cho
cache và quản lý session.
Tìm hiểu các kỹ thuật cân bằng tải cho web server, lý thuyết xây dựng bộ cân
bằng tải cho web server và điểm mạnh yếu của các thuật toán phân tải cho bộ
cân bằng tải.
Xây dựng và cài đặt thử nghiệm một số thuật toán cân bằng tải cơ bản, thực
thi một số thuật toán cân bằng tải tĩnh và cân bằng tải động.
Tìm hiểu cách cấu hình các bộ cân bằng tải cùng với web server theo các
điều kiện khác nhau, nhằm đáp ứng được nhu cầu từng hệ thống web riêng
biệt.
3. Kết cấu luận văn
Trong khuôn khổ báo cáo này, NVLV xin trình bày kết quả tìm hiểu được
cũng như cài đặt thử nghiệm một số thuật toán cân bằng tải nhất định. Do nguồn lực
và thời gian có hạn, nên NVLV chưa thực sự xây dựng được một phần mềm cân
bằng tải hoạt động thực sự mà chỉ có thể cài đặt thử nghiệm một số thuật toán cân
bằng tải dựa trên một bộ cân bằng tải có sẵn. Để giúp tiếp cận vấn đề một cách
nhanh nhất, báo cáo này được trình bày với nhiều hình ảnh sinh động. Nội dung của
báo cáo chia làm 4 chương như sau:
Chương 1: Tổng quan về kiến trúc web với khả năng mở rộng.
Chương 2: Kỹ thuật cân bằng tải ở web-server, lý thuyết xây dựng bộ cân
bằng tải cho webserver và các thuật toán phân tải cho bộ cân bằng tải.
Chương 3: Trình bày về môi trường phát triển, các phương án cài đặt bộ cân
bằng tải vào mạng, kết quả cài đặt thuật toán, một số cải tiến cho các thuật
toán cân bằng tải. Cách cài đặt và cấu hình bộ cân bằng tải cho một hệ thống
webserver cụ thể
Chương 4: Kết luận và định hướng phát triển.
Sinh viên thực hiện: Võ Duy Pho - Khóa 49 - Lớp CNPM
Page 10
CHƯƠNG 1
KIẾN TRÚC WEB VỚI KHẢ NĂNG MỞ RỘNG (SCALABLE WEB
ARCHITECTURE)
1. Các khái niệm về kiến trúc với khả năng mở rộng
Một website với khả năng mở rộng nghĩa là, khi số lượng người dùng tăng
lên trong một khoảng nhất định, website vẫn đáp ứng được nhu cầu, thêm nữa,
website có khả năng dễ dàng nâng cấp lên để phù hợp với tình hình mới. Tại thời
điểm ban đầu, các website với khả năng mở rộng lớn thường được thiết kế để phục
vụ hàng chục triệu yêu cầu mỗi ngày, sau đó nó sẽ được nâng cấp để phục vụ thêm,
nếu như có nhu cầu. Để phục vụ được hàng chục triệu lượt truy cập mỗi ngày,
website cần phải đáp ứng được yêu cầu về khả năng mở rộng (Scalability), về hiệu
năng (Performance), tính đáp ứng (Responsiveness), tính sẵn có cao (High
Availability), tránh được thời gian chết của hệ thống (downtime impact), khả năng
bảo trì tốt và được xây dựng với giá thành tốt nhất. Sau đây NVLV [1] xin trình về
các khái niệm này.
Khả năng mở rộng là khả năng của một ứng dụng có thể hỗ trợ được số
lượng người ngày một tăng. Nếu nó cần 10ms để một ứng dụng có thể đáp trả cho
một yêu cầu thì khoảng thời gian sẽ là bao lâu để nó đáp trả đến 10.000 yêu cầu
cùng một lúc? Khả năng mở rộng vô hạn sẽ cho phép nó đáp trả các yêu cầu này chỉ
trong khoảng 10ms. Như vậy, khả năng mở rộng là đơn vị đo sự kết hợp của các hệ
số, đó là số lượng người dùng đồng thời mà một cụm server có thể hỗ trợ và thời
gian cụm server cần để xử lý một yêu cầu. Thiết kế website với khả năng mở rộng
cao là yêu cầu sống còn đối với hầu hết các công ty dịch vụ web hiện nay, để tồn tại
và phát triển, một website cần phải đáp ứng được yêu cầu của người dùng trong thời
gian mà họ mong muốn.
Hiệu năng là khả năng mà hệ thống sử dụng tài nguyên của nó một cách tốt
nhất. Tính thực hiện được đo bằng lượng công việc có ích mà hệ thống thực hiện
được với một nguồn tài nguyên nhất định, chẳng hạn như nếu 2 server có cấu hình
giống nhau, server nào có thể phục vụ được nhiều người dùng hơn (người dùng chạy
các ứng dụng tương đương) thì máy đó có tính thực hiện cao hơn.
Khả năng có sẵn cao có thể được hiểu là tình trạng dư thừa. Nếu một máy
chủ không thể quản lý một yêu cầu thì các máy chủ khác trong cluster đó có quản lý
được nó hay không? Trong một hệ thống có khả năng có sẵn cao, nếu một web
1[]
Người viết luận văn
Sinh viên thực hiện: Võ Duy Pho - Khóa 49 - Lớp CNPM
Page 11
server bị lỗi thì một web server khác sẽ tiếp quản ngay để xử lý yêu cầu. Nghĩa là,
nếu người dùng đang làm việc với một server mà server đó bị lỗi, toàn bộ thông tin
trong phiên làm việc của người đó sẽ được chuyển qua cho một server khác đảm
nhiệm. Như vậy trong bất cứ trường hợp nào, người dùng truy cập vào các dịch vụ
của hệ thống đều được đáp ứng, chính vì vậy mà người dùng luôn cảm thấy được
phục vụ tốt nhất.
Tính đáp ứng ở đây có thể hiểu là khả năng phục vụ người dùng của hệ
thống, làm sao để hệ thống có thể phục vụ người dùng tại mọi thời điểm, và thời
gian cho đáp ứng đó là bao nhiêu. Hệ thống gửi response về càng nhanh thì tính đáp
ứng của nó càng cao, ngược lại, nếu thời gian trì hoãn (delay) càng lớn, sẽ khiến
người dùng thất vọng, và dẫn tới việc họ tin là trang web đang bị hỏng, điều này rất
có hại, vì nếu người dùng mất niềm tin, họ sẽ không quay trở lại trang web đó nữa.
Chẳng hạn như khi người dùng truy cập vào một trang web, nếu họ phải chờ quá
lâu, họ sẽ chuyển qua làm công việc khác, đôi khi họ quên mất là mình đang truy
cập và một dịch vụ web và đóng luôn trình duyệt, hoặc họ quay trở lại sau một thời
gian khá lâu, điều này rất không tốt vì hệ thống mà họ truy cập vẫn hoạt động và
lưu giữ session mà không phục vụ cho ai cả, đó là một sự lãng phí lớn. Ở đây cần
phải hiểu rằng tính đáp ứng và tính thực hiện là độc lập với nhau, một hệ thống có
hiệu năng tốt vẫn có thể đáp ứng rất tệ.
Downtime impact là một vấn đề mà tất cả các hệ thống đều gặp phải, đó là
thời gian mà hệ thống bị “chết”, khi mà một số các chắc năng chính bị down, đây là
vấn đề có tính tuần hoàn đối với các nhà phát triển hệ thống. Một hệ thống tốt sẽ
giúp người dùng truy cập nhanh, làm họ cảm thấy hài lòng, dẫn đến số lượng người
dùng tăng lên, và khi số lượng người dùng tăng lên hệ thống sẽ lại bị tắc nghẽn, và
nhà quản trị sẽ phải đối phó với vấn đề nó, giải quyết nó nhằm tạo ra hệ thống hoạt
động tốt hơn, cứ như vậy vòng quay lại tiếp tục. Điều quan trọng là một hệ thống tốt
cần phải kéo thời gian chu kỳ này lên, nghĩa là làm sao cho hệ thống hoạt động
được tốt nhất trong một thời gian đủ dài trước khi cần phải nâng cấp, cũng như làm
sao để xây dựng được một hệ thống có khả năng mở rộng lớn.
Cùng với các đòi hỏi này, hệ thống cũng cần phải có thể dễ dàng bảo trì và
giá thành vừa phải. Xây dựng một hệ thống web như vậy sẽ gặp rất nhiều vấn đề
khó, sau đây NVLV xin trình bày ra những vấn đề quan trọng nhất trong việc thiết
kế một trang web có khả năng mở rộng mà bất cứ nhà phát triển hệ thống web nào
cũng phải giải quyết, đó là: cân bằng tải cho application servers, cân bằng tải cho
database-server, tổ chức lưu trữ dữ liệu trên đĩa cứng và cân bằng tải cho cache.
Sinh viên thực hiện: Võ Duy Pho - Khóa 49 - Lớp CNPM
Page 12
2. Các vấn đề cần giải quyết trong quá trình xây dựng website theo kiến
trúc với khả năng mở rộng
2.1
Cân bằng tải cho application servers
Một trang web phục vụ hàng triệu lượt người truy cập mỗi ngày thì điều
quan trọng đầu tiên là phải có một hệ thống server đủ mạnh, khi người dùng tăng
lên theo thời gian, hệ thống máy chủ cũng phải được nâng cấp, mở rộng. Có 2 sự
lựa chọn ở đây: mở rộng theo chiều ngang (scale out) và mở rộng theo chiều dọc
(scale up).
Mở rộng theo chiều dọc nghĩa là, khi số lượng người dùng tăng lên, nhà phát
triển sẽ nâng cấp server của mình bằng cách tăng cấu hình của máy server, hệ thống
vẫn chỉ có 1 server với cấu hình ngày mạnh hơn (tăng số lượng chip, tăng dung
lượng RAM…). Sử dụng phương pháp này, người quản trị hệ thống sẽ không phải
quan tâm đến vấn đề cân bằng tải cho cụm server, hệ thống hoạt động rất tốt khi số
lượng người dùng vừa phải. Tuy vậy, phương pháp này sẽ dẫn đến nhiều vấn đề,
đầu tiên là giá thành, nhìn vào bảng so sánh giá ở trang dưới, sử dụng một server sẽ
tốn kém hơn rất nhiều so với nhiều servers, một vấn đề nữa cũng quan trọng không
kém là vấn đề downtime impact, vì chỉ có 1 server nên nó trở thành SPOF [2] (single
point of failure), nếu như server này bị chết, ngay lập tức toàn bộ hệ thống sẽ chết.
Phương pháp này còn dẫn đến giới hạn cho hệ thống, vì đến môt mức nào đó hệ
thống sẽ không thể phục vụ được nhiều yêu cầu hơn nữa, vì một hệ thống tổng thể
còn phụ thuộc vào nhiều yếu tố như bandwidth [3] hay khả năng vào ra của file trên
đĩa cứng.
Ví dụ sau đây sẽ cho thấy rõ điều đó, giả sử với 1 site video, băng thông để
xem được 1 clip ở dạng chất lượng trung bình sẽ vào khoảng 512kb/s -> 0.5mb/s.
Vậy đường truyền 100mb sẽ cho phép tối đa 200 người dùng xem đồng thời. Điều
gì sẽ xảy ra nếu muốn có hơn số người dùng đó? Người ta có thể tăng băng thông
cho đường truyền lên 1 gigabit nhưng đây sẽ rơi vào tình trạng của scale up và gặp
giới hạn. Ngoài ta, tốc độ đọc đĩa cứng chỉ vào khoảng 400mb/s nên dù cho có tăng
tốc đường truyền lền thì server vẫn không thể phục vụ được nhiều hơn nữa. Như
vậy sử dụng scale up không thể giải quyết được vấn đề này.
Giải pháp thứ hai là lắp nhiều servers song song, và chúng hoạt động thành
một cụm (Cluster). Theo ví dụ ở trên, cứ lắp thêm 1 server lại có khả năng đáp ứng
cho 200 người dùng nữa, và càng nhiều server thì khả năng mở rộng lại càng lớn.
Thêm nữa, sử dụng phương pháp này còn giảm thiểu được chi phí. Vậy thì điểm
yếu giải pháp này là gì? Đó chính là vấn đề cân bằng tải, để cứ mỗi server sẽ thêm
SPOF (Single point of failure): Một điểm trong hệ thống mà nếu nó ngừng hoạt động, toàn bộ hệ
thống sẽ bị tê liệt
3[]
Băng thông: độ rộng của đường truyền internet
2[]
Sinh viên thực hiện: Võ Duy Pho - Khóa 49 - Lớp CNPM
Page 13
được 200 người dùng, hệ thống phải được cân bằng tải một cách tốt nhất, làm sao
để tải được phân bố đều đặn vào trong các máy server? Các server phải được nối
với nhau như thế nào… đều là những bài toán khó. Bức tranh dưới đây sẽ cho
chúng ta thấy ưu và nhược điểm của từng phương pháp:
H 1.2-1 So sánh scale out và scale up
Và giá thành của 2 phương pháp:
H 1.2-2 Bảng so sánh giá thành 2 phương pháp
Như vậy, rõ ràng rằng sự lựa chọn 1 server chỉ phù hợp cho các hệ thống đòi
hỏi sự ổn định cao, với số lượng người dùng tăng lên hàng năm là không nhiều và
có tiềm lực mạnh về kinh tế như các hệ thống chứng khoán, ngân hàng… còn đối
với các mạng xã hội hay các trang chia sẻ video trực tuyến thì sự lựa chọn nhiều
server họat động song song là hiệu quả. Khi sử dụng phương pháp scale out, yêu
cầu từ phía người dùng sẽ được chuyển vào một trong các servers này xử lý, từ đó,
Sinh viên thực hiện: Võ Duy Pho - Khóa 49 - Lớp CNPM
Page 14
xuất hiện bài toán cân bằng tải (load balancing – LB) cho cluster này. Nhà phát
triển hệ thống phải làm sao để các server hoạt động cân bằng, nghĩa là các server
được phục vụ một lượng yêu cầu phù hợp, tránh không để bất cứ server nào bị quá
tải (overload), đồng thời tận dụng được hết tài nguyên hệ thống để phục vụ được
lượng truy cập lớn nhất.
Như đã đề cập ở phần mở đầu, để cân bằng tải cho hệ thống web-servers cần
phải xây dựng một gọi là bộ cân bằng tải (load balancer). Bộ cân bằng tải này này
được đặt trước cluster, nhận request từ phía người dùng, xử lý các yêu cầu này và
chuyển hướng chúng đến máy server phù hợp.
Mô hình tổng quát được miêu tả dưới đây:
H 1.2-3 Mô hình cân bằng tải web server
Chi tiết về nguyên lý, kỹ thuật và các phương pháp cân bằng tải server cũng
như thiết kế bộ cân bằng tải sẽ được làm rõ trong chương 2 của đồ án này.
2.2
Mở rộng Database server
Bên cạnh các web server, các database server cũng đóng vai trò vô cùng
quan trọng trong hệ thống web. Sự phát triển của website sẽ dẫn đến yêu cầu phải
mở rộng database server, chẳng hạn như lắp thêm server để phục vụ nhu cầu tại một
địa điểm đã có server từ trước hoặc lắp mới server ở các vùng khác nhau trên thế
giới. Cũng như cân bằng tải ở Application Server, mở rộng Database Server cũng có
2 phương pháp: mở rộng theo chiều ngang và mở rộng theo chiều dọc.
Mở rộng theo chiều dọc, hiện nay các nhà phát triển hệ thống sử dụng kiến
trúc SAN (Storage area networks), DB sẽ được phân chia (partitioning out) theo
kiến trúc này. SAN là một kiểu kiến trúc kết nối những thiết bị lưu trữ máy tính từ
xa (như disk arrays, tape libararies, and optical jukeboxes) để phục vụ theo cách mà
những thiết bị ấy được xem như là cục bộ (local) đối với hệ điều hành. Như vậy, hệ
thống lưu trữ bây giờ chỉ được xem như một Database Server duy nhất, vì vậy mà
nó hoạt động rất hiệu quả.
Sinh viên thực hiện: Võ Duy Pho - Khóa 49 - Lớp CNPM
Page 15
Kiến trúc này sẽ tăng đáng kể khả năng của Database Server, tuy vậy vì giá
thành của nó rất đắt (như đã đề cập ở trên) nên nó không được sử dụng rộng rãi mà
chỉ được dùng trong các hệ thống lớn và quan trọng.
H 1.2-4 Mở rộng database server sử dụng kiến trúc SAN
Mở rộng DB theo chiều ngang (scaling out), nghĩa là tăng số lượng các
node Database Server, như minh họa dưới đây:
H 1.2-5 Mở rộng database server theo chiều ngang
Sẽ có 2 lựa chọn để cài đặt theo phương pháp này:
Shared nothing Cluster
Real Application Cluster (Shared storage Cluster)
2.2.1
Shared nothing Cluster
Trong phương pháp Shared nothing cluster, mỗi database server sẽ chứa một
bản copy hoàn toàn của database, tức là tất cả các DBServer sẽ giống nhau. Không
có dữ liệu được chia sẻ giữa các DB Server Nodes, ở đây các file DB thực sự sẽ
Sinh viên thực hiện: Võ Duy Pho - Khóa 49 - Lớp CNPM
Page 16
được chứa trong SAN. Kiến trúc này được hỗ trợ một cách tự nhiên bởi hầu hết các
RDBMs hoặc các phần mềm 3rd party.
Một vấn đề nữa ở đây là phải chọn cơ chế sao bản (replication) phù hợp, vì
các DB sẽ chứa cùng 1 bản sao hoàn chỉnh của cơ sở dữ liệu. Có rất nhiều lựa chọn
để tạo sao bản đó là lựa chọn giữa phương pháp Master – Slave và Multi – Master,
đồng bộ hay không đồng bộ và tạo sao bản ở mức nào của dữ liệu.
Trong phương pháp master – slave, các yêu cầu đọc sẽ được gửi tới một
master, và sau đó sẽ được sao ra ở các slave DB, thêm nữa, việc tạo sao bản có thể
sẽ bị lặp (cascaded). Tuy vậy phương pháp này dễ cài đặt và không đòi hỏi phải
quản lý xung đột. Với trường hợp Multi – Master, các lệnh đọc sẽ được gửi đến cho
nhiều master, sau đó nó sẽ được sao ra ở các master khác cũng như các slave.
Phương pháp này sẽ đòi hỏi nhà quản trị phải quản lý xung đột, và rất dễ xảy ra
hiện tượng deadlock (khi mà dữ liệu được sửa ở nhiều nơi cùng một lúc).
Giữa phương pháp đồng bộ và không đồng bộ. Phương pháp không đồng bộ
được đảm bảo nhưng bản sao không được đồng nhất (out-of-band replication) từ
Master đến Slave. Master cập nhât DB riêng của nó và hồi đáp trở lại client. Việc
sao lưu từ Master đến slave xảy ra không đồng bộ, tuy vậy ưu điểm của phương
pháp này là khả năng trả về client nhanh. Nhưng nhược điểm của nó là dữ liệu slave
bị giới hạn sau Master, nó cũng yêu cầu App phải thay đổi để các critical reads
được gửi đến master và cân bằng tải cho các lệnh đọc khác.
Phương pháp đồng bộ được đảm bảo, bản sao được đồng nhất từ Master đến
Slave. Master cập nhập cơ sở dữ liệu riêng của nó và xác nhận tất cả các slave phải
cập nhật những dữ liệu riêng của chúng trước khi hối đáp trở lại client, sự hồi đáp
này sẽ chậm hơn. Slaves sẽ có cũng dữ liệu như của Master trong suốt quá trình.
Yêu cầu những thay đổi về ứng dụng phải gửi lệnh ghi đến master và cân bằng tải
với tất cả lệnh đọc
Cuối cùng là chọn mức dữ liệu để tạo sao bản: tại mức RDBMS hoặc tại mức
Driver/DAO. Phương án thứ nhất có thể có sẵn trong RDBMS hoặc được hỗ trợ bởi
một 3rd party tool, nó có ưu điểm là nhanh và đáng tin cậy. Trong trường hợp này,
application phải gửi lệnh ghi hoặc các critical reads tới Master, và các lệnh đọc khác
đến bất cứ DB nào khác. Phương án thứ hai thường chậm hơn và không đáng tin
cậy, trong phương án này, lệnh ghi được thực thi ở tất cả các DB, lệnh đọc được cân
bằng tải và các critical reads sẽ được gửi tới Master.
2.2.2
Real Application Cluster
Lựa chọn thứ hai để cài đặt DBServer theo chiều ngang là Real Application
Cluster
Sinh viên thực hiện: Võ Duy Pho - Khóa 49 - Lớp CNPM
Page 17
H 1.2-6 Real Application Cluster
Trong phương pháp này, các nodes ở DB cùng chia sẻ một phần chung ở
SAN, ràng buộc của phương pháp này là file system phải được định dạng là
clustered file system (GFS/OFS). Phương pháp này chỉ được cung cấp bởi công ty
Oracle do giá thành của nó rất cao. Hiện nay chỉ có các doanh nghiệp lớn hoặc các
tập đoàn mới triển khai phương pháp này
2.2.3
Mô hình khuyên dùng
Tổng hợp lại, dựa theo ưu nhược điểm và kinh nghiệm của các nhà phát
triển, mô hình Database mở rộng nên dùng là:
Master-Slave replication
Sao chép không đồng bộ
Ghi dữ liệu tại DAO layer
H 1.2-7 Mô hình mở rộng database nên dùng
Sinh viên thực hiện: Võ Duy Pho - Khóa 49 - Lớp CNPM
Page 18
2.3
Tổ chức lưu trữ dữ liệu
Một website có hệ thống web-server và database server mạnh mẽ vẫn sẽ bị
giới hạn tốc độ truy cập nếu như khả năng lưu trữ và phân bổ dữ liệu của website đó
không tốt. Một trang web sẽ được cấu thành từ nhiều thành phần khác nhau, bao
gồm các thành phần tĩnh và động. Để hiện thị được một trang web hoàn chỉnh, cần
phải tải hết tất cả các thành phần này về trình duyệt của người dùng. Nếu như dữ
liệu cần tải về lưu trữ quá xa người dùng, quá trình này sẽ chiếm nhiều thời gian, có
thể khiến cho người dùng bỏ luôn việc xem trang web. Chẳng hạn khi một người
dùng ở Việt Nam muốn xem một video trên youtube.com, nhưng video này lại
không có trong máy chủ server của youtube đặt tại Việt Nam, nếu phải tải nó từ
server của Mỹ, chắc chắn sẽ mất thời gian và khiến cho quá trình xem video bị giật,
gây khó chịu ít nhiều cho người dùng.
Để giải quyết vấn đề này, một kỹ thuật thường dùng là CDN (Content
delivery network) hay content switching, tư tưởng chính của kỹ thuật này là hướng
request thẳng đến server phục vụ nó. CDN thực ra có ý nghĩa khá rộng mà các định
nghĩa chuẩn thiên về hướng request đến server gần người dùng nhất, nghĩa là người
dùng Việt Nam sẽ được forward đến server Việt Nam. Điều này rất có giá trị khi
giảm các yêu cầu chạy qua trục backbone chính, đồng thời giảm băng thông đi quốc
tế. Vậy thì thực hiện điều này như thế nào? Một cách đơn giản nhất là bộ cân bằng
tải sẽ xác định IP của người dùng rồi xác định khu vực và hướng yêu cầu đến server
nằm tại data center gần đó nhất.
Một ví dụ thấy rõ nhất điều này, trước khi www.youtube.com đặt server ở
Việt Nam, người dùng ở Việt Nam xem các video ở Youtube.com rất chậm, thường
phải chờ tải từng phần, sự ngắt quãng này khiến người dùng không hài lòng và
không muốn quay trở lại với website. Nhưng sau khi youtube đặt server ở Việt
Nam, tốc độ đường truyền đã được cải thiện đáng kể, người dùng Việt Nam không
còn bị giật khi xem video, chính vì vậy mà youtube đã vượt hẳn lên so với trang
web chi sẻ video trực tuyến của Việt Nam là www.clip.vn.
Một ví dụ rõ hơn được mô tả trong hình 2.2-5. Khi người dùng truy cập vào
website www.discovery.com (1), origin server đầu tiên sẽ trả về trang chỉ mục
index.html (2). Sau đó nó sẽ chuyển hướng yêu cầu đến nhà cung cấp CDN (ở đây
là Akamai) (3), nhà cung cấp CDN sẽ dùng thuật toán lựa chọn của họ để tìm kiếm
server sao bản gần với người dùng nhất (4) và sau đó trả về dữ liệu cho người dùng
từ server này (5).
Sinh viên thực hiện: Võ Duy Pho - Khóa 49 - Lớp CNPM
Page 19
H 1.2-8 Ví dụ về mô hình CDN
Khi một website đã trở nên toàn cầu và có trung tâm dữ liệu (data center) tại
nhiêu nơi khác nhau trên thế giới, sẽ xảy ra vấn đề đồng bộ dữ liệu giữa các trung
tâm dữ liệu này. Cần phải đảm bảo được dữ liệu mà người dùng muốn truy cập đến
luôn có trên server, người ta xử lý điều này bằng cách, nếu dữ liệu đó là dữ liệu
quan trọng, đơn giản là một video clip có số lượt xem rất cao, nó sẽ được sao lưu
đến tất cả các data center trong hệ thống, còn nếu đó là 1 video không được quan
tâm lắm, thì nó có thể chỉ được lưu dtrên server khi mà nó được upload lên. Điều
này có nghĩa là nếu một người dùng Việt Nam truy cập vào một video "hot", đầu
tiên video này sẽ được chuyển về data center ở VN, và người dùng sẽ đọc ở đây,
trong trường hợp ngược lại, yêu cầu của người dùng sẽ có thể được gửi thẳng đến
server đang chứa video đó, và dữ liệu sẽ được tải về từ đây cho người dùng.
Một vấn đề nữa là khi số lượng truy cập vào website là rất nhiều và đa dạng,
dữ liệu phải liên tục vào ra tại ổ đĩa lưu trữ của website. Khác với web application
khi băng thông không quá cao, có thể dùng một proxy server đứng trước phân tải,
trong trường hợp file sharing hay video sharing, làm như thế sẽ khiến bộ cân bằng
tải sẽ trở thành thắt cổ chai (bottle neck). Điều này hoàn toàn dễ hiểu, vì ra vào dữ
liệu ra vào tại bộ cân bằng chỉ có giới hạn nhất định, nếu vượt qua giới hạn đó nó sẽ
rơi vào tình trạng quá tải và bị “treo”.
Để giải quyết vấn đề này, cần phải có các kỹ thuật partitioning các ổ đĩa lưu
trữ một cách hiệu quả, các kỹ thuật này sẽ giúp cho việc vào ra tại các thiết bị lưu
trữ được giảm một cách tối ưu. Trong khuôn khổ báo cáo này, NVLV xin không đề
cập chi tiết đến cách thức thực hiện điều này, xin dành cho một nghiên cứu sau. Một
phương pháp nữa là sử dụng bộ đệm cache một cách hiệu quả, sẽ nói đến trong
phần sau của chương này.
Sinh viên thực hiện: Võ Duy Pho - Khóa 49 - Lớp CNPM
Page 20
2.4
Cân bằng tải cho Cache
Như chúng ta đã biết, khái niệm cache trong công nghệ thông tin nhằm để
chỉ kỹ thuật lưu trữ dữ liệu được truy xuất thường xuyên và sử dụng lại liên tục. Khi
người dùng thường xuyên truy cập vào một vùng dữ liệu nào đó, thay vì gọi lại
phần dữ liệu đó từ database, chương trình ứng dụng sẽ đẩy dữ liệu đó vào một vùng
nhớ tạm có khả năng truy xuất nhanh, và gọi ra từ đó. Phương pháp này sẽ giảm
thiểu tối đã các luồng dữ liệu chạy trong hệ thống, chẳng hạn như giảm thiểu số lần
truy xuất vào database (trong trường hợp caching database). Caching là một phần
vô cùng quan trọng trong tất cả các hệ thống, nó là yếu tố quyết định trong việc tăng
tốc độ hoạt động của hệ thống.
Trong phần này, NVLV sẽ giới thiệu về các khái niệm cơ bản của caching,
cache ở phía người dùng và cache ở phía web-server, các phương án cài đặt cache
giữa người dùng và web-server và một số ưu nhược điểm của chúng. Chi tiết về cài
đặt và các thuật toán cài đặt cache sẽ được trình bày trong chương 3 của đồ án này,
trong thiết kế của bộ cân bằng tải.
2.4.1 Định nghĩa
Trong các hệ thống web, bộ nhớ cache lưu trữ các Web Content ( sự kết hợp
giữa text, các hình động hoặc audio) nhằm giúp tiết kiệm băng thông cũng như tăng
tốc độ truy xuất web. Chúng ta hãy xem ví dụ dưới đây.
Khi người dùng A lần đầu tiên gõ vào trong trình duyệt web của họ
bộ nhớ web cache sẽ nhận được yêu cầu này. Vì đây là lần
đầu người dùng A truy nhập và hệ thống, nên sẽ chưa có trang này trong cache, bộ
nhớ cache sẽ tìm kiếm trang này từ server gốc và lưu giữ trang này trong bộ nhớ
local, chẳng hạn như RAM hoặc đĩa, sau đó nó sẽ trả về trang này cho người dùng.
Sau đó, người dùng B truy xuất vào địa chỉ này, vì nó đã tồn tại trong cache, nên nó
sẽ ngay lập tức trả về trang này cho người dùng B. Vì vậy, người dùng B sẽ nhận
được trả lời nhanh hơn người dùng A và người phát triển web cũng sẽ tiết kiệm
được băng thông khi không phải truy cập vào server gốc để lấy trang này.
H 1.2-9 Simple Cache
Sinh viên thực hiện: Võ Duy Pho - Khóa 49 - Lớp CNPM
Page 21
Vì một trang web được cấu thành từ rất nhiều đối tượng khác nhau, chẳng
hạn như các đoạn text, các file hình ảnh, audio, các đoạn flash…do đó, khi có yêu
cầu, Web Server sẽ trả về tất cả các URLs cho tất cả các đối tượng, sau đó trình
duyệt sẽ nhúng chúng vào với nhau để hiển thị ra trang hoàn chỉnh.
Do bộ nhớ cache trả về dữ liệu cho người dùng cuối thay vì web server, nên
nó được gọi là proxy server hoặc proxy cache. Nếu như dữ liệu cần trả về cho một
yêu cầu từ phía người dùng có trong cache, chúng ta gọi là cache hit, trong trường
hợp ngược lại, chúng ta có khái nhiệm cache miss. Cache hit-ratio là giá trị được
tính bằng phần trăm giữa cache hit và tổng số requests mà cache nhận được, và rõ
ràng, nếu tỉ lệ này càng cao, thời gian đáp ứng càng ngắn và càng tiết kiệm được
nhiều băng thông hơn.
2.4.2 Các loại Caches và cách cài đặt
Như đã đề cập ở trên, bộ nhớ cache có thể được dùng để tăng tốc độ đáp ứng
yêu cầu của người dùng hoặc dùng để tăng hiệu năng của web servers. Dựa trên khả
năng của nó, cache được phân thành hai loại: tăng tốc người dùng (client
acceleration) và tăng tốc server (server acceleration).
Triển vọng của client acceleration cache là khả năng đáp ứng người dùng
nhanh hơn và tiết kiệm băng thông mạng. Triển vọng của server acceleration là khả
năng luẩn chuyển web content nhanh hơn và giảm số lượng servers cần thiết, vì
nguyên lý của server acceleration là dựa trên một tiền đề mà qua đó sử dụng cache
là phù hợp hơn servers trong việc phục vụ các ngữ cảnh tĩnh (static content). Web
servers sẽ giảm bớt được yêu cầu phục vụ các ngữ cảnh tĩnh (đã được chỉ định cho
cache) và tập trung vào phục vụ các ngữ cảnh động (dynamic web content)
Dựa trên lý thuyết cơ bản về caching, có 4 cách khác nhau để triển khai và sử
dụng cache:
Forward Proxy dùng cho tăng tốc client
Transparent Proxy dùng cho tăng tốc client
Reverse Proxy dùng cho tăng tốc server
Transparent Reverse Proxy dùng cho tăng tốc server
Nhìn vào tên của 4 loại cache này, chúng ta có thể thấy được chức năng của
chúng. Cache được cài đặt như một forward proxy được dùng để tăng tốc truy nhập
internet cho client, trong khi đó cache được cài đặt như reverse proxy được dùng để
tăng tốc truyền tải dữ liệu của server. Transparent proxy cũng thực thi nhiệm vụ
như forward proxy, nhưng nó được cài đặt để người dùng không biết nó tồn tại.
Transparent reverse proxy được cài đặt như reverse proxy và hoàn toàn transparent
đối với servers. Phương pháp cài đăt và chi tiết các loại cache này sẽ được nói rõ
trong chương 3 của đồ án.
Sinh viên thực hiện: Võ Duy Pho - Khóa 49 - Lớp CNPM
Page 22