שמירה של נתוני מטמון מהאפליקציה Spring אתחול עם Memorystore

שמירה של נתוני מטמון מהאפליקציה Spring אתחול עם Memorystore

מידע על Codelab זה

subjectהעדכון האחרון: פבר׳ 11, 2020
account_circleנכתב על ידי גוגלר

1.‏ סקירה כללית

Memorystore for Redis היא שירות Redis שמנוהל במלואו ב-Google Cloud. אפליקציות שפועלות ב-Google Cloud יכולות להשיג ביצועים קיצוניים באמצעות יכולת התאמה רחבה, זמינה ומאובטחת עם יכולת התאמה רחבה, מבלי שיהיה צורך לנהל את הפריסות המורכבות של Redis. אפשר להשתמש בו בתור קצה עורפי לשמירה במטמון של נתונים כדי לשפר את הביצועים של אפליקציות Spring אתחול. Codelab מסביר איך מגדירים אותו.

מה תלמדו

  • איך משתמשים ב-Memorystore כגיבוי עורפי לאפליקציית Spring אתחול.

מה צריך?

  • פרויקט ב-Google Cloud
  • דפדפן כמו Google Chrome
  • היכרות עם עורכי טקסט רגילים של Linux, כמו Vim, Emacs ו-GNU Nano

איך תשתמשו ב-Codelab?

איך היית מדרג את החוויה שלך בשירותי Google Cloud?

2.‏ הגדרה ודרישות

הגדרת סביבה בקצב עצמי

אם עדיין אין לכם חשבון Google (Gmail או Google Apps), עליכם ליצור חשבון. נכנסים למסוף ב-Google Cloud Platform (console.cloud.google.com) ויוצרים פרויקט חדש:

צילום מסך מ-2016-02-10 12:45:26.png

חשוב לזכור את מזהה הפרויקט הוא שם ייחודי בכל הפרויקטים ב-Google Cloud (השם הקודם כבר תפוס, והוא לא יעבוד בשבילך.) נתייחס אליו מאוחר יותר ב-codelab הזה בתור PROJECT_ID.

לאחר מכן, עליך להפעיל חיוב ב-Cloud Console כדי להשתמש במשאבים של Google Cloud.

התהליך של קוד Lab זה לא אמור לעלות יותר מדולר אחד, אבל יכול להיות שתצטרכו לשלם על משאבים נוספים או להשאיר אותו פעיל (עיינו בקטע "cleanup" בסוף המסמך).

משתמשים חדשים ב-Google Cloud Platform זכאים לתקופת ניסיון בחינם בשווי 300$.

הפעלת Google Cloud Shell

במסוף GCP, לוחצים על הסמל של Cloud Shell בסרגל הכלים שבפינה השמאלית העליונה:

לאחר מכן לוחצים על "Start Cloud Shell":

יחלפו רק כמה רגעים עד שההקצאה והחיבור לסביבת העבודה יושלמו:

המכונה הווירטואלית הזו נטענת באמצעות כל כלי הפיתוח הדרושים לך. יש בה ספריית בית בנפח עקבי של 5GB, והיא פועלת ב-Google Cloud, וכך משפרת באופן משמעותי את הביצועים ואת האימות של הרשת. את רוב העבודה שלכם בשיעור ה-Lab הזה (אם לא כולם) אפשר לבצע בדפדפן או ב-Google Chromebook.

לאחר החיבור ל-Cloud Shell, אתם אמורים לראות שכבר בוצע אימות, ושהפרויקט כבר מוגדר ב-PROJECT_ID.

מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שאתם מאומתים:

gcloud auth list

פלט הפקודה

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

פלט הפקודה

[core]
project = <PROJECT_ID>

אם לא, אפשר להגדיר אותה באמצעות הפקודה הבאה:

gcloud config set project <PROJECT_ID>

פלט הפקודה

Updated property [core/project].

3.‏ הגדרת Memorystore למופע Redis

פותחים את Cloud Shell.

אחרי ההשקה של Cloud Shell, תוכלו להשתמש בשורת הפקודה כדי ליצור מופע חדש של Memorystore.

$ gcloud redis instances create myinstance --size=1 --region=us-central1

אם Memorystore API לא הופעל, תשאלו אם אתם רוצים להפעיל אותו. עונים 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].

בסיום הפעולה, המכונה תהיה מוכנה לשימוש.

כדי לקבל את redis host ip-address למכונה, מריצים את הפקודה הבאה. תשתמשו בה שוב מאוחר יותר כשתגדירו את אפליקציית Spring אתחול.

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

אם עוברים אל Storage > Memorystore ב-Google Cloud Console, המכונה אמורה להופיע ב-"Ready"

4.‏ הגדרת מכונה של Compute Engine

יוצרים מכונה של Compute Engine באותו אזור.

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

בסיום הפעולה, המכונה תהיה מוכנה לשימוש.

מתחברים למכונה דרך SSH על-ידי ניווט אל Compute > Compute Engine ו-gt , מכונות ב-VM ולוחצים על SSH בעמודה Connect:

במעטפת המכונה הווירטואלית (VM) (לא ב-Cloud Shell), מתקינים את OpenJDK, Maven, telnet:

$ sudo apt-get install openjdk-8-jdk-headless maven telnet

יש לחכות שתהליך ההתקנה יושלם ואז להמשיך לשלב הבא.

5.‏ הגדרת אפליקציה ל-Spring אתחול

יוצרים פרויקט חדש לאתחול אביב עם יחסי תלות של web, redis ו-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

עריכת הקובץ application.properties כדי להגדיר את האפליקציה כך שתשמש בכתובת ה-IP של מופע הזיכרון של Redis.

$ nano src/main/resources/application.properties

הוסף את השורה הבאה עם זיכרון הזיכרון שלך לכתובת IP Redis (לפני מספר שלבים):

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

לאחר מכן יש להוסיף שורה חדשה וליצור מחלקת Java של בקר REST:

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

מוסיפים את התוכן הבא לקובץ:

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 חושפת את השיטה כנקודת קצה (endpoint) של HTTP וממפה חלק מהנתיב לפרמטר של שיטה (כפי שמצוין בהערה @PathVariable).

הערה @Cacheable("hello") מציינת הפעלת המטמון במטמון ושם המטמון הוא "hello." נעשה בו שימוש בשילוב עם ערך הפרמטר כמפתח מטמון. דוגמה מפורטת בשלב מאוחר יותר של שיעור ה-Lab.

בנוסף, עליך להפעיל שמירה במטמון של מחלקת האפליקציות ב-Spring Spring.

עריכה של DemoApplication.java:

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

מייבאים את org.springframework.cache.annotation.EnableCaching ומוסיפים הערות לכיתה באמצעות ההערה הזו. התוצאה אמורה להיראות כך:

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.‏ צריך להפעיל את האפליקציה ולגשת לנקודת הקצה

עכשיו אתם מוכנים להפעיל את האפליקציה!

$ mvn spring-boot:run

פותחים חיבור SSH נוסף למכונה בדיוק כמו שעשיתם קודם לכן. בחלון SSH החדש, נכנסים לנקודת הקצה /hello/ כמה פעמים ומעבירים את הביטוי "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

חשוב לשים לב שבפעם הראשונה שהבקשה נמשכה חמש שניות, אבל הבקשה הבאה הייתה מהירה יותר, על אף שהשיטה Thread.sleep(5000)מופעלת. הסיבה לכך היא שהשיטה בפועל בוצעה פעם אחת בלבד והתוצאה הועברה למטמון. כל קריאה נוספת מחזירה את התוצאה ישירות מהמטמון.

7.‏ בדיקת אובייקטים שנשמרו במטמון

אפשר לראות בדיוק מה היה המטמון של האפליקציה. מאותו מסוף שבו השתמשת בשלב הקודם, יש להתחבר ל-Memorystore למארח Redis באמצעות telnet:

$ telnet <memorystore-host-ip-address> 6379

כדי להציג את רשימת מפתחות המטמון, משתמשים בפקודה הבאה:

KEYS *
hello::bob

כפי שאפשר לראות, שם המטמון משמש כקידומת של המפתח, וערך הפרמטר משמש כחלק השני.

כדי לאחזר את הערך, יש להשתמש בפקודה GET:

$ GET hello::bob
   Hello bob!

כדי לצאת, יש להשתמש בפקודה QUIT.

8.‏ הסרת עותקים כפולים

לניקוי, מוחקים את מופעי Compute Engine ו-Memorystore מ-Cloud Shell.

מוחקים את המכונה של החישוב:

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

מחיקת ה-Memorystore עבור מופע Redis:

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

9.‏ מעולה!

יצרתם את Memorystore עבור Redis ומופע ב-Compute Engine. בנוסף, הגדרת לאפליקציית Spring Boot כדי להשתמש ב-Memorystore עם מטמון במטמון למטמון!

למידע נוסף

רישיון

היצירה הזו ברישיון תחת רישיון Creative Commons Attribution 2.0.