จาก VDO เรื่อง Modernizing Java Apps with Docker จากงาน DockerCon EU 2017
ซึ่งเป็นอีก session หนึ่งที่ตรงกับแนวคิดหลักของงานคือ Modernizing Traditional Application (MTA)
โดยที่ Traditional Application
คือระบบงานที่พัฒนามาหลายปีแล้ว
แต่ยังเป็นหัวใจหลักหรือตัวขับเคลื่อนหลักขององค์กร
แน่นอนว่า ทั้ง developer และ operation
ต้องทำงานอย่างหนักเพื่อพัฒนาและดูแลรักษาระบบเหล่านี้
เนื่องจาก code มันยุ่งเหยิงมาก ๆ
มีหลาย ๆ ส่วนเรียกกันไปมา
แก้ไขครั้งแต่ละครั้งใช้เวลานานและผลกระทบสูงมาก ๆ
จะแก้ไขต้นเหตุของปัญหาก็ไม่ได้ เวลาไม่พอ
หรือไม่อยากรับผิดชอบ
ดังนั้นจึงทำการ patch/hack code เพื่อให้สามารถทำงานได้
หรือทำการ wrapper สิ่งต่าง ๆ เหล่านี้ไว้อีกชั้น
ยิ่งทำให้เกิดความซับซ้อนมากขึ้นไปอีก
การทดสอบและ deploy/release ระบบงาน
ต้องใช้เวลานานมาก ๆ
ปัญหาเยอะจริง ๆ นะ Traditional Application !!
โดยใน session นี้เน้นไปที่
การจัดการ infrastructure ของระบบ การจัดการ dependency/library ต่าง ๆ เพื่อช่วยลดปัญหาในเรื่องของการ ทดสอบ และ deploy ส่งมอบได้รวดเร็วขึ้น สามารถรับมือกับการเปลี่ยนแปลงของตลาดที่รวดเร็วได้ ทำให้แข่งขันกับคู่แข่งได้ดีขึ้น กระบวนการทำงานหรือที่เรียกว่า Pipeline จะเริ่มตั้งแต่การ push code มายัง version control จนไปถึงการส่งมอบหรือ delivery ซึ่งทำงานแบบอัตโนมัติ ปลอดภัย และรวดเร็ว ยังไม่พอนะ ระบบต้องสามารถ scale ตามความต้องการได้ ทั้งการขยายหรือหด (Elastic Scaling) ยังไม่พออีกนะ ระบบต้องสามารถไป run ใน infrastructure ที่แตกต่างกันได้อีก (Portability) ถ้าการ deploy มีปัญหาหรือไม่สำเร็จ ต้องสามารถ rollback กลับไปยัง version ก่อนหน้าได้แบบอัตโนมัติสิ่งต่าง ๆ เหล่านี้รวมกัน มันคือคุณสมบัติของ Modern Applicationแน่นอนว่ามันขัดแย้งต่อ Traditional Application อย่างมาก ดังนั้นนี่คือ ความท้าทายที่หลาย ๆ คนกำลังเผชิญอยู่ เพื่อหาเส้นทางไปให้ถึง Moden Application !! หนึ่งในเครื่องมือที่นำมาช่วยแก้ไขปัญหาคือ Docker นั่นเอง
ตัวอย่างระบบงานใน session นี้เป็นระบบที่พัฒนาด้วย Java EE 7
โดยใช้ JavaServer Face กับ JPA (Java Persistence API) ชีวิตมัน monolith มาก ๆ ตายหมู่ชัด ๆ สามารถดู code ได้ที่ Github:: JavaEE Demo ดังนั้นจากระบบดังกล่าว สิ่งที่ต้องทำก่อนเลย คือ การแยกส่วนของ Frontend และ Backend ออกจากกัน- Frontend พัฒนาใหม่ด้วย React ซึ่งทำแบบค่อยเป้นค่อยไป ไม่ใช่ทำครั้งเดียวนะ
- Backend พัฒนาด้วย JPA + REST API + JSON
จากนั้นทำการสร้าง Dockerfile ของแต่ละส่วน
สำหรับ Java application นั้นจะมีการทำงาน 2 ขั้นตอนคือ- ทำการ compile/test และสร้าง artifact file เช่น JAR/WAR/EAR
- ทำการ deploy artifact file ไปยัง Application server ซึ่งใช้ทั้ง JBOSS Wildfly และ Apache TomEE