Tải bản đầy đủ (.pdf) (89 trang)

Thiết kế bộ phân tải cho các dịch vụ mạng lớn đảm bảo khả năng nhanh chóng mở rộng quy mô hệ thống

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.88 MB, 89 trang )

LỜI CẢM ƠN
Lời đầu tiên tôi xin gửi lời cảm ơn chân thành và sâu sắc nhất tới thầy giáo TS.Nguyễn Khanh Văn, người thầy tận tâm nhiệt tình đã chỉ dạy và hướng dẫn tôi
hoàn thành luận văn này.
Tôi cũng xin bày tỏ lòng biết ơn sâu sắc đến tất cả các thầy, các cô Viện Công
nghệ Thông tin và Truyền thông đã giảng dạy và truyền thụ kiến thức cho tôi cũng
như các bạn đồng học trong suốt quá trình học tập vừa qua.
Cuối cùng tôi xin gửi lời cảm ơn chân thành sâu sắc tới gia đình, các bạn bè
của tôi, những người đã luôn ở bên cạnh giúp đỡ, động viên khuyến khích tôi.
Hà Nội, ngày 10 tháng 8 năm 2013
Học viên

Trần Văn Tâm

1


MỤC LỤC
PHẦN MỞ ĐẦU ........................................................................................................8
CHƢƠNG I: KIẾN TRÚC WEB VỚI KHẢ NĂNG NHANH CHÓNG MỞ
RỘNG QUY MÔ HỆ THỐNG ..............................................................................11
1. Khái niệm chung về kiến trúc web với khả năng mở rộng: ....................................... 11
1.1. Khả năng mở rộng (Scalability): ..................................................................................... 11
1.2. Hiệu năng (Performance): ................................................................................................. 11
1.3. Khả năng sẵn có (High Availability): ............................................................................ 12
1.4. Tính đáp ứng (Responsiveness): ..................................................................................... 12
1.5. Thời gian chết của hệ thống (Downtime impact): ...................................................... 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: ...................................................................................................................... 13
2.1. Cân bằng tải cho Application servers: ........................................................................... 13
2.2. Cân bằng tải cho Cơ sở dữ liệu (database) trên servers:........................................... 16
2.2.1. Share nothing Cluster .................................................................................................... 17


2.2.2. Real Application Cluster (Shared storage Cluster) ............................................... 19
2.3. Tổ chức lưu trữ dữ liệu ...................................................................................................... 20
CHƢƠNG II: PHƢƠNG PHÁP XÂY DỰNG BỘ CÂN BẰNG TẢI CHO
WEB-SERVER ........................................................................................................23
1. Lý thuyết xây dựng bộ cân bằng tải cho web-servers .................................................. 23
1.1. Kỹ thuật cân bằng tải server (Server Load Balancing – SLB) ................................ 24
1.1.1. Kiểm tra trạng thái server ............................................................................................ 24
1.1.2. Lựa chọn server tốt nhất: ............................................................................................. 25
1.1.3. Kỹ thuật Session Persistence: ..................................................................................... 25
1.1.4. Cookie: .............................................................................................................................. 26
1.2. Cân bằng tải cho server toàn cầu (GSLB): ................................................................... 30
1.2.1. Domain Name System: ................................................................................................. 30
1.2.2. Cài đặt bộ cân bằng tải vào hệ thống mạng DNS: ................................................ 32
1.2.3. Lựa chọn site tốt nhất: .................................................................................................. 35
1.3. Chuyển mạch cache trong suốt: ...................................................................................... 37
2


1.3.1. Các phương pháp cài đặt cache:................................................................................. 37
1.3.2. Các phương pháp cân bằng tải cho Cache: ............................................................. 44
1.3.3. Nhận biết các ngữ cảnh trong cache (Content-aware cache switching):......... 47
1.4. Cân bằng tải sử dụng phần cứng và cân bằng tải phần mềm: ................................. 49
1.4.1. Cân bằng tải sử dụng phần cứng:............................................................................... 49
1.4.2. Cân bằng tải sử dụng phần mềm:............................................................................... 51
2. Các thuật toán cân bằng tải: ................................................................................................ 52
2.1. Thuật toán ngẫu nhiên (random):.................................................................................... 52
2.2. Thuật toán Round Robin (RR): ....................................................................................... 52
2.3. Thuật toán Weighted Round Robin (Ratio) ................................................................. 53
2.4. Thuật toán Dynamic Round Robin - DRR (Dynamic Ratio) .................................. 54
2.5. Thuật toán Fastest ............................................................................................................... 54

2.6. Thuật toán Least Connections (LC) ............................................................................... 55
2.7. Thuật toán Observed .......................................................................................................... 56
2.8. Thuật toán Predictive ......................................................................................................... 56
CHƢƠNG III: CÀI ĐẶT BỘ CÂN BẰNG TẢI HAPROXY .............................57
1. Bộ cân bằng tải sử dụng mã nguồn mở Haproxy: ......................................................... 57
1.1. Giới thiệu về bộ cân bằng tải mã nguồn mở Haproxy: ............................................. 57
1.2. Cài đặt bằng phương pháp Cookie-insert: .................................................................... 59
1.3. Cài đặt với khả năng mở rộng cao: ................................................................................ 62
2. Cài đặt các thuật toán cân bằng tải trên HAproxy: ....................................................... 66
2.1. Thuật toán Weighted Round Robin (WRR)................................................................. 70
2.2. Thuật toán Lest Connection (LC) ................................................................................... 72
2.3. Nâng cao khả năng chịu tải của bộ cân bằng tải:........................................................ 73
3. Cài đặt và cấu hình Haproxy trên server Centos: .......................................................... 75
3.2. Cài đặt Haproxy: ................................................................................................................. 79
4. Cấu hình và cài đặt bộ công cụ theo dõi server trong hệ thống cân bằng tải: ....... 82
KẾT LUẬN VÀ ĐỊNH HƢỚNG PHÁT TRIỂN .................................................86
TÀI LIỆU THAM KHẢO ......................................................................................89

3


LỜI CAM ĐOAN
Tôi xin cam đoan luận văn này là kết quả quá trình nghiên cứu của tôi dưới sự
hướng dẫn của thầy giáo – TS. Nguyễn Khanh Văn
Toàn bộ nội dung của luận văn là các kiến thức của tôi đúc rút được sau quá
trình học tập cũng như các kiến thức thu được từ các tài liệu tham khảo do thầy giáo
cung cấp, luận văn không hề sao chép lại bất kỳ luận văn cũng như công trình khoa
học nào khác.
Học viên
Trần Văn Tâm


4


DANH MỤC CÁC TỪ VIẾT TẮT VÀ THUẬT NGỮ
Ký hiệu

Từ đầy đủ

Nghĩa Tiếng Việt

Authorita-

Authoritative Domain

Một website sẽ lưu thông tin về tên của nó trong nhiều

tive DNS

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

DNS

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

GSLB

HTTP

Gateway

giữa người dùng và server.

Global Server Load

Cân bằng tải cho các máy server được cài đặt ở khắp nơi

Balancing

trên thế giới


Hypertext Transfer

Giao thức truyền tải siêu văn bản, được sử dụng trong

Protocal

WWW
Cân bằng tải: phân phối tải giữa các server nhằm đảm

LB

Load balancing

bảo sự cân bằng giữa chúng
Thuật toán phân tải cho các server dựa trên số kết nối

LC

Least connections

hiện tại của chúng
Server tên nằm trong mạng LAN của client, trình duyệt

Local

Local Domain Name

của client sử dụng local DNS để liên lạc với Domain

DNS


Server

Name System
Server đứng giữa người dùng và webserver, có nhiệm

Proxy – Proxy Server

vụ trao đổi thông tin.

Reverse-proxy

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

RR

Round Robin

vòng
Kiến trúc kết nối những thiết bị lưu trữ từ xa để xem

SAN

Storage Area Networks

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

Scalable - Scalability


ứng được số lượng người dùng ngày một tăng

Scale - Scaling

Mở rộng, tăng khả năng hoạt động

5


Ký hiệu

Từ đầy đủ

Nghĩa Tiếng Việt
Máy phục vụ, chứa các thông tin, ứng dụng cho phép

SLB

Server

người dùng truy cập vào

Server Load Balancing

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

Socket


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ộ

SPOF

TCP

Single point of failure

hệ thống sẽ bị tê liệt

Transmission Control

Giao thức điều khiển truyền vận, sử dụng tạo kết nối để

Protocol

trao đổi các gói tin

Transparent-proxy

Proxy bên phía client, hoạt động “trong suốt” với người dùng

6


DANH MỤC CÁC BẢNG
H 1.2-1 So sánh scale out và scale up .......................................................................14
H 1.2-2 Bảng so sánh giá thành 2 phương pháp .......................................................15
H 1.2-3 Mô hình cân bằng tải web server .................................................................16

H 1.2-4 Mở rộng database server sử dụng kiến trúc SAN ........................................17
H.1.2-5 Mở rộng database server theo chiều ngang..................................................17
H.1.2-6 Real Application Cluster ..............................................................................19
H.1.2-7 Mô hình mở rộng database nên dùng ...........................................................20
H.1.2-8 Mô hình CDN ..............................................................................................21
H.2.1-1 Cách làm việc của cookie user=1 ................................................................26
H.2.1-2 Cookie read ..................................................................................................27
H.2.1-3 Cookie-insert ................................................................................................28
H.2.1-4 Bộ cân bằng tải chèn một cookie .................................................................29
H.2.1-5 Bộ cân bằng tải ghi đè một cookie ...............................................................29
H.2.1-6 Mô hình Global Server Load Balancing ......................................................31
H.2.1-7 Bộ cân bằng tải hoạt động như một authoritative DNS ...............................33
H.2.1-8 Bộ cân bằng tải hoạt động như một forward DNS proxy ............................34
H.2.1-9 Sự kết hợp GSLB và SLB trong bộ cân bằng tải .........................................35
H.2.1-10 Cài đặt cache ở trình duyêt của người dùng ..............................................39
H.2.1-11 Cài đặt cache như một transparent proxy ..................................................40
H.2.1-12 Cân bằng tải cho transparent-proxy cache .................................................41
H.2.1-13 Cài đặt cache như mọt reverse-proxy ........................................................42
H.2.1-14 Bộ cân bằng tải cho Reverse proxy caches ................................................42
H.2.1-15 Transparent-reverse proxy caches .............................................................44
H.2.1-16 Phương pháp hash buckets dùng trong caching .........................................46
H.2.1-17 Ví dụ về luật giúp bỏ qua các ngữ cảnh động ............................................48
H.2.1-18 Cân bằng tải sử dụng phần cứng ................................................................50
H.3.1-1 Mô hình cân bằng tải đơn giản với một bộ cân bằng tải..............................60
H.3.1-2 Mô tả Luồng dữ liệu trong mô hình đơn giản ..............................................61
H.3.1-3 Mô hình phức tạp với 2 bộ cân bằng tải chia sẻ 1 địa chỉ IP ảo ..................63
H.3.1-4 Luồng dữ liệu trong mô hình 2 bộ cân bằng tải với keepalived ..................65
H.3.3-1 Cấu hình firewall cho CentOS .....................................................................76
H.3.3-2Cấu hình firewall cho CentOS (tiếp) ............................................................76
H.3.3-3 Kiểm tra thông số server trong HAProxy ....................................................81

H.3.4-1 Kiến trúc hệ thống cài đặt Ganglia ..............................................................82
Hình vẽ được đánh theo định dạng: H [Chương].[Mục lớn] [Số thứ tự]

7


PHẦN MỞ ĐẦU
1. Lý do chọn đề tài
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 quy mô hệ thố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 web-server 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 web-server. 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.

2.

Mục đích nghiên cứu của luận văn, đối tƣợng, phạm vi nghiên cứu.
Luận văn trình bày 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 web-server 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.

8


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. Tiếp theo em 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.
3.

Nội dung chính của luận văn:

Nội dung luận văn được chia thành 3 chương:
Chương 1: Khái niệm chung về kiến trúc web với khả năng nhanh chóng
mở rộng quy mô hệ thống, các vấn đề cần giải quyết khi xây dựng website theo kiến
trúc với khả năng mở rộng.

Chương 2: Lý thuyết để xây dựng bộ cân bằng tải web-server, chức năng,
nhiệm vụ của một bộ cân bằng tải. Các thuật toán, kỹ thuật phân tải đã và đang
được sử dụng trên các bộ cân bằng tải web-server.
Chương 3: Ứng dụng một số thuật toán cân bằng tải dựa trên phần mềm
cân bằng tải mã nguồn mở HAProxy.
Phần kết luận
4. Phƣơng pháp nghiên cứu
Phương pháp thu thập tư liệu sẵn có: Sử dụng công cụ tìm kiếm trên mạng
Internet để tìm kiếm các tài liệu liên quan, thu thập các tài liệu ebook, các nghiên
cứu được đăng trên các tạp chí chuyên ngành, hỗ trợ cho việc thực hiện luận văn.
Phương pháp kế thừa: Kế thừa lại các kết quả nghiên cứu của các tài liệu có
cùng lĩnh vực nghiên cứu để tiếp tục nghiên cứu mở rộng các nội dung này.
Phương pháp lấy ý kiến chuyên gia: Tiếp thu ý kiến của thầy giáo hướng dẫn
trực tiếp, các thầy trong Viện để hoàn thiện luận văn.
5. Kết luận
Luận văn đã đưa ra các thành phần cần phải xây dựng của một bộ cân bằng tải
và đã cài đặt một giải pháp phân tải động thông minh hoạt động hiệu quả hơn so với
giải pháp đang chạy trên một bộ cân bằng tải mã nguồn mở.

9


Trong đó luận văn đã trình bày các bước cài đặt một thuật toán tĩnh và một
thuật toán động dựa trên một sản phẩm cân bằng tải mã nguồn mở chạy trên server
linux là HAProxy.
Hướng phát triển:
 Về lý thuyết:
Thực hiện nghiên cứu sâu hơn về các thuật toán cân bằng tải, qua đó ứng
dụng mềm dẻo, linh hoạt cho các hệ thống cân bằng tải cụ thể cho các dịch
vụ web.

 Về ứng dụng:
Hiện tại ứng dụng chỉ dừng ở mức độ thử nghiệm dựa trên sản phẩm cân
bằng tải mã nguồn mở có sẵn, chưa đáp ứng được yêu cầu liên lạc giữa các
server với nhau, mà chỉ giữa server và bộ cân bằng tải. Trong tương lai dự
định sẽ phát triển ứng dụng được cài đặt trên các server đảm bảo yêu cầu liên
lạc giữa các server khi có một server gặp sự cố.

10


CHƢƠNG I
KIẾN TRÚC WEB VỚI KHẢ NĂNG NHANH CHÓNG MỞ RỘNG QUY MÔ
HỆ THỐNG
1. Khái niệm chung về kiến trúc web 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 em xin trình về các khái niệm này.
1.1. Khả năng mở rộng (Scalability):
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.
1.2. Hiệu năng (Performance):
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.

11


1.3. Khả năng sẵn có (High Availability):
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
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.
1.4. Tính đáp ứng (Responsiveness):
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ệ.
1.5. Thời gian chết của hệ thống (Downtime impact):
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

12


độ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 em 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.

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 servers đủ 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 (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ể

13


còn phụ thuộc vào nhiều yếu tố như băng thông 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
đượ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 được kết nối với
nhau như thế nào?

H 1.2-1 So sánh scale out và scale up

14


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ừ đó,
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 yêu cầu 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:

15


H 1.2-3 Mô hình cân bằng tải web server
2.2.

Cân bằng tải cho Cơ sở dữ liệu (database) trên servers:
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ả.
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.

16


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).
Mô tả 2 phương pháp trên:
2.2.1. Share 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

17


có dữ liệu được chia sẻ giữa các DB Server Nodes, ở đây các file DB thực sự sẽ
đượ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 của hang thứ 3.
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

18


đế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 (Shared storage Cluster)
Lựa chọn thứ hai để cài đặt DBServer theo chiều ngang là Real Application
Cluster.
Mô hình tổng quát:

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.
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

19


H.1.2-7 Mô hình mở rộng database nên dùng
Ưu điểm của phương pháp này là dễ triển khai, chi phí thấp, tuy nhiên tốc độ
đọc/ghi dữ liệu không nhanh.
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
20


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.

H.1.2-8 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 trê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.


21


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.

22


CHƢƠNG II
PHƢƠNG PHÁP XÂY DỰNG BỘ CÂN BẰNG TẢI CHO WEB-SERVER

Cân bằng tải web-server là phần quan trọng nhất trong quy trình xây dựng
website theo kiến trúc mở rộng. Một trang web được cân bằng tải tốt sẽ tránh được
tình trạng tắc nghẽn server, luôn trả về yêu cầu của người dùng trong khoảng thời
gian ngắn nhất, do đó sẽ khiến cho người dùng hài lòng. Có nhiều kỹ thuật để thực
hiện cân bằng tải cho server, một trong những kĩ thuật thường được đề cập rộng rãi
trên internet là sử dụng DNS (Domain Name System). Là một phần của cân bằng tải
toàn cầu, DNS server sẽ chứa thông tin về địa chỉ của rất nhiều host dưới một cái
tên host duy nhất. Khi người dùng truy cập vào host bằng tên này, DNS sẽ trả về
các host theo thứ tự quay vòng, như vậy người dùng khác nhau sẽ truy cập vào các
địa chỉ khác nhau dưới cùng một tên. Kỹ thuật này được gọi là DNS Round Robin.
Tuy nhiên kỹ thuật này chưa cho thấy được tầm quan trọng của bộ cân bằng tải. Sẽ
còn rất nhiều vấn đề về năng mở rộng, chống failure, bảo mật…mà sử dụng DNS

round robin sẽ không giải quyết được. Điều quan trọng nhất trong cân bằng tải
server chính là thiết kế và xây dựng bộ cân bằng tải. Bộ cân bằng tải này sẽ đứng
trước cụm server, nhận yêu cầu từ người dùng, sau đó phân tải vào các server một
cách phù hợp. Vậy làm cách nào để thiết kế được bộ cân bằng tải này? Các thành
phần cần có của một bộ cân bằng tải là gì? Các kỹ thuật cân bằng tải được thể hiện
như thế nào? Chúng sẽ được mô tả chi tiết trong chương 2 dưới đây.
1.

Lý thuyết xây dựng bộ cân bằng tải cho web-servers
Một bộ cân bằng tải cần phải thực hiện được 4 chức năng cốt lõi sau:
+ Cân bằng tải cho server (server load balancing): có nhiệm vụ phân phối tải

giữa các server, tăng khả năng mở rộng của hệ thống, giúp cho hệ thống vẫn hoạt
động khi có server bị “chết”.
+ Cân bằng tải cho server toàn cầu (global server load balancing): có nhiệm
vụ chuyển hướng yêu cầu của người dùng đến các data center khác nhau trong
trường hợp website có nhiều trung tâm dữ liệu trên thế giới. Góp phần tăng tốc độ
phản hồi cho người dùng và giúp cho hệ thống vẫn có khả năng hoạt động khi có
trung tâm dữ liệu bị “chết”.

23


+ Cân bằng tải cho firewall (firewall load balancing): có nhiệm vụ phân phối
tải giữa các firewall, giúp cho hệ thống vẫn hoạt động được khi có firewall bị “chết”
+ Chuyển mạch cache trong suốt (transparent cache switching): Giúp chuyển
hướng lưu lượng một cách “trong suốt” đến các caches, góp phần tăng thời gian đáp
ứng và hiệu năng của hệ thống.
1.1.


Kỹ thuật cân bằng tải server (Server Load Balancing – SLB)
Như chúng ta đã biết, bộ cân bằng tải có nhiệm vụ kết nối giữa người dùng và

server, do đó nó có thể hoạt động như một proxy hoặc gateway. Một proxy có
nhiệm vụ luân chuyển yêu cầu và dữ liệu đáp trả giữa người dùng và server, trong
khi đó một gateway chỉ có nhiệm vụ tạo ra một kết nối hai đối tượng này và không
làm gì thêm. Có thể sử dụng phần cứng hoặc phần mềm được cài đặt trên một front
server, hoặc trên chính web server. Thêm nữa, khi số lượng người dùng tăng lên cần
thiết phải cài đặt 2 bộ cân bằng tải song song, hoạt động theo cơ chế active-active
hoặc active-backup.
Các phần mềm cân bằng tải thường được cài đặt như một proxy. Để xây dựng
một bộ cân bằng tải phần mềm, các kỹ thuật cần phải chú trọng, đó là: kiểm tra
trạng thái server, lựa chọn server tốt nhất để gửi yêu cầu và kỹ thuật duy trì kết nối
của người dùng.
1.1.1. Kiểm tra trạng thái server
Để chọn được server phù hợp để gửi request, bộ cân bằng tải cần phải biết
được server nào đang có sẵn. Vì vậy, nó cần phải dùng biện pháp nào đó để kiểm tra
trạng thái của server, chằng hạn như gửi lệnh ping, các yêu cầu, thử kết nối hay bất
cứ phương pháp nào mà người quản trị nghĩ là dùng được. Kỹ thuật kiểm tra này
thường được gọi là “health checks”
Một server bị down có thể trả lời lệnh ping nhưng không thể trả lời các kết nối
TCP, một server bị treo có khả năng trả lời kết nối TCP nhưng không thể trả lời các
yêu cầu HTTP. Khi một ứng dụng web nhiều lớp được kích hoạt, một số yêu cầu
HTTP có thể trả lời ngay lập tức trong khi số khác sẽ thất bại.
Chính vì thế, việc chọn một phương pháp test phù hợp được chấp nhận bởi
ứng dụng web và bộ cân bằng tải là rất thú vị. Một số test đôi khi phải cần truy xuất
dữ liệu database nhằm đảm bảo rằng toàn bộ quá trình của nó là đúng. Hạn chế lớn

24



nhất là những phương pháp kiểm tra này sẽ chiếm tài nguyên của hệ thống như là
CPU, threads…
Do đó, cân bằng thời gian kiểm tra chính là vấn đề khó nhất trong kỹ thuật lựa
chọn server. Khoảng thời gian giữa 2 lần test liên tiếp phải đủ dài để không tốn quá
nhiều tài nguyên của hệ thống và cũng cần đủ ngắn để nhanh chóng phát hiện ra
những server “chết”. Vì “health checks” là một trong những khía cạnh phức tạp
nhất của kỹ thuật cân bằng tải, nên thường sau một vài kiểm tra, các nhà phát triển
ứng dụng sẽ thực thi một yêu cầu đặc biệt dành riêng cho bộ cân bằng tải, giúp cho
nó thực hiện một số kiểm tra nội bộ.
Phần mềm cân bằng tải có khả năng cung cấp scripting, do đó nó đạt được độ
linh hoạt rất cao. Thêm nữa, nếu như một bài kiểm tra nào đó đòi hỏi phải chỉnh sửa
code, nó có thể thực hiện trong một khoảng thời gian ngắn.
1.1.2. Lựa chọn server tốt nhất:
Việc lựa chọn server tốt nhất chính là phần chính của thuật toán cân bằng tải được
đề cập trong phần 2. Phương pháp dễ nhất và thường được sử dụng nhất trong các
hệ thống nhỏ là Round Robin, các server được lựa chọn quay vòng, tuy nhiên
phương pháp này có nhược điểm là 2 requests liên tục từ một người dùng sẽ vào 2
servers khác nhau, thông tin giữa 2 yêu cầu liên tiếp sẽ bị mất, như vậy sẽ không thể
tối ưu hóa được sử dụng tài nguyên. Đặc biệt là khi cần phải cài đặt kết nối cho các
phiên chạy - ví dụ như SSL key negociation - sẽ rất tốn thời gian.
Một cách khắc phục nhược điểm này là sử dụng một hàm băm theo địa chỉ IP,
như vậy requests từ cùng một địa chỉ IP sẽ chỉ vào một server duy nhất. Tuy vậy
phương pháp này đòi hỏi người dùng phải có IP tĩnh. Cách khắc phục hạn chế trên
là sử dụng kỹ thuật Persistence.
1.1.3. Kỹ thuật Session Persistence:
Như đã đề cập ở trên, vấn đề cần giải quyết chính là làm sao để giữ cho các
yêu cầu của một người dùng được gửi vào một máy duy nhất trong suốt phiên làm
việc của người đó. Tất cả các yêu cầu của người dùng này cần phải được chuyển
vào cùng một server. Nếu server bị chết, hoặc ngừng để bảo trì, cần phải có cơ chế

để chuyển session của người dùng này sang máy server khác. Đó chính là kỹ thuật
Session Persistence.

25


×