Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

สรุปเรื่อง Modernizing Java Apps with Docker จากงาน DockerCon EU 2017

$
0
0

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

Viewing all articles
Browse latest Browse all 1997

Trending Articles