এই কোডল্যাব সম্পর্কে
1. ওভারভিউ
বহু-স্তরের মাইক্রোসার্ভিসেস আর্কিটেকচারে অন্তর্দৃষ্টি এবং পর্যবেক্ষণযোগ্যতা অর্জনের জন্য বিতরণ করা ট্রেসিং গুরুত্বপূর্ণ। আপনি যখন পরিষেবা কলে চেইন করা পরিষেবা, পরিষেবা A থেকে পরিষেবা B থেকে পরিষেবা C পর্যন্ত, তখন এটি বোঝা গুরুত্বপূর্ণ যে কলগুলি সফল হয়েছে এবং প্রতিটি ধাপে লেটেন্সিও ছিল৷
স্প্রিং বুটে, আপনি স্প্রিং ক্লাউড স্লিউথ ব্যবহার করতে পারেন আপনার অ্যাপ্লিকেশনে বিতরণকৃত ট্রেসিং ইন্সট্রুমেন্টেশন নির্বিঘ্নে যোগ করতে। ডিফল্টরূপে, এটি ট্রেস ডেটা জিপকিনে ফরোয়ার্ড করতে পারে।
গুগল ক্লাউড প্ল্যাটফর্মে স্ট্যাকড্রাইভার ট্রেস রয়েছে, এটি একটি পরিচালিত পরিষেবা যা আপনাকে আপনার নিজের জিপকিন ইনস্ট্যান্স বা স্টোরেজ পরিচালনা না করেই ট্রেস ডেটা সঞ্চয় করতে দেয়। স্ট্যাকড্রাইভার ট্রেস লেটেন্সি ডিস্ট্রিবিউশন রিপোর্টও তৈরি করতে পারে এবং স্বয়ংক্রিয়ভাবে পারফরম্যান্স রিগ্রেশন সনাক্ত করতে পারে।
স্প্রিং বুট অ্যাপ্লিকেশন থেকে স্ট্যাকড্রাইভার ট্রেস ব্যবহার করার জন্য আপনার কাছে দুটি বিকল্প রয়েছে:
- একটি স্ট্যাকড্রাইভার ট্রেস জিপকিন প্রক্সি ব্যবহার করুন এবং এই প্রক্সিটিকে জিপকিন এন্ডপয়েন্ট হিসাবে ব্যবহার করতে স্প্রিং ক্লাউড স্লিউথ কনফিগার করুন
- অথবা, স্প্রিং ক্লাউড জিসিপি ট্রেস ব্যবহার করুন, যা নির্বিঘ্নে স্প্রিং ক্লাউড স্লিউথের সাথে একীভূত হয় এবং ট্রেস ডেটা সরাসরি স্ট্যাকড্রাইভার ট্রেসে ফরোয়ার্ড করে।
এই কোডল্যাবে, আপনি কীভাবে একটি নতুন স্প্রিং বুট অ্যাপ্লিকেশন তৈরি করবেন এবং বিতরণ করা ট্রেসিংয়ের জন্য স্প্রিং ক্লাউড জিসিপি ট্রেস ব্যবহার করবেন তা শিখবেন।
আপনি কি শিখবেন
- কিভাবে একটি স্প্রিং বুট জাভা অ্যাপ্লিকেশন তৈরি করবেন এবং স্ট্যাকড্রাইভার ট্রেস কনফিগার করবেন।
আপনি কি প্রয়োজন হবে
- একটি Google ক্লাউড প্ল্যাটফর্ম প্রকল্প
- একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
- Vim, EMACs বা Nano এর মতো স্ট্যান্ডার্ড লিনাক্স টেক্সট এডিটরদের সাথে পরিচিতি
আপনি কিভাবে এই টিউটোরিয়াল ব্যবহার ব্যবহার করবেন?
এইচটিএমএল/সিএসএস ওয়েব অ্যাপ তৈরি করার ক্ষেত্রে আপনার অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?
আপনি Google ক্লাউড প্ল্যাটফর্ম পরিষেবাগুলি ব্যবহার করার বিষয়ে আপনার অভিজ্ঞতাকে কীভাবে মূল্যায়ন করবেন?
2. সেটআপ এবং প্রয়োজনীয়তা
স্ব-গতিসম্পন্ন পরিবেশ সেটআপ
আপনার যদি ইতিমধ্যে একটি Google অ্যাকাউন্ট না থাকে (Gmail বা Google Apps), তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে। Google ক্লাউড প্ল্যাটফর্ম কনসোলে সাইন-ইন করুন ( console.cloud.google.com ) এবং একটি নতুন প্রকল্প তৈরি করুন:
প্রজেক্ট আইডিটি মনে রাখবেন, সমস্ত Google ক্লাউড প্রকল্প জুড়ে একটি অনন্য নাম (উপরের নামটি ইতিমধ্যে নেওয়া হয়েছে এবং আপনার জন্য কাজ করবে না, দুঃখিত!)। এটি পরে এই কোডল্যাবে PROJECT_ID
হিসাবে উল্লেখ করা হবে।
এর পরে, Google ক্লাউড সংস্থানগুলি ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে৷
এই কোডল্যাবের মাধ্যমে চালানোর জন্য আপনার কয়েক ডলারের বেশি খরচ করা উচিত নয়, তবে আপনি যদি আরও সংস্থান ব্যবহার করার সিদ্ধান্ত নেন বা আপনি সেগুলিকে চলমান রেখে দেন তবে এটি আরও বেশি হতে পারে (এই নথির শেষে "পরিষ্কার" বিভাগটি দেখুন)।
Google ক্লাউড প্ল্যাটফর্মের নতুন ব্যবহারকারীরা $300 বিনামূল্যের ট্রায়ালের জন্য যোগ্য৷
গুগল ক্লাউড শেল
যদিও Google ক্লাউড এবং কুবারনেটস আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালনা করা যেতে পারে, এই কোডল্যাবে আমরা Google ক্লাউড শেল ব্যবহার করব, ক্লাউডে চলমান একটি কমান্ড লাইন পরিবেশ।
Google ক্লাউড শেল সক্রিয় করুন
GCP কনসোল থেকে উপরের ডানদিকে টুলবারে ক্লাউড শেল আইকনে ক্লিক করুন:
তারপর "স্টার্ট ক্লাউড শেল" ক্লিক করুন:
পরিবেশের ব্যবস্থা করতে এবং সংযোগ করতে এটি শুধুমাত্র কয়েক মুহূর্ত নিতে হবে:
এই ভার্চুয়াল মেশিনটি আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুল দিয়ে লোড করা হয়েছে। এটি একটি ক্রমাগত 5GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই ল্যাবে আপনার অনেক কাজই যদি না হয়, তবে শুধুমাত্র একটি ব্রাউজার বা আপনার Google Chromebook দিয়ে করা যেতে পারে৷
একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি ইতিমধ্যেই প্রমাণীকৃত এবং প্রকল্পটি ইতিমধ্যেই আপনার PROJECT_ID- তে সেট করা আছে।
আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
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. একটি নতুন স্প্রিং বুট REST পরিষেবা তৈরি করুন৷
ক্লাউড শেল চালু হওয়ার পরে, আপনি স্প্রিং ইনিশিয়ালাইজারের সাথে একটি নতুন স্প্রিং বুট অ্যাপ্লিকেশন তৈরি করতে কমান্ড লাইন ব্যবহার করতে পারেন:
$ curl https://start.spring.io/starter.tgz -d packaging=jar \
-d dependencies=web,lombok,cloud-gcp,cloud-starter-sleuth \
-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!";
}
}
আপনি স্প্রিং বুট প্লাগইন দিয়ে সাধারণত স্প্রিং বুট অ্যাপ্লিকেশন শুরু করতে পারেন। আসুন এই ল্যাবের জন্য পরীক্ষাগুলি এড়িয়ে যাই:
$ ./mvnw -DskipTests spring-boot:run
একবার অ্যাপ্লিকেশন শুরু হলে, ওয়েব প্রিভিউ আইকনে ক্লিক করুন ক্লাউড শেল টুলবারে এবং পোর্ট 8080-এ প্রিভিউ বেছে নিন।
একটি সংক্ষিপ্ত অপেক্ষা করার পরে আপনি ফলাফল দেখতে হবে:
ক্লাউড শেলে, আপনাকে ট্রেস আইডি এবং স্প্যান আইডি সহ লগ বার্তাগুলিও দেখতে হবে:
4. স্ট্যাকড্রাইভার ট্রেস ব্যবহার করে
Stackdriver Trace API সক্ষম করুন
আপনার ট্রেস ডেটা সঞ্চয় করার জন্য Stackdriver Trace ব্যবহার করার জন্য আপনাকে প্রথমে Stackdriver Trace API সক্ষম করতে হবে। API সক্ষম করতে, API পরিষেবা → লাইব্রেরিতে নেভিগেট করুন
স্ট্যাকড্রাইভার ট্রেস অনুসন্ধান করুন
Stackdriver Trace API- এ ক্লিক করুন, তারপর Enable-এ ক্লিক করুন যদি এটি ইতিমধ্যে সক্ষম না থাকে।
সেটআপ অ্যাপ্লিকেশন ডিফল্ট শংসাপত্র
এই ল্যাবের জন্য, আপনাকে একটি অ্যাপ্লিকেশন ডিফল্ট শংসাপত্র কনফিগার করতে হবে৷ এই শংসাপত্রটি স্প্রিং ক্লাউড 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.
স্প্রিং ক্লাউড জিসিপি ট্রেস যোগ করুন
এই পরিষেবাতে, আমরা ইতিমধ্যেই ট্রেসিংয়ের জন্য স্প্রিং ক্লাউড স্লিউথ ব্যবহার করেছি। স্ট্যাকড্রাইভার ট্রেসে ডেটা ফরোয়ার্ড করতে স্প্রিং ক্লাউড জিসিপি ট্রেস স্টার্টার যোগ করা যাক।
স্প্রিং ক্লাউড জিসিপি ট্রেস নির্ভরতা যোগ করুন:
pom.xml
<project>
...
<dependencies>
...
<!-- Add Stackdriver Trace Starter -->
<dependency>
<groupId>org.springframework.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
ডিফল্টরূপে, স্প্রিং ক্লাউড জিসিপি ট্রেস ব্যাচ ডেটা ট্রেস করে এবং প্রতি 10 সেকেন্ডে একবার বা ন্যূনতম সংখ্যক ট্রেস ডেটা প্রাপ্ত হলে সেগুলি পাঠায়। এটি কনফিগারযোগ্য এবং আপনি আরও তথ্যের জন্য স্প্রিং ক্লাউড GCP ট্রেস রেফারেন্স ডকুমেন্টেশন উল্লেখ করতে পারেন।
পরিষেবার জন্য অনুরোধ করুন:
$ curl localhost:8080
ক্লাউড কনসোলে, স্ট্যাকড্রাইভার → ট্রেস → ট্রেস তালিকাতে নেভিগেট করুন
শীর্ষে, সময়সীমাকে 1 ঘন্টা পর্যন্ত সংকুচিত করুন। ডিফল্টরূপে, অটো রিলোড চালু আছে। তাই ট্রেস ডেটা আসার সাথে সাথে এটি কনসোলে দেখানো উচিত!
ট্রেস ডেটা ~30 সেকেন্ড বা তার মধ্যে দেখানো উচিত।
ট্রেস বিস্তারিত দেখতে নীল বিন্দুতে ক্লিক করুন:
যে বেশ সহজ ছিল!
5. একটি দ্বিতীয় স্প্রিং বুট ওয়েব অ্যাপ্লিকেশন তৈরি করুন
+ আইকনে ক্লিক করে একটি নতুন ক্লাউড শেল সেশন খুলুন:
নতুন সেশনে, দ্বিতীয় স্প্রিং বুট অ্যাপ্লিকেশন তৈরি করুন:
$ curl https://start.spring.io/starter.tgz -d packaging=jar \
-d dependencies=web,lombok,cloud-gcp,cloud-starter-sleuth \
-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 Stackdriver Trace starter -->
<dependency>
<groupId>org.springframework.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 -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)'`
$ ./mvnw -DskipTests spring-boot:run
উভয় সেশন উইন্ডোতে, আপনি লগ বার্তাগুলি দেখতে পাবেন, একটি পরিষেবা থেকে অন্য পরিষেবাতে প্রচারিত ট্রেস আইডি সহ।
স্ট্যাকড্রাইভার ট্রেসের ট্রেস তালিকায়, আপনার দ্বিতীয় ট্রেসটি দেখতে হবে:
আপনি নতুন নীল বিন্দুতে ক্লিক করতে পারেন এবং ট্রেস বিস্তারিত দেখতে পারেন:
স্প্যানটির বিস্তারিত দেখতে আপনি এই চিত্রের যেকোনো স্প্যানে ক্লিক করতে পারেন।
7. লেটেন্সি ডিস্ট্রিবিউশন এবং পারফরম্যান্স রিপোর্ট
যখন আপনি স্ট্যাকড্রাইভার ট্রেসকে ট্রেস ডেটা স্টোরেজ হিসাবে ব্যবহার করেন, স্ট্যাকড্রাইভার ট্রেস লেটেন্সি ডিস্ট্রিবিউশন রিপোর্ট তৈরি করতে ডেটা ব্যবহার করতে পারে। এইরকম রিপোর্ট তৈরি করতে আপনার 100 টিরও বেশি ট্রেসের প্রয়োজন হবে:
এছাড়াও, স্ট্যাকড্রাইভার ট্রেস স্বয়ংক্রিয়ভাবে বিশ্লেষণ রিপোর্টের অধীনে দুটি ভিন্ন সময়ের মধ্যে একই পরিষেবার কর্মক্ষমতা রিগ্রেশন সনাক্ত করতে পারে।
8. সারসংক্ষেপ
এই ল্যাবে, আপনি 2টি সাধারণ পরিষেবা তৈরি করেছেন এবং স্প্রিং ক্লাউড স্লিউথের সাথে বিতরণ করা ট্রেসিং যোগ করেছেন এবং স্ট্যাকড্রাইভার ট্রেসে ট্রেস তথ্য ফরোয়ার্ড করতে স্প্রিং ক্লাউড GCP ব্যবহার করেছেন।
9. অভিনন্দন!
আপনি শিখেছেন কিভাবে আপনার প্রথম অ্যাপ ইঞ্জিন ওয়েব অ্যাপ্লিকেশন লিখতে হয়!
আরও জানুন
- স্ট্যাকড্রাইভার ট্রেস: https://cloud.google.com/trace/
- GCP প্রকল্পে বসন্ত: http://cloud.spring.io/spring-cloud-gcp/
- GCP GitHub সংগ্রহস্থলে বসন্ত: https://github.com/spring-cloud/spring-cloud-gcp
- Google ক্লাউড প্ল্যাটফর্মে জাভা: https://cloud.google.com/java/
লাইসেন্স
এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন 2.0 জেনেরিক লাইসেন্সের অধীনে লাইসেন্সপ্রাপ্ত।