Pendahuluan


Spring Cloud adalah bagian dari ekosistem Spring yang dirancang khusus untuk membantu pengembang dalam membangun aplikasi berbasis microservices.

Framework ini menawarkan serangkaian alat dan pustaka yang mempermudah pengelolaan distribusi layanan, komunikasi antar layanan, dan pengelolaan konfigurasi terpusat.


Mengapa Spring Cloud ?


Dalam arsitektur microservices, aplikasi dibagi menjadi layanan-layanan kecil yang saling terhubung.

Meskipun menawarkan fleksibilitas dan skalabilitas, arsitektur ini menimbulkan tantangan.

Seperti komunikasi antar layanan, pengelolaan konfigurasi, dan fault tolerance.

Spring Cloud memberikan solusi dengan menyediakan alat untuk mengatasi kerumitan distribusi.


Fitur Utama Spring Cloud


Service Discovery

Spring Cloud menggunakan Eureka atau alternatif lain seperti Consul untuk mempermudah registrasi layanan dan pencariannya secara otomatis. Hal ini memastikan layanan dapat berkomunikasi tanpa hardcoding alamat.

API Gateway

Dengan Spring Cloud Gateway, Anda dapat mengelola lalu lintas antar layanan melalui titik masuk tunggal, memungkinkan routing dinamis dan filtering permintaan.

Distributed Configuration

Spring Cloud Config menyediakan server konfigurasi terpusat, memungkinkan Anda mengelola pengaturan global tanpa perlu merubah setiap layanan.

Fault Tolerance

Hystrix dan Resilience4j membantu menciptakan circuit breaker, memastikan sistem tetap tangguh saat beberapa layanan gagal.

Tracing dan Monitoring

Spring Cloud Sleuth bekerja dengan alat seperti Zipkin untuk memberikan jejak distribusi dalam arsitektur Anda, mempermudah debugging dan monitoring.


Bagaimana Spring Cloud Bekerja?


Spring Cloud memanfaatkan pendekatan berbasis konvensi yang mengurangi kerumitan konfigurasi.

Berikut adalah gambaran umum tentang cara kerja fitur-fitur kunci:


1. Service Discovery dengan Eureka

Layanan yang berjalan akan mendaftarkan dirinya ke server Eureka. Layanan lain dapat mencari dan berkomunikasi menggunakan nama logis daripada alamat IP.

2. API Gateway

Gateway bertindak sebagai proxy yang mengarahkan permintaan ke layanan yang sesuai. Gateway juga dapat menerapkan filtering untuk keamanan dan logging.

3. Distributed Configuration

Semua layanan mengambil konfigurasi dari server pusat yang memungkinkan perubahan diterapkan tanpa restart layanan. Konfigurasi ini dapat disimpan di repository Git untuk pengelolaan yang terintegrasi.


Cara Implementasi Dasar Spring Cloud


Untuk mengimplementasikan Spring Cloud, maka kita perlu untuk membuat server Eureka, dan mendaftarkan service lain ke service Eureka ini agar bisa dikenali oleh service cloud lainnya.

Oleh karena itu, caranya :

1. Membuat service Eureka dan menambahkan dependency Eureka Server

Awalnya, tambahkan dependency berikut di file pom.xml Anda:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-parent</artifactId>
            <version>2023.0.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependency>  
    <groupId>org.springframework.cloud</groupId>  
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>  
</dependency>  

2. Melakukan Konfigurasi di Eureka Server

File application.yml:

server:  
  port: 8761  

eureka:  
  client:  
    register-with-eureka: false  
    fetch-registry: false  
  instance:  
    hostname: localhost  

3. Tambahkan anotasi @EnableEurekaServer pada kelas utama Spring Boot di service Eureka :

@SpringBootApplication  
@EnableEurekaServer  
public class EurekaServerApplication {  
    public static void main(String[] args) {  
        SpringApplication.run(EurekaServerApplication.class, args);  
    }  
}  

3. Menambahkan Aplikasi service Spring lainnya dan menambahkan dependency eureka client

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-parent</artifactId>
            <version>2023.0.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>  

4. Menyambungkan Layanan ke Eureka

Tambahkan anotasi @EnableEurekaClient pada aplikasi Spring lainnya dan konfigurasi application.yml agar layanan dapat mendaftar ke Eureka:

@SpringBootApplication
@EnableEurekaClient
public class SpringClientApplication {}

    public static void main(String[] args) {
        SpringApplication.run(SpringClientApplication.class, args);
    }
}


spring:
  application:
    name: spring-client
server:
  port: 8100
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/  
  instance:
    preferIpAddress: true

Kapan Menggunakan Spring Cloud?


  • Skalabilitas Aplikasi Ketika aplikasi Anda membutuhkan pembagian beban kerja antara layanan yang saling independen.

  • Manajemen Konfigurasi Jika Anda ingin mengelola pengaturan global dengan mudah tanpa mempengaruhi kinerja layanan lain.

  • Komunikasi Antar Layanan Ketika layanan dalam aplikasi Anda sering berkomunikasi melalui REST API atau messaging.

  • Fault Tolerance dan Monitoring Jika aplikasi Anda harus beroperasi terus-menerus meskipun sebagian layanan mengalami gangguan.


Kesimpulan


Spring Cloud adalah framework spring untuk aplikasi microservices.

Dengan service seperti Eureka, Gateway, dan Config Server, Spring Cloud menyederhanakan pengelolaan kompleksitas arsitektur modern.

Framework ini memungkinkan pengembang menciptakan aplikasi yang tangguh dan skalabel, menjadikannya pilihan utama untuk proyek-proyek berbasis Java.