Web Caching และ
Multi-Level Web Caching
แปลจาก
http://www.david-guerrero.com/papers/squid/squid.htm
Web Caching เป็นการปรับปรุงการการใช้งานอินเตอร์เน็ตให้เร็วขึ้นและประหยัดแบนด์วิดธ์ที่เรียกไปยังอินเตอร์เน็ต
ด้วยการใช้
Proxy Server
ที่ทำหน้าที่เก็บเว็บที่เคยเรียกแล้วไว้ใน Proxy Server
บทนำ
แม้ว่าหลายคนจะไม่รู้จักคำว่า
web caching
แต่จริง ๆ แล้วเขาเหล่านั้นเคยมีการใช้งาน web caching
ที่จัดการโดยตัว Browser แล้ว ซึ่งเบราเซอร์ส่วนใหญ่จะมีวิธีการเก็บเอกสารและข้อมูลต่าง
ๆ ที่ได้มาจาก web ไว้ในหน่วยความจำหรือ disk
ในแต่ละครั้งที่มีการคลิ๊กปุ่ม back ของเบราเซอร์เพื่อกลับไปดูหน้าเว็บที่เคยดูแล้ว
หน้าเว็บดังกล่าวจะได้มาจากหน่วยความจำซึ่งไม่จำเป็นต้องไปดึงมาจาก Web
Server อีก ลักษณะแบบนี้เป็นการทำ caching
ระดับแรก (first level of caching)
แนวคิดพื้นฐานของการทำ caching
คือการเก็บเอกสารที่ผู้ใช้คนหนึ่งได้เรียกใช้งานแล้วให้อยู่ในตำแหน่งที่สามารถใช้ร่วมกันได้
เพื่อไม่ให้ผู้ใช้คนที่สองที่ต้องการเรียกใช้งานเอกสารชุดเดียวกันไปเรียกโดยตรงจาก
origin server อีก
นั่นคือให้ผู้ใช้คนที่สองไปดึงเอกสารมาจากตำแหน่งร่วม (common place)
แทน
ซึ่งลักษณะดังกล่าวนี้เป็นสิ่งที่จำเป็นมากเมื่อองค์กรของคุณเป็นองค์กรขนาดใหญ่ที่อยู่ในยุโรป
และมีทราฟฟิกขาเข้าส่วนใหญ่มาจากอีกด้านหนึ่งของแอตแลนติกที่มีการเชื่อมโยงที่มีความเร็วต่ำ
ประโยชน์หลักของวิธีดังกล่าวนื้คือสามารถเรียกใช้งานเอกสารที่ต้องการจากเว็บได้อย่างรวดเร็วและลดทราฟฟิกที่จะออกไปยังอินเตอร์เน็ต
ซึ่งองค์กรขนาดกลางที่มีผู้ใช้ขนาด 50-100 เครื่อง การทำ
caching สามารถจะให้บริการได้ถึง 60%
ของ URL ที่ร้องขอจาก local cache
ความแตกต่างระหว่าง browser cache กับ
proxy-cache server ก็คือ browser cache
จะเป็นการ cache
สำหรับผู้ใช้คนเดียวและอยู่ในตำแหน่งที่เป็น final user workstation
ในขณะที่ proxy-cache
เป็นโปรแกรมที่ทำหน้าที่เป็นตัวแทนจำนวนมากของ web browser clients
โดยอนุญาติให้ client
เครื่องหนึ่งอ่านเอกสารที่เคยถูกร้องขอโดยคนอื่นก่อนหน้านี้ ซึ่ง
proxy-cache server จะเป็น common server
ที่มักจะวางอยู่ระหว่าง local network กับ Internet
โดย browser ทั้งหมดจะร้องขอเอกสารจาก
proxy server รูปที่ 1
แสดงโครงสร้างของ proxy-cache server ชนิดนี้

รูปที่
1
Proxy-cache Server Network Configuration
proxy-cache ไม่เป็นเพียงทางออกสำหรับการแก้ปัญหาในเรื่องของแบนด์วิดธ์เท่านั้น แต่ยังเป็นสิ่งที่ต้องการเมื่อองค์กรต้องการไฟล์วอลล์เพื่อประกันความปลอดภัยของเครือข่าย ซึ่งในกรณีนี้ proxy-cache จะอยู่บน Server ที่ browser ของทุก clients สามารถเข้าถึงได้ แต่จะเป็นตัวแยกเครื่อง client ทั้งหมดออกจากเครือข่ายอินเตอร์เน็ต โดย Server แบบนี้จะต้องมี 2 network interfaces ที่ทำหน้าที่เป็น internal network กับ external network โดยการเข้ามาจากเครือข่าย Internet สามารถเข้าถึงได้เฉพาะ external network เท่านั้น รูปที่ 2 แสดงคอนฟิกดังกล่าวนี้ โดยการใช้งาน proxy-cache server แบบนี้ ควรจะอนุญาตให้เฉพาะเครือข่ายภายในเท่านั้นที่สามารถใช้งาน caching ได้

รูปที่ 2. Proxy-cache Network Configuration with Firewall
Multi-Level Web
Caching
อีกก้าวหนึ่งของความก้าวหน้าในการทำ
Web Caching คือคอนเซ็พท์การทำเป็นแบบลำดับชั้น
(cache hierarchy)
ซึ่งในการเชื่อมต่อใช้งานอาจจะมีการเชื่อมต่อที่เป็นลำดับชั้นและมี
proxy-cache server ตั้งแต่ 2 ตัวขึ้นไป โดย proxy-cache
หนึ่ง ๆ อาจจะมีบทบาทหน้าที่ที่ที่แตกต่างกันสองแบบในแต่ละชั้น
โดยจะขึ้นอยู่กับรูปแบบของเครือข่าย (network topology) ,
นโยบายของ ISP และทรัพยากรระบบ ซึ่ง cache
ที่เป็นแบบข้างเคียง (neighor(sibling) cache)
จะให้บริการเฉพาะ document
ที่มีอยู่ในเครื่องตัวเองแล้วเท่านั้น ส่วน cache
ที่อยู่ในลำดับเหนือกว่า (parent cache)
สามารถที่จะให้บริการได้ทั้งจากการดึงมาจาก cache ตัวอื่น ๆ
ที่อยู่ในลำดับสูงกว่าหรือจากแหล่งกำเนิด (Source)
ขึ้นอยู่กับว่า cache ตัวนี้มีการเชื่อมต่อไปยัง
parent ตัวอื่นอีกหรือไม่ หรือมี neighbor
cache อยู่ในระดับเดียวกันหรือไม่ โดย parent
cache ควรจะถูกใช้เมื่อไม่สามารถที่จะดึง document
จาก cache ในระดับเดียวกันได้แล้ว
การเลือก cache topology
ที่ดีเป็นสิ่งที่สำคัญมากเพราะสามารถลดทราฟฟิกบนเครือข่ายได้ องค์กรหนึ่ง ๆ
สามารถที่จะเลือกให้มีหลาย sibling cache
ในแต่ละหน่วยงานย่อย และให้มี parent cache เพียงหนึ่ง
parent cache
ไว้ในส่วนงานที่อยู่ใกล้กับเครือข่ายอินเตอร์เน็ต ซึ่ง parent cache
ดังกล่าวนี้สามารถจะคอนฟิกให้มีการร้องขอ document
จาก parent cache
ตัวอื่นที่อยู่เหนือกว่าได้เช่นที่ ISP
ข้อตกลงในการจัดตั้ง sibling cache หรือ parent
cache ระหว่างผู้ใช้บริการกับ ISP สามารถลดทราฟฟิกที่มีมากเกิน
(overload) ในส่วนของ link ได้
หรือจัดทำทราฟฟิกที่เป็น web
ผ่านเส้นทางอื่นที่ไม่ใช่ IP traffic ทั่วไป การทำ
web caching ควรจะพิจารณาในส่วนของ application-level,
วิธีการทำเราติ้ง ซึ่งใช้ ICP (Internet cache protocol)
เป็นโปรโคคอลหลัก รูปข้างล่าง เป็นตัวอย่างการจัดทำ multi-level web caching
ในองค์กร

Figure 3. Multi-level
Web Caching Organization
ICP คืออะไร
ICP (Internet Cache Protocol)
เป็นโปรโตคอลที่ใช้สำหรับการสื่อสารระหว่าง web caches เป็น
lightweight protocol ที่อยู่ในส่วนบนของ UDP
โดย ICP จะถูกใช้เพื่อหาตำแหน่งของ
web object ใน cache ที่อยู่ข้างเคียง
(neighboring caches) การถ่ายโอน object
ระหว่าง cache ส่วนใหญ่จะทำด้วย
TCP-based HTTP protocol แต่การตัดสินว่าจะดึง object
จากที่ไหนนั้นต้องใช้วิธีการที่ง่ายและรวดเร็ว
ใน cache หนึ่ง ๆ การหาตำแหน่งที่ดีที่สุดที่จะดาวน์โหลด
object ตัว cache จะส่ง ICP
request packet ไปยัง sibling cache และ
parent cache ทุกตัว แล้ว cache
เหล่านี้ก็จะ ส่ง ICP ตอบกลับมาด้วย HIT code
หรือ MISS code ซึ่ง HIT
หมายถึง cache ตัวนี้มี object
และตกลงที่จะให้บริการ ส่วน MISS
หมายถึงไม่มี object ที่ต้องการ ดังนั้น cache
ตัวที่เป็นผู้ร้องขอก็จะรูว่าใครมี object
ที่ตัวเองต้องการและมันจะเอาข้อมูลนี้รวมกับตัวประกอบอื่น ๆ เช่น
round-trip time หรือการตอบสนองในแต่ละครั้ง
เพื่อที่จะเลือกได้ว่าจะร้องขอผ่าน HTTP ไปยัง cache
ตัวไหน ถ้า cache ตอบกลับมาเป็น
MISS packet ตัว cache
ที่เป็นผู้ร้องขอก็จะทำการร้องขอ document จาก
parent cache กระบวนการร้องขอและตอบกลับ ICP (ICP
request/reply exchange) ควรจะเกิดขึ้นในช่วงสั้น ๆ
มิฉะนั้นจะทำให้เพิ่มเวลาแฝง (latency time) ให้กับ
browser แต่เวลาตรงนี้ผู้ใช้มักจะไม่สามารถสังเกตได้
ถ้า object ที่ได้ร้องขอผ่าน ICP
มีขนาดเล็กเพียงพอ object นี้ก็สามารถถูกรวมอยู่ใน
ICP HIT reply เหมือนกับ HTTP redirect
แต่การทำแบบนี้ไม่ค่อยมีกันมากนัก การใช้งาน ICP
ที่กล่าวมานี้จะใช้เมื่อระบบเครือข่ายเป็นแบบ multi-level cache
ที่ประกอบด้วย sibling cache และ
parent cache เท่านั้น ซึ่งการใช้งาน ICP
ไม่มีความจำเป็นสำหรับเครือข่ายในรูปที่ 1 และ 2 ในกรณีที่มี cache
เพียงตัวเดียวหรือในกรณีที่ cache
มีการร้องขอ document จาก higher-lever cache
ที่เหมือนกัน สิ่งที่ ICP
ไม่ต้องการก็เฉพาะ overhead เท่านั้น
การทำ
Multi-level Web Caching บน Squid
บน
Squid เราสามารถทำ
Multi-level Web Caching ได้ด้วยการคอนฟิกที่ไฟล์
/etc/squid/squid.conf โดยค่าที่ต้องเซ็ตมีชื่อว่า "cache_peer"
ซึ่ง การทำ cache_peer มี 2 แบบคือ
1. Parent Cache
เป็น cache ที่สามารถ get
เอกสารจาก cache
ตัวอื่นที่อยู่ในลำดับสูงกว่าได้หรือสามารถ get
เอกสารจากต้นทาง (source) ได้ ซึ่งการที่จะดึงจาก
cache ตัวไหนหรือจาก source จริง ๆ
เลยหรือเปล่านั้นจะขึ้นอยู่กับว่าเครือข่ายมี Parent cache
กี่ตัว หรือมี cache ที่อยู่ในระดับเดียวกัน
(neighbor) หรือไม่ การใช้งาน cache
ชนิดนี้ควรจะถูกใช้เมื่อไม่มีโอกาสที่จะ get เอกสารจาก
cache ที่อยู่ในระดับเดียวกันได้แล้ว
2. Sibling Cache
(อาจจะเรียกว่า neighbor) เป็น
cache ที่ให้บริการเฉพาะเอกสารที่มีอยู่ในเครื่องตัวเองเท่านั้น
นั่นคือ ถ้าเอกสารที่ถูกร้องขอไม่มีในเครื่องตังเองก็ใช้ไม่สามารถให้บริการได้
โดยรูปแบบการใช้คำสั่ง cache_peer จะเป็นดังนี้:
cache_peer hostname type
http_port icp_port
ตัวอย่างการใช้งานเช่น
cache_peer parent.foo.net parent 3128 3130
[proxy-only]
cache_peer sib1.foo.net sibling 3128 3130 [proxy-only]
cache_peer sib2.foo.net sibling 3128 3130 [proxy-only]