Các phương pháp cài đặt cache

Một phần của tài liệu NGHIÊN CỨU KỸ THUẬT NETWORK LOAD BALANCING TRONG HỆ THỐNG MẠNG LINUX (Trang 30 - 42)

Như đã trình bày trong chương 1, có 4 phương án khai triển cache, đó là cài dặt cache như một forward proxy, transparent proxy, reverse proxy hoặc transparent-reverse proxy. Forward proxy và transparent proxy được dùng để tăng tốc bên phía người dùng (thường được cài bên phía trình duyệt người dùng), trong khi đó reverse proxy và transparent-reverse proxy được dùng để tăng tốc server và được cài đặt tích hợp trong bộ cân bằng tải.

• Forward Proxy:

Trong phương pháp này, cache server được cài đặt giống như một proxy server cho một nhóm người dùng đầu cuối. trình duyệt của mỗi người dùng phải được cấu hình để chỉ đến proxy server này, nó dùng đến proxy cache này-nơi mà các ngữ cảnh được trả về cho người dùng. Rất nhiều doanh nghiệp sử dụng phương pháp này nhằm tăng tốc độ sử dụng hệ thống cho khách hàng. Một vấn đề nảy sinh trong khi triển khai phương pháp này là mỗi trình duyệt đều phải được cấu hình để chỉ

đến proxy server, tuy nhiên nó có thể cài đặt tự động bằng cách chạy một script khi người dùng đăng nhập vào mạng của doanh nghiệp.

Phương pháp cài đặt cũng làm tăng khả năng bảo mật của hệ thống do người quản trị chỉ cho phép duy nhất proxy cache server truy cập vào internet và khóa tất cả các truy cập khác. Như vậy, tất cả người dùng sẽ phải thông qua proxy cache server nào đó và do đó IP thực sự của người dùng sẽ được che giấu vì server gốc chỉ nhìn thấy proxy server giống như một người dùng cuối.

Một vấn đề khác khi cài đặt forward proxy là cần phải đảm bảo khả năng mở rộng của cache server. Giả sử có một cache server có khả năng phục vụ 500 người dùng, nhưng hệ thống cần đáp ứng cho 400 người dùng một cách ổn định, khi đó cần phải cài đặt 8 bộ cache như vậy và cần phải phân vùng tải giữa chúng. Hơn nữa, vì yêu cầu của người dùng được forward đến proxy cache server nên khi cache server bị down, người dùng này sẽ bị mất kết nối đến internet và như vậy xuất hiện hiện tượng nghẽn cổ chai (bottleneck).

Bằng cách cài đặt một bộ cân bằng tải, ta có thể giải quyết được vấn đề mở rộng cũng như tính có sẵn của phương pháp cài đặt forward-proxy cache. Như mô tả dưới hình, một bộ cân bằng tải được đặt ở phía trước forward-proxy caches. Chúng ta định nghĩa một địa chỉ IP ảo (VIP) trên bộ cân bằng tải và hướng VIP tới địa chỉ IP của từng cache server trên cổng 8080 (cổng 8080 thường được dùng cho kết nối proxy). Điều này nghĩa là lúc này trình duyệt sẽ được cấu hình để chỉ đến cổng này và nó sẽ gửi toàn bộ yêu cầu của người dùng đến cổng 8080 này. Với việc sử dụng bộ cân bằng tải này, có thể giải quyết được vấn đề vầ khả năng mở rộng cũng như tính đáp ứng của caches. Có thể đưa thêm caches vào khi cần thiết và chỉ cần kết nối nó với bộ cân bằng tải. Hơn nữa, khi một cache không hoạt động, requests sẽ được gửi đến cache khác ngay lập tức. Một thuận lợi nữa đó là khi người quản trị cần bảo trì một cache nào đó hoặc ví dụ như khi update phần mềm cho nó thì có thể thực hiện được mà không làm gián đoạn hoạt động của hệ thống.

Hình 2-6: Cài đặt cache ở trình duyệt người dùng

Cân bằng tải cho caches ở đây cũng tương tự như cân bằng tải cho cụm server ứng dụng. Vấn đề lớn nhất khi sử dụng phương pháp này là phải cấu hhhh cho trình duyệt của người dùng chỉ đến cache. Nếu như phải sử dụng một script tự động để làm việc này khi người dùng đăng nhập vào hệ thống thì sử dụng transparent proxy sẽ laoij bỏ hoàn toàn được quá trình cấu hình này.

Phương pháp này sẽ giúp ta tránh phải cấu hình trình duyệt người dùng, cache được cài đặt như một transparent proxy bằng cách đặt nó trên đường kết nối internet.

Hình 2-7: Cài đặt cache như một transparent proxy

Ta thấy rằng, cache được cài đặt ở giữa đường truyền internet, do đó nó có khả năng ngắt kết nối tới server và phục vụ người dùng bằng dữ liệu mà nó có, trong trường hợp dữ liệu người dùng truy xuất không có trong cache, nó sẽ chuyển đến origin server để tìm và trả về cho người dùng. Người dùng sẽ không biết rằng có một bộ nhớ cache được cài đặt giữa họ với server, tuy nhiên phương pháp này sẽ gặp phải vấn đề về khả năng mở rộng và khả năng có sẵn. Với cách cài đặt như vậy, không thể lắp quá một bộ nhớ cache trên một đường truyền internet và cache này trở thành SPOF, nếu nó bị dơn, kết nối sẽ bị down hoàn toàn, hơn nữa cách cài đặt này sẽ khinn cho người quản trị không thể bảo trì và nâng cấp cache mà không ngừng hay gián đoạn hoạt động của hệ thống.

Bằng cách sử dụng một bộ cân bằng tải để thực thi chuyển hướng transparent cache (transparent-cache switching), ta có thể đơn giản hóa cách cài đặt transparent- proxy cache, bộ cân bằng tải phải được cấu hình bằng các biện pháp đổi hướng luồng dữ liệu (traffic-redirection policy) nhằm đổi hướng tất cả các luồng dữ liệu TCP với cổng đích là 80 đến cache. Các biện pháp này chỉ được dùng cho các luồng

Điều này rất quan trọng vì nếu như một cache không có đối tượng nó sẽ tiếp thục gửi request đến server gốc và lệnh này sẽ lại chạy lại chạy qua bộ cân bằng tải một lần nữa. lúc này, bộ cân bằng tải không được chuyển hướng request này ngược lại cache mà phải forward đến server gốc.

Hình 2-8: Cân bằng tải cho transparent-proxy cache

Với việc sử dụng transparent cahe switching, bộ cân bằng tải có thể dễ dàng thực hiện “health check” nhằm kiểm tra ngay lập tức bất cứ hỏng hóc nào. Nếu như cache bị hỏng, bộ cân bằng tải chỉ cần hoạt động đơn giản như một switch, chuyển hướng luồng dữ liệu theo đường đi của nó, người dùng sẽ vẫn kết nối internet bình thường, tuy nhiên tốc độ sẽ bị giảm dần vì không có cache. Nhưng điều quan trọng là người dùng sẽ không bị ngắt kết nối internet nữa vì cache không còn nằm trên đường truyền, kết nối sẽ chỉ bị ngắt khi bộ cân bằng tải bị hỏng. Nhưng do bộ cân bằng tải hoạt động như một switch nên khả năng hỏng của nó là thấp hơn cache rất nhiều.

Khác với forward proxy hoạt động như một proxy cho người dùng gửi yêu cầu đến server, Reverse Proxy hoạt động như một proxy cho server, như thể hiện trong hình dưới đây. Cài đặt server proxy ở phía trước của Web Server và phải cấu hình DNS để tên của website chỉ vào IP của proxy cache chứ không phải của Web Server, như vậy khi kết nối, nếu đối tượng có trong cache, nó sẽ trả về cho người dùng, ngược lại nó sẽ yêu cầu vào trang web server và trả kết quả về sau đó. Lúc này reverse-proxy cache đứng ở vị trí giống như một bộ cân bằng tải dùng để tăng tốc độ phía server hay giảm thời gian đáp ứng của server đến với người dùng.

Hình 2-9: Cài đặt cache như một reverse-proxy

Một phương pháp khác để cân bằng tải Web Server là phương pháp cài đặt bộ cân bằng tải kết hợp với nhiều reverse-proxy cache. Một bộ cân bằng được đặt trước caches và định nhĩa một địa chỉ IP ảo VIP cho bộ cân bằng tải. Sau đó hướng

nó đến từng reverse-proxy cache trên những cổng ứng dụng riêng biệt đang được cache, chẳng hạn như HTTP, FTP. Bộ cân bằng tải lúc này sẽ cân bằng tải cho các Web Server và phân bố yêu cầu từ phía người dùng đến các cache này theo một thuật toán phân tải nào đó, ví dụ như round-robin hoặc băm theo một số giá trị.

Hình 2-10: Bộ cân bằng tải cho reverse proxy caches

Với các website toàn cầu, máy server được đặt ở khắp nơi trên thế giới, các bộ cache cũng như vậy, chúng không nhất thiết phải được cài đặt ngay trước web server mà có thể được cài đặt bất cứ mọi nơi trên thế giới. chẳng hạn như Web Server có thể đặt ở NewYork, nhưng cache lại được đặt ở Singapore, London.

• Transparent Reverse Proxy:

Trong trường hợp sử dụng forward proxy thì cần phải cấu hình trình duyệt của người dùng để chỉ đến forward proxy cache. Cũng giống như vậy trong trường hợp của reverse proxy, ta phải cấu hình cho DNS chỉ đến reverse proxy. Nếu như không muốn thay đổi DNS entry và sau reverse proxy là rất nhiều wer server, cache sẽ phải phân phối yêu cầu vào trong các server này và sẽ gặp phải trường hợp cân bằng tải. Hơn nữa, nếu một công ty cung cấp hosting chỉ muốn cung cấp tính năng tăng

tốc server như một tính năng cao cấp dành riêng cho những khách hàng đặc biệt của họ thì việc sử dụng transparent reverse proxy chính là giải pháp cuối cùng.

Transparent reverse proxy được mô tả trong hình dưới đây, một bộ cân bằng tải được đặt ở phía trước các web server, một tập các cache được cài đặt theo reverse-proxy cache. Nhiệm vụ cân bằng tải được đẩy cho bộ cân bằng tải và như vậy cache sẽ không phải chịu trách nhiệm phân phối request nữa. Khi khách hàng đặc biệt kết nối và sử dụng dịch vụ đặc biệt, nhà cung cấp dịch vụ có thể cấu hình riêng cho địa chỉ IP ảo của khách hàng này trên bộ cân bằng tải sao cho tất cả các luồng dữ liệu được gửi đến trên cổng 80 sẽ được chuyển tiếp đến cache. Nếu cache hỏng, bộ cân bằng tải chỉ việc chuyển thẳng yêu cầu vào các web server. Luồng dữ liệu được mô tả như sau:

[1] Nếu bộ cân bằng tải nhận ra đây là địa chỉ IP của khách hàng đặc biệt, nó sẽ chuyển yêu cầu vào cache.

[2] Nếu cache miss hoặc yêu cầu cho các ngữ cảnh động, cache sẽ gửi yêu cầu ngược lại cho bộ cân bẳng tải. Bộ cân bằng tải sẽ gửi yêu cầu đến server.

[3] Server gửi dữ liệu trả về cho cache. [4] Cache trả lại dữ liệu cho người dùng.

Hình 2-11: Transparent-revserse proxy caches b) Các phương pháp cân bằng tải cho caches

Cân bằng tải cho cache và cân bằng tải cho server là rất khác nhau. Đối với cân bằng tải cho server, bộ cân bằng tải tìm cách để tìm ra server đang có tải nhẹ nhất và đẩy request về server đó. Trong cân bằng tải cache, điều này phụ thuộc vào content đang có trong cache nhằm đạt được tỉ lệ cache-hit cao nhất. Khi yêu cầu đầu tiên được gửi đến chưa có trong cache 1, nếu như cùng một yêu cầu nào đó từ phía người dùng đến lần thứ 2 sẽ là không cần thiết nếu như dữ liệu server lại được đẩy xuống cache 2 vì dữ liệu đã có sẵn ở cache 1. Do đó, cần phải có cơ chế để nhận biết rằng dữ liệu đã tồn tại tròn cache nào đó, chỉ cần lấy ở đó và trả về cho người dùng. Như vậy sẽ tăng tỉ lệ cache-hit và tốc độ trả về cho người dùng. (adsbygoogle = window.adsbygoogle || []).push({});

Tuy khác nhau về nguyên lý nhưng cũng có nhiều phương pháp để cân bằng tải cho cache khá giống với cân bằng tải cho server. Sau đây là một số phương pháp cân bằng tải cache thường được dùng:

• Sử dụng hàm băm đơn giản (Simple Hashing):

Bộ cân bằng tải sẽ tính toán một giá trị bằng cách sử dụng một hàm băm dựa trên một tập các nhân tố như giá trị địa chỉ IP nguồn, giá trị địa chỉ IP đích, giá trị cổng TCP/UDP nguồn và giá trị cổng TCP/UDP đích. Sau đó sử dụng giá trị này để tính toán xem cache nào là cache sẽ nhận được yêu cầu.

Một phương pháp để thực hiện việc này đó là sử dụng hàm băm đơn giản. Một phép toán số học giống như phép cộng bytes trên các nhân tố được chọn sẽ cho ra kết quả là giá trị 1 byte X nằm trong khoảng (0-255). Lấy X chia cho N (với N là số cache hiện có) sẽ được số dư nằm trong khoảng (0->N-1) và số dư này sẽ chỉ định là cache nào sẽ được chọn để gửi yêu cầu. Một số điểm cần lưu ý trong phương pháp này là:

+ Nếu như sử dụng địa chỉ IP đích làm giá trị băm, tất cả các yêu cầu tới cùng một web server sẽ được cho vào một cache duy nhất vì địa chỉ đích không thay đổi nên giá trị băm luôn không đổi.

+ Cần phải cân bằng trong việc chọn nhân tố cho hàm băm, nếu như chỉ chọn địa chỉ IP đích làm giá trị băm sẽ dẫn đến mất cân bằng. Thực vậy, giả sử 80% yêu cầu đều cùng một server, 20% vào các server khác, trong khi đó chúng ta có 3 cache. Như vậy 80% số yêu cầu sẽ vào cùng một cache do cùng địa chỉ IP đích, nên cân bằng tải cho cache sẽ không hiệu quả.

+ Khi một cache bị hỏng, sẽ có một phép tính toán lại với N-1 cache còn lại, nhằm đảm bảo cho yêu cầu không bị đẩy vào một cache không tồn tại.

Trong phương pháp simple hashing, không quan tâm đến trạng thái cache do đó nó còn được gọi là stateless load balancing và chắc chắn sẽ có phương pháp sateful load balancing hoạt động hiệu quả hơn nhiều. Phương pháp này quan tâm đến tải hiện thời đang có của cache, từ đó tính toán nhằm đưa ra cache phù hợp nhất để nhận yêu cầu, tuy nhiên nó sẽ không tránh được và sẽ bị lặp lại dữ liệu trong các bộ cache. Có hai phương pháp thực hiện cân bằng tải stateful, đó là Hash Buckets và URL hashing.

• Hash Buckets:

Phương pháp này sẽ giúp chúng ta loại bỏ được các điểm yếu của simple hashing. Hàm băm sẽ vẫn tính toán một giá trị băm dựa trên một số các nhân tố chẳng hạn như giá trị địa chỉ đích. Điểm khác ở đây là thuật toán băm sẽ được dùng để tính ra một giá trị băm giữa (0-H), trong đó H là số xô băm (Buckets). Nếu như H=255, như vậy sẽ cần một giá trị 1 bytes giữa (0-255), chúng ta sẽ có simple hashing. Nếu như giá trị H càng cao, thuật toán phân tải sẽ càng chính xác, H=1024 sẽ hoạt động tốt hơn H=255.

Khi khởi tạo, các buckets không được chỉ định cache giống như trong hình. Tại thời điểm nhận được kết nối đầu tiên (TCP SYN packet), giá trị hash sẽ rơi vào một bucket chưa được chỉ định, bộ cân bằng tải sẽ sử dụng một trong các thuật toán cân bằng tải để chỉ định một cache cho server này, chẳng hạn như sử dụng thuật toán “least connection” chỉ định cache đang chịu tải nhẹ nhất trong cụm caches cho bucket (bucket 4 đến cache c3). Tất cả các phiên và các gói dữ liệu sau này có giá trị hash 4 này sẽ đều được chuyển đến cache c3. Phương pháp này đòi hỏi bộ cân bằng tải phải theo dõi được tải của các cahe để chuyển có thể chỉ định chúng cho bucket nào tại thời điểm nhận được một giá trị băm mới.

Hình 2-12: Phương pháp hash buckets dùng trong caching

Nếu như một cache bị hỏng hoặc được gỡ ra khỏi cụm để bảo trì, các hash bucket đã được chỉ định cho cache này sẽ được chỉ định lại, trong khi đó các cache khác sẽ không bị ảnh hưởng. Bộ cân bằng tải sẽ chỉ định cache mới cho hash bucket này dựa trên tải của các cache tại thời điểm đó. Kết quả là tải của cache bị hỏng sẽ được chia ra cho các cache đang hoạt động mà không ảnh hưởng đến hoạt động của toàn bộ hệ thống.

Vì hàm băm hoạt động dựa trên địa chỉ IP và các cổng nên phương pháp này chỉ có thể giảm thiểu được việc lặp lại dữ liệu ở một phần nào đó. Tuy nhiên

phương pháp này sẽ giúp phân tải tốt hơn Simple Hashing. Trong Simple Hashing, nếu một cache không hoạt động, bộ cân bằng tải cần phải phân chia tải ở cache này vào trong các cache còn lại, nó sẽ làm ngắt quãng toàn bộ việc phân tải ở tất cả các cache. Trong khi đó sử dụng Hashing Buckets, bộ cân bằng tải chỉ cần chỉ định lại cache cho những bucket đã được chỉ định cho cache không hoạt động, vì vậy không

Một phần của tài liệu NGHIÊN CỨU KỸ THUẬT NETWORK LOAD BALANCING TRONG HỆ THỐNG MẠNG LINUX (Trang 30 - 42)