Credit: AWS
ทักทายผู้อ่าน
สวัสดีครับผู้อ่านทุกท่าน ในบทความนี้ผมจะพาผู้อ่านทุกท่านไปทำความรู้จักกับ Spring Boot ซึ่งมี Spring Cloud เป็น Services ที่ได้รับความนิยมมาก โดยในบทความนี้จะมีตัวอย่างของโค้ดสำหรับการทำ Spring Cloud กับระบบของ AWS ด้วย ถ้าผู้อ่านพร้อมแล้วก็ไปลุยกันเลยครับ!!
AWS Spring Cloud คืออะไร มาทำความเข้าใจกัน
ต้องขอเกริ่นก่อนว่าในปัจจุบันนี้แทบทุกบริษัทนั้นก็ล้วนใช้ Microservices architecture แทนที่แบบ Full monolithic (ซึ่งเป็นการรวมทั้งระบบใหญ่ ๆ ไว้ใน code base เดียวกัน) และ Microservices ก็ได้เข้ามาทำหน้าที่การจำแนกแบ่ง Monolithic ออกตามระบบของธุรกิจในการสร้างแอปพลิเคชั่นเพื่อทำให้พัฒนาระบบได้เร็วขึ้น เนื่องจากแต่ละ Service มีความเป็นอิสระและขึ้นต่อกันแบบหลวม ๆ ทำให้สามารถแยกทำ Continuously delivered เป็นอิสระของแต่ละทีมแต่ละ Service ไปได้
Spring Cloud เป็นกลุ่มเครื่องมือจาก Pivotal ที่ช่วยในการสร้าง Microservices บน Cloud โดย Spring Cloud ได้ทำการปล่อยเวอร์ชั่น 1 ตั้งแต่ปี 2015 โดยได้ทำการเพิ่ม Spring Cloud Netflix ซึ่งมาจาก Netflix OSS เข้ามาด้วย เช่น Eureka, Hystrix, Zuul และ Ribbon และ Spring Cloud ก็เข้ามาช่วยการจัดการและแก้ปัญหาต่าง ๆ ดังนี้ (สำหรับ Netflix Spring Cloud อ่านต่อได้ด้านล่าง)
- Configuration Management ช่วยทำหน้าที่ในการทำ Centralized configuration ของระบบ โดยใน Spring Cloud จะเรียกว่า Spring Cloud Config ซึ่งเป็น Git-backed configuration server
- Service Discovery ช่วยจัดการเรื่องเชื่อมต่อสื่อสารระหว่าง Service ในรูปแบบของ Client-server model
- Circuit Breakers ช่วยในการ handle failure ของ Microservices โดยตัว Circuit breakers จะช่วยให้เราทำงานกับ default service แทนในกรณีที่ service ที่เรา communicating ด้วยตายไป
- API Gateway โดยตัว API Gateway ช่วยในการทำ Centralized routing และ Caching ของ services
เว็บไซต์หลักของ Spring Cloud สำหรับ AWS นั้นคือ https://awspring.io ซึ่งมีรายละเอียดครบถ้วนให้ได้ศึกษากันครับ
กรณีศึกษา
Credit: https://www.youtube.com/watch?v=6wvVANQ6EJ8
ตัวอย่างที่อยากจะขอยกมาก็คือบริษัท Netflix ซึ่งเป็นบริษัท Media ขนาดใหญ่ที่ให้บริการ Streaming media และ Video แบบออนไลน์ โดยในปัจจุบัน Netflix มีลูกค้ากว่า 100 ล้าน users ทั่วโลก Netflix เริ่มใช้ Cloud และ Microservices มาตั้งแต่ปี 2008 โดย Microservices ที่ Netflix สร้างตั้งอยู่บนพื้นฐานของ Amazon Web Services (AWS) และ Netflix ได้ทำการปล่อย libraries และ open source software ออกมาให้ได้ใช้งานจริง ๆ กัน ซึ่งเราเรียกระบบแบบนี้ว่า Netflix OSS
มาลองสร้าง Spring Cloud ง่าย ๆ กัน
สิ่งที่ต้องเตรียมก่อน
เริ่มต้นเลยจะต้องมีความคุ้นเคยกับภาษา Java และเคยใช้ Spring Boot มาก่อน รวมไปถึง Amazon S3 และ Amazon SQS ด้วย
เริ่มด้วยการ Setup Spring Cloud สำหรับ AWS
แล้วก็ตามด้วยการสร้างไฟล์ application.yml โดยเราจะต้องกำหนด keys ดังต่อไปนี้
คราวนี้เราก็มาเริ่มทำ Spring Boot กัน
เราเริ่มด้วยการ configure AmazonS3Client โดยการใช้ DashboardController ดังนี้
นอกจากนี้เรายังสามารถ access โมเดลได้โดยการ render ตัวตาราง HTML สำหรับไฟล์แต่ละไฟล์ใน S3 bucket ดังนี้
แล้วเราก็สามารถ access ไฟล์ S3 File Viewer หลังจากเริ่ม application ของเราด้วยไฟล์ ./gradlew bootRun โดยเปิดบราวเซอร์ไปที่ URL: http://localhost:8080/
หลังจากนั้นเราก็สามารถทำการ subscribe ไปกับ SQS queue ได้ โดยเราสามารถสร้าง synchronization mechanism และทำการอัพเดท File viewer ในบราวเซอร์โดยใช้ WebSockets ได้ ดังนี้
โดยสรุปแล้ว Spring Cloud AWS นั้นทำให้ AWS เป็นผู้นำอันดับหนึ่งทางด้านการให้บริการ Spring Boot application โดยเราสามารถทำการ integrate บริการของ AWS เช่น SQS กับ S3 หรือ Parameter Store เข้ากับ Spring service ได้ นอกจากนี้ยังมี Features ของ Spring Cloud AWS อีกหลาย ๆ รองรับ AWS services: เช่น Amazon Relational Database (Amazon RDS) ก็รองรับ read/write replicas, Amazon Simple Email Service (Amazon SES) integration, Amazon Simple Notification Service (Amazon SNS) และการรองรับ CloudFormation
ทิ้งท้าย (How to Start)
อ่านมาจนถึงตรงนี้ถ้าหากผู้อ่านมีความสนใจในบริการของ AWS โดยเฉพาะถ้าอยากจะปรึกษาเกี่ยวกับการให้บริการ AWS ที่มีการใช้ประโยชน์ของ Spring Boot กับ Spring Cloud นั้นสามารถติดต่อ Cloud HM เพื่อให้คำปรึกษาได้โดยตรงเลยครับ เพราะเรามีผู้เชี่ยวชาญที่สามารถให้คำแนะนำได้สอดคล้องกับรูปแบบของบริษัทและเรามีการให้บริการ Cloud Platform ครบวงจร ทั้ง Domestic Cloud และ Global Cloud เพื่อตอบสนองความต้องการรอบด้านของลูกค้าครับ
อ้างอิง
- https://github.com/awspring/spring-cloud-aws
- https://docs.awspring.io/spring-cloud-aws/docs/3.0.1/reference/html/index.html
- https://aws.amazon.com/blogs/mt/approach-to-migrate-spring-cloud-microservices-applications-to-amazon-eks/
- https://reflectoring.io/spring-cloud-aws-sqs/
- https://www.youtube.com/watch?v=6wvVANQ6EJ8
เรียบเรียงบทความโดย รังสิมันต์ เกษแก้ว
— Cloud HM