Tải bản đầy đủ (.pdf) (26 trang)

Tìm hiểu về k6 và vận hành trên docker swarm SE121 m11 PMCL

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (835.91 KB, 26 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM

BÁO CÁO ĐỒ ÁN 1
ĐỀ TÀI:
Tìm hiểu về K6 và vận hành trên Docker Swarm
SE121.M11.PMCL

Giáo viên hướng dẫn: ThS. Nguyễn Công Hoan
Sinh viên thực hiện: Nguyễn Thanh Trung – 17520021

Tp. Hồ Chí Minh, tháng 12/2021
1


NHẬN XÉT (của giảng viên hướng dẫn)
………………………………………………………………………………………………………………
………………………………………………………………………………………………………………
………………………………………………………………………………………………………………
……………………………………………………………………………………………………………….
………………………………………………………………………………………………………………
………………………………………………………………………………………………………………
………………………………………………………………………………………………………………
……………………………………………………………………………………………………………….
………………………………………………………………………………………………………………
………………………………………………………………………………………………………………
………………………………………………………………………………………………………………
……………………………………………………………………………………………………………….
………………………………………………………………………………………………………………
………………………………………………………………………………………………………………
………………………………………………………………………………………………………………


……………………………………………………………………………………………………………….
………………………………………………………………………………………………………………
………………………………………………………………………………………………………………
………………………………………………………………………………………………………………
……………………………………………………………………………………………………………….
………………………………………………………………………………………………………………
………………………………………………………………………………………………………………
………………………………………………………………………………………………………………
……………………………………………………………………………………………………………….
………………………………………………………………………………………………………………
………………………………………………………………………………………………………………
………………………………………………………………………………………………………………
……………………………………………………………………………………………………………….
………………………………………………………………………………………………………………
………………………………………………………………………………………………………………
………………………………………………………………………………………………………………
……………………………………………………………………………………………………………….
………………………………………………………………………………………………………………
………………………………………………………………………………………………………………
………………………………………………………………………………………………………………
……………………………………………………………………………………………………………….
………………………………………………………………………………………………………………
………………………………………………………………………………………………………………
………………………………………………………………………………………………………………
……………………………………………………………………………………………………………….
………………………………………………………………………………………………………………
………………………………………………………………………………………………………………
………………………………………………………………………………………………………………
……………………………………………………………………………………………………………….


2


LỜI CẢM ƠN
Đầu tiên, nhóm tác giả gửi lời cảm ơn chân thành đến tập thể quý thầy cô
trường Đại học Công nghệ thông tin – Đại học Quốc gia Tp Hồ Chí Minh và
q thầy cơ khoa Cơng nghệ phần mềm đã giúp cho nhóm tác giả có những kiến
thức cơ bản làm nền tảng để thực hiện đề tài này.
Đặc biệt, nhóm tác giả xin gửi lời cảm ơn và lòng biết ơn sâu sắc nhất tới
thầy Nguyễn Cơng Hoan đã trực tiếp hướng dẫn tận tình, sửa chữa và đóng góp
nhiều ý kiến quý báu giúp nhóm tác giả hồn thành tốt báo cáo mơn học của
mình.
Trong thời gian một kỳ thực hiện đề tài, nhóm tác giả đã vận dụng những
kiến thức nền tảng đã tích lũy đồng thời kết hợp với việc học hỏi và nghiên cứu
những kiến thức mới. Từ đó, nhóm tác giả vận dụng tối đa những gì đã thu thập
được để hoàn thành một báo cáo đồ án tốt nhất. Tuy nhiên, trong q trình thực
hiện, nhóm tác giả khơng tránh khỏi những thiếu sót. Chính vì vậy, nhóm tác
giả rất mong nhận được những sự góp ý từ phía các thầy cơ nhằm hồn thiện
những kiến thức mà nhóm tác giả đã học tập và là hành trang để nhóm tác giả
thực hiện tiếp các đề tài khác trong tương lai.
Tp. Hồ Chí Minh, ngày 17 tháng 12 năm 2021

3


Table of Contents
ĐỀ TÀI: ............................................................................................................................................ 1
NHẬN XÉT (của giảng viên hướng dẫn) ..................................................................................................... 2
LỜI CẢM ƠN ............................................................................................................................................ 3


1.

Giới thiệu ................................................................................................................................. 5

1.1.

Lý do chọn đề tài ................................................................................................................... 5

1.2.

Phạm vi đề tài ....................................................................................................................... 5

1.3.

Mục tiêu đề tài...................................................................................................................... 5

2.

Docker ..................................................................................................................................... 6
2.1.

Giới thiệu ..................................................................................................................................... 6

2.2.

Ưu điểm của Docker ..................................................................................................................... 6

2.3.

Thành phần chính ......................................................................................................................... 6


2.4.

Một số khái niệm .......................................................................................................................... 6

2.5.

Triển khai Docker trên Ubuntu ...................................................................................................... 7

3.

Docker Swarm .......................................................................................................................... 9

3.1.

Giới thiệu.............................................................................................................................. 9

3.2.

Các thành phần chính ............................................................................................................ 9

Node ....................................................................................................................................................... 9
Service và Task......................................................................................................................................... 9

3.3.

Tính năng chính của Docker Swarm ..................................................................................... 10

3.4.


4.

Khởi tạo Docker Swarm............................................................................................................... 11

K6 .......................................................................................................................................... 15

4.1

Giới thiệu............................................................................................................................ 15

4.2

K6.io là gì ............................................................................................................................ 15

4.3

Ưu điểm và nhược điểm ..................................................................................................... 15

4.4

Cài đặt ................................................................................................................................ 17

5

Kiểm tra độ chịu tải với K6...................................................................................................... 18

6.Tổng kết ..................................................................................................................................... 26
7.Tài liệu tham khảo...................................................................................................................... 26

4



1. Giới thiệu
1.1. Lý do chọn đề tài
Theo xu hướng phát triển phần mềm hiện nay, các đội ngũ phát triển khơng chỉ
phải quan tâm đến tính năng của sản phẩm, mà còn phải kiểm tra đến những khả
năng sai sót có thể của sản phẩm. Trong đó, khả năng chịu tải cũng là một vấn đề
lớn ở các sản phẩm. Vai trò của người kỹ sư Tester trở nên quan trọng. K6 một
công nghệ mới mà kỹ sư Tester nên biết .
Nhận thấy nhu cầu và sự cần thiết của cơng nghệ này, nhóm chúng em quyết
định chọn đề tài ‘Tìm hiểu về K6 và vận hành trên Docker Swarm.

1.2. Phạm vi đề tài
Trong đồ án này, nhóm chúng em sẽ tập trung vào tìm hiểu về K6 & Docker
Swarm, khái niệm, tính năng, cách hoạt động cũng như điểm mạnh điểm yếu của
K6 & Docker Swarm. Từ đó, làm nền tảng để xây dựng một ứng dụng minh họa
và triển khai lên K6 & Docker Swarm

1.3. Mục tiêu đề tài
Trong đề tài, nhóm chúng em hướng đến ba mục tiêu chính sau:
- Thứ nhất, hiểu được các khái niệm, nội dung cơ bản về K6 & Docker

Swarm cũng như cách thức hoạt động của K6 & Docker Swarm.
- Thứ hai, hiểu được quy trình làm việc của một đội phát triển, công việc

của một kỹ sư vận hành K6 & Docker Swarm.
- Thứ ba, Sử dụng những kinh nghiệm, kiến thức nhóm có được từ q trình

làm đề tài này, làm nền tảng phát triển cho những đề tài sau này.


5


2. Docker
2.1. Giới thiệu
• Docker là một nền tảng mở dành cho các lập trình viên, quản trị hệ thống dùng
để xây dựng, vận chuyển và chạy các ứng dụng một cách dễ dàng trên nền
tảng ảo hóa.
• Docker đưa ra một giải pháp mới cho vấn đề ảo hóa, thay vì tạo ra các máy ảo
con chạy độc lập kiểu hypervisors (tạo phần cứng ảo và cài đặt hệ điều hành
lên đó), các ứng dụng sẽ được đóng gói lại thành các Container riêng lẻ. Các
Container này chạy chung trên nhân hệ điều hành qua LXC (Linux
Containers), chia sẻ chung tài nguyên của máy mẹ, do đó, hoạt động nhẹ và
nhanh hơn các máy ảo dạng hypervisors.

2.2. Ưu điểm của Docker
• Tiện lợi: giúp giảm tải sự phức tạp khi cài đặt các loại công nghệ cũng như
đồng bộ các phiên bản của những cơng nghệ đó.
• Dễ dàng sử dụng: dễ dàng cho các lập trình viên, quản trị hệ thống,.. sử dụng
vì Docker sử lợi thế của container để xây dựng hoặc kiểm tra các ứng dụng
một cách nhanh chóng.
• Khả năng di động: mơi trường phát triển được dựng lên bằng docker có thể
chuyển từ người này sang người khác mà không làm thay đổi cấu hình ở
trong.

2.3. Thành phần chính
Các thành phần chính của Docker bao gồm:
– Docker Engine: là thành phần chính của Docker, như một cơng cụ để đóng gói ứng

dụng.

– Docker Hub: là dịch vụ cloud để chia sẻ ứng dụng và tự động hóa chuỗi các

cơng việc liên tục, có thể thao tác pull/push với các images.

2.4. Một số khái niệm
6


Một số khái niệm phổ biến về Docker:
Docker images: là một “read-only template”. Chẳng hạn, một image
chứa hệ điều hành Ubuntu đã cài đặt sẵn Vim.


Docker registries: là kho chứa images. Người dùng có thể tạo ra các
images của mình và tải lên đây hoặc tải về các images được chia sẻ.


Docker container: hoạt động giống như một thư mục (directory), chứa
tất cả những thứ cần thiết để một ứng dụng có thể chạy được. Mỗi một docker
container được tạo ra từ một docker image. Các thao tác với một container: chạy,
bật, tắt, di chuyển, và xóa.


Dockerfile: là một file chứa tập hợp các lệnh để Docker có thể đọc và
thực hiện để đóng gói một image theo yêu cầu người dùng.


Orchestration: là các công cụ, dịch vụ dùng để điều phối và quản lý
nhiều containers sao cho chúng làm việc hiệu quả nhất.



2.5. Triển khai Docker trên Ubuntu
Bước 1: Cập nhập OS bằng câu lệnh
sudo apt-get update
Bước 2: Gỡ phiên bản cũ của Docker(Bỏ qua bước này nếu như chưa từng cài
Docker)
sudo apt-get remove docker docker-engine docker.io
Bước 3: Cài Docker bằng câu lệnh
sudo apt install docker.io
Bước 4: Chạy và tự động hóa Docker sudo systemctl start docker
sudo systemctl enable docker
Bước 5: kiểm tra phiên bản Docker docker --sevsion

7


Chạy câu lệnh đầu tiên với Docker docker run hello-world

8


3. Docker Swarm
3.1. Giới thiệu
• Docker swarm là một cơng cụ cho phép nhóm các physical hoặc virtual machine
có cài đặt Docker deamon thành một cụm (cluster) hay còn gọi là swarm, ta có
thể xem nó như là một docker host ảo (vitural docker host) duy nhất. Docker
swarm cung cấp các tính năng để có thể dễ dàng quản lý và điều phối cluster.

3.2. Các thành phần chính
Node

Khi run docker với swarm mode, mỗi docker host được gọi là một node. Node được
chia làm 2 loại đó là manager (để quản lý swarm) và worker (để run service). Mỗi
node trong swarm có thể là manager, worker hoặc có thể là cả 2.
Manager node: Là node nhận thông tin service cần deploy từ user, nó điều phối các
task đến các worker trong swarm. Mặc định manager node cũng là một worker node
Worker node: Có trách nhiệm nhận và thực thi các task được gửi đi từ manager
node.

Service và Task
Một Service là một khai báo docker image cần được run trên các manage và worker
node trong swarm. Khi tạo một service, cần phải chỉ định cụ thể image và command
nào sẽ được thực thi bên trong container.
Service có thể được run với 2 model sau:



Replicated services: swarm manager chỉ định cụ thể số lượng replica của
task giữa các node trong cluster.
Global services: swarm manager assign 1 task cho mỗi node trong cluster

Một Task tương ứng với 1 docker container và các command sẽ thực thi trong
container đó, được khai báo khi tạo service. Manager node assign task tới các
worker node dựa vào số lượng replica được khai báo trong service.
9


3.3. Tính năng chính của Docker Swarm


Cluster management integrated with Docker Engine: Quản lý cluster với

Docker Engine bằng việc sử dụng Docker CLI để tạo swarm.



Decentralized design: Docker Swarm được thiết kế dạng phân cấp. Thay vì xử lý
sự khác biệt giữa các roles của node tại thời điểm triển khai, Docker Engine xử lý
bất kỳ chun mơn hố nào khi runtime. Bạn có thể triển khai cả hai loại node:
managers và worker bằng Docker Engine.



Declarative service model: Docker Engine sử dụng phương thức khai báo để cho
phép bạn define trạng thái mong muốn của các dịch vụ khác nhau trong stack ứng
dụng của bạn. VD: Bạn có thể mơ tả ứng dụng bao gồm: web front-end với
service message queueing và database back-end.



Scaling: Đối với mỗi service bạn có thể khai báo số lượng task mà bạn muốn run.
Khi bạn scale up hoặc down thì swarm manager sẽ tự động thêm hoặc xố task để
duy trì trạng thái mong muốn.



Desired state reconciliation: Hãy hình dung bạn thiết lập một service run 10
replicas của một container và một worker machine (host/vps) đang giữ 2 trong số
10


10 replicas đó gặp sự cố bị crash, lúc này swarm manager sẽ tiến hành tạo thêm 2

replicas mới để thay để cho 2 replicas đã bị crash đó và tiến hành chuyển 2
replicas mới này cho các worker đang run.


Multi-host networking: Bạn có thể chỉ định một overlay network cho các
services của mình. Swarm manager sẽ tự động gán địa chỉ IP cho các container
trên overlay network khi nó khởi tạo và cập nhật application.



Service discovery: Swarm manager node gán mỗi service trong swarm một DNS
duy nhất và bạn có thể truy vấn được thơng qua DNS này.



Load balancing: Có thể expose các port cho các services tới load balance để giao
tiếp với bên ngồi.



Secure by default: Các service giao tiếp với nhau thông qua giao thức bảo mật
TLS. Bạn có thể tuỳ chỉnh sử dụng chứng chỉ ký tự root hoặc chứng chỉ từ một
custom root CA.



Rolling updates: Swarm giúp bạn update image của service một cách hoàn tồn
tự động. Swarm manager giúp bạn kiểm sốt độ trễ giữa service deploy tới các
node khác nhau và bạn có thể rolling back bất cứ lúc nào.


3.4. Khởi tạo Docker Swarm
Đầu tiên ta cần 4 máy ảo (vps ảo) để tạo các máy ảo ta sử dụng câu lệnh sau:
$ docker-machine create <machine-name>

Trong đó:


<machine-name>: tên máy ảo bạn muốn đặt.

Tạo machine(máy ảo) cho swarm manager:
$ docker-machine create manager

Tiếp đến là các machine cho swarm worker lần lượt là : worker1, worker2, worker3.
11


$ docker-machine create worker1
$ docker-machine create worker2
$ docker-machine create worker3

Sau khi tạo xong ta kiểm tra list machine:
$ docker-machine ls

Bây giờ ta sử dụng lệnh inspect thử xem thông tin của một machine
$ docker-machine inspect manager

12


Dễ thấy một số thông tin cơ bản về machine như: địa chỉ IP, MachineName (tên do

ta đặt), SSHKey để có thể truy cập vào machine thơng qua SSHKey này, thông tin
về CPU ( 1 CPU), Memory ( 1GB), ….
Việc setup các machine đã hoàn tất giờ ta tiến hành khởi tạo swarm trên con
manager nhé và để truy cập vào con manager hay các con worker thì ta sử dụng
thông qua SSH cụ thể như sau:

13


$ docker-machine ssh <name-machine>

Ở đây:


<name-machine> = manager

Và để quay lại host local:
$ exit

Khởi tạo swarm
$ docker swarm init --advertise-addr <IP Machine>

14


4. K6
Giới thiệu

4.1


Hãy giả sử rằng công ty bạn vừa phát triển một trang web thương mại điện tử, cái
mà tương tự như Amazon. Đó là dự án lớn nhất đối với tổ chức của bạn và một số
lượng lớn khách hàng sẽ sử dụng trang web này. Nó cần có khả năng xử lý 100,000
giao dịch trong 1 ngày và hàng nghìn người dùng đồng thời trở lên.
Một số điều mà bạn có thể quan tâm khi phát triển trang web là:


Điều gì sẽ xảy ra với máy chủ web trong điều kiện tải khốc liệt như vậy



Làm thế nào bạn có thể kiểm tra trang web của bạn trong kịch bản này?



Lấy 100.000 người dùng đồng thời kết nối với trang web của bạn để thử
nghiệm là bất khả thi.

May mắn thay, có một phần mềm cái mà có thể giúp bạn giải quyết những vấn đề
này. Đó là K6. Đây là công cụ tốt nhất để đo đặc hiệu suất của trang web. Ban đầu,
các nhà phát triển đã phát triển công cụ này để thử nghiệm hiệu năng của các ứng
dụng web nhưng trên thực tế, nó có thể làm được nhiều hơn thế.

4.2

K6.io là gì

K6 là một phần mềm cái mà có thể sử dụng để chạy thử nghiệm hiệu suất, thử
nghiệm tại và thử nghiệm chức năng của ứng dụng web. K6 cũng có thể mô phỏng
tải nặng trên máy chủ bằng cách tạo hàng tấn người dùng ảo đồng thời lên máy chủ

web.
K6 là một ứng dụng mã nguồn mở. Điều này có nghĩa là bạn có thể tải xuống mã
nguồn của K6 để phân tích và sửa đổi nó nếu bạn muốn.

4.3 Ưu điểm và nhược điểm
Ưu điểm:


Mã nguồn mở: K6 là một phần mềm mã nguồn mở. Điều này có nghĩa là nó có
thể được tải xuống miễn phí. Nó cũng là một ứng dụng Java thuần túy 100%. Nhà
phát triển có thể sử dụng mã nguồn của nó, có thể sửa đổi và tùy chỉnh nó theo
yêu cầu của họ. Họ cũng có thể đóng góp code của họ để làm nên một K6 tốt hơn.
15




Dễ sử dụng: Người dùng có thể cài đặt và sử dụng K6 một cách dễ dàng. Chỉ cần
tải về từ internet, cài đặt và chạy. Như một ứng dụng Java thuần túy, nó sẵn sàng
để sử dụng với các cài đặt mặc định. Nó khơng u cầu bạn phải có bất kỳ kỹ
năng cụ thể nào hoặc kiến thức tên miền để sử dụng nó.



Nền tảng độc lập: K6 được phát triển bằng Java, đây là ngôn ngữ lập trình phổ
biến nhất trên thế giới. Do đó, nó có thể chạy trong mọi hệ điều hành có thể là
Window, Linux hoặc Mac.




Báo cáo mạnh mẽ: K6 có thể tạo báo cáo hiệu quả. Kết quả kiểm tra có thể được
xem lại bằng cách sử dụng Graph, Chart, and Tree View. K6 hỗ trợ các định dạng
khác nhau của báo cáo như text, XML, HTML and JSON.



Thử nghiệm cuối cùng: Với K6, người dùng có thể thực hiện bất kỳ loại kiểm
thử nào mà bạn muốn. Load Test, Stress Test, Functional Test, Distributed Test,
tất cả trong một cơng cụ



Tính linh hoạt: Bạn có thể tùy chỉnh K6 theo yêu cầu của bạn và áp dụng thử
nghiệm tự động cho K6. Bạn có thể tiết kiệm cơng sức của việc thực hiện các
trường hợp kiểm tra thủ cơng.



Hỗ trợ đa giao thức: K6 hỗ trợ một vài giao thức như HTTP, FTP, SOAP,
JDBC, JMS và LDAP. Nó cũng có thể được sử dụng để kiểm thử hiệu suất của cơ
sở dữ liệu của bạn.

Nhược điểm


Tiêu thụ bộ nhớ: K6 có thể mơ phỏng tải nặng và trực quan hóa báo cáo thử
nghiệm. Điều này có thể tiêu tốn rất nhiều bộ nhớ và có thể dẫn ra khỏi bộ nhớ
dưới tải nặng.




Chỉ áp dụng cho ứng dụng web: K6 là cơng cụ tốt để thử nghiệm ứng dụng web
nhưng nó khơng phải là công cụ phù hợp để thử nghiệm ứng dụng máy tính để
bàn.

16


4.4

Cài đặt

K6.io phát hành các gói cài đặt và sử dụng trên rất nhiều hệ điều hành, hệ thống
như linux, mac, window, docker….

Linux (Debian/Ubuntu)
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys
C5AD17C747E3415A3642D57D77C6C491D6AC1D69
$ echo "deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list
$ sudo apt-get update
$ sudo apt-get install k6

Mac (brew)
Sử dụng brew
$ brew install k6

Windows (MSI installer)
$ Download the k6 installer: />
Nếu bạn dùng Chocolatey package manager . Bạn có thể cài đặt k6 bằng cách sau:
$ choco install k6


Kiểm tra version
Để xem cài đặt thành công k6 hay chưa dùng lệnh:
$ k6 version
# k6 v0.31.1 (2021-03-17T13:23:23+0000/e9d8349, go1.15.8, linux/amd64)
17


5 Kiểm tra độ chịu tải với K6
Running k6
Vì k6 sử dụng file javascript để chạy test nên khá dễ dàng tiếp cận. Chúng ta tạo
một file với tên homepage.js đơn giản :
Tiến hành chạy test:
$ k6 run homepage.js
Hoặc chạy với docker:
docker run -i loadimpact/k6 run - sau khi chạy xong k6 sẽ tổng hợp số liệu như sau:
data_received..............: 148 MB 2.5 MB/s
data_sent..................: 1.0 MB 17 kB/s
http_req_blocked...........: avg=1.92ms min=1µs
p(90)=11µs p(95)=17µs

med=5µs

max=288.73ms

http_req_connecting........: avg=1.01ms min=0s
p(90)=0s
p(95)=0s


med=0s

max=166.44ms

http_req_duration..........: avg=143.14ms min=112.87ms med=136.03ms
max=1.18s p(90)=164.2ms p(95)=177.75ms
http_req_receiving.........: avg=5.53ms min=49µs
p(90)=9.25ms p(95)=11.8ms

med=2.11ms max=1.01s

http_req_sending...........: avg=30.01µs min=7µs
p(90)=48µs p(95)=63µs

med=24µs

http_req_tls_handshaking...: avg=0s
p(90)=0s
p(95)=0s

med=0s

18

min=0s

max=1.89ms
max=0s



http_req_waiting...........: avg=137.57ms min=111.44ms med=132.59ms
max=589.4ms p(90)=159.95ms p(95)=169.41ms
http_reqs..................: 13491 224.848869/s
iteration_duration.........: avg=445.48ms min=413.05ms med=436.36ms max=1.48s
p(90)=464.94ms p(95)=479.66ms
iterations.................: 13410 223.498876/s
vus........................: 100

min=100 max=100

vus_max....................: 100 min=100 max=100

Đây chỉ là 1 case đơn giản. Trên thực tế thì phức tạp hơn trong thực tế thì user
thường tương tác với Server theo một kịch bản chứ không chỉ đơn thuần là gửi
request, hay số lượng user sẽ tăng lên hay giảm đi.

Stages: ramping up/down VUs
Bạn cũng có thể tăng và giảm số lượng VUs trong quá trình kiểm tra. Chúng ta có
thể config ở options.stages
import http from 'k6/http';
import { sleep } from 'k6';

export let options = {
stages: [
{ duration: '2m', target: 100 }, // below normal load
{ duration: '5m', target: 100 },
{ duration: '2m', target: 200 }, // normal load
{ duration: '5m', target: 200 },
{ duration: '2m', target: 300 }, // around the breaking point
19



{ duration: '5m', target: 300 },
{ duration: '2m', target: 400 }, // beyond the breaking point
{ duration: '5m', target: 400 },
{ duration: '10m', target: 0 }, // scale down. Recovery stage.
],
};

export default function() {
http.get('');
sleep(1);
}

Ở đây thì mình có tăng số lượng user (target) lên dần dần và thời gian (duration)
cũng tăng dần dần và đột ngột giảm user về 0 nhắm kiểm tra độ chịu tải của server
(Stress Test)

Results visualization với Cloud k6
k6.io cũng cung cấp cho chúng ta cloud để thực hiện việc test và kiểm tra kết quả
bằng hình ảnh trực quan, hoặc bạn cũng có thể chạy test dưới local sau đó stream
result lên k6 Cloud.
k6.io cho người dùng dùng thử chỉ bằng cách đăng ký tài khoản bằng gmail hoặc
github. Với mỗi tài khoản, người dùng có thể thực hiện miễn phí 50 lượt test. Ngồi
ra cịn giới hạn những thơng số cấu hình cho các loại test. Ở đây mình sử dụng
gmail để đăng nhập.
Đây là giao diện dashboard khi đăng nhập xong. Ở giao diện này, sẽ có 2 lựa chọn
để tạo test là Test builder và Script editor.

20



Test builder cho phép chúng ta tạo test bằng giao diện trực quan, còn Script
editor cho phép chúng ta tạo các đoạn script bằng js và chạy trên nền cloud.

Script editor
Đợi sau khi chạy xong ta sẽ có giao diện sau, cũng là giao diện cuối khi hoàn thành
test:

21


Ở giao diện này, ta có thể thấy được rất nhiều các thông số như các biểu đồ về VUs,
request, hiển thị lỗi, metrics… Như ở đây mình thấy với 40 user hoạt động cùng lúc
trong vịng 5s thì website vẫn khơng vấn đề gì và hoạt động bình thường .

Cloud tests from the CLI
Chúng ta cũng có thể chạy test trên local thông qua CLI và upload kết quả đó lên
cloud để có thể theo dõi trực quan hơn băng biểu đồ, hình ảnh do cloud cung cấp.
Đầu tiên phải đăng nhâp k6 cloud từ cli:
Đăng nhập bằng username và password:
$ k6 login cloud

Đăng nhập bằng API Token:
$ k6 login cloud --token <YOUR_K6_CLOUD_API_TOKEN>

Để lấy được API Token sau khi đăng nhập chúng ta có thể
vào để lấy.
22



Chạy kịch bản test trên local và stream lên cloud k6:
$ k6 cloud script.js

Sau khi chạy xong sẽ có 1 số thông tin và 1 đường dẫn url đến trang xem kết quả
test trên cloud (output):
|‾‾| /‾‾/ /‾/

/\
/\ / \

| |_/ / / /

/ \/

\

|

/

\ | |‾\ \ | (_) |

| / ‾‾\

/ __________ \ |__| \__\ \___/ .io

execution: cloud
script: script.js
output: />

Bạn có thể điều hướng đến url đó để xem kết quả test một cách trực quan:

23


Results output
Sau khi chay test local xong bạn sẽ thấy các thông số này:
data_received..............: 148 MB 2.5 MB/s
data_sent..................: 1.0 MB 17 kB/s
http_req_blocked...........: avg=1.92ms min=1µs
p(95)=17µs

med=5µs

max=288.73ms p(90)=11µs

http_req_connecting........: avg=1.01ms min=0s
p(95)=0s

med=0s

max=166.44ms p(90)=0s

http_req_duration..........: avg=143.14ms min=112.87ms med=136.03ms max=1.18s
p(95)=177.75ms
http_req_receiving.........: avg=5.53ms min=49µs
p(95)=11.8ms

med=2.11ms max=1.01s


http_req_sending...........: avg=30.01µs min=7µs
p(95)=63µs

med=24µs

http_req_tls_handshaking...: avg=0s

med=0s

min=0s

p(90)=164.2ms

p(90)=9.25ms

max=1.89ms p(90)=48µs
max=0s

p(90)=0s

http_req_waiting...........: avg=137.57ms min=111.44ms med=132.59ms max=589.4ms
p(90)=159.95ms p(95)=169.41ms
http_reqs..................: 13491 224.848869/s
24

p(95)=0s


iteration_duration.........: avg=445.48ms min=413.05ms med=436.36ms max=1.48s
p(90)=464.94ms p(95)=479.66ms

iterations.................: 13410 223.498876/s
vus........................: 100 min=100 max=100
vus_max....................: 100 min=100 max=100

Mỗi thơng số http_req đều có các thông số (avg, min. max, med, p(90), p(95))
http_req_blocked: Thời gian VU dành để chờ được phân bổ kết nối TCP từ nhóm
kết nối.
http_req_connecting: Thời gian VU dành để thiết lập kết nối TCP đến máy chủ từ
xa
http_req_duration: Thời gian thực hiện tra cứu DNS.
http_req_receiving: Thời gian nhận được trả lời từ máy chủ từ xa.
http_req_sending: Thời gian dành để truyền các yêu cầu HTTP đến máy chủ từ xa.
http_req_tls_handshaking: thời gian máy khách và máy chủ, xác nhận lẫn nhau và
bắt đầu giao tiếp
http_req_waiting: Thời gian chờ đợi phản hồi trở lại từ máy chủ từ xa (sau khi đã
gửi yêu cầu).
http_reqs: Tổng số yêu cầu HTTP được thực hiện trong toàn bộ thử nghiệm
iteration_duration: Tổng thời gian cho yêu cầu. (http_req_sending +
http_req_waiting + http_req_receiving)
iterations: Tổng số lần tất cả các VU trong thử nghiệm được quản lý để chạy qua
hàm default ().
vus: Có bao nhiêu VU thử nghiệm được cấu hình để mơ phỏng.
25


×