จาก 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

เพื่อให้ระบบงานเล็กลง ทำงานอย่างเดียว
ที่สำคัญง่ายต่อการนำ Docker มาใช้งานอีกด้วย
โดย code ตัวอย่างจะใช้ Mono-repository
คือทั้ง Frontend และ Backend อยู่ใน repository เดียวกัน

จากนั้นทำการสร้าง Dockerfile ของแต่ละส่วน

สำหรับ Java application นั้นจะมีการทำงาน 2 ขั้นตอนคือ

  1. ทำการ compile/test และสร้าง artifact file เช่น JAR/WAR/EAR
  2. ทำการ deploy artifact file ไปยัง Application server ซึ่งใช้ทั้ง JBOSS Wildfly และ Apache TomEE

โดยในการสร้าง Dockerfile จะใช้ multi-stage
ดังนั้นจึงสร้างเพียงไฟล์เดียวเท่านั้น ง่ายมาก ๆ
ยังไม่พอนะ ยังนำ docker-compose มาช่วย
เมื่อทำการ deploy ระบบทั้ง Frontend และ Backend
ส่งผลให้ปัญหาเรื่องของการ deploy ลดน้อยลงไปอย่างมาก
ซึ่งเป็นอีกหนึ่งตัวอย่างที่น่าสนใจนะครับ

สามารถดู VDO ในทุก session ของงานได้ที่
DockerCon EU 2017 :: All Videos

Reference Websites
https://blog.docker.com/2017/11/mta-java-apps-for-it-pros/

Tags:,