Jaeger là gì?
Jaeger là phần mềm bạn có thể sử dụng để giám sát và khắc phục vấn đề trên các thành phần phần mềm được kết nối với nhau gọi là vi dịch vụ. Nhiều vi dịch vụ giao tiếp với nhau để hoàn thành một chức năng phần mềm. Các nhà phát triển sử dụng Jaeger để trực quan hóa chuỗi sự kiện trong quá trình tương tác vi dịch vụ nêu trên nhằm cô lập vấn đề khi xảy ra sự cố. Jaeger còn được gọi là Jaeger Tracing do phần mềm này theo dõi hay truy theo đường dẫn của yêu cầu thông qua một loạt các tương tác vi dịch vụ.
Tại sao Jaeger lại quan trọng?
Trước đây, thiết kế phần mềm mang tính đơn khối, với một số chức năng được gộp vào một cơ sở mã duy nhất. Ví dụ: để thiết kế một ứng dụng đặt đồ ăn, thực đơn đồ ăn, nhà hàng và hệ thống thanh toán đều được gộp vào một đơn vị phần mềm duy nhất. Kiểu thiết kế phần mềm này khiến giải pháp phức tạp hơn và khó bảo trì hơn. Khi các nhà phát triển thực hiện thay đổi mã trong một lĩnh vực, điều này sẽ ảnh hưởng đến toàn bộ hệ thống, khiến cho việc quản lý thay đổi trở thành một quá trình nhàm chán và tốn thời gian. Để giải quyết vấn đề này, thiết kế kiến trúc mang nhiều tính mô-đun hơn.
Vi dịch vụ
Các ứng dụng hiện đại hoạt động như một tập hợp các đơn vị độc lập nhỏ hơn được gọi là vi dịch vụ. Ví dụ: một ứng dụng đặt đồ ăn hiện đại có thể bao gồm các phần sau:
- Dịch vụ định vị địa lý để phát hiện vị trí của khách hàng
- Dịch vụ thu thập và gửi đơn đặt hàng đến các nhà hàng
- Cổng thanh toán với một số tùy chọn thanh toán
Mỗi vi dịch vụ hoạt động như một ứng dụng độc lập và có quyền truy cập vào cơ sở dữ liệu và logic của riêng nó. Các vi dịch vụ giao tiếp với nhau thông qua các yêu cầu và phản hồi, giống như một ứng dụng web. Hệ thống dựa trên vi dịch vụ còn được gọi là hệ thống phân tán.
Khắc phục sự cố kiến trúc vi dịch vụ
Điều tra các sự cố xảy ra trong các hệ thống phân tán là một thách thức vì hành vi phức tạp của vi dịch vụ. Ví dụ: đặt đồ ăn trên một ứng dụng theo mô-đun có thể kích hoạt một số yêu cầu đến các vi dịch vụ khác nhau. Các yêu cầu này có thể xảy ra đồng thời và độc lập mà không cần theo trình tự. Nếu sự cố xảy ra với đơn hàng đồ ăn, các nhà phát triển cần xác định vi dịch vụ nào đã gây ra sự cố đó. Các phương pháp truy dấu sự cố thông thường chỉ cung cấp một phần hình ảnh của yêu cầu, khiến việc khắc phục sự cố vi dịch vụ trở nên nhàm chán.
Jaeger là một công cụ phần mềm mà đội ngũ CNTT sử dụng để tăng mức độ hiển thị và độ rõ ràng về toàn bộ chuỗi sự kiện. Họ có thể giải quyết vấn đề nhanh hơn và cải thiện trải nghiệm của khách hàng.
Jaeger dùng để làm gì?
Các nhà phát triển sử dụng Jaeger để cải thiện hiệu suất hệ thống phân tán theo nhiều cách khác nhau. Sau đây là một vài ví dụ chúng tôi đưa ra.
Giám sát giao dịch phân tán
Jaeger có các tính năng giám sát chuyển động của dữ liệu giữa các vi dịch vụ. Các nhà phát triển có thể thực hiện cách tiếp cận chủ động để phát hiện và giải quyết vấn đề trước khi làm gián đoạn trải nghiệm người dùng.
Tối ưu hóa độ trễ
Phân tích Jaeger có thể xác định vị trí tắc nghẽn trong các vi dịch vụ làm chậm ứng dụng. Các nhà phát triển sử dụng Jaeger để kiểm tra hành vi của các vi dịch vụ và tìm cách để chúng hoạt động nhanh hơn.
Phân tích nguyên nhân gốc rễ
Trong kiến trúc vi dịch vụ, một vấn đề có thể dẫn đến những vấn đề khác. Các nhà phát triển có thể sử dụng Jaeger để tìm điểm bắt đầu của một loạt các vấn đề liên quan trong một ứng dụng.
Phân tích tình trạng phụ thuộc của dịch vụ
Tình trạng phụ thuộc của dịch vụ có nghĩa là một ứng dụng phụ thuộc vào một số thành phần để chạy. Ví dụ: một ứng dụng điều hướng phụ thuộc vào các dịch vụ định vị trên ứng dụng di động. Các nhà phát triển sử dụng Jaeger để hiểu mối quan hệ phức tạp giữa các vi dịch vụ khác nhau.
Truyền bối cảnh phân tán
Truyền bối cảnh phân tán là cách ứng dụng chuyển thông tin mô tả cùng với dữ liệu. Điều này giúp các nhà phát triển đánh giá tổng thể hiệu suất của vi dịch vụ. Ví dụ: Jaeger gắn thẻ yêu cầu đặt hàng với tên của khách hàng để các nhà phát triển có thể liên kết đường dẫn yêu cầu với khách hàng cụ thể.
Jaeger hoạt động như thế nào?
Jaeger hoạt động dựa trên nguyên tắc truy dấu phân tán và sử dụng khung OpenTracing.
Truy dấu phân tán
Truy dấu phân tán là một kỹ thuật phần mềm giám sát chuỗi sự kiện giữa các vi dịch vụ. Nó theo dõi tất cả các kết nối và cung cấp các biểu đồ và đồ thị để hiển thị các đường dẫn yêu cầu trong một ứng dụng. Là một công cụ truy dấu phân tán, Jaeger truy dấu các chuyển động của yêu cầu bằng cách gán một mã định danh duy nhất cho mỗi yêu cầu và thu thập thông tin khi một dịch vụ cụ thể xử lý yêu cầu.
OpenTracing
OpenTracing là một khung nguồn mở, hoặc có sẵn miễn phí, cung cấp các tiêu chuẩn để hiện thực hóa truy dấu phân tán chìa khóa trao tay chính xác trên các hệ thống phần mềm hiện đại. Ví dụ: nó cung cấp một tiêu chuẩn chung để xác định cấu trúc của thông tin được giám sát truyền giữa các vi dịch vụ. Jaeger sử dụng OpenTracing để cung cấp một giải pháp hoàn chỉnh nhằm thu thập, lưu trữ, quản lý, phân tích và hiển thị dữ liệu vi dịch vụ.
Mô hình dữ liệu OpenTracing
Mô hình dữ liệu OpenTracing cung cấp định nghĩa cơ bản để kết nối dữ liệu từ các thành phần khác nhau. Hai thuật ngữ chính mà mô hình sử dụng là span và dấu vết.
Span
Span là một đơn vị công việc logic duy nhất được thực hiện trong một hệ thống truy dấu phân tán. Mỗi span có các thành phần sau:
- Tên hoạt động
- Thời gian bắt đầu và thời gian kết thúc
- Thẻ hoặc giá trị giúp nhà phát triển phân tích span
- Bản ghi lưu trữ mọi thông báo mà vi dịch vụ tạo ra
- Bối cảnh span hoặc các mô tả bổ sung về span
Dấu vết
Dấu vết là một tập hợp của một hoặc nhiều span thuộc cùng một quá trình. Dấu vết đại diện cho các sự kiện xảy ra trong một khoảng thời gian cụ thể. Các span thuộc cùng một dấu vết sẽ có cùng ID dấu vết. Ví dụ: một dấu vết được tạo ra khi khách hàng đặt món ăn dẫn đến các span sau:
- Khách hàng đặt đơn hàng
- Thanh toán được xử lý
- Danh sách đơn hàng được gửi đến nhà hàng
- Thức ăn được lấy
- Thức ăn được giao
Jaeger bao gồm những thành phần nào?
Nền tảng truy dấu phân tán Jaeger bao gồm các thành phần sau.
Máy khách Jaeger
Máy khách Jaeger chứa các phần triển khai ngôn ngữ cụ thể của API OpenTracing bằng các ngôn ngữ lập trình như Go, JavaScript, Java, Python, Ruby và PHP.
Nhà phát triển sử dụng những API này để tạo các span Jaeger mà không cần viết mã nguồn để truy dấu phân tán.
Tác tử Jaeger
Tác tử Jaeger là một daemon mạng hoặc một quy trình chạy liên tục ở chế độ nền để thực hiện các chức năng mà các quy trình khác yêu cầu. Tác tử Jaeger theo dõi các span mà máy khách gửi qua giao thức gói dữ liệu người dùng (UDP), một loại phương thức giao tiếp cho phép các ứng dụng trao đổi thông điệp qua mạng.
Tác tử kết nối với máy khách trong môi trường bộ chứa như Dịch vụ Kubernetes linh hoạt Amazon. Các nhóm tác tử tạo ra các span theo lô và gửi chúng cho trình thu thập. Điều này cho phép ứng dụng chạy mà không cần chủ động gửi thông tin dấu vết đến backend Jaeger.
Trình thu thập Jaeger
Trình thu thập Jaeger là một thành phần phần mềm truy xuất dấu vết từ trình thu thập Jaeger. Nó kiểm tra, xử lý và lưu trữ các dấu vết trong cơ sở dữ liệu.
Lưu trữ
Hệ thống truy dấu Jaeger nhận các span và lưu trữ chúng trong một cơ sở dữ liệu hoặc backend lưu trữ liên tục. Lưu trữ liên tục có nghĩa là dữ liệu được lưu trữ vẫn còn nguyên vẹn ngay cả khi máy tính tắt nguồn. Ví dụ: các nhà phát triển sử dụng Dịch vụ OpenSearch của AWS làm kho lưu trữ liên tục để lưu trữ và chấp nhận các span.
Bộ tải nhập
Một cách để triển khai Jaeger là gửi dữ liệu dấu vết tới Kafka, một hệ thống phân tán dành cho các ứng dụng để lưu trữ và truy xuất các luồng thông tin. Bộ tải nhập là một mô-đun đọc dữ liệu dấu vết từ Kafka và lưu trữ riêng.
Truy vấn
Dịch vụ truy vấn truy xuất thông tin dấu vết từ cơ sở dữ liệu. Các nhà phát triển sử dụng các truy vấn để tìm dấu vết với thời gian, thẻ, thời lượng và hoạt động cụ thể.
Bảng điều khiển Jaeger
Bảng điều khiển Jaeger là một chương trình phần mềm có giao diện người dùng mà bạn có thể sử dụng để xem và phân tích dấu vết. Nó hiển thị dữ liệu dấu vết dưới dạng đồ thị và biểu đồ.
Các nhà phát triển sử dụng Jaeger như thế nào?
Khi các nhà phát triển xây dựng ứng dụng, họ sử dụng các thư viện máy khách Jaeger để tạo các span. Bằng cách thêm mã vào chương trình để tạo dữ liệu dấu vết, họ tạo ra ứng dụng được gọi là ứng dụng có công cụ đo lường. Ứng dụng có công cụ đo lường tự động tạo ra những thành phần sau:
- Các span chứa ID span, ID dấu vết, thẻ, bản ghi và bối cảnh span
- Dấu vết cho mọi yêu cầu
Các nhà phát triển sử dụng Bảng điều khiển Jaeger để tìm kiếm, lọc, hiển thị và phân tích dữ liệu truy dấu phân tán này. Họ có thể sử dụng phần mềm Jaeger UI để xem thông tin chi tiết như thời lượng quy trình, lỗi và bản ghi từ các vi dịch vụ.
Chiến lược lấy mẫu Jaeger là gì?
Một ứng dụng có công cụ đo lường tự động truyền dữ liệu dấu vết bất cứ khi nào ứng dụng đang chạy. Bạn có thể sử dụng dữ liệu dấu vết này để đo lường hiệu suất ứng dụng. Nó còn được gọi là dữ liệu đo từ xa. Để ngăn backend Jaeger bị quá tải với quá nhiều dữ liệu đo từ xa, bạn có thể lọc hoặc lấy mẫu nó bằng cách cấu hình các chiến lược lấy mẫu trong quá trình triển khai Jaeger. Dưới đây là một số chiến lược lấy mẫu:
- Lấy mẫu liên tục thu thập cùng một số lượng mẫu cho tất cả các loại dấu vết.
- Lấy mẫu theo xác suất thu thập các mẫu một cách ngẫu nhiên cho đến khi đạt đến tỷ lệ phần trăm nhất định.
- Lấy mẫu giới hạn tốc độ truy xuất một số lượng mẫu cụ thể mỗi giây.
- Lấy mẫu thích ứng tự động điều chỉnh tốc độ mẫu để đạt được một số lượng dấu vết trong một khoảng thời gian cụ thể.
AWS App Mesh là gì?
AWS App Mesh là một mạng lưới dịch vụ hoặc cơ sở hạ tầng phần mềm xử lý phần việc nặng nhọc để bạn có thể quản lý dễ dàng hơn các hệ thống phân tán dựa trên vi dịch vụ. AWS App Mesh có những tính năng sau:
- Luôn đảm bảo cung cấp khả năng hiển thị hoàn chỉnh và độ sẵn sàng cao cho ứng dụng của bạn.
- Cấu hình từng dịch vụ để xuất dữ liệu đo từ xa và triển khai logic kiểm soát giao tiếp nhất quán trên ứng dụng của bạn.
- Cung cấp biện pháp kiểm soát lưu lượng truy cập mạng để hỗ trợ nhà phát triển xây dựng ứng dụng đám mây bảo mật.
Bạn có thể sử dụng AWS App Mesh như một giải pháp độc lập cho những nhu cầu truy dấu phân tán của mình. Mạng lưới dịch vụ này cũng hỗ trợ một số công cụ bên thứ ba không thuộc AWS như Jaeger mà bạn có thể dùng để giám sát, tạo bản ghi hoặc truy vết hoạt động truyền thông của vi dịch vụ.
Bắt đầu sử dụng Jaeger trên App Mesh bằng cách tạo tài khoản AWS ngay hôm nay.
Các bước tiếp theo để sử dụng Jaeger trên AWS
Bắt đầu xây dựng với AWS trên Bảng điều khiển quản lý AWS.