Memorystore ile Spring Boot uygulamasından veri önbelleğe alma

1. Genel Bakış

Redis için Memorystore, Google Cloud için tümüyle yönetilen bir Redis hizmetidir. Google Cloud'da çalışan uygulamalar, karmaşık Redis dağıtımlarını yönetme yükü olmadan yüksek düzeyde ölçeklenebilir, kullanılabilir ve güvenli Redis hizmetinden yararlanarak olağanüstü performans elde edebilir. Spring Boot uygulamalarının performansını artırmak için veri önbelleğe alma işlemi için arka uç olarak kullanılabilir. Codelab'de bu özelliğin nasıl ayarlanacağı açıklanmaktadır.

Neler öğreneceksiniz?

  • Memorystore'u Spring Boot uygulaması için önbellek arka ucu olarak kullanma.

Gerekenler

  • Bir Google Cloud projesi
  • Google Chrome gibi bir tarayıcı
  • Vim, Emacs ve GNU Nano gibi standart Linux metin düzenleyicileri hakkında bilgi

Codelab'i nasıl kullanacaksınız?

Salt okunur Alıştırmaları okuyun ve tamamlayın

Google Cloud hizmetleriyle ilgili deneyiminizi nasıl değerlendirirsiniz?

Acemi Orta Yeterli

2. Kurulum ve Gereksinimler

Kendi hızınızda ortam kurulumu

  1. Cloud Console'da oturum açıp yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. (Gmail veya G Suite hesabınız yoksa hesap oluşturmanız gerekir.)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Tüm Google Cloud projelerinde benzersiz bir ad olan proje kimliğini unutmayın (yukarıdaki ad zaten alınmış ve size uygun olmayacaktır!). Bu kod laboratuvarın ilerleyen bölümlerinde PROJECT_ID olarak adlandırılacaktır.

  1. Sonraki adımda, Google Cloud kaynaklarını kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.

Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. "Temizleme" bölümündeki talimatları izlediğinizden emin olun. bölümünde, bu eğiticinin dışında faturalandırmayla karşılaşmamanız için kaynakları nasıl kapatacağınız konusunda tavsiyelerde bulunuyoruz. Yeni Google Cloud kullanıcıları 300 ABD doları ücretsiz deneme programından yararlanabilir.

Cloud Shell'i etkinleştirme

  1. Cloud Console'da, Cloud Shell'i etkinleştir H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_UZQZZGzGzGzqzQzGLzGzGzqqLqSqLG simgesini tıklayın.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

Cloud Shell'i daha önce hiç çalıştırmadıysanız ne olduğunu açıklayan bir ara ekran (ekranın alt kısmında) gösterilir. Bu durumda Devam'ı tıklayın (bunu bir daha görmezsiniz). Tek seferlik ekran şöyle görünür:

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4twUoewT1SUjd6Y3h81RG3rKIkqhoVlFR-G7w

Temel hazırlık ve Cloud Shell'e bağlanmak yalnızca birkaç dakika sürer.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

İhtiyacınız olan tüm geliştirme araçlarını bu sanal makinede bulabilirsiniz. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu codelab'deki çalışmalarınızın tamamı olmasa bile büyük bir kısmı yalnızca bir tarayıcı veya Chromebook'unuzla yapılabilir.

Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin proje kimliğinize ayarlandığını görürsünüz.

  1. Kimlik doğrulamanızın tamamlandığını onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud auth list

Komut çıkışı

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
gcloud config list project

Komut çıkışı

[core]
project = <PROJECT_ID>

Doğru değilse aşağıdaki komutla ayarlayabilirsiniz:

gcloud config set project <PROJECT_ID>

Komut çıkışı

Updated property [core/project].

3. Memorystore for Redis örneği oluşturma

Cloud Shell'i başlatın.

Cloud Shell başlatıldıktan sonra komut satırını kullanarak Memorystore API'yi etkinleştirin ve yeni bir Memorystore örneği oluşturun.

$ gcloud services enable redis.googleapis.com
$ gcloud redis instances create myinstance --size=1 --region=us-central1

İşlem tamamlandıktan sonra örneğiniz kullanıma hazır hale gelir.

Aşağıdaki komutu çalıştırarak örneğin redis ana makine ip adresini alın. Daha sonra Spring Boot uygulamanızı yapılandırırken bu kodu tekrar kullanacaksınız.

$ gcloud redis instances describe myinstance --region=us-central1 \
  | grep host
host: 10.0.0.4

Google Cloud Console'da Veritabanları'na gidin > Memorystore > Redis olarak değiştirin. Örneğiniz "hazır" durumda olmalıdır durum :

ee90b43f15a6dc1f.png

4. Compute Engine örneği oluşturma

Aynı bölgede bir Compute Engine örneği oluşturun.

$ gcloud compute instances create instance-1 --zone us-central1-c

İşlem tamamlandıktan sonra örneğiniz kullanıma hazır hale gelir.

Aşağıdaki komutu kullanarak SSH üzerinden örneğinize bağlanın:

$ gcloud compute ssh instance-1 --zone us-central1-c

Alternatif olarak İşlem > Compute Engine > Sanal makine örnekleri ve Bağlan sütunundaki SSH'yi tıklayın:

a87bd437a0c8c7b4.png

Sanal makine (VM) örnek kabuğuna (Cloud Shell değil) OpenJDK, Maven ve Redis araçlarını yükleyin:

$ sudo apt-get install openjdk-17-jdk-headless maven redis-tools

Yüklemenin tamamlanmasını bekleyin ve ardından sonraki adıma geçin.

5. Spring Boot uygulaması kurma

web, redis ve cache bağımlılıklarıyla yeni bir Spring Boot projesi oluşturun:

$ 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

Uygulamayı, Redis ana makinesi için Memorystore örneğinin IP adresini kullanacak şekilde yapılandırmak üzere application.properties dosyasını düzenleyin.

$ nano src/main/resources/application.properties

Memorystore for Redis IP adresinizle (birkaç adımdan önce) aşağıdaki satırı ekleyin:

spring.data.redis.host=<memorystore-host-ip-address> 

Bu satırdan sonra yeni bir satır ekleyin ve REST denetleyicisi Java sınıfı oluşturun:

$ nano src/main/java/com/example/demo/HelloWorldController.java

Dosyaya şu içeriği yerleştirin:

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;
 }
}

@RequestMapping ek açıklaması, yöntemi bir HTTP uç noktası olarak gösterir ve yolun bir bölümünü bir yöntem parametresiyle (@PathVariable ek açıklamasıyla belirtildiği gibi) eşleştirir.

@Cacheable("hello") ek açıklaması, yöntem yürütme işleminin önbelleğe alınması gerektiğini ve önbellek adının "hello" olduğunu belirtir. Önbellek anahtarı olarak parametre değeriyle birlikte kullanılır. Daha sonra kod laboratuvarı için bir örnek göreceksiniz.

Sonra, Spring Boot uygulama sınıfında önbelleğe almayı etkinleştireceğiz. DemoApplication.java öğesini düzenle:

$ nano src/main/java/com/example/demo/DemoApplication.java

org.springframework.cache.annotation.EnableCaching dosyasını içe aktarın ve sınıfa bu ek açıklamayla not ekleyin. Sonuç şu şekilde görünmelidir:

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. Uygulamayı çalıştırma ve uç noktaya erişme

JAVA_HOME uygulamasının doğru sürüme ayarlandığından emin olun:

export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/

Artık uygulamayı çalıştırmaya hazırsınız.

$ mvn spring-boot:run

Daha önce yaptığınız gibi örneğinize başka bir SSH bağlantısı açın. Yeni SSH penceresinde, "bob" parametresini ileterek /hello/ uç noktasına birden çok kez erişin girin.

$ 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

İlk istek beş saniye sürüyorken bir sonrakinin yöntemde Thread.sleep(5000)çağrı olmasına rağmen çok daha hızlı olduğuna dikkat edin. Bunun nedeni, gerçek yöntemin yalnızca bir kez yürütülmesi ve sonucun önbelleğe alınmış olmasıdır. Sonraki her çağrı, sonucu doğrudan önbellekten döndürür.

7. Önbelleğe alınan nesneleri inceleme

Aslında uygulamanın tam olarak neyi önbelleğe aldığını görebilirsiniz. Önceki adımda kullandığınız terminalden redis-cli kullanarak Memorystore for Redis ana makinesine bağlanın:

$ redis-cli -h <memorystore-host-ip-address>

Önbellek anahtarlarının listesini görmek için aşağıdaki komutu kullanın:

:6379> KEYS *
1) "hello::bob"

Gördüğünüz gibi, önbellek adı anahtar için ön ek, parametre değeri ise ikinci bölüm olarak kullanılır.

Değeri almak için GET komutunu kullanın:

:6379> GET hello::bob
   Hello bob!

Çıkmak için exit komutunu kullanın.

8. Temizleme

Temizlemek için Cloud Shell'den Compute Engine ve Memorystore örneklerini silin.

Compute örneğini silin:

$ gcloud compute instances delete instance-1 --zone us-central1-c

Memorystore for Redis örneğini silin:

$ gcloud redis instances delete myinstance --region=us-central1

9. Tebrikler!

Redis için Memorystore ve bir Compute Engine örneği oluşturdunuz. Ayrıca, bir Spring Boot uygulaması sayesinde Memorystore'u Spring Boot önbelleğe alma özelliğiyle kullanacak şekilde yapılandırdınız.

Daha Fazla Bilgi

Lisans

Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.