Tăng tốc truy cập Internet bằng các mẫu refresh của Squid

Solomon Asare

Quản trị mạng - Sự hạn chế về băng thông vẫn là một vấn đề đối với rất nhiều người khi kết nối Internet. Tuy nhiên bạn có thể cải thiện băng thông có sẵn bằng cách cài đặt Squid caching proxy server trên mạng của mình và sau đó điều chỉnh một số các tham số cấu hình để tăng tốc độ hit byte của bạn, cài đặt này có thể cho phép bạn tăng được 30-60% hiệu quả trong việc sử dụng băng tần.

Squid có thể được điều chỉnh để thực hiện những nhu cầu cần thiết. Phiên bản ổn định nhất có ít nhất 249 tham số có khả năng cấu hình. File cấu hình mang đậm tính giải thích nằm trong /etc/squid.conf với hơn 4.600 dòng. Tất cả các thiết lập này đều có thể được thay đổi trong file này.

Bạn cần một cache lớn không bị lấp đầy ít nhất một tuần, nên cho phép đến thời lượng khoảng 1 tháng. Kích cỡ thực sẽ phụ thuộc vào lưu lượng trên mạng. Kích thước lưu trữ của bạn càng lớn thì khả năng đối tượng ai đó yêu cầu cho sẽ nằm trong cache của bạn lớn hơn.

Để bộ nhớ được yêu cầu cho hệ điều hành và Squid có thể chạy, bạn cần phải có bộ nhớ tối thiểu khoảng 1% kích thước của cache để lưu giữ cơ sở dữ liệu của cache trong bộ nhớ. Cho ví dụ, với cache có 100GB không gian trống, bạn sẽ cần khoảng 1G RAM, thêm vào đó là 100MB cho hệ điều hành và Squid.

Kích thước tối đa mặc định cho các đối tượng có thể được lưu bởi Squid là 4MB. Ngày nay, kích thước này là quá thấp đối với những file lớn trên Internet. Nếu máy khách của bạn download rất nhiều các file video và các gói phần mềm, bạn có thể tăng kích thước này lên thêm một con số, chẳng hạn như 100MB chẳng hạn.

Refresh pattern sẽ xác định những gì được lưu và đã lưu từ cache. Lý tưởng,bạn sẽ muốn squid của mình thực hiện theo các hướng các máy chủ web đang phục vụ các nội dung để xác định những gì có thể lưu và lưu bao lâu. Các hướng được thiết lập như các header HTTP đã xử lý và được hiểu bởi Squid. Tuy nhiên, các hướng được cho bởi hầu hết các máy chủ hoàn toàn mặc định của các máy chủ web và không sinh lời trong việc tiết kiệm băng thông.

Refresh patterns có định dạng:

refresh_pattern [-i] regex min percent max [options]

Ở đây min và max là các giá trị thời gian tính bằng phút và phần trăm. Các tùy chọn ở đây là:

  • override-expire – bỏ qua header hết hiệu lực từ Web server.

  • override-lastmod – bỏ qua header ngày thay đổi cuối cùng từ Web server.

  • reload-into-ims – một yêu cầu reload từ máy khách được chuyển đổi thành yêu cầu If-Modified-Since.

  • ignore-reload – Một no-cache của máy khách hoặc chỉ thị "reload từ máy chủ ban đầu". Yêu cầu có thể được thỏa mãn từ cache nếu có sẵn.

  • ignore-no-cache – chỉ thị no-cache từ Web server (máy chủ làm cho đối tượng không có khả năng lưu nhớ- non-cacheable) được bỏ qua.

  • ignore-no-store – chỉ thị no-store từ Web server (máy chủ làm cho đối tượng không có khả năng lưu nhớ) được bỏ qua.

  • ignore-private – Chỉ thị riêng từ Web server (máy chủ làm cho đối tượng không có khả năng lưu nhớ) được bỏ qua

  • ignore-auth – các đối tượng yêu cầu sự thẩm định là non-cacheable. Tùy chọn này sẽ ghi đè các hạn chế này.

  • refresh-ims –yêu cầu refresh từ máy khách được chuyển đổi thành một yêu cầu If-Modified-Since.

Tra cứu file cấu hình của bạn để xem xem tùy chọn nào trong số các tùy chọn này hiện hữu trong phiên bản Squid của bạn.

Refresh các mẫu đang có hiệu lực nếu không có header hết hạn từ máy chủ gốc, hoặc mẫu refresh của bạn có một tùy chọn ghi đè ngày hết hạn. Cho ví dụ:

refresh_pattern -i \.gif$ 1440 20% 10080.

Điều này có nghĩa:

  • Nếu không có header ngày hết hạn thì tất cả các đối tượng có đuôi .gif hoặc viết hoa là .GIF (đuôi của các file ảnh) thì:

  • Nếu tuổi (khoảng thời gian đối tượng nằm trên máy chủ cache của bạn) ít hơn 1.440 phút thì coi nó còn ở trạng thái “fresh” và đáp ứng nó cũng như stop.

  • Trong trường hợp tuổi của đối tượng lớn hơn 10.080 phút, sẽ coi nó thuộc về trạng thái cũ và khi đó sẽ phải vào máy chủ gốc để tìm kiếm một copy mới và stop.

  • Trong trường hợp độ tuổi của đối tượng nằm giữa giá trị min và max, sử dụng lm-factor để phân biệt tình trạng fresh của đối tượng. lm-factor chính là tỉ số của tuổi đối tượng trên máy chủ cache với thời gian bắt đầu từ tạo hoặc thay đổi một đối tượng trên máy chủ gốc tính theo tỉ lệ phần trăm. Vì vậy nếu đối tượng được tạo 10.000 phút cách đây trên máy chủ gốc và nó đã lưu trên máy chủ cache khoảng 1.800 phút (độ tuổi) thì lm-factor sẽ là 1,800/10,000 = 18%.

  • Nếu lm factor nhỏ hơn 20% thì đối tượng được xem như còn ở trạng thái fresh; khi đó đáp ứng nó và stop

  • Còn trong trường hợp còn lại sẽ là trạng thái quá hạn, khi đó sẽ tìm một copy fresh từ máy chủ gốc.

Với các đối tượng thay đổi nhưng vẫn giữ cùng một tên file, chẳng hạn như các đoạn video, image, âm thanh, hay các file thực thi, bạn có thể thay đổi mẫu refresh để coi chúng vẫn ở trạng thái fresh trên Squid trong một khoảng thời gian dài hơn, tăng khả năng hit có thể. Cho ví dụ, bạn có thể thay đổi mẫu refresh ở trên thành:

refresh_pattern ^ftp: 1440 20% 10080

refresh_pattern ^gopher: 1440 0% 1440

refresh_pattern -i \.(gif|png|jpg|jpeg|ico)$ 10080 90% 43200 override-expire ignore-no-cache ignore-no-store ignore-private

refresh_pattern -i \.(iso|avi|wav|mp3|mp4|mpeg|swf|flv|x-flv)$ 43200 90% 432000 override-expire ignore-no-cache ignore-no-store ignore-private

refresh_pattern -i \.(deb|rpm|exe|zip|tar|tgz|ram|rar|bin|ppt|doc|tiff)$ 10080 90% 43200 override-expire ignore-no-cache ignore-no-store ignore-private

refresh_pattern -i \.index.(html|htm)$ 0 40% 10080

refresh_pattern -i \.(html|htm|css|js)$ 1440 40% 40320

refresh_pattern . 0 40% 40320

Đôi khi có các máy chủ gốc, chẳng hạn như youtube.com, thực hiện mọi công việc, do đó làm cho chúng trở nên khó khăn và không thể cho bạn có khả năng cache nội dung của nó. Các tùy chọn ở trên sẽ giúp bạn khắc phục được những hạn chế đó.

Các mẫu refresh được tương xứng (match) với tất cả các yêu cầu theo thứ tự từ trên đỉnh cho đến khi có một rule tương xứng. Rule cuối cùng này là một “catch-all” và sẽ “match” với bất cứ yêu cầu nào không được thỏa mãn bởi các rule nào ở trên nó. Cũng có các rule mặc định “catch-all” cho các giao thức khác nhau như FTP và gopher tại phần trên của danh sách để được miễn các giao thức đó từ các mẫu bên dưới chúng.

Mặc định, Squid sẽ không lưu các nội dung mang tính động. Các nội dung mang tính động này được phân biệt bởi việc “match” với "cgi-bin" hoặc "?". Tính năng này được kích hoạt thông qua các thiết lập "hierarchy_stoplist" và "cache deny" theo thứ tự các phiên bản của Squid. Trong các phiên bản gần đây, bắt đầu từ 3.1, tính năng này được kích hoạt thông qua một mẫu refresh chẳng hạn như refresh_pattern (/cgi-bin/|\?) 0 0% 0. Mẫu này cho phép bạn chỉ định các site đáp ứng các nội dung mang tính động có thể làm cho có khả năng cache trong các rule khác. Cho ví dụ, bạn có thể thiết lập một mẫu refresh như:

refresh_pattern -i movies.com/.* 10080 90% 43200

refresh_pattern (/cgi-bin/|\?) 0 0% 0

Sau đó, nếu nội dung từ movies.com được đáp ứng với "?" trong URL của chúng thì phần nội dung sẽ vẫn được cache nếu tất cả các điều kiện cần thiết vẫn hội tụ đủ.

Với các phiên bản trước đấy hơn của Squid, bạn sẽ phải định nghĩa một danh sách điều khiển truy cập (ACL) cho các nhà cung cấp nội dung mà bạn muốn tạo một ngoại lệ cho, sử dụng cache accept để miễn nó trước khi có rule cache deny. Ví dụ dưới đây là từ Squid wiki:

# Let the client's favourite video site through

acl youtube dstdomain .youtube.com

cache allow youtube

# Now stop other dynamic stuff being cached

hierarchy_stoplist cgi-bin ?

acl QUERY urlpath_regex cgi-bin \?

cache deny QUERY

Squid tạo rất nhiều yêu cầu DNS, mỗi một dns yêu cầu một yêu cầu http. Cài đặt một máy chủ lưu trữ (caching) DNS trên máy chủ của bạn và cho Squid sử dụng nó để giảm các yêu cầu DNS của bạn. Đây thực sự là một cách làm rất hữu dụng.

Các site giống windowsupdate.com của Microsoft, đây là site mà hầu như tất cả các máy tính Windows đều cập nhật cho hệ điều hành của họ, bị vây quanh bởi hầu hết các site tiêu tốn nhiều băng tần trên một số mạng. Tuy nhiên, chúng không có khả năng lưu nhớ (cache) vì chúng phải cung cấp các đáp trả từng phần (http trả về mã 206), Squid hiện không lưu nhớ. Ở đâu bạn có được sự điều khiển trên các máy khách, bạn có thể cài đặt Update Server của Microsoft để quản lý việc cache cho windowsupdate. Nếu bạn không thể sử dụng Update Server, bạn có thể sử dụng thao tác delay của Squid – một công nghệ quản lý băng tần – để hạn chế phần băng tần mà windowsupdate sẽ tiêu tốn trong suốt thời gian cao điểm của bạn. Trong trường hơp này các máy khách sau đó sẽ phải online trong suốt các giai đoạn không cao điểm để hoàn tất các nâng cấp của chúng.

Bên dưới, chúng tôi có cấu hình một delay pool toàn cục ở tốc độ 64Kbps (8KBps). Lưu lượng của miền đích là windowsupdate.com trong suốt gian đoạn cao điểm 10:00-16:00 sẽ được hạn chế là 64Kbps.

acl winupdate dstdomain .windowsupdate.com

acl peakperiod time 10:00-16:00

delay_pools 1

delay_class 1 1

# 64 Kbit/s

delay_parameters 1 8000/8000

delay_access 1 allow winupdate peakperiod

Sau khi tạo thay đổi như cách làm ở trên, tốc độ hit byte của Squid đã tăng lên từ 8% đến khoảng 26-37%. Nếu bạn đạt được vào khoảng 33% thì điều đó có nghĩa rằng một phần ba trong tổng số lưu lượng đang đến từ cache của bạn, không phải đến từ các liên kết chậm hơn trong Internet. Để kiểm tra và phân tích các bản ghi để phân định rõ hiệu suất của Squid bạn có thể sử dụng squid3-client và calamaris.

Thứ Ba, 09/12/2008 13:08
4,54 👨 5.180
0 Bình luận
Sắp xếp theo