ASP.NET Core: Kiểm tra tình trạng gRPC trong ASP.NET Core


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

Trong bài viết này

  1. Thiết lập kiểm tra tình trạng gRPC
  2. Gọi dịch vụ kiểm tra tình trạng gRPC
  3. Tài nguyên bổ sung

Giao thức kiểm tra tình trạng gRPC là một tiêu chuẩn để báo cáo tình trạng của các ứng dụng máy chủ gRPC.

Kiểm tra tình trạng được một ứng dụng hiển thị dưới dạng dịch vụ gRPC. Chúng thường được sử dụng cùng với dịch vụ giám sát bên ngoài để kiểm tra trạng thái của ứng dụng. Dịch vụ có thể được cấu hình cho nhiều tình huống giám sát thời gian thực khác nhau:

  • Bộ điều phối bộ chứa và bộ cân bằng tải có thể sử dụng đầu dò tình trạng để kiểm tra trạng thái của ứng dụng. Ví dụ: Kubernetes hỗ trợ các thăm dò hoạt động, tính sẵn sàng và khởi động của gRPC. Kubernetes có thể được cấu hình để định tuyến lại lưu lượng truy cập hoặc khởi động lại các container không lành mạnh dựa trên kết quả kiểm tra tình trạng gRPC.
  • Việc sử dụng bộ nhớ, ổ đĩa và các tài nguyên máy chủ vật lý khác có thể được theo dõi để biết trạng thái hoạt động tốt.
  • Kiểm tra tình trạng có thể kiểm tra các phần phụ thuộc của ứng dụng, chẳng hạn như cơ sở dữ liệu và điểm cuối dịch vụ bên ngoài, để xác nhận tính khả dụng và hoạt động bình thường.

Thiết lập kiểm tra tình trạng gRPC

gRPC ASP.NET Core có hỗ trợ tích hợp để kiểm tra tình trạng gRPC với gói Grpc.AspNetCore.HealthChecks. Kết quả kiểm tra tình trạng .NET được báo cáo cho trình gọi.

Để thiết lập kiểm tra tình trạng gRPC trong một ứng dụng:

  • Thêm một tham khảo gói Grpc.AspNetCore.HealthChecks.
  • Đăng ký dịch vụ kiểm tra tình trạng gRPC:
    • AddGrpcHealthChecks để đăng ký các dịch vụ cho phép kiểm tra tình trạng.
    • MapGrpcHealthChecksService để thêm điểm cuối dịch vụ kiểm tra tình trạng.
  • Thêm kiểm tra tình trạng bằng cách thực thi IHealthCheck hoặc sử dụng phương thức AddCheck.
using GrpcServiceHC.Services;
using Microsoft.Extensions.Diagnostics.HealthChecks;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddGrpc();
builder.Services.AddGrpcHealthChecks()
                .AddCheck("Sample", () => HealthCheckResult.Healthy());

var app = builder.Build();

app.MapGrpcService<GreeterService>();
app.MapGrpcHealthChecksService();

// Code removed for brevity.

Khi kiểm tra tình trạng được thiết lập:

  • Dịch vụ kiểm tra tình trạng được thêm vào ứng dụng máy chủ.
  • Kiểm tra tình trạng .NET đã đăng ký với ứng dụng được thực hiện định kỳ để biết kết quả về tình trạng. Theo mặc định, có độ trễ 5 giây sau khi khởi động ứng dụng và sau đó quá trình kiểm tra tình trạng được thực hiện sau mỗi 30 giây. Khoảng thời gian thực hiện kiểm tra tình trạng có thể được tùy chỉnh bằng HealthCheckPublisherOptions.
  • Kết quả tình trạng xác định những gì dịch vụ gRPC báo cáo:
    • Unknown được báo cáo khi không có kết quả về tình trạng.
    • NotServing được báo cáo khi có bất kỳ kết quả tình trạng nào của HealthStatus.Unhealthy.
    • Ngược lại, Serving sẽ được báo cáo.

Cấu hình Grpc.AspNetCore.HealthChecks

Theo mặc định, dịch vụ kiểm tra tình trạng gRPC sử dụng tất cả các kiểm tra tình trạng đã đăng ký để xác định trạng thái của tình trạng. Kiểm tra tình trạng gRPC có thể được tùy chỉnh khi đăng ký sử dụng một tập hợp con kiểm tra tình trạng. Phương thức MapService được sử dụng để ánh xạ kết quả tình trạng tới tên dịch vụ, cùng với vị từ để lọc kết quả tình trạng:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddGrpc();
builder.Services.AddGrpcHealthChecks(o =>
{
    o.Services.MapService("", r => r.Tags.Contains("public"));
});

var app = builder.Build();

Đoạn code trên ghi đè dịch vụ mặc định ("") để chỉ sử dụng kết quả tình trạng với thẻ "public".

Kiểm tra tình trạng gRPC hỗ trợ máy khách chỉ định đối số tên dịch vụ khi kiểm tra tình trạng. Nhiều dịch vụ được hỗ trợ bằng cách cung cấp tên dịch vụ cho MapService:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddGrpc();
builder.Services.AddGrpcHealthChecks(o =>
{
    o.Services.MapService("greet.Greeter", r => r.Tags.Contains("greeter"));
    o.Services.MapService("count.Counter", r => r.Tags.Contains("counter"));
});

var app = builder.Build();

Tên dịch vụ do máy khách chỉ định thường là tên mặc định ("") hoặc tên đủ điều kiện gói của dịch vụ trong ứng dụng của bạn. Tuy nhiên, không có gì ngăn cản máy khách sử dụng các giá trị tùy ý để kiểm tra tình trạng ứng dụng.

Định cấu hình khoảng thời gian thực hiện kiểm tra tình trạng

Kiểm tra tình trạng được chạy ngay lập tức khi Check được gọi. Watch là một phương thức truyền phát và có hành vi khác với Check: Truyền phát chạy dài báo cáo kết quả kiểm tra tình trạng theo thời gian bằng cách thực thi định kỳ IHealthCheckPublisher để thu thập kết quả tình trạng. Theo mặc định, nhà xuất bản:

  • Đợi 5 giây sau khi khởi động ứng dụng trước khi chạy kiểm tra tình trạng.
  • Chạy kiểm tra tình trạng cứ sau 30 giây.

Khoảng thời gian của nhà xuất bản có thể được định cấu hình bằng HealthCheckPublisherOptions khi khởi động:

builder.Services.Configure<HealthCheckPublisherOptions>(options =>
{
    options.Delay = TimeSpan.Zero;
    options.Period = TimeSpan.FromSeconds(10);
});

Gọi dịch vụ kiểm tra tình trạng gRPC

Gói Grpc.HealthCheck bao gồm một máy khách để kiểm tra tình trạng gRPC:

var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Health.HealthClient(channel);

var response = await client.CheckAsync(new HealthCheckRequest());
var status = response.Status;

Có hai phương thức trên dịch vụ Health:

  • Check là phương thức đơn nhất để có được trạng thái tình trạng hiện tại. Kiểm tra tình trạng được thực hiện ngay lập tức khi Check được gọi. Máy chủ trả về phản hồi lỗi NOT_FOUND nếu máy khách yêu cầu tên dịch vụ không xác định. Điều này có thể xảy ra khi khởi động ứng dụng nếu kết quả tình trạng chưa được công bố.
  • Watch là phương thức truyền phát báo cáo những thay đổi về trạng thái tình trạng theo thời gian. IHealthCheckPublisher được thực thi định kỳ để thu thập kết quả tình trạng. Máy chủ trả về trạng thái Unknown nếu máy khách yêu cầu tên dịch vụ không xác định.

Tài nguyên bổ sung

Nguồn: learn.microsoft.com
» Tiếp: Quản lý tham chiếu Protobuf với dotnet-grpc
« Trước: Các dịch vụ và máy khách gRPC code-first với .NET
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!