Статьи

Нагрузочное тестирование микросервиса.

Давайте предположим, что существует микросервис, представленный набором контейнеров, работающих в кластере K8s где-то в облаке , например
Oracle Kubernetes Engine (ОКЕ) . В какой-то момент мы хотим быстро провести стресс-тестирование конкретного компонента микросервиса или всего микросервиса. Итак, мы хотим знать, как он работает под нагрузкой, как он обрабатывает множество последующих запросов, поступающих от множества параллельных клиентов. Хорошей новостью является то, что у нас уже есть инструмент для этого. И работает. Это сам кластер Kubernetes.

Мы собираемся использовать задание Kubernetes для этого тестирования, описанного в следующем файле манифеста:

01
02
03
04
05
06
07
08
09
10
11
12
13
apiVersion: batch/v1
kind: Job
metadata:
   name: job-load
spec:
   parallelism: 50  
   template:
     spec:
       containers:
         - name: loader
           image: eugeneflexagon/aplpine-with-curl:1.0.0
           command: ["time", "curl", "http://my_service:8080/my_path?[1-100]"]    
       restartPolicy: OnFailure  

В этом задании будет запущено 50 модулей, работающих параллельно и отправляющих по 100 запросов каждый на my_service через порт 8080 и путь my_path. Создание и начало работы с помощью вызова

1
kubectl  apply -f loadjob.yaml

Мы можем наблюдать все 50 стручков, созданных заданием, используя

kubectl get pods -l job-name = job-load

1
2
3
4
5
6
7
NAME             READY     STATUS      RESTARTS   AGE
job-load-4n262   1/2       Completed   1          12m
job-load-dsqtc   1/2       Completed   1          12m
job-load-khdn4   1/2       Completed   1          12m
job-load-kptww   1/2       Completed   1          12m
job-load-wf9pd   1/2       Completed   1          12m
...

Если мы посмотрим на журналы любого из этих стручков

1
kubectl logs job-load-4n262

Мы увидим что-то вроде следующего:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
[1/100]: http://my_service.my_namespace:8080/my_path?1 --> <stdout>
{"id":456,"content":"Hello world!"}
 
[2/100]: http://my_service.my_namespace:8080/my_path?2 --> <stdout>
{"id":457,"content":"Hello world!"}
 
[3/100]: http://my_service.my_namespace:8080/my_path?3 --> <stdout>
{"id":458,"content":"Hello world!"}
 
....
 
real    0m 10.04s
user    0m 0.00s
sys     0m 0.04s

Это оно!

Опубликовано на Java Code Geeks с разрешения Евгения Федоренко, партнера нашей программы JCG . См. Оригинальную статью здесь: нагрузочное тестирование микросервиса. Kubernetes путь.

Мнения, высказанные участниками Java Code Geeks, являются их собственными.