ข่าว: ข่าวประกาศ

  • 25 พฤศจิกายน 2024, 22:56:53

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ผู้เขียน หัวข้อ: Squid Cache Video Youtube  (อ่าน 22372 ครั้ง)

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 3820
    • ดูรายละเอียด
    • อีเมล์
Squid Cache Video Youtube
« เมื่อ: 14 พฤศจิกายน 2008, 20:12:43 »
เกริ่นนำกันก่อนนะครับ ก่อนจะเข้าเรื่อง

ก่อนอื่นต้องอธิบายก่อนว่า ทำไม Squid ถึงไม่เก็บ Cache Video ของ Youtube

เนื่องจากในการเข้า web youtube นั้น url ของ youtube ที่ใช้เก็บ video ไฟล์ จะมีการเปลี่ยนแปลงทุกครั้ง

ถึงแม้จะเข้าชม ไฟล์ video อันเดิมก็ตาม

เช่น

1226635657.319  46941 192.168.200.101 TCP_MISS/200 8020790 GET http://58.147.1.199/youtube/1/0NPYO9r7w9Q.34?ivit=5772&original=www.youtube.com/get_video?video_id=0NPYO9r7w9Q&t=OEgsToPDskIYtusBMJfotlXByGSkbxWq&el=detailpage&ps=&fmt=34 - DIRECT/58.147.1.199 video/flv

1226636671.937  39267 192.168.200.101 TCP_MISS/200 8020790 GET http://58.147.1.199/youtube/1/0NPYO9r7w9Q.34?ivit=6794&original=www.youtube.com/get_video?video_id=0NPYO9r7w9Q&t=OEgsToPDskKFVmH7tmlIN8VwmVVf7sLx&el=detailpage&ps=&fmt=34 - DIRECT/58.147.1.199 video/flv

1226637272.374  41802 192.168.200.101 TCP_MISS/200 8020790 GET http://58.147.1.199/youtube/1/0NPYO9r7w9Q.34?ivit=7392&original=www.youtube.com/get_video?video_id=0NPYO9r7w9Q&t=OEgsToPDskLDiJqHQFM5IcaNf1DXktWN&el=detailpage&ps=&fmt=34 - DIRECT/58.147.1.199 video/flv

จากตัวอย่างจะเห็นว่า video_id และขนาดไฟล์ จะเป็นอันเดียวกัน  แต่ตัวพารามิเตอร์ t จะแตกต่างกันทุกครั้งที่เข้าชม

และ Youtube ก็ยังมี url ในรูปแบบอื่น ๆ ที่คล้าย ๆ กัน แตกต่างกันในเรื่องของ signature บ้าง

เช่น

1226641046.961  68113 192.168.200.101 TCP_MISS/200 10205115 GET http://ash-v225.ash.youtube.com/get_video?video_id=X2LaIAwDpdg&ip=222.1
23.139.157&signature=1B8ABF039BD23F6EBEB35B3494C824EA2CFF56B0.
12E2A792F9A5C17B0E7CD06B4B5129EF69B57CD6&sver=2&expire=1226662740&key=
yt4&ipbits=2 - DIRECT/64.15.119.178 video/flv

1226641324.612 105734 192.168.200.101 TCP_MISS/200 9042408 GET http://v10.cache.googlevideo.com/get_video?origin=ash-v187.ash.youtube.c
om&video_id=ZGNgE5zz3Eg&ip=222.123.139.157&signature=B1E361E95586BB6D9312B77E055D3F05E60735D2.
7C20F38BA40C826ED42870B16865D65C763125B2&sver=2&expire=1226662981&key=yt4&ipbits=2 - DIRECT/74.125.96.84 video/flv

1226639361.780 149854 192.168.200.101 TCP_MISS/200 13743131 GET http://sjc-v146.sjc.youtube.com/get_video?video_id=nH-ly_HIfVs&ip=222.1
23.139.157&signature=DDD840A0223D17F368780D14CDE045CB053B605F.
B4CB5B2C6E7C8D83B8CA7A53F43DF42031F35A6C&sver=2&expire=1226660973&key=
yt4&ipbits=2 - DIRECT/64.15.125.239 video/flv

ดังนั้นจึงทำให้ Squid เข้าใจว่า เป็นไฟล์คนละไฟล์กัน จึงทำการโหลดใหม่ทุกครั้งที่มีการเข้า video ไฟล์ดังกล่าว

ในการที่จะให้ Squid เก็บไฟล์ดังกล่าว จึงจะต้องทำให้ Squid รับรู้ได้ว่า url ทั้งสองนี้ ระบุไฟล์ที่เหมือนกัน

สิ่งที่สามารถระบุได้ว่า video ไฟล์ ของ youtube นั้น เป็นไฟล์เดียวกันหรือไม่ ก็คือ พารามิเตอร์ video_id ที่อยู่ใน url นั่นเอง

ดังนั้นก็ได้มีความพยายามหารูปแบบ วิธีการต่าง ๆ ในการจะนำมาระบุให้ Squid รู้ว่า url นั้นอ้างอิงไฟล์เดียวกัน
และไม่ต้องไปดึงมาใหม่ ให้ดึงจาก cache ที่มีอยู่แทน
« แก้ไขครั้งสุดท้าย: 14 พฤศจิกายน 2008, 20:37:25 โดย admin »
<a href="http://www.hadyaiinternet.com/images/inetcafe.swf" target="_blank" rel="noopener noreferrer" class="bbc_link bbc_flash_disabled new_win">http://www.hadyaiinternet.com/images/inetcafe.swf</a>

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 3820
    • ดูรายละเอียด
    • อีเมล์
Re: Squid Cache Video Youtube
« ตอบกลับ #1 เมื่อ: 14 พฤศจิกายน 2008, 20:44:19 »
Reff :: http://ubuntuforums.org/showpost.php?p=6153907&postcount=2

วิธีการแรกที่ผมไปเจอและได้ศึกษามา ก็คือการใช้ url_rewrite (สามารถใช้ได้กับ squid 2.6 ขึ้นไป)

หลักการก็คือ ทำการดักจับ URL ที่เป็น url ของ video ไฟล์ youtube แล้วใช้ url_rewrite_program เป็นตัวเช็ค

ถ้าหาก url นั้นเป็นไฟล์ video ที่ยังไม่มีใน cache ก็ให้ทำการโหลดมาเก็บไว้

ถ้าหาก url นั้นเป็นไฟล์ video ที่อยู่ใน cache แล้ว ให้ทำการ rewrite url ใหม่ เพื่อให้ดึงจาก server (apache2 แทน)

วิธีการนี้ จะใช้วิธีการ url_rewrite  เช่น จาก url เดิมเป็น

http://www.youtube.com/get_video?video_id=0NPYO9r7w9Q&t=OEgsToPDskIOgEUn33QfGdtWxdqpBQN7&el=detailpage&ps=&fmt=34

ถ้าพบว่ามีอยู่ใน cache แล้ว จะถูก rewrite เป็น

http://192.168.200.1/video_cache/youtube/0NPYO9r7w9Q.flv?video_id=0NPYO9r7w9Q&t=OEgsToPDskIOgEUn33QfGdtWxdqpBQN7&el=detailpage&ps=&fmt=34

แทน จึงทำให้ไม่มีการดึงใหม่จากอินเตอร์เน็ต

หลักการเหล่านี้ สามารถนำไปประยุกต์ใช้ในการเก็บ patch เกมส์ได้นะครับ
« แก้ไขครั้งสุดท้าย: 14 พฤศจิกายน 2008, 22:50:08 โดย admin »
<a href="http://www.hadyaiinternet.com/images/inetcafe.swf" target="_blank" rel="noopener noreferrer" class="bbc_link bbc_flash_disabled new_win">http://www.hadyaiinternet.com/images/inetcafe.swf</a>

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 3820
    • ดูรายละเอียด
    • อีเมล์
Re: Squid Cache Video Youtube
« ตอบกลับ #2 เมื่อ: 14 พฤศจิกายน 2008, 20:47:46 »
Reff :: http://wiki.squid-cache.org/ConfigExamples/DynamicContent/YouTube/Discussion

วิธีที่สอง เป็นการใช้ storeurl_rewrite (ซึ่งสามารถใช้ได้ตั้งแต่ squid 2.7 ขึ้นไป)

สำหรับแบบที่สองนี้ หลักการจะคล้าย ๆ กับแบบแรก ก็คือใช้หลักการปรับเปลี่ยน URL เหมือนกัน แต่วิธีการนี้จะใช้

Internal Cache ของ Squid เอง ซึ่งจะต่างกับวิธีแรก ที่ใช้ apache2 มาช่วยในการเก็บ cache

และใช้การเปลี่ยน url ในการเก็บ(store)ใน cache โดยการตัดค่าตัวแปรที่ไม่จำเป็นออก ในการเก็บ

ยกตัวอย่างเช่น  url ในการเรียกไฟล์ คือ
http://58.147.1.199/youtube/1/0NPYO9r7w9Q.34?ivit=5772&original=www.youtube.com/get_video?video_id=0NPYO9r7w9Q&t=OEgsToPDskIYtusBMJfotlXByGSkbxWq&el=detailpage&ps=&fmt=34

แต่ URL ที่เก็บอยู่ใน cache จะเป็น (ผ่านกระบวนการ storeurl_rewrite)

squid://videos.youtube.INTERNAL/ID=0NPYO9r7w9Q

เมื่อมีการเรียก ไฟล์อีกครั้ง (video_id อันเดิม แต่ url จะเปลี่ยน)

http://58.147.1.199/youtube/1/0NPYO9r7w9Q.34?ivit=6794&original=www.youtube.com/get_video?video_id=0NPYO9r7w9Q&t=OEgsToPDskKFVmH7tmlIN8VwmVVf7sLx&el=detailpage&ps=&fmt=34

กระบวนการ storeurl_rewrite ก็จะทำการแปลง ได้เป็น

squid://videos.youtube.INTERNAL/ID=0NPYO9r7w9Q

ซึ่งเมื่อเทียบใน cache แล้ว จะตรงกัน ถ้ามี refresh pattern กำหนดให้ cache ก็จะเกิดการ HIT เกิดขึ้น

วิธีการนี้จะง่าย และสะดวก เนื่องจากใช้ Internal Cache ของ Squid นั่นเอง

แต่จะต้องปรับแต่ง refresh pattern เพื่อกำหนดให้เก็บลง cache
« แก้ไขครั้งสุดท้าย: 14 พฤศจิกายน 2008, 23:53:11 โดย admin »
<a href="http://www.hadyaiinternet.com/images/inetcafe.swf" target="_blank" rel="noopener noreferrer" class="bbc_link bbc_flash_disabled new_win">http://www.hadyaiinternet.com/images/inetcafe.swf</a>

gudgeee

  • Customer Lv.1
  • Newbie
  • ***
  • กระทู้: 20
    • ดูรายละเอียด
Re: Squid Cache Video Youtube
« ตอบกลับ #3 เมื่อ: 17 พฤศจิกายน 2008, 19:10:08 »
งั้น คงต้องขอวิธี  จำกัด แบนวิท ของ web hi5  กับ youtube  แล้วกันนะครับ
ของ ผม เน็ต 2 mb  1  เส้น ไม่ว่าจะแก้ตรงไหนครับ ช่วยแนะนำด้วยครับ admin

fuckerboyd

  • Newbie
  • *
  • กระทู้: 8
    • ดูรายละเอียด
Re: Squid Cache Video Youtube
« ตอบกลับ #4 เมื่อ: 17 พฤศจิกายน 2008, 20:03:39 »
งั้น คงต้องขอวิธี  จำกัด แบนวิท ของ web hi5  กับ youtube  แล้วกันนะครับ
ของ ผม เน็ต 2 mb  1  เส้น ไม่ว่าจะแก้ตรงไหนครับ ช่วยแนะนำด้วยครับ admin

ทำ delay pool สิครับ บีบไฟล์ mp3 flv อะไรประมาณนี้ครับ ผมก็ใช้อยู่

gudgeee

  • Customer Lv.1
  • Newbie
  • ***
  • กระทู้: 20
    • ดูรายละเอียด
Re: Squid Cache Video Youtube
« ตอบกลับ #5 เมื่อ: 18 พฤศจิกายน 2008, 03:33:27 »
แบบนี้ พอได้ป่าวครับ 
acl pool1 src 0.0.0.0/0.0.0.0
acl pool2  url_regx -i  .flv
delay_pools 2
delay_class 1 2
delay_class 2 2
delay_access 1 allow pool1
delay_access 2 allow pool2
delay_parameters 1 -1/-1 102400/102400
delay_parameters 2 12800/12800  12800/12800

 หรือมีตัวอย่างบ้างมั้ยครับ ขอดูบ้างซิ

gudgeee

  • Customer Lv.1
  • Newbie
  • ***
  • กระทู้: 20
    • ดูรายละเอียด
Re: Squid Cache Video Youtube
« ตอบกลับ #6 เมื่อ: 18 พฤศจิกายน 2008, 18:39:35 »
หรือ  แบบนี้ดี
acl  delay_mime_type rep_mime_type video/flv application/download video/mpeg
acl pool1 src 192.168.200.101-192.168.200.154/255.255.255.255
acl pool2  url_regex -i hi5 youtube .flv .3gp .aac .ac3 .act .aif .aiff .amr .a$
delay_pools 2
delay_class 1 2
delay_class 2 2
delay_access 1 deny  all
delay_access 1 allow pool1
delay_access 2 allow delay_mime_type
delay_access 2 allow pool2
delay_parameters 1 -1/-1  102400/102400
delay_parameters 2 12800/12800  12800/12800

T@NR@K

  • ตัวแทนที่ได้รับการแต่งตั้ง
  • Hero Member
  • *****
  • กระทู้: 856
  • ทุกอย่างย่อมมีเหตุและผล
    • MSN Messenger - tonrak_ms@hotmail.com
    • ดูรายละเอียด
    • TONRAK Networks : เปิดร้านเน็ต เปิดร้านเกมส์ เปิดร้านอินเตอร์เน็ต ระบบ network ระบบ no hdd
Re: Squid Cache Video Youtube
« ตอบกลับ #7 เมื่อ: 18 พฤศจิกายน 2008, 23:36:19 »
มันก็ดีอยู่ครับ...
แต่มันก็ไม่ได้ทำให้โหลดเร็วอะไรนิครับ
ยิ่งจะทำให้ลูกค้ารู้สึกว่ามันโหลดช้า...