Bu codelab hakkında
1. Genel bakış
Restore için Storage, 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 oranda ölçeklenebilir, kullanılabilir ve güvenli Redis hizmetinden yararlanarak ek performans elde edebilir. Spring Boot uygulamalarının performansını artırmak için veri önbelleğe alma için arka uç olarak kullanılabilir. Codelab'de ayarların nasıl yapılacağı açıklanmaktadır.
Neler öğreneceksiniz?
- Spring Boot uygulaması için Memorystore önbelleği olarak nasıl kullanılır?
Gerekenler
- Bir Google Cloud projesi
- Google Chrome gibi bir tarayıcı
- Vim, Emacs ve GNU Nano gibi standart Linux metin düzenleyicilerini kullanma
codelab'i nasıl kullanacaksınız?
Google Cloud hizmetleriyle ilgili deneyiminizi nasıl değerlendirirsiniz?
2. Kurulum ve Gereksinimler
Bağımsız tempolu ortam kurulumu
Google Hesabınız (Gmail veya Google Apps) yoksa bir hesap oluşturmanız gerekir. Google Cloud Platform Console'da (console.cloud.google.com) oturum açın ve yeni bir proje oluşturun:
Proje kimliğini tüm Google Cloud projeleri genelinde benzersiz bir ad olarak hatırlayın (yukarıdaki ad zaten alınmıştı ve maalesef sizin için çalışmaz). Bu, daha sonra bu codelab'de PROJECT_ID
olarak adlandırılacaktır.
Ardından, Google Cloud kaynaklarını kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.
Bu codelab'i gözden geçirmek için çalışmanın birkaç dolardan fazla maliyeti olmayacak. Ancak daha fazla kaynak kullanmaya karar verirseniz veya bunları çalışır durumda bırakırsanız (bu belgenin sonundaki "temizlik" bölümüne bakın) daha yüksek maliyetli olabilir.
Yeni Google Cloud Platform kullanıcıları 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.
Google Cloud Shell'i etkinleştir
GCP Console'dan, sağ üstteki araç çubuğu üzerinde Cloud Shell simgesini tıklayın:
Ardından "Cloud Shell'i Başlat"ı tıklayın:
Ortamın temel hazırlığı ve bağlantı kurması yalnızca birkaç dakika sürer:
Bu sanal makine, ihtiyacınız olan tüm geliştirme araçları yüklüdür. 5 GB kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışarak ağ performansını ve kimlik doğrulamayı büyük ölçüde iyileştirir. Bu laboratuvardaki çalışmalarınızın neredeyse tamamı tarayıcı veya Google Chromebook ile yapılabilir.
Cloud Shell'e bağlandıktan sonra kimliğinizin zaten doğrulanmış olduğunu ve projenin PROJECT_ID'nize ayarlanmış olduğunu görmeniz gerekir.
Kimliğinizin doğrulanmasını sağlamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud auth list
Komut çıkışı
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Komut çıkışı
[core] project = <PROJECT_ID>
Ayarlanmamışsa şu 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 yeni bir Memorystore örneği oluşturmak için komut satırını kullanabilirsiniz.
$ gcloud redis instances create myinstance --size=1 --region=us-central1
Memorystore API etkinleştirilmemişse bu API'yi etkinleştirmek isteyip istemediğiniz sorulur. y yanıtını verin.
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].
İşlem tamamlandıktan sonra örneğiniz kullanıma hazır olur.
Aşağıdaki komutu çalıştırarak örneğin redis host ip-address'ini alın. Daha sonra Spring Boot uygulamanızı yapılandırırken tekrar kullanırsınız.
$ gcloud redis instances describe myinstance --region=us-central1 \ | grep host host: 10.0.0.4
Google Cloud Console'da Depolama > Bellek Mağazası'na giderseniz örneğinizi "hazır" durumunda görebilirsiniz :
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 olur.
Compute > Compute Engine > Sanal makine örnekleri'ne giderek SSH üzerinden örneğinize bağlanıp Connect (Bağlan) sütununda SSH'yi tıklayın:
Sanal makine (VM) örnek kabuğunda (Cloud Shell'in değil) OpenJDK, Maven, telnet uygulamasını yükleyin:
$ sudo apt-get install openjdk-8-jdk-headless maven telnet
Yüklemenin tamamlanmasını bekleyip bir sonraki adıma geçin.
5. Spring Boot uygulaması kurma
web
, redis
ve cache
bağımlıları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 \ | tar -xzvf - && cd cache-app
application.properties
dosyasını düzenleyerek uygulamayı Redis ana makinesi için Memorystore örneğinin IP adresini kullanacak şekilde yapılandırın.
$ nano src/main/resources/application.properties
Memorystore for Redis IP adresinizle (aşağıdaki adımları ekleyin) aşağıdaki satırı ekleyin:
spring.redis.host=<memorystore-host-ip-address>
Bunun ardından yeni bir satır ekleyin ve REST denetleyici Java sınıfı oluşturun:
$ nano src/main/java/com/example/demo/HelloWorldController.java
Dosyaya aşağıdaki 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 açığa çıkarır ve yolun bir kısmını bir yöntem parametresiyle (@PathVariable
ek açıklaması ile belirtildiği şekilde) eşler.
@Cacheable("hello")
ek açıklaması, yöntem çalıştırmanın önbelleğe alınması gerektiğini ve önbellek adının "hello
" olduğunu gösterir. Önbellek anahtarı olarak parametre değeriyle birlikte kullanılır. Daha sonra kod laboratuvarında bir örnek görürsünüz.
Ayrıca, Spring Boot uygulama sınıfında önbelleğe almayı etkinleştirmeniz gerekir.
Düzenle: DemoApplication.java
$ nano src/main/java/com/example/demo/DemoApplication.java
Bu ek açıklamayla org.springframework.cache.annotation.EnableCaching
içe aktarın ve sınıfa not ekleyin. Sonuç şöyle 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
Artık uygulamayı çalıştırmaya hazırsınız.
$ mvn spring-boot:run
Örneğinizle aynı şekilde başka bir SSH bağlantısı açın. Yeni SSH penceresinde /hello/
uç noktasına birden fazla kez erişip ad olarak bob
&;
$ 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
İstek ilk kez beş saniye sürmüştür ancak bir sonraki istek, yöntemde Thread.sleep(5000)
çağrılı olsa bile çok daha hızlıdır. Bunun nedeni, gerçek yöntemin yalnızca bir kez yürütülmesi ve sonucun önbelleğe alınmasıdır. Sonraki her çağrı, sonucu doğrudan önbellekten döndürür.
7. Önbelleğe alınan nesneleri inceleme
Uygulamanın tam olarak neleri önbelleğe aldığını görebilirsiniz. Önceki adımda kullandığınız terminalden telnet kullanarak Memorystore for Redis ana makinesine bağlanın:
$ telnet <memorystore-host-ip-address> 6379
Önbellek anahtarlarının listesini görmek için aşağıdaki komutu kullanın:
KEYS * hello::bob
Görebileceğiniz gibi, önbellek adı anahtar için ön ek olarak, parametre değeri ise ikinci bölüm olarak kullanılmaktadır.
Değeri almak için GET
komutunu kullanın:
$ GET hello::bob Hello bob!
Çıkmak için QUIT
komutunu kullanın.
8. Temizleme
Temizlemek için Compute Engine ve Memorystore örneklerini Cloud Shell'den 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!
Memorystore for Redis ve bir Compute Engine örneği oluşturdunuz. Ayrıca, Spring Boot önbelleğe alma ile Memorystore'u kullanmak için bir Spring Boot uygulaması yapılandırdınız.
Daha Fazla Bilgi
- İlkbahar Botu Önbelleğe Alma
- Memorystore
- Google Cloud'da Spring projesi
- Google Cloud GitHub deposunda Spring
- Google Cloud'da Java
Lisans
Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.