Trong một hệ thống gồm nhiều microservice được xây dựng xung quanh Kafka, chúng ta rất nhiều lần sẽ tự hỏi liệu các microservice hoạt động như thế nào, nếu xảy ra trường hợp tải dữ liệu đầu vào đột ngột tăng cao. Liệu các service có chết hay không? Vậy làm thế nào để đánh giá được mức độ chiụ tải hay đánh giá độ trễ (latency) của các microservice.
Ví dụ: Xem xét mô hình dịch vụ phía dưới
Để có thể stress test được dịch vụ Serivce A, Tôi phải xây dựng một dịch vụ test như sau:
Dựa vào những yêu cầu trên, tôi bắt tay vào hiện thực Simulator Service bằng cách tận dụng thư viện Spring-cloud-kafka. Vì gói Spring-cloud-kafka cung cấp tất cả các hàm cơ bản để kết nối với Kafka cluster bao gồm producer và consumer API. //code
Bước tiếp theo là tạo bộ kiểm soát tầng số bơm dữ liệu như mô hình bên dưới.
ThreadManager Class có nhiệm vụ đọc dữ liệu test từ các file csv. Sau đó tạo các ThreadMonitor dựa vào số lượng topic đầu vào mà chúng ta muốn bơm dữ liệu. //Code
ThreadMonitor là Class nhận hai thông số là p, và f. Ở đây p là period, thời gian cần phải nạp vào cho topic thứ i, đơn vị là giây. f là tầng số bơm mà SenderThread cần phải đưa vào Kafka topic trong giây.
Ví dụ: (p, f) = (60,100) có nghĩa là cần bơm 100 message trên một giây vào topic liên tục trong vòng 60 giây. //Code
SenderThread là các thread giúp nạp dữ liệu vào Kafka một cách độc lập. Và lựu lại số lượng message đã bơm vào Kafka. /Code