F5 อ่อนว่ะ - คอร์สนี้จะกลายเป็นตำนานของวงการ IT ไทย #F5อ่อนว่ะ

Quotes about the F5 class

บทความนี้เขียนขึ้นเพื่อแชร์ความคิด และประเด็นที่โดยส่วนตัวคิดว่าน่าสนใจ ไม่สามารถเขียนความรู้ที่ได้จากวันที่ไปอบรมมาได้หมดนะครับ วันนั้นนี่เปิดโลกมาก ใครอ่านบทความนี้แล้วสนใจอยากให้พี่เค้าเปิดเพิ่ม เชิญไปอ้อนพี่เค้าเองนะครับ 😛

เกริ่นนำ

เนื่องจากความที่ไม่เข้าใจว่าทำไมเว็บไทยของเราไม่สามารถรองรับผู้ใช้งานจำนวนมากๆ ได้อย่างที่ควรจะเป็น ทำไมบางเว็บแค่โดน F5 รัวๆ ก็ล่มแล้ว มันเกิดอะไรขึ้นกับบ้านเรานะ? พี่โดมจัดเต็มเปิดคอร์สที่ผมไม่คิดว่าจะเกิดขึ้นในเมืองไทยมาก่อน ถึงแม้ว่าในอนาคตจะมีแต่ก็ไม่คิดว่าจะเป็นคอร์สราคาถูกแบบนี้ ผมนี่โชคดีเปิดเฟสบุคมาเห็นพอดี ตอนลงทะเบียนนี่จ่ายเงินแบบไม่คิดเลยครับ

เริ่มรับพลัง

เรียนกันวันอาทิตย์ที่ 28 พ.ย. 2558 ผมเคยแต่ได้ยินชื่อพี่โดมมาว่าทำด้าน infrastructure มาอย่างหนักหน่วง ตอนแรกคิดว่าพี่เค้าน่าจะเป็นคนเงียบๆ สไตล์อาจารย์ แต่พอพี่เค้าจับไมค์พูดผมจึงต้องเปลี่ยนความคิดทันที แล้วก็มั่นใจโคตรๆ ว่าคอร์สนี้ต้องเกินคุ้มแน่นอน แล้วก็เป็นอย่างนั้นจริงๆ

พลังและความมันส์ตามรูปข้างล่างนี้ครับ คนฟังนี่ไฟลุกแน่นอน อย่างน้อยก็ผมคนหนึ่งล่ะ ฮ่าฮ่า 😀

Current best practice Web infrastructure
"เว็บไหนที่มี infrastructure ไม่อยู่ในรูปแบบนี้ กรุณากลับไปรื้อทำใหม่ ถ้าไม่ทำก็ลาออกไป.." พี่โดมกล่าวไว้ประมาณนี้
พี่โดมเน้นครับ Web server "ต้อง" มี reverse proxy (with cache) ตามรูป ซึ่งแบบนี้เป็นรูปแบบที่นิ่งแล้ว ผมขอเรียกมันว่าเป็น best practice ของการวาง infrastructure ในปัจจุบัน รูปแบบนี้ไม่ใช่แค่จะเหมาะสมกับเว็บขนาดใหญ่เท่านั้น จริงๆ แล้วไม่ว่าจะเป็นเว็บขนาดไหนก็ตาม ก็ควรจะอยู่ในรูปแบบนี้

ประเด็นที่น่าสนใจ

มีหลายประเด็นครับ ฮ่าๆ ยกมาเขียนบางประเด็นที่ผมสนใจ

  1. Varnish มี performance ที่สูงจริง แต่จัดการได้ค่อนข้างยาก เลยหันมาเน้นที่ Nginx ซึ่งจะทำให้เรามองเห็น flow ต่างๆ ชัดเจนกว่า ถ้าทำให้ดีเราสามารถติด Varnish ออกไปได้โดยที่ performance ไม่ตก ตรงนี้ว่าจะไปศึกษาต่อเพิ่มเองว่ามันเป็นอย่างไร เรื่องแบบนี้ถ้าฟังอย่างเดียวคงจะไม่เห็นภาพเป็นแน่
  2. Nginx รวมพลังกับ Lua จะมี performance ที่สูงมาก เส้น network 1 GB สามารถอัดให้เต็ม bandwidth ได้เลย โดยที่ตัว Nginx ไม่สะทกสะท้าน
  3. Lua มี JIT สามารถทำงานบน memory ได้ ทำให้มี performance จะใกล้เคียง C เลยทีเดียว! โหดมาก
  4. CloudFlare มีชื่อเสียงเรื่องช่วยกัน DDoS ได้ ถ้าเราโดนถล่ม ก็ย้าย DNS ไปฝากที่นั่นแทน กราบ
  5. ได้ยินเรื่อง CARP มา น่าสนใจเหมือนกันในการทำ high availability สำหรับระบบ
The Common Address Redundancy Protocol (CARP) allows multiple hosts to share the same IP address and Virtual Host ID (VHID) in order to provide high availability for one or more services. This means that one or more hosts can fail, and the other hosts will transparently take over so that users do not see a service failure.

ปรับแต่ง sysctl.conf

เรื่องนี้คุณนิวตรอนมาพูดให้ฟัง อธิบายค่าพารามิเตอร์ต่างๆ ของ OS หลังจากติดตั้ง OS แล้ว การปรับแต่ง sysctl.conf เป็นสิ่งที่ "ต้อง" ทำเพราะค่า default นั้นยังไม่ใช่ค่าที่ทำให้เครื่องใช้ประสิทธิภาพได้สูงสุด ผมนี่เปิดโลกเลยครับ ไม่เคยคิดถึงเรื่องนี้มาก่อน

ย้ำ! sysctl.conf เป็นสิ่งที่ไม่ปรับไม่ได้เลย จำเป็นสุดๆ

เนื่องจาก socket ใน Linux ก็จะถูกมองเป็นไฟล์ ดังนั้นเราต้องปรับจำนวนไฟล์ที่สามารถเปิดได้ให้มากขึ้น เราจะได้รับ connection ต่างๆ ได้มากขึ้น ในการเข้าเว็บจริงๆ 1 active user จะทำให้เกิดประมาณ 5 concurrent connections เพราะจริงๆ แล้วเราไม่ได้ส่ง request เข้า server แค่ 1 request เราส่งจริงๆ หลาย request เข้าไปขอหลายๆ อย่าง ดังนั้นให้คิดด้วยว่าถ้ามีคนเข้าเว็บเรา 100 คน ให้เราปรับการเปิดไฟล์ไว้เลย 500 เผื่อไว้

เรื่อง first byte เป็นสิ่งที่สำคัญโคตร จำเป็นต้อง optimize ให้เร็วเข้าไว้

การปรับค่าพารามิเตอร์ต่างๆ เริ่มต้นเราสามารถค่อยๆ ปรับไปได้เรื่อยๆ ครับ ลองผิดลองถูก ลอง simulate พวก requests ต่างๆ มา แล้วก็ปรับๆ เอา ซึ่ง sysctl.conf ที่พี่โดมเอามาปล่อยนี่แสดงให้เห็นถึงประสบการณ์ที่ผ่านมากว่าจะได้ค่าต่างๆ ที่ปรับแล้วสามารถนำเอาไปใช้กับทุกเครื่องเซิฟเวอร์ได้เลย

Behavior ของเซิฟเวอร์ที่พี่โดมทำคือ จะไม่ปล่อยให้ TCP ค้างไว้เด็ดขาด จะ chunk เอา ส่งทีละ 4k ถ้าเป็นอัพโหลดไฟล์​ก็จะอัพโหลดทีละ 4k การปล่อย connection ให้ค้างไว้ จะทำให้เว็บช้า

ส่วน configuration แบบเต็มๆ เปิดดูได้ที่ domeclass.sysctl.conf ครับผม

การใช้งาน SSH + tmux

ส่วนนี้คนมาพูดคือคุณดิว มาพูดเรื่องการใช้งาน SSH กับ tmux เรื่อง SSH ก็พูดตั้งแต่การสร้าง key จนไปถึงการใช้ key แบบง่ายๆ ไม่ต้องจำ

การใช้ SSH ต่อเข้าเครื่องเซิฟเวอร์ เราต้องใช้ key เท่านั้น เลิกใช้ username กับ password เพื่อที่จะต่อเข้าเซิฟเวอร์ได้แล้ว..​ อันนี้จุกครับ เพราะเซิฟเวอร์ development ของพวกผมยังใช้ username กับ password อยู่ ผมจะกลับมาเปลี่ยนไปใช้ key แน่นอนครัช สัญญา!

แน่นอนครับ เราควรจะต้องกันไว้ด้วยไม่ใช้ SSH ไปใช้ username กับ password วิธีทำคือให้เราเข้าไปแก้ไฟล์ /etc/ssh/sshd_config โดยตั้ง 2 ค่าตามนี้

PasswordAuthentication no
UsePAM no

PAM นี่เป็น authentication ของ Linux ซึ่งจะทำให้เรายังคงใช้ password อยู่ ดังนั้นเราต้องเซตให้เป็น no ด้วย

ตัว tmux ก็เป็น tool ตัวหนึ่งที่ใครทำที่งานเกี่ยวกับพวกเซิฟเวอร์ควรจะต้องใช้ เนื่องจากมันสามารถเปิดไว้หลายหน้าต่างได้ แล้วก็เก็บ session การทำงานของเราไว้ได้ ทำงานร่วมกับคนอื่นก็ได้ ไปลองใช้กันดู!

แนะนำ Docker

Docker นี่เป็นสิ่งที่ทำให้ชีวิตเราง่ายขึ้นโคตรๆ จริงๆ แล้วคอนเซปไม่ได้ต่างอะไรกับ Linux Containers เลย แต่สิ่งที่ทำให้มันเจ๋งคือ.. มันใช้ง่าย! (สำหรับผมแล้วสิ่งนี้คือเกือบจะทุกอย่างแล้วครับ) Docker เราสามารถสร้างเครื่องขึ้นมาได้ในเวลาอันสั้น เราสามารถทำ 1 service ต่อ 1 container ได้ ตามนั้นครับ ใครที่ได้ไปลองใช้ Docker แล้ว จะไม่กลับไปใช้อย่างอื่น หรือกลับไปทำแบบเดิมๆ อีกเลย จริงครับผมก็ด้วยคนหนึ่ง

ตรงส่วนนี้ได้ถามออกไปเกี่ยวกับเรื่องการใช้ Docker กับ database แล้วจะทำอย่างไรดีกับส่วนข้อมูล ซึ่งที่พี่เค้าทำ พี่เค้า commit ทั้ง container เลยข้อมูลก็จะอยู่ในนั้น แต่ในอนาคตก็จะ mount เอา volume ออกมา ซึ่งก็จะดูจัดการง่ายกว่า เดี๋ยวไปลองทำบ้างครับ! ก่อนหน้านี้ไม่กล้าใช้ Docker กับ database เพราะกลัวมันไม่เสถียร แต่พี่เค้าก็ใช้มาได้โดยไม่มีปัญหาอะไร

ช่วงปล่อยของ

ช่วงนี้เป็นการรวมพลังของพี่โดม คุณนเรศ และคุณเอิร์ธ ครับ มีทั้งมาโชว์เรื่องการทำ WordPress Cluster โดยใช้ Rancher ซึ่งผมเห็นแล้วก็ชอบครับ มี UI จัดการตัว container ต่างๆ ได้ง่าย ทำ cluster ขึ้นมาได้ค่อนข้างง่ายครับ ชอบๆ

มีส่วนของ OpenResty ด้วย เป็นโมดูลของ Nginx ที่ใช้ Lua เขียนขึ้นมาโดย Yichun Zhang พี่โดมเรียกคนนี้ว่าเฮีย แล้วก็บอกว่าเวลาที่เราติดตามงานของคนไหน เราก็จะติดตามงานของคนนั้นๆ ไปเรื่อยๆ ผมก็เป็นครับ ฮี่ๆ 😀

แล้วก็สุดก็เป็นตัวอย่างการทำงานของเว็บ TV Pool เอาโค้ดมาเปิดให้ดูเลย การทำ cache พวก response ต่างๆ การแยก image เซิฟเวอร์เพื่อกระจายโหลด รวมไปถึงการ chunk ตัว connection ต่างๆ ตอนท้ายก็โชว์การทำ Ajax ส่ง request แล้วก็รับพวก response รวมไปถึงการแนะนำการทำ SEO ของ Single App Website ว่าทำอย่างไร ที่พูดถึงเรื่องนี้ก็เพราะว่าเว็บของ TV Pool เป็น Ajax ทั้งหน้า

With the instructor
สมัครเป็นติ่งพี่โดมไปแล้วเรียบร้อย กราบ

ขอแสดงความเสียใจกับคนที่ลงเรียนไม่ทันนะครับ พวกคุณพลาดแล้ว 🙂 ส่วนใครที่สนใจเนื้อหาหรือรายละเอียดเพิ่มเติม สามารถดูได้ที่เอกสารอบรมครับ

เสียงตอบรับส่วนตัว (ไม่ได้เขียนลงไปในแบบฟอร์ม)

"เสียงตอบรับ" จากคนที่มาฟังคือของขวัญอย่างดีสำหรับผู้สอนทุกๆ ท่านครับ ผมขออนุญาตคิดไปเองว่าคอร์สนี้ก็ต้องการของขวัญแบบนี้เช่นกัน 🙂

Good

  • เนื้อหาดีอยู่แล้ว แต่การได้พูดคุย ได้ฟังประสบการณ์ของคนที่ทำมาจริงๆ นี่ดีเลิศครับ
  • คนสอนทุกคนเป็นกันเอง ความรู้อัดมาแน่น พร้อมปล่อยของ ยินดีมากที่ได้รู้จักทุกคนครับ
  • เกินคุ้มค่าเงินทุกบาทครับ
  • เสื้อสวย เนื้อผ้าดี ใส่แล้วหล่อ
  • สถานที่จัดงานเดินทางสะดวก อาหารอร่อย
  • และอื่นๆ อีกเยอะแยะครับ บอกไม่หมด ฯลฯ

Bad

  • ช่วงเวลา Demo เหมือนจะไม่ค่อยทัน ทำให้ข้ามบางอย่างไปบ้าง
  • ข้อมูลสำหรับใบเสร็จ ผมเคยให้ไปทางอีเมลที่ส่งมาถามก่อนหน้าวันอบรม แต่วันที่อบรมยังต้องมาเขียนข้อมูลให้อีก สุดท้ายจะส่ง EMS ตามหลังมาให้
  • แอร์หนาวมากครับ >_<

Try

  • ผมนี่อยากลองลงมืออยากลองสร้าง WordPress Cluster ขึ้นมาเอง ดูอย่างเดียวมันคาใจครับ อิอิ ถ้ามีช่วงเวลาหนึ่งไว้ให้ผู้ร่วมอบรมได้ลองทำเองก็จะแจ่มเลยครับ
  • ช่วงเบรกย่อยอาจจะนานไปหน่อยครับ อยากได้ช่วงเวลาอบรมมากขึ้นครับ แหะๆ
  • ผมอยากถามความคิดเห็นเกี่ยวกับระบบที่ทีมของผมดูแลอยู่ แต่ว่ากลัวจะไปรบกวนเวลาของคนอื่น ถ้าเปิดให้ส่งคำถามจากทางบ้านมา แล้วเอามาเป็นช่วงตอบคำถามจากทางบ้านได้นี่สุดยอดเลยครับ

โดยรวมแล้วสุดยอดครับ 9.8/10 ขอหัก 0.2 ไปเพราะปัญหาเรื่องใบเสร็จนะครับ

สุดท้ายขอกราบขอบคุณทีมงานทุกคนครับ (-/\-)

Author: zkan

Soon to be a newbie data scientist. I ♥ machine learning, computer vision, robotics, image processing, data visualization, and data analytics.

3 thoughts on “F5 อ่อนว่ะ - คอร์สนี้จะกลายเป็นตำนานของวงการ IT ไทย #F5อ่อนว่ะ”

  1. เรื่องใช้งาน docker กับ database นี่ ... ปกติผมจะ map volume เข้าไปที่ container เลยครับ เช่นถ้าใช้ mysql ก็ docker run -v $PWD/data:/var/lib/mysql เลยคับ data จะเก็บอยู่ข้างนอก container สะดวกในการ backup ดีคับ ... แต่วิธีนี้ใช้ได้กับเครื่องที่เป็น Linux เท่านั้นคับ ใน Mac กับ Windows ทำไม่ได้ บางคนเขาเลยใช้วิธีสร้าง container ขึ้นมาแยกต่างหากเป็น data-only container แล้วค่อย mount เข้าไป container ที่เป็น db service อีกทีคับ

    ในงานสนุกมากคับ เปิดกะโหลกสุดๆ ได้เจอคนเก่งๆเยอะเลย

  2. ขอบคุณครับคุณ ball6847 ที่มาแชร์ให้อ่านครับ กราบ (-/\-)

  3. พี่คับ
    ผมกำลังหัดใช้ DOCKER พี่ช่วยเนะนำที่คับ

    ผมจะติดต่อ พี่ได้ทางไหนบ้างคับ

    ขอบคุณคับ.

Leave a Reply

Your email address will not be published. Required fields are marked *