Skip to content

Latest commit

 

History

History
207 lines (132 loc) · 9.37 KB

File metadata and controls

207 lines (132 loc) · 9.37 KB

Contoh Spring Cloud

Status Build

Playground ini dipergunakan untuk pembelajaran Spring Cloud dan Kotlin berlandaskan contoh-contoh.

Baca ini dalam bahasa lain:

Kontribusi

💚 Mulai disini.

Deskripsi

Cloud-native merupakan pendekatan yang digunakan untuk membangun dan menjalankan aplikasi yang memanfaatkan keuntungan dari model komputasi awan.

Microservices merupakan pendekatan yang digunakan untuk mengembangkan sebuah aplikasi sebagai suatu koleksi dari servis-servis kecil; setiap servis ini mengimplementasikan kapabilitas bisnis, jalan dalam proses tersendiri dan berkomunikasi melalui API HTTP. Setiap microservice dapat dideploy, upgrade, scale, dan restart namun tidak bergantung pada servis lain pada aplikasi tersebut, yang biasanya merupakan bagian dari sistem otomata.

(c) Pivotal

Kita membagi aplikasi besar menjadi bagian-bagian yang lebih kecil yang disebut 'services'. Dan setiap dari servis ini dapat dideploy atau scale secara tersendiri. Bagaimana suatu servis mengetahui yang lainnya?

Penemuan servis

Modul URL
discovery-server http://host:8761/eureka

Terdapat beberapa cara Anda dapat menemukan servis di Spring Cloud:

Projek ini secara spesifik fokus ke poin terakhir, yaitu projek Netflix Spring Cloud. Media service streaming berbasis awan yang dimiliki oleh Amerika Serikat, yang dinamakan Netflix ini, telah membuka konten framework dan alat-alat microservicenya.

Demi kesederhanaan, terdapat satu instansi server Eureka. Maka server Eureka tidak dikonfigurasi untuk mendaftarkan dirinya sendiri dengan peer yang lain. Anda mungkin ingin memiliki banyak server discovery demi ketersediaan saat produksi, maka ubah properti berikut:

eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true

Ketersediaan Tinggi

Eureka memastikan secara periodik bahwa servis aplikasi yang di return atau dikembalikan ke client dalam kondisi baik dan available. Dan ini juga memastikan bahwa dalam waktu tertentu ketika Server Discovery nya down, semua client masih dapat berjalan.

Eureka dibangun dengan pemikiran ketersediaan yang tinggi:

  • Registrynya terdistribusi (local cache pada setiap client).
  • Client dapat beroperasi tanpa server discovery (apabila servernya down).
  • Client mengambil deltas untuk memperbarui registry.

Dashboard

Dashbord Eureka berbasis web teraktifkan sebagai default. Ini menunjukkan informasi-informasi penting seperti metadata servis.

Dalam environment local ini terdapat di http://localhost:8761

Layanan Cuaca

Modul URL
weather-service http://host:port/weather

Anotasi @EnableDiscoveryClient digunakan untuk menjadikan WeatherServiceApplication menjadi client sebuah Discovery Server. Ini menyebabkan client tersebut terdaftar dengan Discovery Server saat dijalankan.

Weather App

Modul URL
weather-app http://host:port/current/weather

Layanan Datetime

Modul URL
datetime-service http://host:port/datetime

Anotasi @EnableDiscoveryClient digunakan untuk menjadikan DatetimeServiceApplication menjadi client sebuah Discovery Server. Ini menyebabkan client tersebut terdaftar dengan Discovery Server saat dijalankan.

Datetime App

Modul URL
datetime-app http://host:port/current/datetime

Client

Modul URL
client http://host:port

Anotasi @EnableDiscoveryClient digunakan untuk menjadikan ClientApplication menjadi suatu client Discovery Server.

Client ini tidak perlu mendaftar dengan Eureka karena client ini tidak ingin siapapun untuk menemukannya sehingga properti berikut di set ke false:

eureka.client.register-with-eureka=false

Toleransi Kesalahan

Dalam sistem terdistribusi, terdapat suatu hal yang pasti... KESALAHAN TIDAK DAPAT DIHINDARI.

Sebuah efek yang buruk dari kesalahan tersebut dalam sistem terdistribusi adalah cascading failure. Dari Wikipedia Bahasa Inggris:

It is a process in a system of interconnected parts in which the failure of one or few parts can trigger the failure of other parts and so on.

Bagaimana cara menghadapi kegagalan atau kesalahan?

  • Toleransi kesalahan
  • Degradasi anggun
  • Membatasi sumber daya

Circuit breaker design pattern adalah design pattern yang digunakan dalam pengembangan perangkat lunak modern. Ini digunakan untuk mendeteksi kesalahan dan mengenkapsulasikan sedemikian rupa sehingga menghindari kesalahan tersebut untuk timbul berkali-kali nantinya.

(Dari Wikipedia)

Hystrix

Netflix Hystrix merupakan library latensi dan toleransi kesalahan yang didesain untuk mengisolasi titik akses ke suatu remote system, servis, dan library pihak ketiga, menghentikan kegagalan beruntun dan memungkinkan ketahanan dari sistem terdistribusi yang rumit dimana kegagalan atau kesalahan tidak dapat dihindari.

Lihat Cara kerjanya.

Hystrix Dashboard

Modul URL
hystrix-dashboard http://host:port/hystrix

Dokumentasi: Circuit Breaker: Hystrix Dashboard

Turbine

Modul URL
turbine http://host:3000/turbine.stream

Dashboard Hystrix hanya dapat memantau satu microservice dalam momen tersebut. Apabila terdapat banyak microservis, maka dashboard Hystrix harus diarahkan setiap kali saat ingin memantau microservis lain. Ini cukup repot.

Turbine (disediakan oleh projek Spring Cloud Netflix), mengumpulkan beberapa instansi dari Hystrix metrics streams, jadi dashboard tersebut dapat menampilkan tampilan agregat atau tampilan kumpulan.

Contoh config:

turbine.app-config=weather-app,datetime-app
turbine.cluster-name-expression='default'

Membangun dan menjalankan secara lokal

Permulaan

Sebelum build pertama, Anda harus melakukan langkah-langkah tambahan berikut.

  • Pertama, clone repository.
  • Kedua, definisikan beberapa variabel environment.
    • 📗 TODO

Anda memiliki kebebasan untuk memilih build tools untuk projek ini: Gradle atau IDE favorit Anda. IntelliJ IDEA, STS / Eclipse, atau NetBeans harusnya dapat mengatasi pekerjaan ini dengan lancar.

Menggunakan Gradle Wrapper

./gradlew :discovery-server:bootRun
./gradlew :weather-service:bootRun
./gradlew :weather-app:bootRun
./gradlew :client:bootRun
./gradlew :datetime-service:bootRun
./gradlew :datetime-app:bootRun
./gradlew :turbine:bootRun
./gradlew :hystrix-dashboard:bootRun

Menggunakan IntelliJ IDEA

  1. Import root project di IntelliJ IDEA
  2. Sync file project dengan Gradle (sync awal mungkin dapat terjadi secara otomatis)
  3. Sekarang Anda harusnya sudah punya beberapa run configurations untuk setiap modul. Jalankan konfigurasi tersebut satu per satu:
    1. DiscoveryServerApplication
    2. WeatherServiceApplication
    3. WeatherAppApplication
    4. ClientApplication
    5. DatetimeServiceApplication
    6. DatetimeAppApplication
    7. TurbineApplication
    8. HystrixDashboardApplication

Tips: pastikan bahwa Anda menjalankannya di port yang berbeda dan port tersebut tidak digunakan oleh yang lain, jika tidak makan Anda akan mendapatkan error.

Deploy ke Cloud

📗 TODO

Continuous Integration

Travis CI Build Status

License

Projek ini terlisensi dengan ketentuan lisensi GNU GPL v3.