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]