คำถามที่เจอจากการปรับปรุงการทำงานของระบบที่พัฒนาด้วย Spring Boot
ว่าจะลดเวลาของการ start up และการใช้งาน memory ลงอย่างไรบ้าง ?
โดยแนวทางก็มีหลายอย่างทั้ง
- ลดจำนวน bean ของการ initial ตอน load ซึ่ง load เท่าที่จะใช้งาน
- เปลี่ยนไปใช้ GraalVM หรือ Spring Native ไปเลย
- เปลี่ยนจากทำงานแบบ request-response model มาเป็น Reactive เช่น WebFlux, Vert.x เป็นต้น
- เปลี่ยนมาใช้ JDK ตัวใหม่ ๆ
- เปลี่ยนภาษาเลยดีไหม ซึ่งก็ได้ทำ performance test เปรียบเทียบไปแล้ว
มีอีกวิธีที่น่าสนใจคือ เปลี่ยน JVM จาก Hotspot มาเป็น OpenJ9
โดยที่ OpenJ9 นั้นถูกพัฒนามาจาก community
ซึ่งตอนนี้อยู่ภายใต้ Eclipse foundation
มีเป้าหมายเพื่อปรับปรุง JVM
ให้ทำงานได้อย่างมีประสิทธิภาพมากกว่า HotSpot ของ Oracle
ทั้งความเร็วและการใช้ resource ต่าง ๆ
ช่วยให้ระบบที่พัฒนาเหมาะสมต่อการ deploy บนระบบ cloud มากยิ่งขึ้น
ในการใช้งานนั้นสามารถ Download ง่าย ๆ ได้จาก AdoptionOpenJDK
หรือจะใช้งานผ่าน Docker Image ได้เลย
ซึ่งผมเคยทำการสรุปไว้แล้วที่ มาใช้งาน OpenJ9 + Docker
แต่ก็ยังมีตัวอื่น ๆ ถูกพัฒนาเพิ่มเข้ามา เช่น SubstrateVM
เป็น internal project ที่อยู่ด้านหลังของ GraalVM อีกที
ที่ลดการใช้งาน memory ไปมากอีกด้วย
และเท่าที่ดู HotSpot version ใหม่ ๆ
ก็จะมี performacne ไปในทิศทางเดียวกับ OpenJ9 เช่นเดียวกัน
ดังนั้นคนใช้งานจำเป็นต้องรู้และเข้าใจ
ตลอดจนนำมาทดสอบในระบบงานของเราอีกด้วย
เพื่อให้เห็นชัดว่า เหมาะสมกับระบบงานหรือความต้องการหรือไม่ต่อไป