Playground ini dipergunakan untuk pembelajaran Spring Cloud dan Kotlin berlandaskan contoh-contoh.
Baca ini dalam bahasa lain:
💚 Mulai disini.
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.
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?
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
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.
Dashbord Eureka berbasis web teraktifkan sebagai default. Ini menunjukkan informasi-informasi penting seperti metadata servis.
Dalam environment local ini terdapat di http://localhost:8761
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.
Modul | URL |
---|---|
weather-app | http://host:port/current/weather |
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.
Modul | URL |
---|---|
datetime-app | http://host:port/current/datetime |
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
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)
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.
Modul | URL |
---|---|
hystrix-dashboard | http://host:port/hystrix |
Dokumentasi: Circuit Breaker: Hystrix Dashboard
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'
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.
./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
- Import root project di IntelliJ IDEA
- Sync file project dengan Gradle (sync awal mungkin dapat terjadi secara otomatis)
- Sekarang Anda harusnya sudah punya beberapa run configurations untuk setiap modul. Jalankan konfigurasi tersebut satu per satu:
- DiscoveryServerApplication
- WeatherServiceApplication
- WeatherAppApplication
- ClientApplication
- DatetimeServiceApplication
- DatetimeAppApplication
- TurbineApplication
- 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.
📗 TODO
Travis CI |
---|
Projek ini terlisensi dengan ketentuan lisensi GNU GPL v3.