درباره این codelab
1. بررسی اجمالی
ردیابی توزیع شده برای به دست آوردن بینش و مشاهده پذیری در معماری میکروسرویس چند لایه مهم است. هنگامی که تماسهای سرویس به سرویس، از سرویس A تا سرویس B تا سرویس C را به صورت زنجیرهای در نظر میگیرید، مهم است که درک کنید که تماسها موفقیتآمیز بوده و همچنین تاخیر در هر مرحله وجود دارد.
در Spring Boot، می توانید از Spring Cloud Sleuth استفاده کنید تا ابزار دقیق ردیابی توزیع شده را به برنامه خود اضافه کنید. به طور پیش فرض، می تواند داده های ردیابی را به Zipkin ارسال کند.
Google Cloud Platform دارای Stackdriver Trace است که یک سرویس مدیریت شده است که به شما امکان می دهد داده های ردیابی را بدون نیاز به مدیریت نمونه Zipkin یا ذخیره سازی خود ذخیره کنید. Stackdriver Trace همچنین میتواند گزارشهای توزیع تأخیر تولید کند و به طور خودکار رگرسیون عملکرد را تشخیص دهد.
برای استفاده از Stackdriver Trace از یک برنامه Spring Boot دو گزینه دارید:
- از یک Stackdriver Trace Zipkin Proxy استفاده کنید و به سادگی Spring Cloud Sleuth را برای استفاده از این پراکسی به عنوان نقطه پایانی Zipkin پیکربندی کنید.
- یا از Spring Cloud GCP Trace استفاده کنید که به طور یکپارچه با Spring Cloud Sleuth ادغام می شود و داده های ردیابی را مستقیماً به Stackdriver Trace ارسال می کند.
در این کد لبه، یاد خواهید گرفت که چگونه یک اپلیکیشن Spring Boot جدید بسازید و از Spring Cloud GCP Trace برای ردیابی توزیع شده استفاده کنید.
چیزی که یاد خواهید گرفت
- چگونه یک برنامه Java Boot Spring ایجاد کنیم و Stackdriver Trace را پیکربندی کنیم.
آنچه شما نیاز دارید
- یک پروژه Google Cloud Platform
- یک مرورگر، مانند کروم یا فایرفاکس
- آشنایی با ویرایشگرهای متن استاندارد لینوکس مانند Vim، EMACs یا Nano
چگونه از این آموزش استفاده خواهید کرد؟
تجربه خود را با ساختن برنامه های وب HTML/CSS چگونه ارزیابی می کنید؟
تجربه خود را در استفاده از خدمات پلتفرم Google Cloud چگونه ارزیابی می کنید؟
2. راه اندازی و الزامات
تنظیم محیط خود به خود
اگر قبلاً یک حساب Google (Gmail یا Google Apps) ندارید، باید یک حساب ایجاد کنید . به کنسول Google Cloud Platform ( consol.cloud.google.com ) وارد شوید و یک پروژه جدید ایجاد کنید:
شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه های Google Cloud (نام بالا قبلاً گرفته شده است و برای شما کار نخواهد کرد، متأسفیم!). بعداً در این آزمایشگاه کد به عنوان PROJECT_ID
خواهد شد.
در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورتحساب را در کنسول Cloud فعال کنید.
گذراندن این کد نباید بیش از چند دلار هزینه داشته باشد، اما اگر تصمیم به استفاده از منابع بیشتری داشته باشید یا اگر آنها را در حال اجرا رها کنید، ممکن است بیشتر باشد (به بخش "پاکسازی" در انتهای این سند مراجعه کنید).
کاربران جدید Google Cloud Platform واجد شرایط استفاده آزمایشی رایگان 300 دلاری هستند.
Google Cloud Shell
در حالی که Google Cloud و Kubernetes را میتوان از راه دور از لپتاپ شما کار کرد، در این نرمافزار از Google Cloud Shell استفاده میکنیم، یک محیط خط فرمان که در Cloud اجرا میشود.
Google Cloud Shell را فعال کنید
از کنسول GCP روی نماد Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:
سپس روی "Start Cloud Shell" کلیک کنید:
تهیه و اتصال به محیط فقط چند لحظه طول می کشد:
این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد و در 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].
3. یک سرویس Spring Boot REST جدید ایجاد کنید
پس از راه اندازی Cloud Shell، می توانید از خط فرمان برای ایجاد یک برنامه Spring Boot جدید با Spring Initializr استفاده کنید:
$ 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!";
}
}
می توانید اپلیکیشن Spring Boot را به طور معمول با افزونه Spring Boot راه اندازی کنید. بیایید از آزمایش های این آزمایشگاه بگذریم:
$ ./mvnw -DskipTests spring-boot:run
پس از شروع برنامه، روی نماد Web Preview کلیک کنید در نوار ابزار Cloud Shell و پیش نمایش در پورت 8080 را انتخاب کنید.
پس از مدت کوتاهی باید نتیجه را مشاهده کنید:
در Cloud Shell، شما همچنین باید پیام های گزارش را با شناسه ردیابی و شناسه دهانه مشاهده کنید:
4. با استفاده از Stackdriver Trace
Stackdriver Trace API را فعال کنید
ابتدا باید Stackdriver Trace API را فعال کنید تا از Stackdriver Trace برای ذخیره داده های ردیابی خود استفاده کنید. برای فعال کردن API، به API Services → Library بروید
Stackdriver Trace را جستجو کنید
روی Stackdriver Trace API کلیک کنید، سپس اگر قبلاً فعال نشده است روی Enable کلیک کنید.
راه اندازی اعتبار پیش فرض برنامه
برای این آزمایشگاه، باید یک اعتبار پیش فرض برنامه را پیکربندی کنید. این اعتبارنامه بهطور خودکار توسط آغازگر Spring Cloud GCP Trace دریافت میشود.
ابتدا وارد شوید:
$ 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 کلیک کنید
سپس، کد تایید را دوباره در Cloud Shell کپی و جایگذاری کنید و اینتر را فشار دهید. باید ببینی:
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 برای ردیابی استفاده کردیم. بیایید شروع کننده Spring Cloud GCP Trace را اضافه کنیم تا داده ها را به Stackdriver Trace ارسال کنیم.
وابستگی Spring Cloud GCP Trace را اضافه کنید:
pom.xml
<project>
...
<dependencies>
...
<!-- Add Stackdriver Trace Starter -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-trace</artifactId>
</dependency>
</dependencies>
...
</project>
به طور پیش فرض، Spring Cloud Sleuth از هر درخواستی نمونه برداری نمی کند. برای اینکه تست ما کمی آسانتر شود، نرخ نمونه را در application.properties
به 100% افزایش دهید تا مطمئن شوید که دادههای ردیابی را میبینیم، و همچنین برخی URLها را که به آنها اهمیت نمیدهیم نادیده میگیریم:
$ echo "
spring.sleuth.sampler.probability=1.0
spring.sleuth.web.skipPattern=(^cleanup.*|.+favicon.*)
" > src/main/resources/application.properties
برنامه را دوباره اجرا کنید و از Cloud Shell Web Preview برای مشاهده برنامه استفاده کنید:
$ export GOOGLE_CLOUD_PROJECT=`gcloud config list --format 'value(core.project)'`
$ ./mvnw -DskipTests spring-boot:run
به طور پیشفرض، Spring Cloud GCP Trace دادههای ردیابی را دستهبندی میکند و هر 10 ثانیه یک بار یا زمانی که حداقل تعداد داده ردیابی دریافت میشود، آنها را ارسال میکند. این قابل تنظیم است و می توانید برای اطلاعات بیشتر به مستندات مرجع Spring Cloud GCP Trace مراجعه کنید.
درخواست از خدمات:
$ curl localhost:8080
در Cloud Console، به Stackdriver → Trace → Trace List بروید
در بالا، محدوده زمانی را به 1 ساعت کاهش دهید. به طور پیش فرض، بارگذاری مجدد خودکار روشن است. بنابراین با رسیدن داده های ردیابی، باید در کنسول نشان داده شود!
داده های ردیابی باید در حدود 30 ثانیه یا بیشتر نشان داده شوند.
برای مشاهده جزئیات ردیابی روی نقطه آبی کلیک کنید:
خیلی ساده بود!
5. دومین برنامه وب Spring Boot ایجاد کنید
با کلیک بر روی نماد + یک جلسه Cloud Shell جدید باز کنید:
در جلسه جدید، دومین اپلیکیشن Spring Boot را ایجاد کنید:
$ 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";
}
}
Spring Cloud GCP Trace را به pom.xml اضافه کنید
pom.xml
<project>
...
<dependencies>
...
<!-- Add Stackdriver Trace starter -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-trace</artifactId>
</dependency>
</dependencies>
...
</project>
Sleuth را برای نمونه برداری از 100٪ درخواست ها پیکربندی کنید:
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 -Dserver.port=8081
6. سرویس اول را برای مصرف سرویس دوم به روز کنید
در حالی که trace-service-two
در حال اجرا هستید، به اولین پنجره جلسه Cloud Shell برگردید و تغییراتی را به trace-service-one
انجام دهید.
ابتدا یک RestTemplate
bean جدید را مقداردهی اولیه کنید:
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);
}
...
}
سرویس را دوباره راه اندازی کنید و نقطه پایانی را از Web Preview فعال کنید:
$ export GOOGLE_CLOUD_PROJECT=`gcloud config list --format 'value(core.project)'`
$ ./mvnw -DskipTests spring-boot:run
در هر دو پنجره جلسه، شما باید پیام های گزارش را ببینید، با شناسه Trace که از یک سرویس به سرویس دیگر منتشر می شود.
در Stackdriver Trace's Trace List، باید رد دوم را مشاهده کنید:
می توانید روی نقطه آبی جدید کلیک کنید و جزئیات ردیابی را مشاهده کنید:
همچنین می توانید روی هر دهانه در این نمودار کلیک کنید تا جزئیات دهانه را ببینید.
7. گزارش عملکرد و توزیع تاخیر
وقتی از Stackdriver Trace به عنوان ذخیرهسازی داده ردیابی استفاده میکنید، Stackdriver Trace میتواند از دادهها برای ایجاد گزارش توزیع تأخیر استفاده کند. برای ساخت این گزارش به بیش از 100 ردیابی نیاز دارید:
علاوه بر این، Stackdriver Trace میتواند بهطور خودکار رگرسیون عملکرد یک سرویس را در دو دوره زمانی مختلف در گزارش تجزیه و تحلیل تشخیص دهد.
8. خلاصه
در این آزمایشگاه، 2 سرویس ساده ایجاد کردید و ردیابی توزیع شده را با Spring Cloud Sleuth اضافه کردید و از Spring Cloud GCP برای ارسال اطلاعات ردیابی به Stackdriver Trace استفاده کردید.
9. تبریک می گویم!
شما یاد گرفتید که چگونه اولین برنامه وب App Engine خود را بنویسید!
بیشتر بدانید
- Stackdriver Trace: https://cloud.google.com/trace/
- پروژه Spring on GCP: http://cloud.spring.io/spring-cloud-gcp/
- Spring در مخزن GCP GitHub: https://github.com/spring-cloud/spring-cloud-gcp
- جاوا در Google Cloud Platform: https://cloud.google.com/java/
مجوز
این اثر تحت مجوز Creative Commons Attribution 2.0 Generic مجوز دارد.