บันทึกการ migrate ระบบงานที่พัฒนาด้วย Spring Boot + Spring Cloud
มายัง container-based ทั้ง Docker และ Kubernetes ไว้นิดหน่อย
เนื่องจากมีบางอย่างที่เราสามารถตัดทิ้งออกไปได้
เพราะว่ามีอยู่ใน Docker และ Kubernetes แล้ว

โดยปกติระบบงานที่พัฒนาด้วย Spring Boot + Spring Cloud

จะใช้งาน library ต่าง ๆ ดังนี้

  • Service discovery และ registry จะใช้งาน Spring Cloud Netflix ชื่อว่า Eureka
  • จัดการ config แบบ centralize configuration ด้วย Spring Cloud Config
  • จัดการ routing ต่าง ๆ ผ่าน API gateway โดยใช้งาน Spring Cloud Gateway หรือใช้งาน Zuul
  • ทำการ expose ข้อมูลต่าง ๆ ของ service รวมทั้ง health check ผ่าน Spring Actuator ทำงานรวมกับ Micrometer + Prometheus + Grafana ก็ว่ากันไป
  • ทำการ tracing การทำงาน service-to-service ด้วย Spring Cloud Sleuth
  • สาย logging ก็ใช้ logback แล้วเขียนลงไฟล์ หรือ เอาไปลง ELK (Elasticsearch, Logstash, Kibana) + Beats หรือพวก EFK (Elasticsearch, Fluentd, Kibana)

แต่เมื่อ migrate มายัง Docker และ Kubernetes ก็ได้ลดหลาย ๆ อย่างลงไป

ยกตัวอย่างเช่น

  • Service discovery และ registry ไม่ต้องใช้งาน Eureka แล้ว ไปใช้งาน service ของ Kubernetes ได้เลย หรือใช้ service ใน docker compose และยังทำหน้าที่เป็นเหลือ load balancer ให้อีกด้วย
  • ใช้งาน Config Map และ Secret ใน Kubernetes แทน Spring Cloud Config หรือเปลี่ยนไปใช้ Vault ได้
  • ใช้งาน Ingress ใน Kubernetes แทน Spring Cloud Gateway และ Zuul ไป
  • เริ่มเอา Spring Native ซึ่งตอนนี้เปลี่ยนเป็น GraalVM Native Support มาใช้งานในการสร้าง container image ที่มีขนาดเล็ก และใช้งาน resource น้อยลง แต่แลกมาด้วย build time ที่สูงขึ้น

ลดไปหลายอย่าง แต่ก็เพิ่งสิ่งใหม่ ๆ ให้เรียนรู้เช่นกัน