จากหนังสือ Cloud Native Go
เห็นการ review และแนะนำจาก facebook ของป้อมา
ก็เลยลองเข้ามาอ่านบ้างประมาณ 1 สัปดาห์
จึงทำการสรุปสิ่งที่อ่านในแต่ละบทไว้นิดหน่อย
โดยเริ่มจากบทแรกว่าด้วย Cloud Native คืออะไร ?
เป็นการอธิบายที่ดีและน่าสนใจมาก ๆ
มาเริ่มกันเลย

Cloud Native คืออะไร

จาก Cloud Native Computing Foundation (CNCF) อธิบายไว้ว่า
Cloud Native จะมีแนวคิดและ technology ช่วยให้องค์กรสร้างและ run ระบบ
ให้ scale ได้ง่ายขึ้น (Scalable)
รองรับ environment ต่าง ๆ ได้ง่ายขึ้น
เช่น public, private และ hybrid cloudหรืออาจจะเป็น on-premise ก็ได้

โดยแนวคิดและเทคนิคนี้ช่วยทำให้

  • ระบบเป็นอิสระจากกันมาก (Loosely coupled)
  • สามารถ recovery จากความผิดพลาดต่าง ๆ ได้ (Resilient)
  • สามารถจัดการได้ง่าย (Manageble)
  • สามารถดูการทำงานได้ (Observable)

ทำงานร่วมกับการทำงานแบบอัตโนมัตที่มีความน่าเชื่อถือ
รวมทั้งช่วยให้ทีมพัฒนาสามารถแก้ไขความความต้องการที่มากขึ้นและบ่อยมากขึ้น

จากนั้นทำการอธิบายรายละเอียดของแต่ละเรื่องตามลำดับ

ประกอบไปด้วย

  • Scalability
  • Loosely coupled
  • Resilient
  • Manageable
  • Observable

Scalability

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

การ scale นั้นมีทั้ง

  • Vertical ทำการขยายเครื่องให้ใหญ่ขึ้นทั้ง CPU และ memory เป็นต้น
  • Horizontal ทำการเพิ่มเครื่องหรือ instance เข้ามา

ทั้งสองแบบมีทั้งข้อดีและข้อเสียเช่นกัน

Loosely coupled

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

Resilient หรือ Fault tolerance

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

สิ่งที่น่าสนใจคือ Resilient มันไม่ใช่ Reliable นะ
เนื่องจาก reliable ของระบบคือ
การที่ระบบสามารถทำงานได้ตามที่คาดหวังในช่วงเวลาที่กำหนด
โดยมักจะมาพร้อมกับคำว่า availability และ maintainability

Manageability

อธิบายถึงความง่ายในการเปลี่ยนพฤติกรรมของระบบเช่น
ทำให้ปลอดภัยมากขึ้น
ทำให้ระบบทำงานได้อย่างราบรื่นง่ายต่อการเปลี่ยนตาม requirement
แต่ยิ่งระบบมีความซับซ้อนมากเท่าไร การจัดการก็ยากขึ้นเท่านั้น

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

ยกตัวอย่างเช่น การเปลี่ยน configuration นั้น
สามารถเปลี่ยนแปลงได้ง่ายไหม
หรืออาจจะเป็นเรื่องของการเปิดหรือปิด feature ต่าง ๆ ของระบบ
หรือการ deploy หรือ upgrade/downgrade ระบบ

สิ่งที่น่าสนใจคือ Manageability มันไม่ใช่ Maintainability นะ
เนื่องจาก Maintainability ใช้อธิบายว่า
ระบบง่ายต่อการเปลี่ยน function การทำงาน (เช่น code)
นั่นคือเรื่องของ internal นั่นเอง
ส่วน Manageability คือเรื่องของ external หรือ ภายนอก

Observability

จะเน้นไปที่พฤติกรรมการทำงานของระบบว่า
ทำงานอย่างไร จนได้ output ออกมา
โดยที่เราไม่จำเป็นต้องมีความรู้ในเชิงลึกต่อระบบมากนัก
เป็นสิ่งท่ีถูกปรับปรุงมาจาก monitoring นั่นเอง
เพื่อให้สามารถนำข้อมูลต่าง ๆ ของระบบที่จัดเก็บไว้ (data)
มาแปลงให้มีค่าหรือเข้าใจง่ายมากขึ้น (information)

ตัวอย่างของระบบ Observability เช่น

  • Unstructured logging
  • Alert ในสิ่งที่เราไม่รู้
  • มี dashboard เพื่อแสดง information ต่าง ๆ ของระบบ ตาม flow การทำงานของระบบ

ช่วยทำให้เราเข้าใจการทำงานของระบบมากขึ้น
รวมทั้งยังช่วยบอกหรือแจ้งจุดเกิดปัญหาได้
ไม่ต้องเสียเวลาไปค้นหาให้วุ่นวาย

โดยรวมแล้ว คำว่าคำว่า Cloud Native ไม่ใช่แนวคิดที่ต้องประหลาดใจอะไร

เพราะว่ามันเป็นแนวทางที่หลีกเลี่ยงไม่ได้อยู่แล้ว
เพราะว่ามาเพื่อสนองต่อความต้องการ และ การพัฒนาการของเทคโนโลยี
ที่มีอย่างต่อเนื่องมากมายนั่นเอง

ไว้จะสรุปบทอื่น ๆ ต่อไป
ซึ่งจะเริ่มลง programming ด้วยภาษา Go
เป็นการขยายจากบทแรกนั่นเอง