1. Omówienie
Memorystore for Redis to w pełni zarządzana usługa Redis dla Google Cloud. Aplikacje działające w Google Cloud mogą osiągnąć ekstremalną wydajność dzięki wykorzystaniu wysoce skalowalnej, dostępnej i bezpiecznej usługi Redis bez konieczności zarządzania złożonymi wdrożeniami Redis. Może służyć jako backend do buforowania danych, który zwiększa wydajność aplikacji Spring Boot. Z ćwiczeń w Codelabs dowiesz się, jak to skonfigurować.
Czego się nauczysz
- Jak używać Memorystore jako backendu pamięci podręcznej dla aplikacji Spring Boot.
Czego potrzebujesz
- Projekt Google Cloud
- przeglądarki, np. Google Chrome;
- znajomość standardowych edytorów tekstu systemu Linux, takich jak Vim, Emacs i GNU Nano;
Jak będziesz używać tych ćwiczeń w Codelabs?
Jak oceniasz usługi Google Cloud?
2. Konfiguracja i wymagania
Samodzielne konfigurowanie środowiska
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub wykorzystaj już istniejący. Jeśli nie masz jeszcze konta Gmail lub G Suite, musisz je utworzyć.
Zapamiętaj identyfikator projektu, unikalną nazwę we wszystkich projektach Google Cloud (powyższa nazwa jest już zajęta i nie będzie Ci odpowiadać). W dalszej części tego ćwiczenia w programie będzie ona określana jako PROJECT_ID
.
- Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Google Cloud.
Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Postępuj zgodnie z instrukcjami podanymi w sekcji „Czyszczenie” W tym samouczku znajdziesz wskazówki, jak wyłączyć zasoby, aby uniknąć naliczania opłat. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.
Aktywowanie Cloud Shell
- W konsoli Cloud kliknij Aktywuj Cloud Shell .
Jeśli dopiero zaczynasz korzystać z Cloud Shell, wyświetli się ekran pośredni (w części strony widocznej po przewinięciu) z opisem tej funkcji. W takim przypadku kliknij Dalej (nie zobaczysz go więcej). Tak wygląda ten jednorazowy ekran:
Uzyskanie dostępu do Cloud Shell i połączenie się z nim powinno zająć tylko kilka chwil.
Ta maszyna wirtualna ma wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i uwierzytelnianie. Większość czynności z tego ćwiczenia z programowania można wykonać w przeglądarce lub na Chromebooku.
Po nawiązaniu połączenia z Cloud Shell powinno pojawić się potwierdzenie, że użytkownik jest już uwierzytelniony i że projekt jest już ustawiony na identyfikator Twojego projektu.
- Uruchom to polecenie w Cloud Shell, aby potwierdzić, że jesteś uwierzytelniony:
gcloud auth list
Dane wyjściowe polecenia
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
Dane wyjściowe polecenia
[core] project = <PROJECT_ID>
Jeśli tak nie jest, możesz go ustawić za pomocą tego polecenia:
gcloud config set project <PROJECT_ID>
Dane wyjściowe polecenia
Updated property [core/project].
3. Konfigurowanie instancji Memorystore for Redis
Uruchom Cloud Shell.
Po uruchomieniu Cloud Shell użyj wiersza poleceń, aby włączyć interfejs Memorystore API i utworzyć nową instancję Memorystore.
$ gcloud services enable redis.googleapis.com $ gcloud redis instances create myinstance --size=1 --region=us-central1
Po jej zakończeniu instancja będzie gotowa do użycia.
Uzyskaj adres IP hosta redis, uruchamiając poniższe polecenie. Użyjesz go później podczas konfigurowania aplikacji Spring Boot.
$ gcloud redis instances describe myinstance --region=us-central1 \ | grep host host: 10.0.0.4
W konsoli Google Cloud otwórz Bazy danych > Memorystore > Redis. Instancja powinna być w stanie „gotowy” województwo :
4. Konfigurowanie instancji Compute Engine
utworzyć instancję Compute Engine w tym samym regionie,
$ gcloud compute instances create instance-1 --zone us-central1-c
Po jej zakończeniu instancja będzie gotowa do użycia.
Połącz się z instancją przez SSH za pomocą tego polecenia:
$ gcloud compute ssh instance-1 --zone us-central1-c
Możesz też otworzyć Compute > Compute Engine > Maszyny wirtualne i kliknij SSH w kolumnie Połącz:
W powłoce maszyny wirtualnej (nie Cloud Shell) zainstaluj narzędzia OpenJDK, Maven i Redis:
$ sudo apt-get install openjdk-17-jdk-headless maven redis-tools
Poczekaj na zakończenie instalacji, a następnie przejdź do następnego kroku.
5. Konfigurowanie aplikacji Spring Boot
Utwórz nowy projekt Spring Boot z zależnościami web
, redis
i cache
:
$ curl https://start.spring.io/starter.tgz \ -d dependencies=web,redis,cache -d language=java -d baseDir=cache-app \ -d type=maven-project \ | tar -xzvf - && cd cache-app
Edytuj plik application.properties
, aby skonfigurować aplikację tak, aby używała adresu IP instancji Memorystore for Redis.
$ nano src/main/resources/application.properties
Dodaj ten wiersz z adresem IP Memorystore for Redis (przed kilkoma krokami):
spring.data.redis.host=<memorystore-host-ip-address>
Dodaj potem nowy wiersz i utwórz klasę Java kontrolera REST:
$ nano src/main/java/com/example/demo/HelloWorldController.java
Umieść w pliku tę zawartość:
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;
}
}
Adnotacja @RequestMapping
ujawnia metodę jako punkt końcowy HTTP i mapuje część ścieżki na parametr metody (co wskazuje adnotacja @PathVariable
).
Adnotacja @Cacheable("hello")
wskazuje, że wykonanie metody powinno być przechowywane w pamięci podręcznej, a nazwa pamięci podręcznej to „hello
”. Jest używany w połączeniu z wartością parametru jako klucz pamięci podręcznej. W dalszej części modułu dotyczącego kodu zobaczysz przykład.
Następnie włączymy buforowanie w klasie aplikacji Spring Boot. Edytuj DemoApplication.java
:
$ nano src/main/java/com/example/demo/DemoApplication.java
Zaimportuj plik org.springframework.cache.annotation.EnableCaching
i dodaj do zajęć adnotacje z tą adnotacją. Wynik powinien wyglądać tak:
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. Uruchamianie aplikacji i uzyskiwanie dostępu do punktu końcowego
Sprawdź, czy zasada JAVA_HOME
jest ustawiona na odpowiednią wersję:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
Teraz możesz uruchomić aplikację.
$ mvn spring-boot:run
Otwórz inne połączenie SSH ze swoją instancją w taki sam sposób jak wcześniej. W nowym oknie SSH wielokrotnie uzyskaj dostęp do punktu końcowego /hello/
, przekazując „bob
” jako nazwę.
$ 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
Zwróć uwagę, że pierwsze żądanie zajęło 5 sekund, ale następne żądanie było znacznie szybsze, mimo że w tej metodzie masz Thread.sleep(5000)
wywołanie. Dzieje się tak, ponieważ rzeczywista metoda została wykonana tylko raz i wynik został umieszczony w pamięci podręcznej. Każde kolejne wywołanie zwraca wynik bezpośrednio z pamięci podręcznej.
7. Przejrzyj obiekty z pamięci podręcznej
Możesz zobaczyć, co dokładnie aplikacja zapisała w pamięci podręcznej. Za pomocą polecenia redis-cli połącz się z hostem Memorystore for Redis, korzystając z tego samego terminala w poprzednim kroku:
$ redis-cli -h <memorystore-host-ip-address>
Aby wyświetlić listę kluczy pamięci podręcznej, użyj tego polecenia:
:6379> KEYS * 1) "hello::bob"
Jak widać, nazwa pamięci podręcznej jest używana jako prefiks klucza, a wartość parametru jest używana jako druga część.
Aby pobrać wartość, użyj polecenia GET
:
:6379> GET hello::bob Hello bob!
Aby wyjść, użyj polecenia exit
.
8. Czyszczenie danych
Aby wyczyścić dane, usuń instancje Compute Engine i Memorystore z Cloud Shell.
Usuń instancję obliczeniową:
$ gcloud compute instances delete instance-1 --zone us-central1-c
Usuń instancję Memorystore for Redis:
$ gcloud redis instances delete myinstance --region=us-central1
9. Gratulacje!
Udało Ci się utworzyć Memorystore for Redis i instancję Compute Engine. Udało Ci się też skonfigurować aplikację Spring Boot tak, aby korzystała z Memorystore z buforowaniem rozruchu wiosennego.
Więcej informacji
- Wiosenne buforowanie rozruchu
- Memorystore
- Spring w repozytorium Google Cloud na GitHubie
- Java w Google Cloud
Licencja
To zadanie jest licencjonowane na podstawie ogólnej licencji Creative Commons Attribution 2.0.