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