১. সংক্ষিপ্ত বিবরণ
একটি মাল্টি-টিয়ার মাইক্রোসার্ভিসেস আর্কিটেকচার সম্পর্কে অন্তর্দৃষ্টি এবং পর্যবেক্ষণযোগ্যতা অর্জনের জন্য ডিস্ট্রিবিউটেড ট্রেসিং গুরুত্বপূর্ণ। যখন আপনি সার্ভিস A থেকে সার্ভিস B হয়ে সার্ভিস C-তে চেইনড সার্ভিস কল করেন, তখন কলগুলো সফল হয়েছে কিনা এবং প্রতিটি ধাপে ল্যাটেন্সি কত ছিল, তা বোঝা জরুরি।
Spring Boot-এ, আপনি আপনার অ্যাপ্লিকেশনে নির্বিঘ্নে ডিস্ট্রিবিউটেড ট্রেসিং ইন্সট্রুমেন্টেশন যোগ করতে Spring Cloud Sleuth ব্যবহার করতে পারেন। ডিফল্টরূপে, এটি ট্রেস ডেটা Zipkin-এ ফরোয়ার্ড করতে পারে।
গুগল ক্লাউড প্ল্যাটফর্মে ক্লাউড ট্রেস রয়েছে, যা একটি পরিচালিত পরিষেবা। এটি আপনাকে নিজস্ব জিপকিন ইনস্ট্যান্স বা স্টোরেজ পরিচালনা না করেই ট্রেস ডেটা সংরক্ষণ করার সুযোগ দেয়। ক্লাউড ট্রেস লেটেন্সি ডিস্ট্রিবিউশন রিপোর্টও তৈরি করতে পারে এবং স্বয়ংক্রিয়ভাবে পারফরম্যান্স রিগ্রেশন শনাক্ত করতে পারে।
একটি Spring Boot অ্যাপ্লিকেশন থেকে Cloud Trace ব্যবহার করার জন্য আপনার কাছে দুটি বিকল্প রয়েছে:
- একটি Stackdriver Trace Zipkin Proxy ব্যবহার করুন এবং Spring Cloud Sleuth-কে এই প্রক্সিটিকে Zipkin এন্ডপয়েন্ট হিসেবে ব্যবহার করার জন্য কনফিগার করুন।
- অথবা, Spring Cloud GCP Trace ব্যবহার করুন, যা Spring Cloud Sleuth-এর সাথে নির্বিঘ্নে সমন্বিত হয় এবং ট্রেস ডেটা সরাসরি Cloud Trace-এ পাঠিয়ে দেয়।
এই কোডল্যাবে আপনি শিখবেন কীভাবে একটি নতুন Spring Boot অ্যাপ্লিকেশন তৈরি করতে হয় এবং ডিস্ট্রিবিউটেড ট্রেসিংয়ের জন্য Spring Cloud GCP Trace ব্যবহার করতে হয়।
আপনি যা শিখবেন
- কিভাবে একটি Spring Boot Java অ্যাপ্লিকেশন তৈরি করবেন এবং Cloud Trace কনফিগার করবেন।
আপনার যা যা লাগবে
- একটি গুগল ক্লাউড প্ল্যাটফর্ম প্রকল্প
- একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
- Vim, EMACs বা Nano-এর মতো প্রচলিত লিনাক্স টেক্সট এডিটরগুলোর সাথে পরিচিতি।
আপনি এই টিউটোরিয়ালটি কীভাবে ব্যবহার করবেন?
HTML/CSS ওয়েব অ্যাপ তৈরির অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?
গুগল ক্লাউড প্ল্যাটফর্ম পরিষেবা ব্যবহারের অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?
২. সেটআপ এবং প্রয়োজনীয়তা
স্ব-গতিতে পরিবেশ সেটআপ
- Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।



- প্রজেক্টের নামটি হলো এই প্রজেক্টের অংশগ্রহণকারীদের প্রদর্শিত নাম। এটি একটি ক্যারেক্টার স্ট্রিং যা গুগল এপিআই ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
- প্রজেক্ট আইডি সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (একবার সেট করার পর এটি পরিবর্তন করা যায় না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত এটি কী তা নিয়ে আপনার মাথা ঘামানোর দরকার নেই। বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রজেক্ট আইডি উল্লেখ করতে হবে (যা সাধারণত
PROJECT_IDহিসাবে চিহ্নিত করা হয়)। তৈরি করা আইডিটি আপনার পছন্দ না হলে, আপনি এলোমেলোভাবে আরেকটি তৈরি করতে পারেন। বিকল্পভাবে, আপনি আপনার নিজের আইডি দিয়ে চেষ্টা করে দেখতে পারেন যে সেটি উপলব্ধ আছে কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রজেক্টের পুরো সময়কাল জুড়ে এটি অপরিবর্তিত থাকবে। - আপনার অবগতির জন্য জানাচ্ছি যে, তৃতীয় একটি ভ্যালু রয়েছে, যা হলো প্রজেক্ট নম্বর , এবং কিছু এপিআই এটি ব্যবহার করে থাকে। ডকুমেন্টেশনে এই তিনটি ভ্যালু সম্পর্কে আরও বিস্তারিত জানুন।
- এরপর, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে। এই কোডল্যাবটি সম্পন্ন করতে খুব বেশি খরচ হবে না, এমনকি আদৌ কোনো খরচ নাও হতে পারে। এই টিউটোরিয়ালের পর বিলিং এড়াতে রিসোর্সগুলো বন্ধ করার জন্য, আপনি আপনার তৈরি করা রিসোর্সগুলো অথবা প্রজেক্টটি ডিলিট করে দিতে পারেন। নতুন গুগল ক্লাউড ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।
গুগল ক্লাউড শেল
যদিও গুগল ক্লাউড এবং কুবারনেটিস আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালনা করা যায়, এই কোডল্যাবে আমরা গুগল ক্লাউড শেল ব্যবহার করব, যা ক্লাউডে চালিত একটি কমান্ড লাইন এনভায়রনমেন্ট।
ক্লাউড শেল সক্রিয় করুন
- ক্লাউড কনসোল থেকে, Activate Cloud Shell-এ ক্লিক করুন।
.

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

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

এই ভার্চুয়াল মেশিনটিতে প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুলস লোড করা আছে। এটি একটি স্থায়ী ৫ জিবি হোম ডিরেক্টরি প্রদান করে এবং গুগল ক্লাউডে চলে, যা নেটওয়ার্ক পারফরম্যান্স ও অথেনটিকেশনকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার প্রায় সমস্ত কাজই একটি ব্রাউজার দিয়ে করা সম্ভব।
ক্লাউড শেলে সংযুক্ত হওয়ার পর, আপনি দেখতে পাবেন যে আপনাকে প্রমাণীকৃত করা হয়েছে এবং প্রজেক্টটি আপনার প্রজেক্ট আইডিতে সেট করা আছে।
- আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list
কমান্ড আউটপুট
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- gcloud কমান্ডটি আপনার প্রজেক্ট সম্পর্কে জানে কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud config list project
কমান্ড আউটপুট
[core] project = <PROJECT_ID>
যদি তা না থাকে, তবে আপনি এই কমান্ডটি দিয়ে এটি সেট করতে পারেন:
gcloud config set project <PROJECT_ID>
কমান্ড আউটপুট
Updated property [core/project].
৩. একটি নতুন Spring Boot REST Service তৈরি করুন
ক্লাউড শেল চালু হওয়ার পরে, আপনি কমান্ড লাইন ব্যবহার করে স্প্রিং ইনিশিয়ালাইজারের সাহায্যে একটি নতুন স্প্রিং বুট অ্যাপ্লিকেশন তৈরি করতে পারেন:
$ curl https://start.spring.io/starter.tgz -d packaging=jar \
-d bootVersion=2.7.6 \
-d dependencies=web,lombok,cloud-gcp,distributed-tracing \
-d jvmVersion=17 \
-d type=maven-project \
-d baseDir=trace-service-one | tar -xzvf - \
&& cd trace-service-one
একটি নতুন ক্লাস যোগ করে একটি নতুন REST কন্ট্রোলার তৈরি করুন:
src/main/java/com/example/demo/WorkController.java
package com.example.demo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Random;
@RestController
@Slf4j
public class WorkController {
Random r = new Random();
public void meeting() {
try {
log.info("meeting...");
// Delay for random number of milliseconds.
Thread.sleep(r.nextInt(500));
} catch (InterruptedException e) {
}
}
@GetMapping("/")
public String work() {
// What is work? Meetings!
// When you hit this URL, it'll call meetings() 5 times.
// Each time will have a random delay.
log.info("starting to work");
for (int i = 0; i < 5; i++) {
this.meeting();
}
log.info("finished!");
return "finished work!";
}
}
অ্যাপ্লিকেশনটির জন্য আপনার সঠিক JVM সংস্করণ আছে কিনা তা নিশ্চিত করুন:
$ export JAVA_HOME=/usr/lib/jvm/java-1.17.0-openjdk-amd64
আপনি Spring Boot প্লাগইন ব্যবহার করে স্বাভাবিকভাবে Spring Boot অ্যাপ্লিকেশনটি চালু করতে পারেন। এই ল্যাবের জন্য টেস্টগুলো বাদ দেওয়া যাক:
$ ./mvnw -DskipTests spring-boot:run
অ্যাপ্লিকেশনটি চালু হয়ে গেলে, ওয়েব প্রিভিউ আইকনে ক্লিক করুন।
ক্লাউড শেল টুলবারে এবং পোর্ট ৮০৮০-তে প্রিভিউ নির্বাচন করুন।

কিছুক্ষণ অপেক্ষা করার পর আপনি ফলাফল দেখতে পাবেন:

ক্লাউড শেলে, আপনি ট্রেস আইডি এবং স্প্যান আইডি সহ লগ বার্তাগুলিও দেখতে পাবেন:

৪. ক্লাউড ট্রেস ব্যবহার করে
ক্লাউড ট্রেস এপিআই সক্রিয় করুন
আপনার ট্রেস ডেটা সংরক্ষণ করতে ক্লাউড ট্রেস ব্যবহার করার আগে আপনাকে অবশ্যই প্রথমে ক্লাউড ট্রেস এপিআই (API) সক্রিয় করতে হবে। এপিআই সক্রিয় করতে, নিম্নলিখিত কমান্ডটি চালান:
$ gcloud services enable cloudtrace.googleapis.com
অ্যাপ্লিকেশন ডিফল্ট ক্রেডেনশিয়াল সেটআপ করুন
এই ল্যাবের জন্য, আপনাকে একটি অ্যাপ্লিকেশন ডিফল্ট ক্রেডেনশিয়াল কনফিগার করতে হবে। এই ক্রেডেনশিয়ালটি Spring Cloud GCP Trace starter স্বয়ংক্রিয়ভাবে গ্রহণ করবে।
প্রথমে, লগইন করুন:
$ gcloud auth application-default login
You are running on a Google Compute Engine virtual machine.
The service credentials associated with this virtual machine
will automatically be used by Application Default
Credentials, so it is not necessary to use this command.
If you decide to proceed anyway, your user credentials may be visible
to others with access to this virtual machine. Are you sure you want
to authenticate with your personal account?
Do you want to continue (Y/n)? Y
Go to the following link in your browser:
https://accounts.google.com/o/oauth2/auth...
Enter verification code: ...
লিঙ্কটিতে ক্লিক করে একটি নতুন ব্রাউজার ট্যাব খুলুন, এবং তারপর Allow-তে ক্লিক করুন।

এরপর, ভেরিফিকেশন কোডটি কপি করে ক্লাউড শেলে পেস্ট করুন এবং এন্টার চাপুন। আপনি দেখতে পাবেন:
Credentials saved to file: [/tmp/tmp.jm9bnQ4R9Q/application_default_credentials.json]
These credentials will be used by any library that requests
Application Default Credentials.
Spring Cloud GCP Trace যোগ করুন
এই সার্ভিসে আমরা ট্রেসিংয়ের জন্য ইতিমধ্যেই Spring Cloud Sleuth ব্যবহার করেছি। চলুন, ডেটা Cloud Trace-এ ফরোয়ার্ড করার জন্য Spring Cloud GCP Trace starter যোগ করি।
Spring Cloud GCP Trace নির্ভরতা যোগ করুন:
pom.xml
<project>
...
<dependencies>
...
<!-- Add Cloud Trace Starter -->
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-trace</artifactId>
</dependency>
</dependencies>
...
</project>
ডিফল্টরূপে, Spring Cloud Sleuth প্রতিটি অনুরোধ স্যাম্পল করে না। আমাদের টেস্টিং কিছুটা সহজ করার জন্য, application.properties ফাইলে স্যাম্পল রেট ১০০%-এ বাড়িয়ে দিন, যাতে আমরা ট্রেস ডেটা দেখতে পাই এবং সেইসাথে কিছু অপ্রয়োজনীয় URL উপেক্ষা করতে পারি।
$ echo "
spring.sleuth.sampler.probability=1.0
spring.sleuth.web.skipPattern=(^cleanup.*|.+favicon.*)
" > src/main/resources/application.properties
অ্যাপ্লিকেশনটি আবার চালান এবং ক্লাউড শেল ওয়েব প্রিভিউ ব্যবহার করে অ্যাপ্লিকেশনটি দেখুন:
$ export GOOGLE_CLOUD_PROJECT=`gcloud config list --format 'value(core.project)'`
$ ./mvnw -DskipTests spring-boot:run
ডিফল্টরূপে, Spring Cloud GCP Trace ট্রেস ডেটা ব্যাচ করে এবং প্রতি ১০ সেকেন্ডে একবার, অথবা ন্যূনতম সংখ্যক ট্রেস ডেটা প্রাপ্ত হলে তা প্রেরণ করে। এটি কনফিগারযোগ্য এবং আরও তথ্যের জন্য আপনি Spring Cloud GCP Trace রেফারেন্স ডকুমেন্টেশন দেখতে পারেন।
পরিষেবাটির কাছে অনুরোধ করুন:
$ curl localhost:8080
ক্লাউড কনসোলে, Operations → Trace → Trace list- এ যান।

উপরে, সময়সীমা কমিয়ে ১ ঘণ্টা করুন। ডিফল্টরূপে, অটো রিলোড চালু থাকে। তাই ট্রেস ডেটা আসা মাত্রই তা কনসোলে দেখা যাবে!

ট্রেস ডেটা প্রায় ৩০ সেকেন্ডের মধ্যে দেখা যাবে।

ট্রেসের বিস্তারিত দেখতে নীল বিন্দুটিতে ক্লিক করুন:

সেটা তো বেশ সহজ ছিল!
৫. একটি দ্বিতীয় Spring Boot ওয়েব অ্যাপ্লিকেশন তৈরি করুন।
+ আইকনে ক্লিক করে একটি নতুন ক্লাউড শেল সেশন খুলুন:

নতুন সেশনে, দ্বিতীয় Spring Boot অ্যাপ্লিকেশনটি তৈরি করুন:
$ curl https://start.spring.io/starter.tgz -d packaging=jar \
-d bootVersion=2.7.6 \
-d dependencies=web,lombok,cloud-gcp,distributed-tracing \
-d jvmVersion=17 \
-d type=maven-project \
-d baseDir=trace-service-two | tar -xzvf - \
&& cd trace-service-two
একটি নতুন ক্লাস যোগ করে একটি নতুন REST কন্ট্রোলার তৈরি করুন:
src/main/java/com/example/demo/MeetingController.java
package com.example.demo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Random;
@RestController
@Slf4j
public class MeetingController {
Random r = new Random();
@GetMapping("/meet")
public String meeting() {
try {
log.info("meeting...");
Thread.sleep(r.nextInt(500 - 20 + 1) + 20);
} catch (InterruptedException e) {
}
return "finished meeting";
}
}
pom.xml-এ Spring Cloud GCP Trace যোগ করুন
pom.xml
<project>
...
<dependencies>
...
<!-- Add Cloud Trace starter -->
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-trace</artifactId>
</dependency>
</dependencies>
...
</project>
সমস্ত অনুরোধের ১০০% নমুনা পরীক্ষা করার জন্য Sleuth কনফিগার করুন:
src/main/resources/application.properties
$ echo "
spring.sleuth.sampler.probability=1.0
spring.sleuth.web.skipPattern=(^cleanup.*|.+favicon.*)
" > src/main/resources/application.properties
অবশেষে, আপনি Spring Boot প্লাগইন ব্যবহার করে পোর্ট 8081-এ Spring Boot অ্যাপ্লিকেশনটি চালু করতে পারেন:
$ export GOOGLE_CLOUD_PROJECT=`gcloud config list --format 'value(core.project)'`
$ ./mvnw -DskipTests spring-boot:run -Dspring-boot.run.jvmArguments="-Dserver.port=8081"
৬. দ্বিতীয় পরিষেবাটি ব্যবহার করার জন্য প্রথম পরিষেবাটি আপডেট করুন।
যখন trace-service-two চালু থাকবে, তখন প্রথম Cloud Shell সেশন উইন্ডোতে ফিরে যান এবং trace-service-one এ পরিবর্তন করুন।
প্রথমে একটি নতুন RestTemplate বিন ইনিশিয়ালাইজ করুন:
src/main/java/com/example/demo/DemoApplication.java
package com.example.demo;
...
import org.springframework.web.client.RestTemplate;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class DemoApplication {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
WorkController.meeting() -এর মধ্যে Meeting সার্ভিসটিকে কল করুন।
src/main/java/com/example/demo/WorkController.java
package com.example.demo;
...
import org.springframework.web.client.RestTemplate;
import org.springframework.beans.factory.annotation.Autowired;
@RestController
@Slf4j
public class WorkController {
@Autowired
RestTemplate restTemplate;
public void meeting() {
String result = restTemplate.getForObject("http://localhost:8081/meet", String.class);
log.info(result);
}
...
}
সার্ভিসটি আবার চালু করুন এবং কমান্ড লাইন থেকে এন্ডপয়েন্টটি ট্রিগার করুন:
$ export GOOGLE_CLOUD_PROJECT=`gcloud config list --format 'value(core.project)'`
# The '&' places the process in the background. Bring it back to the foreground with 'fg'.
$ ./mvnw -DskipTests spring-boot:run &
$ curl localhost:8080
উভয় সেশন উইন্ডোতেই আপনি লগ বার্তাগুলো দেখতে পাবেন, যেখানে ট্রেস আইডিটি একটি সার্ভিস থেকে অন্য সার্ভিসে স্থানান্তরিত হবে।
ক্লাউড ট্রেসের ট্রেস লিস্টে, আপনি দ্বিতীয় ট্রেসটি দেখতে পাবেন:

আপনি নতুন নীল বিন্দুটিতে ক্লিক করে ট্রেসের বিস্তারিত দেখতে পারেন:

আপনি এই ডায়াগ্রামের যেকোনো স্প্যানে ক্লিক করে সেটির বিস্তারিত বিবরণও দেখতে পারেন।
৭. লেটেন্সি বন্টন ও পারফরম্যান্স রিপোর্ট
যখন আপনি ট্রেস ডেটা স্টোরেজ হিসেবে ক্লাউড ট্রেস ব্যবহার করেন, তখন ক্লাউড ট্রেস সেই ডেটা ব্যবহার করে ল্যাটেন্সি ডিস্ট্রিবিউশন রিপোর্ট তৈরি করতে পারে। এই ধরনের রিপোর্ট তৈরি করার জন্য আপনার ১০০টিরও বেশি ট্রেসের প্রয়োজন হবে:

আপনি 'hey' ব্যবহার করে প্রথম ১০০টিরও বেশি রিকোয়েস্ট চালাতে পারেন, যা ক্লাউড শেলে আগে থেকেই ইনস্টল করা থাকে!
$ hey localhost:8080 -n 150
এছাড়াও, ক্লাউড ট্রেস 'অ্যানালাইসিস রিপোর্ট'-এর অধীনে দুটি ভিন্ন সময়কালে একই সার্ভিসের পারফরম্যান্সের অবনতি স্বয়ংক্রিয়ভাবে শনাক্ত করতে পারে।
৮. সারসংক্ষেপ
এই ল্যাবে, আপনি দুটি সাধারণ সার্ভিস তৈরি করেছেন এবং Spring Cloud Sleuth ব্যবহার করে ডিস্ট্রিবিউটেড ট্রেসিং যুক্ত করেছেন, এবং ট্রেস তথ্য Cloud Trace-এ পাঠানোর জন্য Spring Cloud GCP ব্যবহার করেছেন।
৯. অভিনন্দন!
আপনি আপনার প্রথম অ্যাপ ইঞ্জিন ওয়েব অ্যাপ্লিকেশনটি লিখতে শিখেছেন!
আরও জানুন
- ক্লাউড ট্রেস: https://cloud.google.com/trace/
- GCP-তে Spring প্রজেক্ট: http://cloud.spring.io/spring-cloud-gcp/
- GCP-তে Spring গিটহাব রিপোজিটরি: https://github.com/GoogleCloudPlatform/spring-cloud-gcp
- গুগল ক্লাউড প্ল্যাটফর্মে জাভা: https://cloud.google.com/java/
লাইসেন্স
এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন ২.০ জেনেরিক লাইসেন্সের অধীনে রয়েছে।