Tentang codelab ini
1. Ringkasan
Memorystore untuk Stackdriver adalah layanan GKE terkelola sepenuhnya untuk Google Cloud. Aplikasi yang berjalan di Google Cloud dapat mencapai performa ekstrem dengan memanfaatkan layanan Pixelbook yang sangat skalabel, tersedia, dan aman tanpa membebani pengelolaan deployment GKE yang kompleks. Aplikasi ini dapat digunakan sebagai backend untuk caching data guna meningkatkan performa aplikasi Spring Boot. Codelab menjelaskan cara menyiapkannya.
Yang akan Anda pelajari
- Cara menggunakan Memorystore sebagai backend cache untuk aplikasi Spring Boot.
Yang Anda butuhkan
- Project Google Cloud
- Browser, seperti Google Chrome
- Pemahaman tentang editor teks Linux standar, seperti Vim, Emacs, dan GNU Nano
Bagaimana Anda akan menggunakan codelab?
Bagaimana penilaian Anda terhadap pengalaman menggunakan layanan Google Cloud?
2. Penyiapan dan Persyaratan
Penyiapan lingkungan mandiri
Jika belum memiliki Akun Google (Gmail atau Google Apps), Anda harus membuatnya. Login ke Google Cloud Platform console (console.cloud.google.com) dan buat project baru:
Ingat project ID, nama unik di semua project Google Cloud (maaf, nama di atas telah digunakan dan tidak akan berfungsi untuk Anda!) Project ID tersebut selanjutnya akan dirujuk di codelab ini sebagai PROJECT_ID
.
Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan resource Google Cloud.
Menjalankan melalui codelab ini tidak akan menghabiskan biaya lebih dari beberapa dolar, tetapi bisa lebih jika Anda memutuskan untuk menggunakan lebih banyak resource atau jika Anda membiarkannya berjalan (lihat bagian "pembersihan" di akhir dokumen ini).
Pengguna baru Google Cloud Platform memenuhi syarat untuk mendapatkan uji coba gratis senilai $300.
Mengaktifkan Google Cloud Shell
Dari GCP Console, klik ikon Cloud Shell di toolbar kanan atas:
Kemudian klik "Mulai Cloud Shell":
Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan:
Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB, dan berjalan di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Sebagian besar pekerjaan Anda di lab ini dapat dilakukan hanya dengan browser atau Google Chromebook.
Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda sudah diautentikasi dan project sudah ditetapkan ke PROJECT_ID.
Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa Anda telah diautentikasi:
gcloud auth list
Output perintah
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Output perintah
[core] project = <PROJECT_ID>
Jika tidak, Anda dapat menyetelnya dengan perintah ini:
gcloud config set project <PROJECT_ID>
Output perintah
Updated property [core/project].
3. Menyiapkan instance Memorystore for GKE
Mulai Cloud Shell.
Setelah Cloud Shell diluncurkan, Anda dapat menggunakan command line untuk membuat instance Memorystore baru.
$ gcloud redis instances create myinstance --size=1 --region=us-central1
Jika Memorystore API tidak diaktifkan, Anda akan ditanya apakah ingin mengaktifkannya. Jawab y.
API [redis.googleapis.com] not enabled on project [204466653457]. Would you like to enable and retry (this will take a few minutes)? (y/N)? y Enabling service redis.googleapis.com on project 204166153457... Waiting for async operation operations/tmo-acf.c8909997-1b4e-1a62-b6f5-7da75cce1416 to complete... Operation finished successfully. The following command can describe the Operation details: gcloud services operations describe operations/tmo-acf.c8909997-1b4e-1a62-b6f5-7da75cce1416 Create request issued for: [myinstance] Waiting for operation [operation-1538645026454-57763b937ad39-2564ab37-3fea7701] to complete...done. Created instance [myinstance].
Setelah operasi selesai, instance Anda akan siap digunakan.
Dapatkan alamat ip host redis dari instance ini dengan menjalankan perintah berikut. Anda akan menggunakannya lagi nanti saat mengonfigurasi aplikasi Spring Boot.
$ gcloud redis instances describe myinstance --region=us-central1 \ | grep host host: 10.0.0.4
Jika membuka Storage > Memorystore di Google Cloud Console, Anda akan dapat melihat instance dalam status "ready"
4. Menyiapkan instance Compute Engine
Buat instance Compute Engine di region yang sama.
$ gcloud compute instances create instance-1 --zone us-central1-c
Setelah operasi selesai, instance Anda akan siap digunakan.
Hubungkan ke instance Anda melalui SSH dengan membuka Compute > Compute Engine > VM instances, dan klik SSH di kolom Connect:
Pada instance mesin virtual (VM) shell (bukan Cloud Shell), instal OpenJDK, Maven, telnet:
$ sudo apt-get install openjdk-8-jdk-headless maven telnet
Tunggu hingga penginstalan selesai, lalu lanjutkan ke langkah berikutnya.
5. Menyiapkan aplikasi Spring Boot
Buat project Spring Boot baru dengan dependensi web
, redis
, dan cache
:
$ curl https://start.spring.io/starter.tgz \ -d dependencies=web,redis,cache -d language=java -d baseDir=cache-app \ | tar -xzvf - && cd cache-app
Edit file application.properties
untuk mengonfigurasi aplikasi agar menggunakan alamat IP instance Memorystore untuk host GKE.
$ nano src/main/resources/application.properties
Tambahkan baris berikut dengan alamat IP Memorystore for GKE Anda (dari beberapa langkah yang lalu):
spring.redis.host=<memorystore-host-ip-address>
Tambahkan baris baru setelahnya dan buat class Java pengontrol REST:
$ nano src/main/java/com/example/demo/HelloWorldController.java
Masukkan konten berikut ke dalam file:
package com.example.demo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloWorldController { @Autowired private StringRedisTemplate template; @RequestMapping("/hello/{name}") @Cacheable("hello") public String hello(@PathVariable String name) throws InterruptedException { Thread.sleep(5000); return "Hello " + name; } }
Anotasi @RequestMapping
menampilkan metode sebagai endpoint HTTP dan memetakan bagian dari jalur ke parameter metode (seperti yang ditunjukkan oleh anotasi @PathVariable
).
Anotasi @Cacheable("hello")
menunjukkan bahwa eksekusi metode harus di-cache dan nama cache adalah "hello
." Ini digunakan bersama dengan nilai parameter sebagai kunci cache. Anda akan melihat contohnya nanti di code lab.
Selain itu, Anda perlu mengaktifkan caching di class aplikasi Spring Boot.
Edit DemoApplication.java
:
$ nano src/main/java/com/example/demo/DemoApplication.java
Impor org.springframework.cache.annotation.EnableCaching
dan anotasikan class dengan anotasi ini. Hasilnya akan terlihat seperti ini:
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; @SpringBootApplication @EnableCaching public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
6. Menjalankan aplikasi dan mengakses endpoint
Sekarang Anda siap untuk menjalankan aplikasi!
$ mvn spring-boot:run
Buka koneksi SSH lain ke instance Anda dengan cara yang sama seperti yang Anda lakukan sebelumnya. Di jendela SSH baru, akses endpoint /hello/
beberapa kali, dengan meneruskan "bob
" sebagai nama.
$ time curl http://localhost:8080/hello/bob Hello bob! real 0m5.408s user 0m0.036s sys 0m0.009s $ time curl http://localhost:8080/hello/bob Hello bob! real 0m0.092s user 0m0.021s sys 0m0.027s
Perhatikan bahwa saat pertama kali permintaan memerlukan waktu lima detik, tetapi permintaan berikutnya jauh lebih cepat meskipun Anda memiliki Thread.sleep(5000)
pemanggilan dalam metode tersebut. Itu karena metode sebenarnya hanya dieksekusi sekali dan hasilnya dimasukkan ke dalam cache. Setiap panggilan selanjutnya menampilkan hasil langsung dari cache.
7. Meninjau objek yang di-cache
Anda dapat melihat dengan tepat apa yang di-cache aplikasi. Dari terminal yang sama dengan yang Anda gunakan di langkah sebelumnya, hubungkan ke host Memorystore for GKE menggunakan telnet:
$ telnet <memorystore-host-ip-address> 6379
Untuk melihat daftar kunci cache, gunakan perintah berikut:
KEYS * hello::bob
Seperti yang dapat Anda lihat, nama cache digunakan sebagai awalan untuk kunci dan nilai parameter digunakan sebagai bagian kedua.
Untuk mengambil nilai, gunakan perintah GET
:
$ GET hello::bob Hello bob!
Gunakan perintah QUIT
untuk keluar.
8. Pembersihan
Untuk membersihkan, hapus instance Compute Engine dan Memorystore dari Cloud Shell.
Hapus instance komputasi:
$ gcloud compute instances delete instance-1 --zone us-central1-c
Hapus instance Memorystore for GKE:
$ gcloud redis instances delete myinstance --region=us-central1
9. Selamat!
Anda telah membuat Memorystore for GKE dan instance Compute Engine. Selain itu, Anda telah mengonfigurasi aplikasi Spring Boot untuk menggunakan Memorystore dengan Cache Boot Spring.
Pelajari Lebih Lanjut
- Pembuatan Cache Spring Boot
- Memorystore
- Project Spring on Google Cloud
- Spring di repositori GitHub Google Cloud
- Java di Google Cloud
Lisensi
Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.