Memorystore สําหรับ Firestore คือบริการ GPT ที่มีการจัดการครบวงจรสําหรับ Google Cloud แอปที่ทํางานใน Google Cloud จะทํางานได้อย่างมีประสิทธิภาพสูงสุดด้วยการใช้ประโยชน์จากบริการ GPT ที่รองรับการปรับขนาด ความพร้อมใช้งานสูง และปลอดภัยโดยไม่ต้องจัดการการทําให้ใช้งานได้ที่ซับซ้อนของ GPT โดยใช้เป็นแบ็กเอนด์สําหรับการแคชข้อมูลเพื่อปรับปรุงประสิทธิภาพแอป Spring Boot ได้ Codelab จะอธิบายวิธีตั้งค่า
สิ่งที่จะได้เรียนรู้
- วิธีใช้ Memorystore เป็นแบ็กเอนด์แคชสําหรับแอป Spring Boot
สิ่งที่ต้องมี
- โปรเจ็กต์ Google Cloud
- เบราว์เซอร์ เช่น Google Chrome
- ทําความคุ้นเคยกับเครื่องมือแก้ไขข้อความ Linux มาตรฐาน เช่น Vim, Emacs และ GNU Nano
คุณจะใช้ Codelab อย่างไร
คุณจะให้คะแนนประสบการณ์ที่ได้รับจากบริการของ Google Cloud อย่างไร
การตั้งค่าสภาพแวดล้อมด้วยตนเอง
หากยังไม่มีบัญชี Google (Gmail หรือ Google Apps) คุณต้องสร้างบัญชี ลงชื่อเข้าใช้คอนโซล Google Cloud Platform (console.cloud.google.com) และสร้างโปรเจ็กต์ใหม่ ดังนี้
โปรดทราบว่ารหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ํากันสําหรับโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อข้างต้นมีผู้อื่นนําไปใช้แล้ว ขออภัยในความไม่สะดวก) และจะเรียกใน Codelab นี้ว่า PROJECT_ID
ในภายหลัง
จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากรของ Google Cloud
การเรียกใช้ Codelab นี้ไม่ควรมีค่าใช้จ่ายเกิน 2-3 ดอลลาร์ แต่อาจมากกว่านั้นหากคุณตัดสินใจใช้ทรัพยากรเพิ่มเติมหรือปล่อยให้ทรัพยากรทํางาน (ดู "cleanup" ในตอนท้ายของเอกสารนี้)
ผู้ใช้ใหม่ของ Google Cloud Platform มีสิทธิ์รับช่วงทดลองใช้ฟรี $300
เปิดใช้งาน Google Cloud Shell
จากคอนโซล GCP ให้คลิกไอคอน Cloud Shell บนแถบเครื่องมือด้านขวาบน ดังนี้
จากนั้นคลิก "เริ่ม Cloud Shell"
ระบบจะใช้เวลาเพียงครู่เดียวในการจัดสรรและเชื่อมต่อกับสภาพแวดล้อม
เครื่องเสมือนนี้โหลดด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหน้าแรกขนาด 5 GB ถาวรและทํางานอยู่ใน Google Cloud ซึ่งช่วยปรับปรุงประสิทธิภาพและการตรวจสอบสิทธิ์ของเครือข่ายได้อย่างมาก ไม่เพียงเท่านั้น งานของคุณในห้องทดลองนี้ก็ทําได้โดยใช้เพียงเบราว์เซอร์หรือ 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].
เริ่ม 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].
หลังจากดําเนินการเสร็จสิ้นแล้ว อินสแตนซ์ของคุณจะพร้อมใช้งาน
รับที่อยู่ IP โฮสต์ของการเลิกใช้งานของอินสแตนซ์โดยเรียกใช้คําสั่งต่อไปนี้ คุณจะใช้รหัสผ่านนี้อีกครั้งเมื่อกําหนดค่าแอป Spring Boot
$ gcloud redis instances describe myinstance --region=us-central1 \ | grep host host: 10.0.0.4
หากคุณไปที่พื้นที่เก็บข้อมูล > หน่วยความจําใน Google Cloud Console คุณควรเห็นอินสแตนซ์ใน "Ready"
สร้างอินสแตนซ์ Compute Engine ในภูมิภาคเดียวกัน
$ gcloud compute instances create instance-1 --zone us-central1-c
หลังจากดําเนินการเสร็จสิ้นแล้ว อินสแตนซ์ของคุณจะพร้อมใช้งาน
เชื่อมต่อกับอินสแตนซ์ผ่าน SSH โดยไปที่ Compute >, Compute Engine >, อินสแตนซ์ VM แล้วคลิก SSH ในคอลัมน์เชื่อมต่อ ดังนี้
ในอินสแตนซ์อินสแตนซ์ของเครื่องเสมือน (VM) (ไม่ใช่ Cloud Shell) ให้ติดตั้ง OpenJDK, Maven, telnet:
$ sudo apt-get install openjdk-8-jdk-headless maven telnet
รอให้ติดตั้งเสร็จก่อนแล้วไปยังขั้นตอนถัดไป
สร้างโปรเจ็กต์ใหม่ในช่วงฤดูใบไม้ผลิโดยใช้ทรัพยากร Dependency ของ 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 ของอินสแตนซ์ Memorystore สําหรับโฮสต์ Firestore
$ nano src/main/resources/application.properties
เพิ่มบรรทัดต่อไปนี้ด้วยที่อยู่ IP ของ Memorystore for Firestore (จากไม่กี่ขั้นตอนที่ผ่านมา)
spring.redis.host=<memorystore-host-ip-address>
หลังจากนั้นให้เพิ่มบรรทัดใหม่ แล้วสร้างคลาส Java Controller ของ 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
จะแสดงเมธอดเป็นปลายทาง HTTP และแมปบางส่วนของเส้นทางกับพารามิเตอร์เมธอด (ตามที่ระบุโดยคําอธิบายประกอบ @PathVariable
)
คําอธิบายประกอบ @Cacheable("hello")
จะระบุว่าการใช้งานเมธอดควรมีการแคช และชื่อแคชคือ "hello
." ส่วน' ใช้ร่วมกับค่าพารามิเตอร์เป็นคีย์แคช คุณจะเห็นตัวอย่างภายหลังในห้องทดลองโค้ด
และคุณยังต้องเปิดการแคชในคลาสแอป Spring Boot ด้วย
แก้ไข 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); } }
ตอนนี้คุณพร้อมจะใช้งานแอปแล้ว
$ 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
โปรดสังเกตว่าในครั้งแรกที่ส่งคําขอใช้เวลานานถึง 5 วินาที แต่คําขอครั้งถัดไปก็ทํางานได้เร็วขึ้นอย่างมาก แม้ว่าคุณจะมีThread.sleep(5000)
การส่งคําขอดังกล่าวก็ตาม นั่นเป็นเพราะวิธีการที่เกิดขึ้นจริงดําเนินการเพียงครั้งเดียว และนําผลลัพธ์ไปไว้ในแคช การเรียกครั้งต่อๆ ไปจะแสดงผลลัพธ์จากแคชโดยตรง
คุณจะเห็นได้แน่ชัดว่ามีแอปอะไรอยู่ในแคช จากเทอร์มินัลเดียวกับที่คุณใช้ในขั้นตอนก่อนหน้า ให้เชื่อมต่อกับโฮสต์ Memorystore สําหรับ Firestore โดยใช้ telnet
$ telnet <memorystore-host-ip-address> 6379
หากต้องการดูรายการคีย์แคช ให้ใช้คําสั่งต่อไปนี้
KEYS * hello::bob
จะเห็นได้ว่ามีการใช้แคชเป็นคํานําหน้าสําหรับคีย์ และใช้ค่าพารามิเตอร์เป็นส่วนที่ 2
หากต้องการดึงค่า ให้ใช้คําสั่ง GET
ดังนี้
$ GET hello::bob Hello bob!
ใช้คําสั่ง QUIT
เพื่อออก
หากต้องการล้าง ให้ลบอินสแตนซ์ Compute Engine และ Memorystore ออกจาก Cloud Shell
วิธีลบอินสแตนซ์การประมวลผล
$ gcloud compute instances delete instance-1 --zone us-central1-c
วิธีลบอินสแตนซ์ Memorystore for ActiveSync
$ gcloud redis instances delete myinstance --region=us-central1
คุณสร้างอินสแตนซ์ Memorystore for Firestore และ Compute Engine แล้ว นอกจากนี้ คุณยังกําหนดค่าแอป Spring Boot ให้ใช้ Memorystore กับการแคชการเปิดเครื่อง Spring
ดูข้อมูลเพิ่มเติม
- การแคชฤดูใบไม้ผลิ
- หน่วยความจํา
- โปรเจ็กต์ Spring on Google Cloud
- ที่เก็บข้อมูล Spring on Google Cloud GitHub
- Java ใน Google Cloud
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตทั่วไปของ Creative Commons Attribution 2.0