บันทึกการ 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 ที่สูงขึ้น
ลดไปหลายอย่าง แต่ก็เพิ่งสิ่งใหม่ ๆ ให้เรียนรู้เช่นกัน