Let’s Spring ! มาลองใช้ Microserviceใน Java ด้วย Spring Cloud (Part 1 รู้จัก Microservices กันก่อน)

สวัสดีปีใหม่ครับทุกท่าน ห่างหายไปนานมากจากเรื่องที่แล้วที่เราเขียนทิ้งเอาไว้ เรื่องล่าสุดที่เขียนนี่เกี่ยวกับ Conditional Bean Creation ใน Spring Framework หากท่านใดสนใจ ก็เชิญได้ที่นี่เลยครับ ที่หายไปนี่ไม่ได้ขี้เกียจเขียนแต่อย่างใด แต่เพราะไม่รู้จะเขียนเรื่องอะไร วันนี้มีเรื่องมาเขียนแล้วว หลังจากได้รับเควสใหม่มาจากอาจารย์โยดา เอ้ยย จากท่านพี่หัวหน้าผู้ดูแลเรานั่นเอง วันนี้มาในเรื่องของ Microservice นั่นเอง เย้ๆ ถือว่าเป็นเรื่องใหม่สำหรับเรา แต่คงไม่ใหม่สำหรับคนอื่นๆเป็นแน่แท้ เนื่องจากเรื่องนี้มันค่อนข้างจะยาวขอแบ่งเป็นหลายๆพาร์ทละกันนะครับ โอเค พร้อมกันแล้วเนอะ มาลุยกันโลดดด

ก่อนอื่นเราต้องรู้จักกันก่อนเนอะ ว่าไอ Microservice เนี่ยมันคืออะไร ไปรู้จักมันด้วยกันเลย เอาคำแปลก่อน Micro แปลง่ายๆ คือ เล็กๆ Service ก็คือบริการ รวมกันก็หมายถึงบริการเล็กๆ นั่นก็คือร้านโชห่วยทั่วไปนั่นเอง…

.

.

.

เดี๋ยวๆอย่างงี้ก็เล่นได้หรอ บาทสองบาทนี่เอาทุกเม็ด แฮ่ ! โอเคมาจริงจังกันหน่อยละ เอาตามที่เราอ่านมาแล้วเราก็คิดวิเคราะห์แยกแยะ ออกมาละกัน ว่ากันง่ายๆ เอาตามที่เราเข้าใจนะแหละ ถ้าผิดถูกยังไงก็รบกวนช่วยชี้แนะไว้ใน comment ด้านล่างได้เลยเน้ออ แชร์ๆความรู้กันน มาเลย ตามความเข้าใจของเราละกัน

ไอเจ้า Microservice เนี่ยคือการที่เราแยก Service ใหญ่ๆ ออกมาเป็น Service เล็กๆแต่สามารถทำงานประสานกันได้ แล้วทำงานได้เหมือนหรืออาจจะดีกว่า Service ใหญ่ๆเพียงอันเดียว

ขอคั่นรายการนิดนึง เพื่อความเฮฮา และเห็นภาพที่ชัดเจนขึ้น เราจะแทน Service ใหญ่ๆ หนึ่งตัวด้วยคำว่า “เจ้าอ้วน” และก็แทน Microservice ที่เราแยกออกมากันว่า “สาวหุ่นเพรียว” ละกัน เพื่อการจดจำที่ดีกว่า โอเคนะ ลุยกันต่อๆ

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

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

ข้อสองกันต่ออเลย เนื่องจาก code แต่ละส่วนนั้นแยกกันเราสามารถที่ให้แต่ละคนในทีมสามารถเป็นเจ้าของสาวหุ่นเพรียวแต่ละคนได้เลย

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

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

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

ข้อสุดท้ายที่เราว่ามันดีงามที่สุดในการใช้สาวหุ่นเพรียวนั่นก็คืออออ เราสามารถ scale up แต่ละ service เพิ่มขึ้นได้ อย่างเช่น บางช่วงที่มีการใช้ service ใด service หนึ่งมากขึ้น เราก็สามารถที่จะ dubplicate service นั้นๆเพิ่มขึ้นมาอีกเพื่อจะรับ load ตามความต้องการในบางเฉพาะ service นั้นๆ โดยที่เราไม่จำเป็นต้อง duplicate มาทุก service เอาเฉพาะที่มีการใช้งานเยอะก็พอแล้ว แต่กลับกันหากเป็นเจ้าอ้วนคนดีคนเดิมของเรานั้น การที่เราต้องการให้มันรับ load ได้เยอะขึ้น นั่นหมายความว่าเราจะต้องเอาตัวอ้วนๆของมันมาทำซ้ำทั้งตัวเลย ซึ่งบางทีมันก็เปลืองเกินไป และขยายยากกว่าการเพิ่มสาวหุ่นเพรียวในสต๊อกของเราเยอะ

ดูรูปประกอบกันหน่อย เดี๋ยวจะเบื่อตัวอักษรเยอะแยะไปหมด

https://martinfowler.com/articles/microservices/images/sketch.png

แน่นอนว่า โลกเรามีด้านสองด้านเสมอ มีข้อดีก็ต้องมีข้อเสีย เรามาดูข้อเสียกันบ้างดีกว่า

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

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

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

ข้อเสียข้อสุดท้าย ที่ผมนึกออกแล้ว คือการที่เราจะ deploy สาวหุ่นเพรียวเนี่ย กว่าแต่ละนางจะทำงานได้ กว่าจะคุยกันได้ก็ยุ่งยากกว่าการที่เราแค่เอา เจ้าอ้วนของเราไปวางไว้ใน web container สักตัว เจ้าอ้วนก็สามารถทำงานได้แล้ว

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


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

โอเคครับ วันนี้ฝากไว้แค่นี้ก่อน เดี๋ยวว่างๆจะมาเขียนต่อตอนต่อไปเร็วๆนี้แน่นอนครับ อย่าลืมกด like เพื่อเป็นกำลังใจให้ผมหน่อยนะครับ และกดติดตามจะได้เห็นตอนต่อๆไปของซีรีย์นี้ได้นะครับ

สุดท้ายนี้ฝากไว้ให้ทุกคนครับ Keep Learning สำคัญสำหรับสายงานด้านนี้มากก็จริง แต่สิ่งหนึ่งที่ผมมองว่าสำคัญกว่าก็คือ Keep Sharing ครับ เรียนรู้อะไรใหม่ๆ แล้วมาแชร์ให้กันเยอะๆครับ เราได้ความรู้ คนอื่นก็ได้ความรู้ด้วยครับ

ขอบคุณครับ

ปล.ด้านล่างก๊อปปี้มาจาก post ที่แล้วเป๊ะทุกตัวอักษร :P