PDA

View Full Version : Ứng dụng web qui mô lớn - Scalable WebApp



ecm.vn
24-06-2009, 23:33
Bài viết nhằm giới thiệu một vài tìm hiểu/kiến thức cá nhân về Scalable web application.
Trên thế giới, các Ứng dụng Web đã phát triển đến một tầm cao mới, chúng không còn là những ứng dụng web thông thường với chức năng hiển thị thông tin. Các ứng dụng Web đã trở thành những « phần nổi của những tảng băng chìm », trong đó, những tảng băng này là những hệ thống thông tin phức tạp. Chính vì thế ngày nay, khi nói đến ứng dụng Web, ta nên hiểu là toàn bộ hệ thống thông tin hỗ trợ những trang web tương tác với người dùng.
Tính phức tạp của ứng dụng Web thể hiện ở nhiều mặt :
Chúng có thể rất đơn giản về mặt cấu trúc nhưng do số lượng người truy cập rất lớn (hàng trăm triệu), kiến trúc hệ thống thông tin đằng sau phải đủ sức đáp ứng hàng trăm ngàn kết nối tại một thời điểm bất kì. Điển hình của ứng dụng kiểu này là Wikipedia. Với hơn 400 máy chủ đặt trên toàn thế giới, trong đó có 250 máy chủ Web, 150 máy chủ SQL và Cache, hệ thống đã chứng tỏ sức mạnh của nó qua tính dễ sử dụng và độ trễ nhỏ.
Ứng dụng Web có thể có số lượng người truy cập vừa phải, nhưng lại đòi hỏi những tính toán rất phức tạp đằng sau (các transaction với hàng Gigabyte dữ liệu cần xử lý). Chúng ta có thể liệt kê ra những ứng dụng trong các sàn chứng khoán với việc xử lý trong thời gian thực những dữ liệu của hàng ngàn người, đồng thời vẫn phải xem xét những thông tin đã lưu trữ trong quá khứ.

Trong mọi trường hợp, kiến trúc phần mềm của các hệ thống thông tin như thế cần mềm dẻo trong việc nâng cấp hệ thống phần cứng bên dưới. Thời gian nâng cấp T từ N server lên N+1 cần nhỏ nhất, và lý tưởng nhất là hệ thống vẫn có thể vận hành và nâng cấp « nóng » được. Ngoài ra, giá thành phần cứng của hệ thống cũng là một yếu tố quan trọng. Chúng ta đều biết Việt Nam chưa sản xuất được những máy chủ cỡ lớn, nếu phải mua những server như thế thì giá thành sẽ rất lớn, nằm ngoài khả năng của các doanh nghiệp nhỏ. Giải pháp phổ biến là thay vì mua một server lớn, « tất cả trong một », ta cần tự cài đặt những Cluster, những Webfarm với những component thông thường mua từ thị trường. Và khi một component như thế bị hỏng thì hệ thống cũng không bị ảnh hưởng.

Một số kỹ thuật nâng cao khả năng mở rộng của hệ thống :

I. Load Balancing (LB) – Phân tải

0. Phân loại :
Các Hệ thống phân tải (HTPT) có thể chia ra 2 loại lớn theo vị trí địa lý: Global Load balancing và Local Load balancing.

a. Global Load balancing :
Kiểu phân tải này thường cho các ứng dụng mà sự phân bố người dùng trải rộng về địa lý. Khi người dùng ở một nước N truy cập vào site S, địa chỉ IP của anh ta sẽ được phân tích và đưa lại vị trí địa lý. Căn cứ vào đó, ứng dụng sẽ Redirect anh ta đến một server gần người này nhất (có thể đặt ở nước N hoặc ở 1 nước láng giềng M). Việc định vị vị trí địa lý thường dựa vào một cơ sở dữ liệu IP2Country, trong đó có ánh xạ từ một dải địa chỉ IP đến một nước nào đó.

b. Local Load balancing
Đây là dạng phổ biến của phân tải, và người ta thường nhắc đến với cái tên WebFarm. WebFarm này có một địa chỉ IP duy nhất (Virtual IP) tại server lb01 (hình vẽ), server này chịu trách nhiệm phân chia các gói tin IP tới các Webserver tùy theo tải hiện tại của từng Webserver.
Khi các Webserver truyền lại các gói tin trả lời, nó có thể truyền trực tiếp với IP_source là địa chỉ của nó hoặc thông qua lb01 với IP_source = Virtual IP (10.10.10.11 – tương ứng trong hình vẽ).
http://ecm.vn/external_img/load_balancer.png

1. Round-Robin DNS Load balancing
Round-Robin có nghĩa là quay vòng. Với cách phân tải này, khi ta truy cập tới một địa chỉ www.example.com, server DNS sẽ được cấu hình để trỏ tới 1 tập các Server.

2. Hardware : Foundry, F5
Đây là giải pháp “trọn gói” của các hãng cung cấp thiết bị chuyên dụng cho Load balancing. Tuy nhiên, đây là cách chỉ dành cho nhà giàu và không có thời gian, sức lực tự xây dựng Load balancer cho mình. Với những thiết bị như thế này, công việc ta cần làm là cắm các webserver vào Load balancer và chạy.

3. Software : LVS
LVS là gói phần mềm OpenSource phổ biến nhất trên Linux cho Load Balancing. LVS gồm 2 thành phần chính Linux Director và Real Server, trong đó Linux Director có thể chỉ là một server riêng lẻ (nên nếu nó hỏng thì toàn bộ hệ thống hỏng), hoặc là có thêm một server phụ trợ, ở chế độ Standby và sẵn sàng thay thế Linux Director chính nếu có vấn đề.

http://ecm.vn/external_img/lvs.png
LVS đã phát triển tới phiên bản ổn định và được ứng dụng tại rất nhiều site lớn (chính thức có trên 40 site báo cáo lại với trang chủ của LVS – ngoài ra có thể còn có rất rất nhiều website ứng dụng nó). Website nổi tiếng và quen thuộc với dân tin học là Sourceforge.net.

II. Cache :
Cache là kỹ thuật rất hiệu quả nhằm tăng hiệu suất truy cập thông tin. Cache được thực thi khắp nơi, từ trong lõi bộ vi xử lý đến đĩa cứng, đến mức hệ điều hành và ở mức ứng dụng. Về cơ bản, cache là một lớp đệm giữa 2 môi trường lưu trữ, xử lý thông tin khác nhau, thường là có tốc độ truy cập thông tin khác nhau : với bộ VXL nó là lớp đệm L2 giữa VXL và RAM, với Đĩa cứng, nó là buffer đĩa cứng, buffer chứa trong RAM, với các ứng dụng web, đó là các bảng hash table trong bộ nhớ của chương trình chạy trên Webserver (ASP.NET, PHP, …), nó giúp lưu trữ dữ liệu đã đọc từ CSDL (MSSQL Server, MySQL …là nơi xử lý dữ liệu chậm hơn RAM rất nhiều). Ngoài ra, ở mức độ mạng kết nối giữa các máy tính, ta có các công cụ giúp lưu trữ các tài nguyên mạng như file HTML tĩnh, hay ảnh (Squid - ở qui mô internet) tại một server gần với người dùng nhất, hoặc có thể áp dụng một global hash table chung cho nhiều máy (memcached - ở mức mạng nội bộ).

1. Squid :
Squid có hai ứng dụng chính : làm một proxy cho một mạng nội bộ, và làm một reverse-proxy cho một web server. Với chức năng proxy, Squid được cài ở một “cổng ra” của một mạng nội bộ. Tất cả các HTTP request đều phải qua cổng này. Nhờ đó, nhân viên một công ty có cài Squid vào VnExpress.net lần đầu thì sẽ khá chậm nhưng lần thứ 2, trên tất cả các máy sẽ rất nhanh (vì thông tin lưu trữ trong mạng nội bộ). Với chức năng reverse-proxy, một máy chủ khác cài Squid sẽ “chặn” trước Webserver thật, và Squid sẽ trả lại các trang HTML tĩnh và các image mà không phải truyền request tới webserver. Squid có tác dụng giảm tải cho Webserver & tăng tốc độ truy cập chung.

2. APC
APC là một module cho PHP, thực chất là một bảng Hash table lưu giữ các giá trị tính toán đựoc hoặc đọc từ CSDL. APC thích hợp cho mô hình 1 máy chủ webserver – 1 máy chủ MySQL.

3. memcached
Memcached là một daemon được cài trên nhiều máy trong một webfarm. Thực chất nó là một global hash table, chia sẻ giữa các máy tính này. Memcached có tốc độ chậm hơn APC (vì nó phải đọc từ socket) nhưng nó có tính scalable khi cần nâng cấp mở rộng webserver thành WebFarm.

4. SQL replication
SQL Replication là một kỹ thuật cho phép tách các tác vụ Read – Write (bình thường là được thực hiện trên một máy chủ MySQL) thành các tác vụ Read và Write trên các máy khác nhau. Thường là dùng mô hình Master-Slave với cơ chế Replication. Các máy Slave sẽ được replicated từ máy Master. Nhờ đó, tác vụ Write sẽ chỉ thực hiện trên máy Master, còn tác vụ Read có thể chia ra đọc từ nhiều máy Slave.

III. Công nghệ Cluster – High Available Cluster (HA)
HA Cluster là mô hình cluster cho nhiều máy tính thông dụng, với đặc tính là có tính chịu lỗi cao, khi một/một số máy thành viên của Cluster bị hỏng.
Các thành phần của cluster có thể chỉ là các bo mạch với Mainboard, CPU, Chip, RAM, không có ổ cứng. Việc lưu trữ sẽ được thực hiện qua một máy chủ riêng (NFS, SAN). Đồng thời, khi ta cần thêm các thành phần này, ta chỉ cần cắm điện và kết nối mạng cho chúng. Việc còn lại sẽ do các chương trình quản lý Cluster phụ trách việc gán địa chỉ IP, khởi động qua PXE (Pre Execute Environment), và một “image” của hệ điều hành Linux sẽ được truyền từ 1 server đến thành phần mới kết nối này.



Tham khảo
1. Round-Robin DNS Load Balancing http://content.websitegear.com/article/load_balance_dns.htm
http://en.wikipedia.org/wiki/Round_robin_DNS
RFC 1794 (http://tools.ietf.org/html/rfc1794)
2. Các Website đã ứng dụng LVS
http://www.linuxvirtualserver.org/deployment.html
3. Các sản phẩm phân tải trên Linux
http://lcic.org/load_balancing.html
4. [Book] The Linux Enterprise Cluster - Build a Highly Available Cluster with Commodity Hardware and Free Software By Karl Kopper
5. Tin tức về cluster http://clustercenter.org/
6. Squid http://www.squid-cache.org/
7. APC for PHP http://fr.php.net/apc
8. Memcached http://www.danga.com/memcached/
9. MySQL replication http://dev.mysql.com/doc/refman/5.0/en/replication.html
10. HA Cluster http://www.linux-ha.org/
11. http://www.beowulf.org/