מידע על Codelab זה
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) ויוצרים פרויקט חדש:
חשוב לזכור את מזהה הפרויקט הוא שם ייחודי בכל הפרויקטים ב-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 עם מטמון במטמון למטמון!
למידע נוסף
- שמירה במטמון המטמון
- חנות זיכרון
- פרויקט אביב ב-Google Cloud
- אביב במאגר Google Cloud GitHub
- Java ב-Google Cloud
רישיון
היצירה הזו ברישיון תחת רישיון Creative Commons Attribution 2.0.