Thông tin về lớp học lập trình này
1. Tổng quan
Theo dõi phân bổ là yếu tố quan trọng để có được thông tin chi tiết và khả năng quan sát đối với cấu trúc dịch vụ vi mô nhiều tầng. Khi bạn đã liên kết dịch vụ để gọi dịch vụ, từ dịch vụ A đến dịch vụ B đến dịch vụ C, bạn cần hiểu rằng cuộc gọi đã thành công cũng như độ trễ ở mọi bước.
Trong Spring Boot, bạn có thể sử dụng Spring Cloud Sleuth để thêm khả năng theo dõi phân phối liền mạch vào ứng dụng của mình. Theo mặc định, ứng dụng này có thể chuyển tiếp dữ liệu theo dõi tới Zipkin.
Google Cloud Platform có Stackdriver Trace, là một dịch vụ được quản lý cho phép bạn lưu trữ dữ liệu theo dõi mà không phải quản lý phiên bản Zipkin của riêng bạn cũng như không phải lưu trữ. Stackdriver Trace cũng có thể tạo báo cáo phân phối độ trễ và tự động phát hiện hồi quy hiệu suất.
Bạn có hai tùy chọn để sử dụng Stackdriver Trace từ ứng dụng Spring Boot:
- Sử dụng StackProxy Trace Zipkin Proxy và chỉ cần định cấu hình Spring Cloud Sleuth để dùng proxy này làm điểm cuối Zipkin
- Bạn cũng có thể sử dụng tính năng Theo dõi dữ liệu theo dõi trên Spring Cloud (tích hợp liền mạch với Spring Cloud Sleuth) và chuyển tiếp dữ liệu theo dõi trực tiếp tới Stackdriver Trace.
Trong lớp học lập trình này, bạn sẽ tìm hiểu cách xây dựng ứng dụng mới Khởi động mùa xuân và sử dụng tính năng Theo dõi bằng Cloud Platform của Cloud để theo dõi được phân phối.
Kiến thức bạn sẽ học được
- Cách tạo ứng dụng Java Spring Boot và định cấu hình Stackdriver Trace.
Bạn cần có
- Một dự án Google Cloud Platform
- Một trình duyệt, chẳng hạn như Chrome hoặc Firefox
- Quen thuộc với các trình chỉnh sửa văn bản Linux tiêu chuẩn, chẳng hạn như Vim, EMAC hoặc nano
Bạn sẽ sử dụng hướng dẫn này như thế nào?
Bạn xếp hạng trải nghiệm như thế nào khi xây dựng các ứng dụng web HTML/CSS?
Bạn đánh giá trải nghiệm sử dụng các dịch vụ Google Cloud Platform của mình như thế nào?
2. Thiết lập và yêu cầu
Thiết lập môi trường theo tiến độ riêng
Nếu chưa có Tài khoản Google (Gmail hoặc Google Apps), thì bạn phải tạo một tài khoản. Đăng nhập vào bảng điều khiển của Google Cloud Platform (console.cloud.google.com) và tạo một dự án mới:
Hãy ghi nhớ mã dự án, một tên duy nhất trên tất cả các dự án Google Cloud (tên ở trên đã được sử dụng và sẽ không hoạt động cho bạn!). Lớp học này sẽ được gọi sau này trong lớp học lập trình này là PROJECT_ID
.
Tiếp theo, bạn sẽ cần bật tính năng thanh toán trong Cloud Console để sử dụng tài nguyên của Google Cloud.
Nếu tham gia lớp học lập trình này, bạn sẽ không mất quá vài đô la, nhưng có thể sẽ hiệu quả hơn nếu bạn quyết định sử dụng nhiều tài nguyên hơn hoặc nếu bạn để các tài nguyên đó hoạt động (xem "cleanup" ở cuối tài liệu này).
Người dùng mới của Google Cloud Platform đủ điều kiện dùng thử 300 đô la dùng thử miễn phí.
Google Cloud Shell
Mặc dù Google Cloud và Kubernetes có thể hoạt động từ máy tính xách tay từ xa, nhưng trong lớp học lập trình này, chúng ta sẽ dùng Google Cloud Shell, một môi trường dòng lệnh chạy trong Cloud.
Kích hoạt Google Cloud Shell
Từ bảng điều khiển GCP, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ trên cùng bên phải:
Sau đó nhấp vào "Start Cloud Shell":
Bạn chỉ cần dành vài phút để cấp phép và kết nối với môi trường:
Máy ảo này được tải bằng tất cả các công cụ phát triển mà bạn cần. cung cấp một thư mục gốc 5GB cố định và chạy trên Google Cloud, qua đó nâng cao đáng kể hiệu suất và khả năng xác thực mạng. Phần lớn công việc của bạn trong phòng thí nghiệm này có thể thực hiện chỉ bằng một trình duyệt hoặc Google Chromebook.
Sau khi kết nối với Cloud Shell, bạn sẽ thấy rằng bạn đã được xác thực và dự án này đã được đặt thành PROJECT_ID của bạn.
Chạy lệnh sau trong Cloud Shell để xác nhận rằng bạn đã được xác thực:
gcloud auth list
Đầu ra lệnh
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Đầu ra lệnh
[core] project = <PROJECT_ID>
Nếu chưa, bạn có thể đặt lệnh đó bằng lệnh sau:
gcloud config set project <PROJECT_ID>
Đầu ra lệnh
Updated property [core/project].
3. Tạo một dịch vụ REST mới cho mùa xuân
Sau khi Cloud Shell khởi chạy, bạn có thể sử dụng dòng lệnh để tạo một ứng dụng Spring Boot mới với 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
Tạo một bộ điều khiển REST mới bằng cách thêm một lớp mới:
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!";
}
}
Bạn có thể khởi động ứng dụng Spring Spring thông thường bằng trình bổ trợ Spring Boot. Hãy bỏ qua thử nghiệm cho phòng thí nghiệm này:
$ ./mvnw -DskipTests spring-boot:run
Sau khi ứng dụng khởi động, hãy nhấp vào biểu tượng Xem trước trên web trong thanh công cụ Cloud Shell rồi chọn xem trước trên cổng 8080.
Sau một thời gian ngắn, bạn sẽ thấy kết quả:
Trong Cloud Shell, bạn cũng sẽ thấy thông điệp nhật ký có ID theo dõi và ID khoảng:
4. Sử dụng Stackdriver Trace
Bật API Stackdriver Trace
Bạn cần bật API Stackdriver Trace trước để sử dụng Stackdriver Trace để lưu trữ dữ liệu theo dõi của bạn. Để bật API này, hãy chuyển đến Dịch vụ API → Thư viện
Tìm kiếm Stackdriver Trace
Nhấp vào Stackdriver Trace API, sau đó nhấp vào Bật nếu tùy chọn này chưa được bật.
Thiết lập thông tin đăng nhập mặc định của ứng dụng
Đối với phòng thí nghiệm này, bạn cần định cấu hình thông tin xác thực mặc định của ứng dụng. Thông tin đăng nhập này sẽ tự động được lấy từ bộ khởi động Dấu vết GCP đám mây vào mùa xuân.
Trước tiên, hãy đăng nhập:
$ 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: ...
Nhấp vào đường liên kết để mở một thẻ trình duyệt mới, sau đó nhấp vào Cho phép
Sau đó, sao chép và dán lại mã xác minh vào Cloud Shell rồi nhấn Enter. Bạn sẽ thấy:
Credentials saved to file: [/tmp/tmp.jm9bnQ4R9Q/application_default_credentials.json]
These credentials will be used by any library that requests
Application Default Credentials.
Thêm Dấu vết GCP Cloud Spring
Trong dịch vụ này, chúng tôi đã sử dụng Spring Cloud Sleuth để truy vết. Hãy thêm bộ khởi động Dấu vết GCP đám mây vào mùa xuân để chuyển tiếp dữ liệu đến Dấu vết ngăn xếp.
Thêm phần phụ thuộc Dấu vết GCP Cloud Spring:
pom.xml
<project>
...
<dependencies>
...
<!-- Add Stackdriver Trace Starter -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-trace</artifactId>
</dependency>
</dependencies>
...
</project>
Theo mặc định, Spring Cloud Sleuth không lấy mẫu mọi yêu cầu. Để việc thử nghiệm của chúng tôi dễ dàng hơn một chút, hãy tăng tốc độ lấy mẫu lên 100% trong application.properties
để đảm bảo chúng tôi thấy dữ liệu theo dõi, cũng như bỏ qua một số URL mà chúng tôi không quan tâm:
$ echo "
spring.sleuth.sampler.probability=1.0
spring.sleuth.web.skipPattern=(^cleanup.*|.+favicon.*)
" > src/main/resources/application.properties
Chạy lại ứng dụng và sử dụng Cloud Shell Web Preview để xem ứng dụng:
$ export GOOGLE_CLOUD_PROJECT=`gcloud config list --format 'value(core.project)'`
$ ./mvnw -DskipTests spring-boot:run
Theo mặc định, Spring Cloud GCP Trace gửi lô dữ liệu theo dõi và gửi dữ liệu này 10 giây một lần hoặc khi nhận được số lượng dữ liệu theo dõi tối thiểu. Bạn có thể thiết lập cấu hình này và tham khảo tài liệu tham khảo về Cloud Trace GCP.
Yêu cầu dịch vụ:
$ curl localhost:8080
Trong Cloud Console, hãy chuyển đến Stackdriver → Trace → Danh sách dấu vết
Ở trên cùng, hãy thu hẹp phạm vi thời gian còn 1 giờ. Theo mặc định, tính năng Tự động tải lại đang bật. Vì vậy, khi dữ liệu theo dõi xuất hiện, dữ liệu đó sẽ hiển thị trong bảng điều khiển!
Dữ liệu dấu vết sẽ hiển thị sau khoảng 30 giây.
Nhấp vào chấm màu xanh dương để xem chi tiết dấu vết:
Điều đó khá đơn giản!
5. Tạo Ứng dụng web mùa xuân thứ hai
Mở phiên Cloud Shell mới bằng cách nhấp vào biểu tượng +:
Trong phiên mới, hãy tạo ứng dụng Spring Boot thứ hai:
$ 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
Tạo một bộ điều khiển REST mới bằng cách thêm một lớp mới:
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";
}
}
Thêm Spring Cloud Trace truy cập vào 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>
Định cấu hình Sleuth để lấy mẫu 100% yêu cầu:
src/main/resources/application.properties
$ echo "
spring.sleuth.sampler.probability=1.0
spring.sleuth.web.skipPattern=(^cleanup.*|.+favicon.*)
" > src/main/resources/application.properties
Cuối cùng, bạn có thể khởi động ứng dụng Spring Boot trên cổng 8081 bằng trình bổ trợ Spring Boot:
$ export GOOGLE_CLOUD_PROJECT=`gcloud config list --format 'value(core.project)'`
$ ./mvnw -DskipTests spring-boot:run -Dserver.port=8081
6. Cập nhật dịch vụ đầu tiên để sử dụng dịch vụ thứ hai
Khi bạn đang chạy trace-service-two
, hãy quay lại cửa sổ phiên Cloud Shell đầu tiên và sửa đổi thành trace-service-one
.
Trước tiên, hãy bắt đầu một hạt RestTemplate
mới:
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);
}
}
Trong WorkController.meeting()
, hãy gọi đến dịch vụ Cuộc họp.
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);
}
...
}
Khởi động lại dịch vụ và kích hoạt điểm cuối từ tính năng Xem trước trên web:
$ export GOOGLE_CLOUD_PROJECT=`gcloud config list --format 'value(core.project)'`
$ ./mvnw -DskipTests spring-boot:run
Trong cả hai cửa sổ phiên, bạn sẽ thấy thông điệp nhật ký, với ID dấu vết được truyền từ dịch vụ này sang dịch vụ khác.
Trong Danh sách dấu vết ngăn xếp của Stackdriver, bạn sẽ thấy dấu vết thứ hai:
Bạn có thể nhấp vào dấu chấm màu xanh dương mới và xem thông tin chi tiết về dấu vết:
Bạn cũng có thể nhấp vào bất kỳ khoảng nào trong sơ đồ này để xem thông tin chi tiết về khoảng.
7. &Phân phối độ trễ; Báo cáo hiệu suất
Khi bạn dùng Stackdriver Trace làm bộ nhớ dữ liệu theo dõi, Stackdriver Trace có thể sử dụng dữ liệu này để tạo báo cáo phân phối độ trễ. Bạn cần có hơn 100 dấu vết để tạo báo cáo như sau:
Ngoài ra, Stackdriver Trace có thể tự động phát hiện hồi quy hiệu suất của cùng một dịch vụ trên hai khoảng thời gian khác nhau trong Báo cáo phân tích.
8. Tóm tắt
Trong phòng thí nghiệm này, bạn đã tạo 2 dịch vụ đơn giản và thêm tính năng theo dõi phân phối bằng Spring Cloud Sleuth, đồng thời sử dụng Spring Cloud GCP để chuyển tiếp thông tin theo dõi đến Stackdriver Trace.
9. Xin chúc mừng!
Bạn đã tìm hiểu cách viết ứng dụng web App Engine đầu tiên của mình!
Tìm hiểu thêm
- Dấu vết ngăn xếp: https://cloud.google.com/trace/
- Dự án Spring trên GCP: http://cloud.Spring.io/Spring-cloud-gcp/
- Spring trên kho lưu trữ GitHub của GCP: https://github.com/Spring-cloud/Spring-cloud-gcp
- Java trên Google Cloud Platform: https://cloud.google.com/java/
Giấy phép
Tài liệu này được cấp phép theo Giấy phép chung Creative Commons 2.0.