Spring Boot คือ ตอนที่ 12 : การพัฒนาไมโครเซอร์วิส (Microservices)

  1. แนะนำไมโครเซอร์วิส
  2. ทำไมต้อง Spring Boot สำหรับไมโครเซอร์วิส
  3. การสร้าง Microservice โดยใช้ Spring Boot
  4. เบื้องต้นเกี่ยวกับ Spring Cloud

แนวคิดของสถาปัตยกรรม microservices ทำให้โลกของการทำแอพต้องหยุดชะงัก รูปแบบสถาปัตยกรรมนี้แบ่งแอปพลิเคชันขนาดใหญ่ที่เป็นเสาหินออกเป็นคอลเล็กชันของบริการที่เชื่อมต่อกันแบบหลวมๆ ขนาดเล็กกว่า ซึ่งสามารถทำแอพ ปรับใช้ และปรับขนาดได้อย่างอิสระ ในโพสต์นี้ เราจะสำรวจไมโครเซอร์วิสในบริบทของ Spring Boot ซึ่งเป็นตัวเลือกยอดนิยมสำหรับการทำแอพไมโครเซอร์วิสเนื่องจากความเรียบง่ายและทรงพลัง

1. แนะนำไมโครเซอร์วิส

ก่อนที่เราจะดำดิ่งสู่แง่มุมเชิงปฏิบัติ เรามาสรุปโดยย่อกันก่อนว่าไมโครเซอร์วิสคืออะไร สถาปัตยกรรมไมโครเซอร์วิสจัดโครงสร้างแอปพลิเคชันเป็นคอลเล็กชันของบริการที่เชื่อมต่อกันแบบหลวมๆ ซึ่งใช้ความสามารถทางธุรกิจ แต่ละบริการทำงานตามกระบวนการของตนเองและสื่อสารกับบริการอื่นๆ ผ่าน HTTP/REST, RPC หรือการส่งข้อความ รูปแบบสถาปัตยกรรมนี้ช่วยให้สามารถปรับใช้ส่วนต่างๆ ของระบบได้อย่างอิสระ โดยแต่ละส่วนอาจทำงานในสภาพแวดล้อมที่แตกต่างกันและใช้ภาษาโปรแกรมที่แตกต่างกัน

ประโยชน์บางประการของสถาปัตยกรรม microservices ได้แก่:

  • ความเป็นอิสระ : บริการต่างๆ ได้รับการพัฒนา ปรับใช้ และปรับขนาดโดยอิสระ ทำให้เกิดความคล่องตัวและความยืดหยุ่นที่มากขึ้น
  • ความยืดหยุ่น : สามารถเขียนบริการในภาษาการเขียนโปรแกรมที่แตกต่างกันและใช้เทคโนโลยีการจัดเก็บข้อมูลที่แตกต่างกัน
  • ความสามารถในการปรับขนาด : ส่วนประกอบแต่ละชิ้นสามารถปรับขนาดได้อย่างอิสระตามความต้องการเฉพาะ

2. ทำไมต้อง Spring Boot สำหรับไมโครเซอร์วิส

Spring Boot เป็นเฟรมเวิร์กอันทรงพลังที่ทำให้การบูทสแตรปและทำแอพ Spring ใหม่ง่ายขึ้น มีเครื่องมือและฟีเจอร์มากมายที่ออกแบบมาเพื่อให้คุณพร้อมและใช้งานได้โดยเร็วที่สุด เมื่อใช้กับโครงการ Spring Cloud จะกลายเป็นตัวเลือกที่ยอดเยี่ยมสำหรับการสร้างไมโครเซอร์วิสที่แข็งแกร่งและปรับขนาดได้ นี่คือเหตุผล:

  • การกำหนดค่าอัตโนมัติ : Spring Boot กำหนดค่าแอปพลิเคชันของคุณโดยอัตโนมัติตามการอ้างอิงที่คุณเพิ่มลงในโครงการ
  • แบบสแตนด์อโลน : แอปพลิเคชัน Spring Boot เป็นแอปพลิเคชันระดับการผลิตแบบสแตนด์อโลนที่คุณสามารถ “เรียกใช้” ได้
  • พร้อมสำหรับการผลิต : นำเสนอคุณลักษณะที่ไม่ได้ใช้งาน เช่น เมตริก การตรวจสอบความสมบูรณ์ และการกำหนดค่าภายนอก
  • การผสานรวมกับ Spring Ecosystem : ผสานเข้ากับโครงการ Spring อื่นๆ เช่น Spring Data, Spring Security และอื่นๆ ได้อย่างลงตัว

3. การสร้าง Microservice โดยใช้ Spring Boot

ตอนนี้มาสร้างไมโครเซอร์วิสอย่างง่ายโดยใช้ Spring Boot เราจะสร้างบริการ ‘Product’ ที่จะเปิดเผย REST API เพื่อดำเนินการ CRUD บนทรัพยากรผลิตภัณฑ์

การตั้งค่า

เราจะเริ่มต้นด้วยการตั้งค่าสภาพแวดล้อมการทำแอพของเรา เราจำเป็นต้องมี Java Development Kit (JDK) และ Spring Boot วิธีที่ง่ายที่สุดในการทำแอพ Spring Boot คือการใช้ Spring Initializr เยี่ยมชมเว็บไซต์ Spring Initializr ( https://start.spring.io/ ) และกรอกแบบฟอร์มดังต่อไปนี้:

  • Project: Maven Project
  • Language: Java
  • Spring Boot Version: 2.6.x (หรือเวอร์ชันเสถียรล่าสุด)
  • Group: com.yourname
  • Artifact: product-service
  • Name: product-service
  • Package Name: com.yourname.productservice
  • Packaging: Jar
  • Java Version: 11

คลิก สร้าง เพื่อดาวน์โหลดไฟล์ ZIP ที่มีโครงกระดูกโครงการ แยกไฟล์ ZIP ลงในไดเร็กทอรีบนคอมพิวเตอร์ของคุณและเปิดโครงการใน IDE ที่คุณชื่นชอบ

สร้างบริการผลิตภัณฑ์

บริการ ‘Product’ ของเราจะเป็นแอปพลิเคชัน Spring Boot อย่างง่ายที่เปิดเผย REST API เราต้องการการอ้างอิงต่อไปนี้:

  • Spring Web: เพื่อรวมการทำงานของเว็บ
  • Spring Data JPA: เพื่อโต้ตอบกับฐานข้อมูล
  • ฐานข้อมูล H2: ฐานข้อมูลในหน่วยความจำสำหรับวัตถุประสงค์ในการทำแอพ

คุณสามารถเพิ่มการอ้างอิงเหล่านี้ได้โดยรวมสิ่งต่อไปนี้ใน Maven ของคุณpom.xml:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>

ต่อไปเราจะสร้างเอนทิตีProduct มันจะเป็นคลาส Java อย่างง่ายที่มีคำอธิบายประกอบ @Entity เพื่อทำเครื่องหมายว่าเป็นเอนทิตี JPA:

@Entity
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String description;
    private BigDecimal price;

    // Getters and setters omitted for brevity
}

เราจะสร้างอินเทอร์เฟซ ProductRepository ที่ขยาย JpaRepository ซึ่งจะให้ชุดวิธีการมาตรฐานในการดำเนินการกับฐานข้อมูลแก่เรา:

public interface ProductRepository extends JpaRepository<Product, Long> {
}

ต่อไป เราจะสร้างคลาส ProductController ซึ่งจะจัดการคำขอและการตอบสนอง HTTP จะใช้ ProductRepository เพื่อดำเนินการกับเอนทิตี Product:

@RestController
@RequestMapping("/products")
public class ProductController {

    private final ProductRepository repository;

    public ProductController(ProductRepository repository) {
        this.repository = repository;
    }

    @GetMapping
    public List<Product> getAll() {
        return repository.findAll();
    }

    // Other CRUD methods omitted for brevity
}

ณ จุดนี้ เรามีไมโครเซอร์วิสที่ใช้งานได้ คุณสามารถเรียกใช้งานได้โดยเรียกใช้เมธอด main ในคลาส ProductServiceApplication คุณควรจะสามารถส่งคำขอ HTTP http://localhost:8080/products และดูการตอบกลับ JSON ได้

4. เบื้องต้นเกี่ยวกับ Spring Cloud

ในการจัดการและกำหนดค่าไมโครเซอร์วิสตามขนาด เราสามารถใช้ Spring Cloud เป็นชุดของเครื่องมือและเฟรมเวิร์กที่ช่วยให้นักพัฒนาสร้างระบบแบบกระจายได้อย่างรวดเร็ว โดยมีคุณสมบัติต่างๆ เช่น การค้นหาบริการ การจัดการการกำหนดค่า เซอร์กิตเบรกเกอร์ การกำหนดเส้นทางอัจฉริยะ และอื่นๆ

ในบริบทของบริการ ‘Product’ เราสามารถใช้ Spring Cloud เพื่อ:

  • เก็บการกำหนดค่าไว้ในเซิร์ฟเวอร์การกำหนดค่าส่วนกลาง
  • ลงทะเบียนกับเซิร์ฟเวอร์การค้นหาบริการเพื่อให้บริการอื่นสามารถค้นหาได้
  • ติดตั้งเบรกเกอร์วงจรเพื่อป้องกันไม่ให้กลายเป็นจุดขัดข้องในระบบของเรา

คุณลักษณะแต่ละอย่างเหล่านี้จะเกี่ยวข้องกับการเพิ่มการพึ่งพาในโครงการของเราและกำหนดค่าให้สอดคล้องกัน ตัวอย่างเช่น หากต้องการใช้ Spring Cloud Config Server เราจะเพิ่มการพึ่งพา spring-cloud-config-server และใส่คำอธิบายประกอบในคลาสหลักของเราด้วย @EnableConfigServer


การสร้างไมโครเซอร์วิสด้วย Spring Boot มีข้อดีมากมาย เช่น ความเรียบง่าย การทำแอพที่รวดเร็ว และความเข้ากันได้กับระบบนิเวศของ Spring ที่ใหญ่กว่า ด้วยความช่วยเหลือของ Spring Cloud เราสามารถจัดการและปรับขนาดไมโครเซอร์วิสของเราได้อย่างง่ายดาย อย่างไรก็ตาม ไมโครเซอร์วิสไม่ใช่โซลูชันเดียวที่เหมาะกับทุกคน พวกเขามาพร้อมกับความซับซ้อนและความท้าทาย เช่น ความสอดคล้องของข้อมูล การค้นหาบริการ และการประสานงานระบบแบบกระจาย สิ่งสำคัญคือต้องเข้าใจความท้าทายเหล่านี้และมีกลยุทธ์ในการจัดการก่อนที่จะนำสถาปัตยกรรมไมโครเซอร์วิสมาใช้ในการทำแอพ


Spring Boot คืออะไร

Spring Boot คือ ตอนที่ 11 : การสร้าง RESTful Web Service
Spring Boot คือ ตอนที่ 13 : การปรับใช้ (Deployment) แอปพลิเคชัน Spring Boot