Table of Contents
ทุกวันนี้ Microservices เป็นการออกแบบระบบที่สำคัญมากสำหรับโลกยุค Digital ไม่ว่าจะเป็นบริษัทยักษ์ใหญ่อย่าง Netflix, Amazon หรือแม้แต่ในไทยเองก็พัฒนาด้วย Microservices ในหลากหลายกลุ่มธุรกิจ อย่างธุรกิจธนาคาร เช่น KBank หรือ SCB หรือแม้แต่ธุรกิจ eCommerce ที่เราคุ้นหน้าคุ้นตาอย่าง Shopee หรือ Lazada ก็ตาม เพราะด้วยข้อดีของมันที่สามารถให้ผลลัพธ์ และประสิทธิภาพที่มากตรงข้ามกับคำว่า micro ไม่ว่าจะเป็น Time-to-Market (TTM) ที่รวดเร็วทันกับความต้องการของผู้ใช้งาน การขยายระบบที่ดีกว่า (Better Scalability) หรือแม้แต่ Productivity ในการพัฒนาที่สูงก็ตาม (อ่านต่อได้ที่ Microservices คืออะไร? พร้อมข้อดี-ข้อเสียที่คุณต้องรู้ !!)
ด้วยความที่ Microservices เป็นการพัฒนาโครงสร้างของระบบ (Software Architecture) ซึ่งอาจจะฟังดูกว้างมากตอนมาถึงการพัฒนาจริง ๆ โดยเฉพาะภาษาที่ใช้พัฒนา (Programming Language) ที่มีหลากหลาย ในบทความนี้ เราจะมาแนะนำภาษายอดนิยมที่ใช้พัฒนา Microservices ให้คุณได้เลือกใช้ได้ตามความเหมาะสมกับระบบของตัวเองกัน
แต่การเลือกภาษาที่จะมาพัฒนานั้น ก็เหมือนกับเวลาเราไปช้อปปิ้ง อยู่ดี ๆ จะไปเลือกสุ่มสี่สุ่มห้าไม่ได้ หากเราไม่มีสเปคในการเลือกแล้วล่ะก็ เราก็จะไปต่อไม่ถูกเลยทีเดียว
Table of Contents
ข้อแนะนำสำหรับการเลือกภาษาเพื่อใช้พัฒนา Microservices
ทุกคนอาจจะเคยมีคำถามอยู่ในใจว่า
“จะใช้ภาษาไหนในการพัฒนา Microservices ของเราดีนะ”
จริง ๆ แล้วการที่จะเลือกภาษาใดภาษาหนึ่งมาพัฒนานั้น ไม่มีกฎเกณฑ์ที่ตายตัว และไม่จำเป็นต้องใช้เพียงภาษาเดียวเท่านั้น (นี่เป็นข้อดีใหญ่ ๆ ข้อหนึ่งของ Microservices เลยล่ะ อ่านข้อดีเพิ่มเติมได้ที่นี่) ซึ่งแต่ละภาษาก็จะมีข้อดี ข้อเสีย และข้อจำกัดของตัวเองแตกต่างกันไปตามรูปแบบ (Pattern) และหลักการ (Priniciple) ของแต่ละภาษา ซึ่งก่อนที่เราจะทำการพัฒนา Microservices เราควรกำหนดมาตรฐานของภาษาที่เราจะใช้อ้างอิงจากโมเดลธุรกิจที่เรากำลังทำ ซึ่งลักษณะที่แต่ละภาษาควรมีนั้น มีด้วยกันหลัก ๆ ดังนี้
- สนับสนุนการทำงานแบบอัตโนมัติ (Culture of Automation)
- สามารถ deploy ขึ้นระบบได้อย่างอิสระต่อกัน (Independent Deployment)
- คำนึงถึงผู้ใช้งานเป็นอันดับแรก (Consumer-first Approach)
- สามารถสร้าง service ได้ตรงตามรูปแบบธุรกิจนั้น ๆ (Modeled Around Business Domain)
- สนับสนุนการทำงานแบบ Continuous Integration (Culture of Continuous Integration)
- สามารถตรวจสอบได้ง่ายในกรณีต่าง ๆ (Highly Observable)
- สามารถแยก component ต่าง ๆ ออกจากกันได้ ไม่ต้องรวมศูนย์ (Decentralization of Components)
- สามารถแก้ไขได้โดยไม่ต้องยุ่งเกี่ยวกับ dependent code หรือโค้ดที่สัมพันธ์กับโค้ดชุดอื่น ๆ (Implementation Details Hidden)
นอกจากลักษณะเหล่านี้แล้ว เราควรคำนึงถึงเรื่องอื่น ๆ ด้วย ไม่ว่าจะเป็น
- เลือกภาษาที่ทำให้โค้ดของเราไม่ยุ่งยากเวลาพัฒนา (Simplify coding)
- ไม่ควรใช้ภาษาที่รันบน Virtual Machine (VM-based language) เช่น Clojure Erlang Elixir เนื่องจากใช้ memory ค่อนข้างสูง
- เลือกภาษาที่ทำให้คุณสร้าง Static Binaries ได้เพื่อลดขนาดของ image และหลีกเลี่ยง Constant Update
- เลือกภาษาที่สามารถบริหารจัดการ traffic มาก ๆ ได้ และตอบสนองต่อ request ต่าง ๆ ได้รวดเร็ว
ซึ่งนอกจากข้อแนะนำเหล่านี้แล้ว เราต้องคำนึงถึงข้อดี และข้อเสียของแต่ละภาษาก่อนที่จะเริ่มพัฒนาด้วย ซึ่งจะได้อ่านกันต่อไป
ภาษาแนะนำสำหรับพัฒนา Microservices
Logo from golang.org
Go หรือ Golang
Go หรือ Golang ถูกสร้างขึ้นที่ Google โดยนักพัฒนา 3 คน ได้แก่ Robert Griesemer, Rob Pike และ Ken Thompson เป็นภาษายอดนิยมที่เหล่านักพัฒนาต่างใช้ในปัจจุบัน ด้วยความเร็ว ความสามารถในการทำงานได้หลาย task ในหนึ่งครั้ง (Concurrency) และ API Support
ข้อดีของ Go
- สามารถรับมือกับ Load หนัก ๆ ได้ ทำให้คุณสามารถสร้าง application ที่มี high-loaded service ได้
- มี syntax ที่เรียบง่าย นักพัฒนาสามารถเข้าใจโค้ดที่เขียนได้
- รวดเร็ว และสามารถทำงานได้หลาย task ในครั้งเดียว ช่วยเพิ่มประสิทธิภาพเมื่อใช้ core และ machine เป็นจำนวนมาก
- มี library ที่เป็นมาตรฐาน สามารถใช้สร้าง Web Service ได้
- สามารถสร้าง Microservices Architecture ที่มี component ต่าง ๆ ที่เป็นอิสระต่อกัน ซึ่งทำให้ App เรามีความสามารถทางธุรกิจที่หลากหลาย
ข้อเสียของ Go
- ภาษา Go เป็นภาษาที่ยังอยู่ในขั้นตอนของการพัฒนา ดังนั้นอาจจะยากในการดึงศักยภาพของ library มาได้เต็มที่
- ไม่มีการจัดการ memory แบบ manual ซึ่งอาจทำให้เกิดปัญหา เช่น pauses หรือปัญหาของการจัดการ memory ที่ overhead (Overhead Garbage Collection)
- มีปัญหาเรื่อง Runtime Safety เพราะความปลอดภัยจะถูกเช็คเพียงช่วง compile และช่วง Runtime นั้น ๆ
สรุปง่าย ๆ คือถ้าคุณอยากสร้างโปรเจกต์ใหม่ ๆ หรือพัฒนาโปรเจกต์ที่มีอยู่เดิม Go เป็นตัวเลือกที่ดี ซึ่งก็ขึ้นอยู่กับเป้าหมายในการพัฒนาของคุณนั่นเอง
ตัวอย่าง Go Framework: Go Micro, Go Kit, Gizmo
Java
Java เป็นภาษาที่เกิดมาในปี 1995 โดย James Gosling บิดาแห่ง Java เพื่อใช้กับ Interactive TV (ซึ่งสุดท้ายไม่ได้ใช้ เพราะมันล้ำสมัยจนเกินไป ไม่มีใครใช้) Java เป็นภาษาที่ได้รับความนิยมเป็นอย่างมาก ซึ่งอยู่ใน Top 6 จากผลสำรวจของ Stackoverflow ปี 2022 และเป็นหนึ่งในภาษาที่ดีมาก ๆ ในการพัฒนา Microservices ด้วยสาเหตุหลัก ๆ ที่ว่า syntax ของ Java นั้น ง่ายต่อการอ่าน ทำให้สามารถเขียนโค้ดได้ง่าย โดยเฉพาะเวลาใช้กับ Framework ต่าง ๆ
ข้อดีของ Java
- มี syntax ที่อ่านง่าย (Readability) ทำให้สามารถดูโค้ดได้ง่าย โดยเฉพาะโค้ดที่เยอะ และซับซ้อน ทำให้สามารถพัฒนา Microservices ได้โดยไม่มึน
- มีนักพัฒนาที่ใช้ Java เป็นจำนวนมาก ทำให้สังคมของ Java นั้นใหญ่ สามารถสอบถามได้ไม่ยาก
- Java เป็นภาษาที่ stable มาก ๆ เนื่องด้วยเป็นภาษาที่มีมานาน
- สามารถย้ายจาก system หนึ่งไปยังอีก system หนึ่งได้ง่าย
- สามารถทดลองพัฒนา Microservices โดยใช้ภาษา หรือ Framework อื่น ๆ ได้ง่าย โดยไม่ต้องลงทุนเยอะมาก
ด้วยความที่ Java เป็นภาษาที่มีมานาน ทำให้ตรงนี้เอง Java สามารถใช้พัฒนาได้หลากหลายอย่างมาก ไม่ว่าจะเป็น Mobile App, Desktop GUI Application, Web-based Application, Gaming, เทคโนโลยีที่เกี่ยวกับ Big Data, Cloud/Distributed Application หรือแม้แต่ IoT Application
ตัวอย่าง Java Framework: Spring Boot, DropWizard, Jersey, Restlet, Spark
Logo from python.org
Python
Python ได้รับการพัฒนาครั้งแรกในช่วงปลาย 1980s โดย Guido van Rossum เป็นอีกหนึ่งภาษาที่ได้รับความนิยม และกำลังมาแรงในปัจจุบัน ไม่ว่าจะเป็นในด้าน Data หรือการพัฒนาระบบต่าง ๆ ก็ตาม ด้วยความเป็นที่นิยมของมันนั่นเอง ทำให้นักพัฒนาเริ่มหันมาศึกษา และพัฒนาด้วย Python ในด้านต่าง ๆ มากยิ่งขึ้น
ข้อดีของ Python
- เป็นภาษาที่อ่านง่าย ง่ายต่อการเรียนรู้ และทำความเข้าใจ ซึ่งเป็นเหตุผลที่ Python เป็นภาษาที่นักพัฒนารุ่นใหม่นิยมเรียนกัน
- สามารถสร้าง prototype ได้ง่าย และรวดเร็ว มี Productivity ในการพัฒนาที่สูง
- สามารถ maintain ได้ง่าย ใช้ทรัพยากรในการบำรุงรักษาน้อย
- Bug ที่เกิดจากการพัฒนาด้วย Python ไม่สามารถก่อให้เกิด Segmentation Fault ได้
- Python มีฟีเจอร์ในการ Integration ที่ดีมาก รวมถึง Framework สำหรับ Unit Testing และความสามารถในการควบคุม (Control Capability) ที่เหนือชั้น ทำให้ Microservices ที่พัฒนาด้วย Python มีประสิทธิภาพที่ยอดเยี่ยม และรวดเร็วมาก
- สามารถ integrate กับเทคโนโลยีอื่น ๆ ได้ดี
ข้อเสียของ Python
- มีความเร็วในการ Execute ต่ำ เพราะ Python ทำงานเป็น Interpreter ไม่ใช่ Compiler
- เป็นภาษาที่มีขีดจำกัดในการ design
- ใช้เวลาในการ Test นาน
- นักพัฒนาจะสามารถตรวจจับ bug ได้เฉพาะช่วง Runtime เท่านั้น
- ใช้ memory ในการทำงานเยอะ
- มีความปลอดภัยที่หละหลวม ทำให้ไม่ค่อยมีใครใช้ใน Web Browser
สรุปง่าย ๆ คือ Python ไม่ได้เหมาะสมกับทุกโปรเจกต์เสมอไป เป็นภาษาที่ดีถ้าอยากพัฒนาใน Automated Build, Data Analysis หรือระบบ Machine Learning หากสนใจ Python สามารถลองศึกษาได้จากที่นี่เลย
ตัวอย่าง Python Framework: Flask, Falcom, Bottle, Nameko, CherryPy
Logo from isocpp.org
C++
C++ ถูกสร้างโดย Bjarne Stroustrup พร้อมจุดประสงค์แรกที่จะเป็นแค่ส่วนต่อขยายของภาษา C เท่านั้น C++ เป็นภาษาแบบ cross-platform ที่ใช้พัฒนาแอปพลิเคชั่นประสิทธิภาพสูง ที่ให้ความสามารถกับนักพัฒนาในการควบคุม resource และ memory ของระบบได้ดี
ข้อดีของ C++
- เป็นภาษาที่ simple ทำให้นักพัฒนาสามารถพัฒนาได้ไม่ยาก
- สามารถพัฒนาโปรแกรมที่รวดเร็ว และเคลื่อนย้ายได้สะดวก
- สามารถทำงานได้หลาย task ในครั้งเดียว (Concurrency)
- เป็นภาษาสำหรับสร้างแอปที่มีประสิทธิภาพสูง
ข้อเสียของ C++
- ไม่มี built-in support สำหรับ threads
- ไม่มีระบบการจัดการ memory แบบอัตโนมัติ (Garbage Collection)
สำหรับ C++ นั้นเป็น Object-Oriented Programming (OOP) ที่เหมาะสำหรับการพัฒนา Automotive Application, Banking Application, Cloud/Distributed System, Database Server, Robotic และ Appliance ต่าง ๆ
Logo from ruby-lang.org
Ruby
Ruby ถูกพัฒนาขึ้นโดย Yukihiro “Matz” Matsumoto และปล่อยออกสู่สังคมในปี 1995 ที่เน้นความเรียบง่าย และความ productive ในการพัฒนา อีกทั้งยังเป็นภาษาที่ใช้เขียนโปรแกรมเชิงวัตถุแบบ 100% อีกด้วย (Object-Oriented Programming; OOP)
ข้อดีของ Ruby
- สนับสนุนการทำงานกับแพลตฟอร์มอื่น ๆ รวมถึงสามารถเข้ากันได้กับภาษาต่าง ๆ
- สามารถพัฒนาระบบได้อย่างรวดเร็ว
- สามารถ scale ระบบไปพร้อม ๆ กันได้
- เป็นภาษาที่ถูกสร้างมาเพื่อการพัฒนาแอปพลิเคชั่นที่ high reliability
ข้อเสียของ Ruby
- ยังมีข้อจำกัดในเรื่องประสิทธิภาพ และการทำงานแบบ multithreading
Ruby เป็นภาษาที่ friendly สำหรับ Startup และบริษัทต่าง ๆ ด้วยความสามารถที่เหมาะสมกับความต้องการทางธุรกิจ เช่น การจัดการข้อมูลต่าง ๆ ของบริษัท หรือแม้แต่ web application, web server, system utilities, backups, หรือการ parsing ก็ตาม
Logo from nodejs.org
JavaScript (Node.js)
หากพูดถึง Microservices ที่พัฒนาด้วย JavaScript ก็คงหนีไม่พ้น Node.js เป็นแน่ Node.js เป็น Cross-Platform Runtime Environment ที่ถูกสร้างโดย Ryan Dahl ในปี 2009 ซึ่งมีจุดเด่นตรงที่นักพัฒนาสามารถพัฒนาแอปพลิเคชั่นที่รัน JavaScript ได้ทั้งในฝั่งของ client และ server
ข้อดีของ Node.js
- มีประสิทธิภาพสูงสำหรับ real-time application
- สามารถ scale ระบบได้ง่าย
- มี community ที่ใหญ่ นักพัฒนาสามารถช่วยกันตอบคำถามได้ตลอด
- ศึกษาได้ง่าย และปรับตัวได้รวดเร็ว
- แอปพลิเคชั่นมี response time ที่รวดเร็วมาก และประสิทธิภาพที่ดี
- ช่วยลดระยะเวลาการโหลดโดยการใช้ cache
- สามารถพัฒนาแอปพลิเคชั่นแบบ Cross-Platform ได้
ข้อเสียของ Node.js
- เมื่อมีงานที่ต้อง compute หนัก ประสิทธิภาพจะลดลง
- Unstable API ทำให้การพัฒนาด้วย Node.js นั้น อาจทำให้โค้ดของคุณเปลี่ยนแปลงบ่อยครั้ง
- การเขียน code แบบ asynchronous ยากในการ maintain code
- การขาดการสนับสนุนจาก library ต่าง ๆ ทำให้อาจเกิดข้อปกพร่องกับโค้ดของคุณได้
หลัก ๆ แล้ว Node.js จะเหมาะกับการพัฒนา Real-time application, Collaborative tool, Data streaming application, หรือแอปพลิเคชั่นที่ต้อง scale อยู่เรื่อย ๆ
สรุปรวบยอดภาษา Microservices
แต่ละภาษาต่างก็มีข้อดี-ข้อเสียแตกต่างกันไปขึ้นอยู่กับจุดประสงค์ของเรา ในบทความนี้เป็นเพียงการยกตัวอย่างภาษาที่ได้รับความนิยมเท่านั้น จริง ๆ แล้วยังมีเทคโนโลยีอีกหลากหลายมาก ๆ
ซึ่งการเลือกใช้ภาษาเป็นเพียง check point หนึ่งในขั้นตอนที่มากมาย หากเราออกแบบ Microservices ไม่ดี เราก็อาจจะไม่สามารถดึงประสิทธิภาพของภาษา หรือเครื่องมือที่ใช้มาได้อย่างเต็มที่ หรือแม้ว่าเราจะสามารถพัฒนาได้แล้ว แต่ก็อาจจะมีข้อผิดพลาดที่เราไม่สามารถรู้ได้ซ่อนอยู่ ซึ่งอาจจะส่งผลต่อระบบของเราในภายภาคหน้าได้
ดังนั้นการพัฒนา Microservices ที่ดี นักพัฒนาทุกคนควรรู้ทุกมุมมองตั้งแต่ต้นน้ำยันปลายน้ำ ตั้งแต่การ design การ develop ไปจนถึงการ deploy ขึ้นระบบ และต้องรู้แบบ Best Practices ด้วย เพื่อที่จะได้ไม่เสียเวลาในการปล่อยระบบเราออกสู่ตลาด และไม่เสียโอกาสทางธุรกิจให้กับคู่แข่งของเรา
หากอ่านแล้วอยากเริ่มที่จะทำ Microservices แต่ไม่รู้ว่าจะทำอย่างไรดี ไม่รู้ว่าควรจะเริ่มเรียนจากอะไร เรามีเวิร์กชอปมาแนะนำให้เหมือนกัน
เวิร์กชอป 4 วันเต็ม ที่จะทำให้คุณรู้ลึก รู้จริง ลงมือพัฒนา Microservices แบบผู้เชี่ยวชาญตัวจริง
โดยคุณปุ๋ย – สมเกียรติ ปุ๋ยสูงเนิน (Technical Coach & Software Craftsman ที่สยามชำนาญกิจ เจ้าของบล็อก somkiat.cc และ Facebook Page somkiat.cc)
ที่จะสอนคุณหมดเปลือก
- ตั้งแต่ Design Develop ไปจนการ Deploy ขึ้นระบบ
- ลงมือทำจริง แบบ Best Practices ฉบับผู้เชี่ยวชาญตัวจริง
- เข้าใจว่า Microservices คืออะไร? เหมาะกับองค์กรของเราไหม? เอามาปรับใช้จะดีหรือเปล่า? ส่วนไหนของที่เหมาะ-ไม่เหมาะกับเราบ้าง?
- โจทย์จริงจากเคสจริง เรียนจากประสบการณ์จริงกว่า 10 ปี
- รับคำแนะนำอย่างใกล้ชิดจากคุณปุ๋ยตลอดการทำเวิร์กชอป
สามารถศึกษารายละเอียดเวิร์กชอปเพิ่มเติมได้ที่นี่
Design | Development to Deployment | Bundle
หรือถ้ายังตัดสินใจไม่ได้ว่าจะเรียนเวิร์กชอปดีไหม อาจจะเริ่มจากทฤษฎีเบื้องต้นก่อนก็ได้ ทางเราก็มีคอร์สออนไลน์ที่จะสอนพื้นฐาน Microservices มาแนะนำเช่นกัน ซึ่งก็สอนโดยคุณปุ๋ยคนเดิมเลย เรียกได้ว่ารับประกันคุณภาพ รับความรู้ไปแบบเต็ม ๆ เลยทีเดียว
สามารถศึกษารายละเอียดคอร์สออนไลน์ได้ที่นี่
แหล่งอ้างอิง:
Overview of Top 5 Languages to Build Microservices | RubyGarage Blog
Best Languages for Microservices. Today microservices are a significant… | by Sandra Parker | Bits and Pieces (bitsrc.io)
5 Best Technologies To Build Microservices Architecture (clariontech.com)
Stack Overflow Developer Survey 2020
Abstraction: Why hiding implementation details is important ? – stackroute (wordpress.com)
C++ Introduction (w3schools.com)
Go (programming language) – Wikipedia
History of Java – Javatpoint
Python (programming language) – Wikipedia
About Ruby (ruby-lang.org)
Node.js – Introduction – Tutorialspoint
Advantages & Disadvantages of Node.js : Why to Use Node.js? (simform.com)
Ruby vs Python: Choosing Your First Programming | Course Report
What Is Node.js Used For? 5 Best Use-Cases | Brainhub
Why and When to Use Node.js in 2021 [Complete Guide] (relevant.software)
What Is Ruby Used For? | Mix & Go (mixandgo.com)
C++ Language: Features, Uses, Applications & Advantages – Hackr Blog
What is Java Used For? – Javatpoint