মেমোরিস্টোর সহ একটি স্প্রিং বুট অ্যাপ থেকে ক্যাশে ডেটা

১. সংক্ষিপ্ত বিবরণ

মেমোরিস্টোর ফর রেডিস হলো গুগল ক্লাউডের জন্য একটি সম্পূর্ণভাবে পরিচালিত রেডিস পরিষেবা। গুগল ক্লাউডে চলমান অ্যাপগুলো জটিল রেডিস ডেপ্লয়মেন্ট পরিচালনার ঝামেলা ছাড়াই এই অত্যন্ত স্কেলেবল, সহজলভ্য এবং সুরক্ষিত রেডিস পরিষেবাটি ব্যবহার করে অসাধারণ পারফরম্যান্স অর্জন করতে পারে। স্প্রিং বুট অ্যাপের পারফরম্যান্স উন্নত করার জন্য ডেটা ক্যাশিংয়ের ব্যাকএন্ড হিসেবে এটি ব্যবহার করা যেতে পারে। কোডল্যাবে এটি কীভাবে সেট আপ করতে হয় তা ব্যাখ্যা করা হয়েছে।

আপনি যা শিখবেন

  • Spring Boot অ্যাপের জন্য ক্যাশ ব্যাকএন্ড হিসেবে Memorystore কীভাবে ব্যবহার করবেন

আপনার যা যা লাগবে

  • একটি গুগল ক্লাউড প্রকল্প
  • একটি ব্রাউজার, যেমন গুগল ক্রোম
  • Vim, Emacs, এবং GNU Nano-এর মতো স্ট্যান্ডার্ড লিনাক্স টেক্সট এডিটরগুলির সাথে পরিচিতি

আপনি কোডল্যাবটি কীভাবে ব্যবহার করবেন?

শুধুমাত্র পড়ুন অনুশীলনগুলো পড়ুন এবং সম্পূর্ণ করুন।

গুগল ক্লাউড পরিষেবা ব্যবহারের অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?

শিক্ষানবিশ মধ্যবর্তী দক্ষ

২. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিতে পরিবেশ সেটআপ

  1. ক্লাউড কনসোলে সাইন ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। (যদি আপনার আগে থেকে Gmail বা G Suite অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLpGtQd5Q55

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5 OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

প্রজেক্ট আইডিটি মনে রাখবেন, যা সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে একটি অনন্য নাম (উপরের নামটি ইতিমধ্যে ব্যবহৃত হয়েছে এবং আপনার জন্য কাজ করবে না, দুঃখিত!)। এই কোডল্যাবে এটিকে পরবর্তীতে PROJECT_ID হিসাবে উল্লেখ করা হবে।

  1. এরপরে, গুগল ক্লাউড রিসোর্স ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে।

এই কোডল্যাবটি চালাতে খুব বেশি খরচ হওয়ার কথা নয়, এমনকি আদৌ কোনো খরচ নাও হতে পারে। "পরিষ্কার-পরিচ্ছন্নতা" (Cleaning up) বিভাগে দেওয়া নির্দেশাবলী অবশ্যই অনুসরণ করবেন, যেখানে রিসোর্স বন্ধ করার পরামর্শ দেওয়া হয়েছে, যাতে এই টিউটোরিয়ালের বাইরে আপনার কোনো বিল না আসে। গুগল ক্লাউডের নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

ক্লাউড শেল সক্রিয় করুন

  1. ক্লাউড কনসোল থেকে, Activate Cloud Shell-এ ক্লিক করুন। H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0Zz5LtwBlUZFXFCWFrmrWZLqg1MkZz2LdgUDQ .

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

আপনি যদি আগে কখনো ক্লাউড শেল চালু না করে থাকেন, তাহলে এটি কী তা বর্ণনা করে একটি মধ্যবর্তী স্ক্রিন (নিচে দেওয়া আছে) আপনার সামনে আসবে। যদি তাই হয়, তাহলে 'Continue'-তে ক্লিক করুন (এবং আপনি এটি আর কখনো দেখতে পাবেন না)। একবারের জন্য আসা সেই স্ক্রিনটি দেখতে এইরকম:

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

ক্লাউড শেল প্রস্তুত করতে এবং এর সাথে সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগা উচিত।

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

এই ভার্চুয়াল মেশিনটিতে আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুলস লোড করা আছে। এটি একটি স্থায়ী ৫ জিবি হোম ডিরেক্টরি প্রদান করে এবং গুগল ক্লাউডে চলে, যা নেটওয়ার্ক পারফরম্যান্স ও অথেনটিকেশনকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার প্রায় সমস্ত কাজই শুধুমাত্র একটি ব্রাউজার বা আপনার ক্রোমবুক দিয়ে করা সম্ভব।

ক্লাউড শেলে সংযুক্ত হওয়ার পর আপনি দেখতে পাবেন যে, আপনাকে ইতিমধ্যেই প্রমাণীকৃত করা হয়েছে এবং প্রজেক্টটি আপনার প্রজেক্ট আইডিতে সেট করা আছে।

  1. আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list

কমান্ড আউটপুট

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

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

কমান্ড আউটপুট

[core]
project = <PROJECT_ID>

যদি তা না থাকে, তবে আপনি এই কমান্ডটি দিয়ে এটি সেট করতে পারেন:

gcloud config set project <PROJECT_ID>

কমান্ড আউটপুট

Updated property [core/project].

৩. Redis ইনস্ট্যান্সের জন্য একটি মেমোরিস্টোর সেট আপ করুন।

ক্লাউড শেল চালু করুন।

Cloud Shell চালু হওয়ার পর, কমান্ড লাইন ব্যবহার করে Memorystore API সক্রিয় করুন এবং একটি নতুন Memorystore ইনস্ট্যান্স তৈরি করুন।

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

অপারেশনটি সম্পন্ন হওয়ার পর, আপনার ইনস্ট্যান্সটি ব্যবহারের জন্য প্রস্তুত হয়ে যাবে।

নিম্নলিখিত কমান্ডটি চালিয়ে ইনস্ট্যান্সটির রেডিস হোস্ট আইপি-অ্যাড্রেসটি সংগ্রহ করুন। পরবর্তীতে আপনার স্প্রিং বুট অ্যাপ কনফিগার করার সময় এটি আবার ব্যবহার করতে হবে।

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

গুগল ক্লাউড কনসোলে, Databases > Memorystore > Redis- এ যান। আপনার ইনস্ট্যান্সটি "ready" অবস্থায় থাকা উচিত।

ee90b43f15a6dc1f.png

৪. একটি কম্পিউট ইঞ্জিন ইনস্ট্যান্স সেট আপ করুন

একই অঞ্চলে একটি কম্পিউট ইঞ্জিন ইনস্ট্যান্স তৈরি করুন।

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

অপারেশনটি সম্পন্ন হওয়ার পর, আপনার ইনস্ট্যান্সটি ব্যবহারের জন্য প্রস্তুত হয়ে যাবে।

নিম্নলিখিত কমান্ড ব্যবহার করে SSH এর মাধ্যমে আপনার ইনস্ট্যান্সে সংযোগ করুন:

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

বিকল্পভাবে, Compute > Compute Engine > VM instances- এ যান এবং Connect কলামে SSH-এ ক্লিক করুন:

a87bd437a0c8c7b4.png

ভার্চুয়াল মেশিন (VM) ইনস্ট্যান্স শেলে (ক্লাউড শেল নয়), OpenJDK, Maven, এবং Redis টুলগুলো ইনস্টল করুন:

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

ইনস্টলেশন সম্পূর্ণ হওয়া পর্যন্ত অপেক্ষা করুন এবং তারপর পরবর্তী ধাপে এগিয়ে যান।

৫. একটি Spring Boot অ্যাপ সেট আপ করুন।

web , redis এবং cache ডিপেন্ডেন্সি সহ একটি নতুন Spring Boot প্রজেক্ট তৈরি করুন:

$ 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

Redis হোস্ট হিসেবে Memorystore ইনস্ট্যান্সের আইপি অ্যাড্রেস ব্যবহার করার জন্য অ্যাপটিকে কনফিগার করতে application.properties ফাইলটি সম্পাদনা করুন।

$ nano src/main/resources/application.properties

আগের ধাপ থেকে নেওয়া আপনার Memorystore for Redis IP address-টি দিয়ে নিচের লাইনটি যোগ করুন:

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

এর পরে একটি নতুন লাইন যোগ করুন এবং একটি 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 "। এটি প্যারামিটার ভ্যালুর সাথে ক্যাশ কী (key) হিসেবে ব্যবহৃত হয়। কোড ল্যাবের পরবর্তী অংশে আপনি এর একটি উদাহরণ দেখতে পাবেন।

এরপরে, আমরা 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);
 }
}

৬. অ্যাপটি চালান এবং এন্ডপয়েন্টটি অ্যাক্সেস করুন।

নিশ্চিত করুন, JAVA_HOME সঠিক সংস্করণে সেট করা আছে:

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

এখন আপনি অ্যাপটি চালানোর জন্য প্রস্তুত!

$ mvn spring-boot:run

আগের মতোই আপনার ইনস্ট্যান্সে আরেকটি SSH সংযোগ খুলুন। নতুন SSH উইন্ডোতে, নাম হিসেবে " bob " পাস করে একাধিকবার /hello/ এন্ডপয়েন্টটি অ্যাক্সেস করুন।

$ 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) কল করা হয়েছিল। এর কারণ হলো, প্রকৃত মেথডটি কেবল একবারই এক্সিকিউট হয়েছিল এবং এর ফলাফল ক্যাশে রাখা হয়েছিল। পরবর্তী প্রতিটি কল সরাসরি ক্যাশ থেকে ফলাফলটি ফেরত দেয়।

৭. ক্যাশ করা বস্তুগুলো পর্যালোচনা করুন

অ্যাপটি ঠিক কী ক্যাশ করেছে তা আপনি দেখতে পারেন। আগের ধাপে ব্যবহৃত একই টার্মিনাল থেকে, redis-cli ব্যবহার করে Memorystore for Redis হোস্টে সংযোগ করুন:

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

ক্যাশ কী-গুলোর তালিকা দেখতে, নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

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

যেমনটি দেখতে পাচ্ছেন, ক্যাশের নামটি কী-এর প্রিফিক্স হিসেবে এবং প্যারামিটারের মানটি দ্বিতীয় অংশ হিসেবে ব্যবহৃত হয়।

মানটি পুনরুদ্ধার করতে, GET কমান্ডটি ব্যবহার করুন:

:6379> GET hello::bob
   Hello bob!

প্রস্থান করতে exit কমান্ডটি ব্যবহার করুন।

৮. পরিষ্কার করুন

পরিষ্কার করার জন্য, ক্লাউড শেল থেকে কম্পিউট ইঞ্জিন এবং মেমোরিস্টোর ইনস্ট্যান্সগুলো ডিলিট করুন।

কম্পিউট ইনস্ট্যান্সটি মুছে ফেলুন:

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

Redis ইনস্ট্যান্সের জন্য মেমোরিস্টোরটি মুছে ফেলুন:

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

৯. অভিনন্দন!

আপনি Redis-এর জন্য Memorystore এবং একটি Compute Engine ইনস্ট্যান্স তৈরি করেছেন। এছাড়াও, আপনি Spring Boot ক্যাশিং-এর সাথে Memorystore ব্যবহার করার জন্য একটি Spring Boot অ্যাপ কনফিগার করেছেন!

আরও জানুন

লাইসেন্স

এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন ২.০ জেনেরিক লাইসেন্সের অধীনে রয়েছে।