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