1. ওভারভিউ
বহু-স্তরের মাইক্রোসার্ভিসেস আর্কিটেকচারের অন্তর্দৃষ্টি এবং পর্যবেক্ষণযোগ্যতা অর্জনের জন্য বিতরণ করা ট্রেসিং গুরুত্বপূর্ণ। যখন আপনি পরিষেবা কলে চেইন করা পরিষেবা, পরিষেবা A থেকে পরিষেবা B থেকে পরিষেবা C পর্যন্ত, তখন এটি বোঝা গুরুত্বপূর্ণ যে কলগুলি সফল হয়েছে এবং প্রতিটি ধাপে লেটেন্সিও ছিল৷
স্প্রিং বুটে, আপনি স্প্রিং ক্লাউড স্লিউথ ব্যবহার করতে পারেন আপনার অ্যাপ্লিকেশনে বিতরণকৃত ট্রেসিং ইন্সট্রুমেন্টেশন নির্বিঘ্নে যোগ করতে। ডিফল্টরূপে, এটি ট্রেস ডেটা জিপকিনে ফরোয়ার্ড করতে পারে।
Google ক্লাউড প্ল্যাটফর্মে ক্লাউড ট্রেস রয়েছে, এটি একটি পরিচালিত পরিষেবা যা আপনাকে আপনার নিজের জিপকিন ইনস্ট্যান্স বা স্টোরেজ পরিচালনা না করেই ট্রেস ডেটা সঞ্চয় করতে দেয়৷ ক্লাউড ট্রেস লেটেন্সি ডিস্ট্রিবিউশন রিপোর্টও তৈরি করতে পারে এবং স্বয়ংক্রিয়ভাবে পারফরম্যান্স রিগ্রেশন সনাক্ত করতে পারে।
স্প্রিং বুট অ্যাপ্লিকেশন থেকে ক্লাউড ট্রেস ব্যবহার করার জন্য আপনার কাছে দুটি বিকল্প রয়েছে:
- একটি স্ট্যাকড্রাইভার ট্রেস জিপকিন প্রক্সি ব্যবহার করুন এবং এই প্রক্সিটিকে জিপকিন এন্ডপয়েন্ট হিসাবে ব্যবহার করতে স্প্রিং ক্লাউড স্লিউথ কনফিগার করুন
- অথবা, স্প্রিং ক্লাউড জিসিপি ট্রেস ব্যবহার করুন, যা নির্বিঘ্নে স্প্রিং ক্লাউড স্লিউথের সাথে একত্রিত হয় এবং ট্রেস ডেটা সরাসরি ক্লাউড ট্রেসে ফরোয়ার্ড করে।
এই কোডল্যাবে, আপনি কীভাবে একটি নতুন স্প্রিং বুট অ্যাপ্লিকেশন তৈরি করবেন এবং বিতরণ করা ট্রেসিংয়ের জন্য স্প্রিং ক্লাউড জিসিপি ট্রেস ব্যবহার করবেন তা শিখবেন।
আপনি কি শিখবেন
- কিভাবে একটি স্প্রিং বুট জাভা অ্যাপ্লিকেশন তৈরি করবেন এবং ক্লাউড ট্রেস কনফিগার করবেন।
আপনি কি প্রয়োজন হবে
- একটি Google ক্লাউড প্ল্যাটফর্ম প্রকল্প
- একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
- স্ট্যান্ডার্ড লিনাক্স টেক্সট এডিটর যেমন Vim, EMACs বা Nano এর সাথে পরিচিতি
কিভাবে আপনি এই টিউটোরিয়াল ব্যবহার ব্যবহার করবেন?
এইচটিএমএল/সিএসএস ওয়েব অ্যাপ তৈরি করার ক্ষেত্রে আপনার অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?
আপনি Google ক্লাউড প্ল্যাটফর্ম পরিষেবাগুলি ব্যবহার করার বিষয়ে আপনার অভিজ্ঞতাকে কীভাবে মূল্যায়ন করবেন?
2. সেটআপ এবং প্রয়োজনীয়তা
স্ব-গতিসম্পন্ন পরিবেশ সেটআপ
- Google ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ আপনার যদি ইতিমধ্যেই একটি Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।
- প্রকল্পের নাম এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রদর্শনের নাম। এটি একটি অক্ষর স্ট্রিং যা Google API দ্বারা ব্যবহৃত হয় না। আপনি সবসময় এটি আপডেট করতে পারেন.
- প্রোজেক্ট আইডি সমস্ত Google ক্লাউড প্রোজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (সেট করার পরে পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটা কি যত্ন না. বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রকল্প আইডি উল্লেখ করতে হবে (সাধারণত
PROJECT_ID
হিসাবে চিহ্নিত)। আপনি যদি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য একটি এলোমেলো আইডি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করতে পারেন, এবং এটি উপলব্ধ কিনা দেখতে পারেন। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকে। - আপনার তথ্যের জন্য, একটি তৃতীয় মান আছে, একটি প্রকল্প নম্বর , যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
- এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করতে আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ হবে না, যদি কিছু হয়। এই টিউটোরিয়ালের বাইরে বিলিং এড়াতে সংস্থানগুলি বন্ধ করতে, আপনি আপনার তৈরি করা সংস্থানগুলি মুছতে বা প্রকল্প মুছতে পারেন। নতুন Google ক্লাউড ব্যবহারকারীরা $300 USD বিনামূল্যের ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷
গুগল ক্লাউড শেল
Google ক্লাউড এবং কুবারনেটস আপনার ল্যাপটপ থেকে দূরবর্তীভাবে চালানো যেতে পারে, এই কোডল্যাবে আমরা Google ক্লাউড শেল ব্যবহার করব, ক্লাউডে চলমান একটি কমান্ড লাইন পরিবেশ।
ক্লাউড শেল সক্রিয় করুন
- ক্লাউড কনসোল থেকে, ক্লাউড শেল সক্রিয় করুন ক্লিক করুন .
যদি এটি আপনার প্রথমবার ক্লাউড শেল শুরু হয়, তাহলে এটি কী তা বর্ণনা করে আপনাকে একটি মধ্যবর্তী স্ক্রীন উপস্থাপন করা হবে। যদি আপনি একটি মধ্যবর্তী স্ক্রীনের সাথে উপস্থাপিত হন, তবে চালিয়ে যান ক্লিক করুন।
ক্লাউড শেলের সাথে সংযোগ করতে এবং সংযোগ করতে এটির মাত্র কয়েক মুহূর্ত লাগবে৷
এই ভার্চুয়াল মেশিনটি প্রয়োজনীয় সমস্ত বিকাশের সরঞ্জাম দিয়ে লোড করা হয়েছে। এটি একটি ক্রমাগত 5 GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার অনেক কাজ, যদি সব না হয়, ব্রাউজার দিয়ে করা যেতে পারে।
একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি প্রমাণীকৃত হয়েছেন এবং প্রকল্পটি আপনার প্রকল্প আইডিতে সেট করা আছে।
- আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
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].
3. একটি নতুন স্প্রিং বুট REST পরিষেবা তৈরি করুন৷
ক্লাউড শেল চালু হওয়ার পরে, আপনি স্প্রিং ইনিশিয়ালাইজারের সাথে একটি নতুন স্প্রিং বুট অ্যাপ্লিকেশন তৈরি করতে কমান্ড লাইন ব্যবহার করতে পারেন:
$ 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
আপনি স্প্রিং বুট প্লাগইন দিয়ে সাধারণত স্প্রিং বুট অ্যাপ্লিকেশন শুরু করতে পারেন। আসুন এই ল্যাবের জন্য পরীক্ষাগুলি এড়িয়ে যাই:
$ ./mvnw -DskipTests spring-boot:run
একবার অ্যাপ্লিকেশন শুরু হলে, ওয়েব প্রিভিউ আইকনে ক্লিক করুন ক্লাউড শেল টুলবারে এবং পোর্ট 8080-এ প্রিভিউ বেছে নিন।
একটি সংক্ষিপ্ত অপেক্ষা করার পরে আপনি ফলাফল দেখতে হবে:
ক্লাউড শেলে, আপনাকে ট্রেস আইডি এবং স্প্যান আইডি সহ লগ বার্তাগুলিও দেখতে হবে:
4. ক্লাউড ট্রেস ব্যবহার করা
ক্লাউড ট্রেস API সক্ষম করুন৷
আপনার ট্রেস ডেটা সঞ্চয় করতে ক্লাউড ট্রেস ব্যবহার করার আগে আপনাকে প্রথমে ক্লাউড ট্রেস API সক্ষম করতে হবে৷ API সক্ষম করতে, চালান:
$ gcloud services enable cloudtrace.googleapis.com
সেটআপ অ্যাপ্লিকেশন ডিফল্ট শংসাপত্র
এই ল্যাবের জন্য, আপনাকে একটি অ্যাপ্লিকেশন ডিফল্ট শংসাপত্র কনফিগার করতে হবে৷ এই শংসাপত্রটি স্প্রিং ক্লাউড GCP ট্রেস স্টার্টার দ্বারা স্বয়ংক্রিয়ভাবে নেওয়া হবে।
প্রথমে, লগইন করুন:
$ 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: ...
একটি নতুন ব্রাউজার ট্যাব খুলতে লিঙ্কটিতে ক্লিক করুন এবং তারপরে অনুমতি দিন ক্লিক করুন
তারপর, ক্লাউড শেল-এ যাচাইকরণ কোডটি কপি করে পেস্ট করুন এবং এন্টার টিপুন। আপনি দেখতে হবে:
Credentials saved to file: [/tmp/tmp.jm9bnQ4R9Q/application_default_credentials.json]
These credentials will be used by any library that requests
Application Default Credentials.
স্প্রিং ক্লাউড GCP ট্রেস যোগ করুন
এই পরিষেবাতে, আমরা ইতিমধ্যে ট্রেসিংয়ের জন্য স্প্রিং ক্লাউড স্লিউথ ব্যবহার করেছি। ক্লাউড ট্রেসে ডেটা ফরোয়ার্ড করতে স্প্রিং ক্লাউড জিসিপি ট্রেস স্টার্টার যোগ করা যাক।
স্প্রিং ক্লাউড জিসিপি ট্রেস নির্ভরতা যোগ করুন:
pom.xml
<project>
...
<dependencies>
...
<!-- Add Cloud Trace Starter -->
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-trace</artifactId>
</dependency>
</dependencies>
...
</project>
ডিফল্টরূপে, স্প্রিং ক্লাউড স্লিউথ প্রতিটি অনুরোধের নমুনা দেয় না। আমাদের পরীক্ষাকে একটু সহজ করার জন্য, application.properties
এ নমুনার হার 100% বৃদ্ধি করুন যাতে আমরা ট্রেস ডেটা দেখতে পাচ্ছি, সেইসাথে কিছু ইউআরএল উপেক্ষা করুন যেগুলিকে আমরা গুরুত্ব দিই না:
$ 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
ডিফল্টরূপে, স্প্রিং ক্লাউড GCP ট্রেস ব্যাচ ডেটা ট্রেস করে এবং প্রতি 10 সেকেন্ডে একবার বা ন্যূনতম সংখ্যক ট্রেস ডেটা প্রাপ্ত হলে সেগুলি পাঠায়। এটি কনফিগারযোগ্য এবং আপনি আরও তথ্যের জন্য স্প্রিং ক্লাউড GCP ট্রেস রেফারেন্স ডকুমেন্টেশন উল্লেখ করতে পারেন।
পরিষেবার জন্য অনুরোধ করুন:
$ curl localhost:8080
ক্লাউড কনসোলে, অপারেশন → ট্রেস → ট্রেস তালিকাতে নেভিগেট করুন
শীর্ষে, সময়সীমাকে 1 ঘন্টা পর্যন্ত সংকুচিত করুন৷ ডিফল্টরূপে, অটো রিলোড চালু আছে। তাই ট্রেস ডেটা আসার সাথে সাথে এটি কনসোলে দেখানো উচিত!
ট্রেস ডেটা ~30 সেকেন্ড বা তার মধ্যে দেখানো উচিত।
ট্রেস বিস্তারিত দেখতে নীল বিন্দুতে ক্লিক করুন:
যে বেশ সহজ ছিল!
5. একটি দ্বিতীয় স্প্রিং বুট ওয়েব অ্যাপ্লিকেশন তৈরি করুন৷
+ আইকনে ক্লিক করে একটি নতুন ক্লাউড শেল সেশন খুলুন:
নতুন সেশনে, দ্বিতীয় স্প্রিং বুট অ্যাপ্লিকেশন তৈরি করুন:
$ 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-এ স্প্রিং ক্লাউড GCP ট্রেস যোগ করুন
pom.xml
<project>
...
<dependencies>
...
<!-- Add Cloud Trace starter -->
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-trace</artifactId>
</dependency>
</dependencies>
...
</project>
অনুরোধের 100% নমুনা করতে Sleuth কনফিগার করুন:
src/main/resources/application.properties
$ echo "
spring.sleuth.sampler.probability=1.0
spring.sleuth.web.skipPattern=(^cleanup.*|.+favicon.*)
" > src/main/resources/application.properties
অবশেষে, আপনি স্প্রিং বুট প্লাগইন দিয়ে পোর্ট 8081 এ স্প্রিং বুট অ্যাপ্লিকেশন শুরু করতে পারেন:
$ export GOOGLE_CLOUD_PROJECT=`gcloud config list --format 'value(core.project)'`
$ ./mvnw -DskipTests spring-boot:run -Dspring-boot.run.jvmArguments="-Dserver.port=8081"
6. দ্বিতীয় পরিষেবা ব্যবহার করার জন্য প্রথম পরিষেবা আপডেট করুন৷
আপনার যখন trace-service-two
চলছে, প্রথম ক্লাউড শেল সেশন উইন্ডোতে ফিরে যান এবং 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()
এ, মিটিং সার্ভিসে কল করুন।
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
উভয় সেশন উইন্ডোতে, আপনি একটি পরিষেবা থেকে অন্য পরিষেবাতে প্রচারিত ট্রেস আইডি সহ লগ বার্তাগুলি দেখতে পাবেন৷
ক্লাউড ট্রেসের ট্রেস তালিকায়, আপনার দ্বিতীয় ট্রেসটি দেখতে হবে:
আপনি নতুন নীল বিন্দুতে ক্লিক করতে পারেন এবং ট্রেস বিস্তারিত দেখতে পারেন:
স্প্যানটির বিস্তারিত দেখতে আপনি এই চিত্রের যেকোনো স্প্যানে ক্লিক করতে পারেন।
7. লেটেন্সি ডিস্ট্রিবিউশন এবং পারফরম্যান্স রিপোর্ট
আপনি যখন ট্রেস ডেটা স্টোরেজ হিসাবে ক্লাউড ট্রেস ব্যবহার করেন, তখন ক্লাউড ট্রেস লেটেন্সি ডিস্ট্রিবিউশন রিপোর্ট তৈরি করতে ডেটা ব্যবহার করতে পারে। এইরকম রিপোর্ট তৈরি করতে আপনার 100 টিরও বেশি ট্রেসের প্রয়োজন হবে:
আপনি হেই ব্যবহার করে সেই প্রথম 100+ অনুরোধগুলি চালাতে পারেন, যা ক্লাউড শেলে আগে থেকে ইনস্টল করা হয়!
$ hey localhost:8080 -n 150
উপরন্তু, ক্লাউড ট্রেস স্বয়ংক্রিয়ভাবে বিশ্লেষণ রিপোর্টের অধীনে দুটি ভিন্ন সময়ের মধ্যে একই পরিষেবার কর্মক্ষমতা রিগ্রেশন সনাক্ত করতে পারে।
8. সারাংশ
এই ল্যাবে, আপনি 2টি সাধারণ পরিষেবা তৈরি করেছেন এবং স্প্রিং ক্লাউড স্লিউথের সাথে বিতরণ করা ট্রেসিং যোগ করেছেন এবং ক্লাউড ট্রেসে ট্রেস তথ্য ফরোয়ার্ড করতে স্প্রিং ক্লাউড জিসিপি ব্যবহার করেছেন।
9. অভিনন্দন!
আপনি শিখেছেন কিভাবে আপনার প্রথম অ্যাপ ইঞ্জিন ওয়েব অ্যাপ্লিকেশন লিখতে হয়!
আরও জানুন
- ক্লাউড ট্রেস: https://cloud.google.com/trace/
- GCP প্রকল্পে বসন্ত: http://cloud.spring.io/spring-cloud-gcp/
- GCP GitHub সংগ্রহস্থলে বসন্ত: https://github.com/GoogleCloudPlatform/spring-cloud-gcp
- Google ক্লাউড প্ল্যাটফর্মে জাভা: https://cloud.google.com/java/
লাইসেন্স
এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন 2.0 জেনেরিক লাইসেন্সের অধীনে লাইসেন্সপ্রাপ্ত।