[บันทึก] การเข้าร่วมในคลาส Microservice ของพี่ปุ๋ย วันที่ 3/3

Karnawat Wongudom
Siam Chamnankit Family
2 min readJan 23, 2020

สวัสดีครับผม วันนี้เป็นวันสุดท้ายแล้วของคลาส Microservice ของพี่ปุ๋ยครับผม

เนื้อหาตอนเช้า พี่ปุ๋ยพามาดูวิวัฒนาการของ Microservice ตั้งแต่ยุคแรกเริ่ม
พี่ปุ๋ยพานับเป็น Microservice 1.0 ไปจนถึง 4.0

โดยใน Microservice ในยุคหลัง ๆ นี่มีเทคโนโลยีมากมายที่เกิดมาเพื่อสนับสนุนแนวคิดของ Microservice โดยหัวใจหลักที่ส่งผลอย่างมากในยุคนี้เลยคือเทคโนโลยี Container ซึ่งจะส่งผลให้ Service

เกิด ขึ้นมาเพิ่มเริ่มต้นทำงานได้เร็ว
สามารถ ตาย จากไปและ เกิดขึ้นมาใหม่ ได้ง่ายด้วย

ซึ่งในประโยคนี้จะเป็นหัวข้อเกี่ยวกับพวก
Graceful Shutdown และ Service Recovery ครับ

Service ที่พังแล้วฟื้นตัวเองได้ดูเผิน ๆ อาจจะคิดว่าดีแต่จริง ๆ
แล้วควรจะทำให้มันไม่พังจะดีกว่า

นอกจากนี้ยังรวมถึง Service สามารถทำการ Scale ได้ง่ายขึ้นมาก ๆ ในโลกของ Container

Microservice ในช่วงหลัง ๆ เน้นมาทางฝั่งของเทคโนโลยี Container และไม่ผูกติดกับภาษาแล้ว

Microservice Testing

ตรงนี้พี่ปุ่ยอิงตามรูปแบบการทดสอบ Microservice ของ Matin Fowler เลยครับ
โดยเริ่มตั้งแต่

Unit Test — ระบุจุดของการทดสอบว่าอยู่ในชั้นไหนใน Service เราโดยแบ่งประเภทของ Unit Test เป็น 2 ประเภทก็คือแบบ
Solitary และแบบ Sociable

Integration Test — อันนี้พี่คุยแซวไว้ว่า ให้คุยกันดี ๆ นะว่าคำว่า Integration Test ของแต่ละคนเหมือนกันไหม (เพราะอย่างเช่นในการพัฒนาตามรูปแบบของ Monolith จะใช้คำว่า Integration สำหรับการการทำงานร่วมกันของหลายส่วนภายในระบบเดียวกัน) พี่ปุ๋ยให้คำนิยามว่าเป็นการทดสอบตะเข็บชายแดนของระบบเรา มันคือการทดสอบส่วนที่ต้องเชื่อมต่อไปยังระบบอื่นนั่นเองครับ

Component Test — คำนิยามของการทดสอบนี้คือ การทดสอบภายในประเทศ ที่มีจังหวัด อำเภอ ตำบลมาทำงานร่วมกันทั้งหมด แต่ก็ยังเป็นแค่ภายในประเทศอยู่นะ ยังไม่มีการเชื่อมต่อไปยังระบบภายนอก แต่จะจำลองเอาไว้ก่อนเพื่อให้ทดสอบภายในได้

Contract Test — ตามชื่อของการทดสอบเลยครับ มันคือการเช็คสัญญาของระบบเราและระบบภายนอก
อธิบายเพิ่มเติมคือ ใน Service ที่ให้บริการแล้วมีผู้รับบริการเป็น Service ภายนอก ต้องมีการทดสอบว่าตั้งสอง Service ยังสามารถทำงานร่วมกันได้อยู่ เกิดเป็น Contract ระหว่างฝ่าย Consumer และ Provider นั่นเอง

End-to-End Test — การทดสอบในมุมมองการใช้งานจริง โดยทดสอบกับระบบที่ทำงานเหมือนกับ Production เลยเพื่อทดสอบว่าระบบทำงานได้ตามที่ต้องการจริง ๆ

Microservice Testing ของ Matin Fowler

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

การทดสอบในจุดนี้จะใช้เครื่องมือที่แตกต่างกันไป และต้องทำให้เป็น Automate และสามารถทดสอบซ้ำได้ เพื่อที่ว่าลดงานของเหล่า Tester แล้วให้ไปโฟกัสกับงาน Test ในจุดอื่นที่มีประโยชน์กว่าแทน

Continuous Delivery / Continuous Integration

พี่ปุ๋ยยกภาพมาอธิบายไว้ก็คือ ใน Pipeline(Build-Test-Deploy) ของการส่งมอบของเรานั้นจะต้องเกิดอะไรขึ้นบ้าง โดยไล่ตั้งแต่จากฝั่ง Source Code บนเครื่องของ Developer จะต้องผ่านขั้นตอนต่าง ๆ ตามภาพครับ

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

ไม่ว่าจะเป็นการเริ่มต้นสร้าง Project บน Jenkins เพื่อให้ทำการบางอย่างเมื่อมีการเปลี่ยนแปลงบน Version Control และค่อย ๆ เพิ่มรายละเอียดเข้าไป โดยเริ่มจากง่าย ๆ ก่อน , มีตัวอย่างการทำ Source Code Analysis โดยใช้เครื่องมืออย่าง Sonarqube

ซึ่งข้อควรระวังตรงนี้คือพอระบบ Pipeline ที่เราสร้างขึ้นมามีความซับซ้อนมากขึ้น การดูแลก็ทำได้ยาก เครื่องมือที่ถูกนำมาช่วยเพื่อให้พัฒนาได้เร็วขึ้น กลับกลายเป็นทำให้ช้าลง ข้อแนะนำของพี่ปุ๋ยคือ

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

CI is about what people do not about what tools they use

สรุปสำหรับตัวเอง : ผ่านมาแล้ว 3 วันกับการเรียนรู้เรื่อง Microservice สำหรับตัวเองในตอนนี้ รู้สึกอยากทดลองทำโปรเจคของตัวเองดูสักอย่าง โดยเอาความรู้ที่ได้มา ลองมาใช้กับสิ่งที่จะทำดู ในทฤษฎีอาจดูสวยงาม แต่ในชีวิตจริงนั้นอาจจะเป็นหนังอีกเรื่องเลยก็ได้ อาจจะได้เจอปัญหาเพื่อที่จะต้องนำมาศึกษาหาวิธีแก้เพิ่มเติมอีก เพื่อที่จะได้เข้าใจลึกซึ้งขึ้น แล้วก็สำหรับตัวเองในเรื่องของการที่วันหนึ่งต้องขึ้นมาสอน ได้สังเกตุเห็นวิธีการสอนเนื้อหาที่การสอนแต่ละครั้งไม่ได้มีรูปแบบตายตัว แต่เป็นการปรับเนื้อหา ปรับบริบทให้เข้ากับคนที่มาเรียน ส่วนมากจะเน้นเกี่ยวกับการกระบวนการการทำงานที่เป็นพื้นฐาน การพูดคุยทำงานร่วมกันในทีมมากกว่าเน้นใช้เครื่องมือสำเร็จรูป สิ่งที่เน้นคือต้องเข้าใจพื้นฐานให้ดีก่อนที่จะไปในขั้นต่อไป

--

--