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

Đồ án tìm hiểu về k6 và vận hành trên docker swarm

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 (1.59 MB, 54 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM


BÁO CÁO ĐỒ ÁN

ĐỒ ÁN 1
ĐỀ TÀI: TÌM HIỂU VỀ K6 VÀ VẬN HÀNH TRÊN
DOCKER SWARM

Giảng viên hướng dẫn:
ThS. Nguyễn Công Hoan
Sinh viên thực hiện:
Nguyễn Huỳnh Bảo Quốc

20520292

La Thanh Huy

20520539

TP. HỒ CHÍ MINH, THÁNG 07 NĂM 2023


LỜI CẢM ƠN
Đầu tiên nhóm chúng em xin chân thành cảm ơn thầy Nguyễn Cơng Hoan vì
sự hướng dẫn nhiệt tình và kĩ lưỡng của cơ trong suốt q trình xây dựng và hoàn
thiện sản phẩm.
Trong khoảng thời gian 19 tuần, thơng qua q trình tìm hiểu và nghiên cứu,
chúng em đã tiếp thu được những kiến thức quan trọng, bổ ích cùng những góp ý


chân thành để có thể làm được một đồ án hoàn chỉnh. Suốt thời gian ấy, chúng em
cũng đã học hỏi được thêm nhiều kiến thức, kinh nghiệm và phần nào đó hình
dung được mục đích và cách thức sử dụng các cơng cụ kiểm thử hiệu năng của hệ
thống phần mềm.
Trong thời đại công nghệ hiện đại, việc kiểm tra và đảm bảo hiệu suất của các
ứng dụng và hệ thống trở nên cực kỳ quan trọng. Đối với các nhà phát triển và
quản trị hệ thống, có nhiều cơng cụ hỗ trợ để thực hiện kiểm tra hiệu suất và tải
nhanh. Bên cạnh đó, việc triển khai ứng dụng phân tán trong phát triển phần mềm
cũng vô cùng quan trọng. Trong đề tài này, chúng em sẽ tiến hành tìm hiểu về hai
cơng cụ phổ biến là K6 và Docker Swarm.
Trong suốt quá trình xây dựng phần mềm nhóm chúng em khơng thể tránh
khỏi những sai sót, rất mong nhận được sự thơng cảm và góp ý chân thành từ các
thầy cơ. Chúng em xin chân thành cảm ơn!


MỤC LỤC
TÓM TẮT ĐỒ ÁN ............................................................................................................. 1
CHƯƠNG 1. MỞ ĐẦU ..................................................................................................... 3
1.1 Lý do chọn đề tài ...................................................................................................... 3
1.2 Phạm vi đề tài ........................................................................................................... 3
1.3 Mục tiêu đề tài.......................................................................................................... 3
CHƯƠNG 2. TỔNG QUAN ............................................................................................. 5
2.1 Phân tích đánh giá đề tài......................................................................................... 5
2.2 Vấn đề còn tồn tại .................................................................................................... 5
2.3 Hướng giải quyết vấn đề ......................................................................................... 6
CHƯƠNG 3. NGHIÊN CỨU ĐỀ TÀI ............................................................................. 7
3.1 K6 .............................................................................................................................. 7
3.1.1 K6 là gì ? ............................................................................................................ 7
3.1.2 Cài đặt và cấu hình ........................................................................................... 8
3.1.3 Cú pháp và Skript .......................................................................................... 10

3.1.4 Ưu điểm và nhược điểm của K6 .................................................................... 15
3.2 Docker Swarm........................................................................................................ 15
3.2.1 Khởi đầu với Docker Swarm ......................................................................... 15
3.2.2 Triển khai ứng dụng trên Docker Swarm .................................................... 20
3.2.3 Quản lý Swarm và kiểm soát tài nguyên ...................................................... 22
3.2.4 Service và task trong Docker Swarm ........................................................... 25
3.2.5 Tính năng của Docker Swarm ....................................................................... 26
3.2.5 Ưu điểm và nhược điểm của Docker Swarm ............................................... 29
3.3 Triển khai K6 trên Docker Swarm ...................................................................... 29
3.3.1 Viết Script kiểm thử có tên file test.js ........................................................... 30
3.3.2 Tạo docker image ........................................................................................... 30
3.3.3 Chạy Docker Image ........................................................................................ 30
3.3.4 Tạo Docker Swarm Cluster ........................................................................... 31
3.3.5 Triển khai test.js file K6 dưới dạng Service trong Docker Swarm ............ 32


3.3.6 . Quan sát kết quả .......................................................................................... 32
3.4 Vận hành K6 trên Docker Swarm ....................................................................... 32
3.4.1 Thiết lập và quản lý số lượng container K6 ................................................. 32
3.4.2 Giám sát hiệu suất và lưu lượng của K6 ...................................................... 33
CHƯƠNG 4. KẾT QUẢ NGHIÊN CỨU ...................................................................... 34
4.1 Chạy và phân tích kết quả K6 trên Docker Swarm ........................................... 34
4.1.1 Chạy Skript K6 ............................................................................................... 34
4.1.2 Thu thập và phân tích kết quả ...................................................................... 35
4.1.3 Đánh giá hiệu suất tối ưu hóa ........................................................................ 36
CHƯƠNG 5. SO SÁNH VÀ KẾT LUẬN ...................................................................... 40
5.1 So sánh K6 với các phần mềm kiểm thử hiệu năng khác .................................. 40
5.1.1 Các phần mềm tương tự ................................................................................ 40
5.1.2 So sánh K6 và Jmeter ..................................................................................... 41
5.2 So sánh Docker Swarm với những phần mềm tương tự .................................... 44

5.2.1 Các phần mềm tương tự ................................................................................ 44
5.2.2 So sánh Docker Swarm với Kubernetes ....................................................... 44
5.3 Khả năng vận hành của K6 trên Docker Swarm ............................................... 47
5.3.1 Nhận xét ........................................................................................................... 47
5.3.2 Kết luận ........................................................................................................... 47
CHƯƠNG 6. HƯỚNG PHÁT TRIỂN........................................................................... 47
6.1 Khả năng mở rộng của Docker Swarm ............................................................... 47
6.2 Thực hiện các thử nghiệm hiệu suất và tải trên Docker Swarm ....................... 47
6.3 Tối ưu hóa hiệu suất của Docker Swarm và K6 ................................................. 48
6.4 Tích hợp với các cơng cụ khác.............................................................................. 48
6.5 Đánh giá sự ổn định và độ tin cậy của Docker Swarm và K6 ........................... 48
6.6 So sánh Docker Swarm với các công nghệ khác ................................................. 48
TÀI LIỆU THAM KHẢO............................................................................................... 49


TÓM TẮT ĐỒ ÁN
Vấn đề nghiên cứu
Vấn đề nghiên cứu trong đề tài này là tìm hiểu về K6 và cách vận hành trên Docker
Swarm. K6 là một công cụ mã nguồn mở được sử dụng để kiểm thử hiệu năng ứng
dụng và hệ thống. Nó cung cấp khả năng mơ phỏng tải cơng việc và phân tích hiệu
năng chi tiết của các ứng dụng web và API. Docker Swarm là một công cụ quản lý
và triển khai ứng dụng dựa trên Docker, cho phép tổ chức các container vào trong
các nhóm và vận hành chúng trên nhiều máy tính vật lý hoặc ảo hóa.
Các hướng tiếp cận
Để nghiên cứu vấn đề này, chúng ta sẽ tiến hành các bước sau:
• Tìm hiểu về K6: Nghiên cứu các khái niệm cơ bản về K6, cách cài đặt và
cấu hình, cú pháp scripting, và các tính năng chính của cơng cụ này.
• Tìm hiểu về Docker Swarm: Nghiên cứu cách cài đặt và cấu hình Docker
Swarm, tạo và quản lý các service, khái niệm về overlay network và load
balancing trong Swarm.

• Kết hợp K6 với Docker Swarm: Tìm hiểu cách triển khai K6 trên Docker
Swarm để có thể mơ phỏng lưu lượng tải lớn và phân tán trên nhiều
container. Xác định cách chạy các bài kiểm tra hiệu năng K6 trên Swarm
và thu thập kết quả.
Cách giải quyết vấn đề
Để giải quyết vấn đề, ta sẽ thực hiện các bước sau:
• Cài đặt và cấu hình K6: Cài đặt K6 trên máy tính và cấu hình các thơng số
cần thiết cho việc kiểm thử hiệu năng.

1


• Cài đặt và cấu hình Docker Swarm: Cài đặt Docker Swarm và thiết lập các
máy chủ thành nút Swarm để có thể triển khai các container và quản lý tải
trên Swarm.
• Triển khai K6 trên Docker Swarm: Tạo Docker image cho K6 và triển khai
nó trên Docker Swarm. Xác định cách chạy các bài kiểm tra hiệu năng K6
trên Swarm, sử dụng tính năng scale và load balancing của Swarm để mơ
phỏng lưu lượng tải lớn.
• Thu thập và phân tích kết quả: Thu thập kết quả từ việc chạy các bài kiểm
tra hiệu năng và phân tích chúng để đánh giá hiệu năng ứng dụng và hệ
thống.
Một số kết quả đạt được
Thông qua nghiên cứu này, chúng ta sẽ đạt được các kết quả sau
• Hiểu rõ về K6 và cách sử dụng nó để kiểm thử hiệu năng ứng dụng và hệ
thống.
• Hiểu về Docker Swarm và khả năng triển khai và vận hành ứng dụng trên
nền tảng Swarm.
• Triển khai thành cơng K6 trên Docker Swarm và chạy các bài kiểm tra
hiệu năng trên môi trường phân tán.

• Thu thập và phân tích kết quả từ việc chạy các bài kiểm tra hiệu năng, từ
đó đánh giá được hiệu năng của ứng dụng và hệ thống trong mơi trường
phân tán.
Tóm lại, nghiên cứu này tập trung vào việc tìm hiểu về K6 và cách vận hành trên
Docker Swarm. Qua đó, chúng ta sẽ có cái nhìn tổng quan về việc kiểm thử hiệu
năng và triển khai ứng dụng trên môi trường phân tán.

2


CHƯƠNG 1. MỞ ĐẦU
1.1 Lý do chọn đề tài
Theo xu hướng phát triển phần mềm hiện nay, việc xây dựng một phần mềm hồn
chỉnh khơng chỉ gói gọn trong các yếu tố cơ bản như tính năng, giao diện, khả năng
mở rộng,… mà cịn phải kiểm tra sự sai sót và hiệu năng của sản phẩm. Trong đó,
khả năng chịu tải cũng là một vấn đề cần đang lưu tâm, qua đó vai trị của các tester
trở nên quan trọng. Nhận thấy nhu cầu sử dụng và sự cần thiết của các công nghệ
như trên đối với sự phát triển của phần mềm, nhóm chúng em quyết định lựa chọn
và nghiên cứu đề tài “Tìm hiểu về K6 và vận hành trên Docker Swarm”.
1.2 Phạm vi đề tài
• Tìm hiểu về K6: Đề tài sẽ bao gồm việc tìm hiểu về K6, một công cụ mã
nguồn mở được sử dụng rộng rãi để kiểm tra hiệu suất và độ tin cậy của
ứng dụng web. Quá trình nghiên cứu K6 bao gồm: cách cài đặt, cấu hình,
cú pháp và skript của K6, cùng với cách chạy và phân tích kết quả.
• Tìm hiểu về Docker Swarm: Đề tài cũng sẽ tập trung vào việc tìm hiểu về
Docker Swarm, một cơng cụ quản lý cụm Docker, cho phép triển khai và
quản lý ứng dụng dựa trên container trong môi trường phân tán. Quá trình
nghiên cứu Docker Swarm bao gồm: cách cài đặt, triển khai ứng dụng và
quản lý cụm Swarm.
1.3 Mục tiêu đề tài

Trong đề tài lần này, nhóm chúng em hướng đến 4 mục tiêu chính sau:
• Hiểu rõ về K6 và Docker Swarm: Mục tiêu chính là tìm hiểu sâu về K6 và
Docker Swarm, bao gồm cách cài đặt, cấu hình và sử dụng các tính năng
chính của hai cơng cụ này.
• Áp dụng K6 để kiểm tra hiệu suất: Mục tiêu là sử dụng K6 để tạo và thực
thi các tải cơng việc, thu thập và phân tích kết quả để đánh giá hiệu suất
của ứng dụng.

3


• Áp dụng Docker Swarm để triển khai ứng dụng: Mục tiêu là sử dụng
Docker Swarm để triển khai và quản lý ứng dụng trên môi trường phân tán,
tận dụng tính năng mở rộng và đảm bảo sự ổn định của hệ thống.
• So sánh và đánh giá: Mục tiêu cuối cùng là so sánh K6 và Docker Swarm,
đánh giá ưu điểm và hạn chế của mỗi công cụ, và xem xét sự phù hợp và
sử dụng của chúng trong các trường hợp khác nhau.

4


CHƯƠNG 2. TỔNG QUAN
2.1 Phân tích đánh giá đề tài
Trong lĩnh vực tìm hiểu về K6 và vận hành trên Docker Swarm, đã có một số
nghiên cứu và bài viết từ các tác giả trong và ngoài nước. Các nghiên cứu này
tập trung vào các khía cạnh sau:
• Có nhiều bài viết và tài liệu giới thiệu về K6, cung cấp hướng dẫn cài đặt,
cấu hình và sử dụng cơ bản của công cụ này. Một số tác giả đã đề cập đến
cách viết các kịch bản (scripts) kiểm thử hiệu năng sử dụng ngôn ngữ hợp
lý và các phương pháp kiểm thử khác nhau. Tuy nhiên, chưa có nghiên cứu

đáng kể tập trung vào khả năng tích hợp K6 với mơi trường triển khai phân
tán như Docker Swarm.
• Có nhiều tài liệu và bài viết giới thiệu về Docker Swarm, cung cấp hướng
dẫn cài đặt, cấu hình và triển khai ứng dụng trên môi trường Swarm. Tuy
nhiên, các tài liệu này thường tập trung vào các khái niệm cơ bản và các
bước cài đặt đơn giản. Chưa có nghiên cứu sâu hơn về cách vận hành ứng
dụng trên Swarm và kết hợp với công cụ kiểm thử hiệu năng như K6.
2.2 Vấn đề còn tồn tại
Tuy các tài liệu và bài viết đã giới thiệu cũng như nêu khái quát các chức năng
cơ bản của K6 và Docker Swarm, nhưng vẫn còn một số vấn đề chưa được tập
trung nghiên cứu đầy đủ. Một số vấn đề còn tồn tại bao gồm:
• Hiệu năng và khả năng mở rộng của K6 trên Docker Swarm: Chưa có
nghiên cứu chi tiết về khả năng mở rộng và hiệu năng của K6 khi triển khai
trên mơi trường Docker Swarm. Điều này có thể bao gồm khả năng xử lý
lượng kết nối đồng thời lớn, khả năng scale ứng dụng và khả năng phân tán
tải trên các container.
• Tối ưu hóa hiệu năng khi sử dụng K6 trên Docker Swarm: Chưa có nghiên
cứu tập trung vào cách tối ưu hóa hiệu năng khi chạy các bài kiểm tra hiệu
5


năng K6 trên Docker Swarm. Việc tối ưu hóa này có thể liên quan đến
cách triển khai và cấu hình Swarm, cũng như việc tối ưu hóa cấu hình và
quy trình chạy bài kiểm tra hiệu năng.
2.3 Hướng giải quyết vấn đề
Để giải quyết các vấn đề còn tồn tại, đề tài cần tập trung vào các mục tiêu sau:
• Đánh giá hiệu năng và khả năng mở rộng của K6 trên Docker Swarm:
Nghiên cứu khả năng xử lý và mở rộng của K6 trên Swarm bằng cách triển
khai các bài kiểm tra hiệu năng và đo lường hiệu năng của hệ thống trong
mơi trường phân tán.

• Tối ưu hóa hiệu năng khi sử dụng K6 trên Docker Swarm: Nghiên cứu và
đề xuất các phương pháp tối ưu hóa hiệu năng khi chạy các bài kiểm tra
hiệu năng K6 trên Swarm, bao gồm tối ưu hóa cấu hình và quy trình chạy
bài kiểm tra.
• Xây dựng hướng dẫn và tài liệu thực hành: Xây dựng các hướng dẫn và tài
liệu thực hành chi tiết về việc sử dụng K6 trên Docker Swarm, giúp người
dùng có thể triển khai và kiểm thử hiệu năng ứng dụng một cách hiệu quả
trên môi trường phân tán.

6


CHƯƠNG 3. NGHIÊN CỨU ĐỀ TÀI
3.1 K6
3.1.1 K6 là gì ?
3.1.1.1 Định nghĩa
K6 là một công cụ mã nguồn mở và dễ sử dụng được sử dụng để kiểm tra hiệu năng
ứng dụng và hệ thống. Nó được viết bằng ngôn ngữ JavaScript và chạy trên môi
trường Node.js. K6 cho phép bạn tạo và thực thi các kịch bản kiểm tra hiệu năng, đo
lường thời gian phản hồi của các yêu cầu mạng và phân tích các kết quả thu được.
Trong báo cáo này, chúng ta sẽ tìm hiểu về cài đặt, cấu hình, cú pháp và cách chạy
K6, cũng như phân tích kết quả và đánh giá hiệu suất tối ưu hóa.

Hình 3.1 Giới thiệu K6

3.1.1.2 Lịch sử hình thành và phát triển
- Vào năm 2000, với cuộc khủng hoảng Y2K, hai nhà sáng lập đang làm việc
trên một MMORPG. Với mục tiêu hỗ trợ hàng trăm người chơi đồng thời, nhu
cầu về một số thử nghiệm tải sớm đã nảy sinh. Họ đã chọn mở một tổ chức
tư vấn để hỗ trợ các tổ chức trong việc thử tải. Khách hàng đáng chú ý nhất

trong thời đại này là Cơ quan Vũ trụ Châu u, nơi mà họ đã thử nghiệm các
mạng vệ tinh IP.
7


-

Đến năm 2008 sau nhiều năm tư vấn, họ đã có những bước đầu thành cơng
nhất định. Khái niệm “điện tốn đám mây” đã xuất hiện và đưa cơng cụ thử
nghiệm tải mà họ tạo ra thị trường đã trở thành một mơ hình kinh doanh khả
thi. Ban đầu, trọng tâm là thử nghiệm trang web - DevOps vẫn là một khái
niệm chỉ mới được đặt ra gần đây.

-

Năm 2016, Bert và nhóm LoadImpact bắt đầu làm việc trên một công cụ kiểm
tra tải mã nguồn mở mới.

-

Vào năm 2017 k6 ban đầu được phát hành trên GitHub bởi Load Impact như
một giải pháp thay thế mã nguồn mở cho phần mềm độc quyền trước đây của
công ty.

-

Năm 2020, K6 chính thức giới thiệu K6 Cloud, một dịch vụ đám mây được
quản lý với các khả năng bổ sung.

-


Tháng 6 năm 2021, họ được được Grafana Labs mua lại. Điều đó đã cung cấp
cho các nhóm kỹ sư những cơng cụ tốt hơn để xây dựng các ứng dụng đáng tin
cậy.

3.1.2 Cài đặt và cấu hình
3.1.2.1 Yêu cầu hệ thống
Trước khi cài đặt và cấu hình K6, hãy đảm bảo rằng hệ thống của bạn đáp ứng các
yêu cầu sau:
-

Hệ điều hành: K6 có thể chạy trên Windows, macOS và Linux.

-

Phiên bản Node.js: K6 yêu cầu phiên bản Node.js 10.x trở lên.

-

Bộ nhớ: Cần có ít nhất 2GB bộ nhớ RAM.

3.1.2.2 Cài đặt K6
Để cài đặt K6, bạn có thể làm theo các bước sau:
-

B1: Truy cập trang web chính thức của K6 tại />
-

B2: Tải xuống phiên bản K6 phù hợp với hệ điều hành của bạn.


-

B3: Cài đặt K6 theo hướng dẫn cụ thể cho từng hệ điều hành.

8


+ Trên Windows: Mở tệp tin cài đặt (.msi) và làm theo hướng dẫn trên màn
hình.
+ Trên macOS: Mở tệp tin cài đặt (.dmg), kéo biểu tượng K6 vào thư mục
Applications và làm theo hướng dẫn trên màn hình.
+ Trên Linux: Giải nén tệp tin tải xuống, di chuyển vào thư mục được chọn và
thiết lập biến môi trường PATH để truy cập vào K6.
Sau khi hoàn thành cài đặt, bạn có thể kiểm tra phiên bản K6 đã cài đặt bằng cách
mở cửa sổ dòng lệnh “k6 version” để kiểm tra phiên bản K6 hiện tại, nếu hiển thị
nghĩa là tải thành cơng.

Hình 3.2 Phiên bản K6

3.1.2.3 Cấu hình mơi trường
Cấu hình tệp script
-

Sử dụng tùy chọn --script hoặc -s để chỉ định tệp script K6.

-

Ví dụ: k6 run --script=script.js

Cấu hình số lượng Virtual User (VUs)

-

Sử dụng tùy chọn --vus để chỉ định số lượng VUs cần mơ phỏng.

-

Ví dụ: k6 run --vus=100 script.js

Cấu hình thời gian chạy (duration)
-

Sử dụng tùy chọn --duration để chỉ định thời gian chạy của kịch bản.

-

Ví dụ: k6 run --duration=5m script.js

Cấu hình tham số môi trường
-

Sử dụng tùy chọn --env để đặt các giá trị tham số mơi trường.

-

Ví dụ: k6 run --env ENV_VAR=value script.js

Cấu hình InfluxDB và Grafana
-

K6 tích hợp tốt với InfluxDB và Grafana để lưu trữ và hiển thị dữ liệu về hiệu

suất.

9


-

Sử dụng các biến môi trường K6_INFLUXDB_... và K6_GRAFANA_... để
cấu hình kết nối với InfluxDB và Grafana.

Cấu hình yêu cầu HTTP/HTTPS
-

Sử dụng các hàm và phương thức có sẵn trong script K6 để cấu hình yêu cầu
HTTP/HTTPS.

-

Thiết lập URL, phương thức, header, body và các tùy chọn khác cho yêu cầu.

-

Xem tài liệu chi tiết về cú pháp và các tùy chọn cấu hình yêu cầu trong script
K6.

Cấu hình ghi log
-

Sử dụng tùy chọn --log-output để chỉ định nơi ghi log của K6.


-

Ví dụ: k6 run --log-output=console script.js (ghi log ra console)

Cấu hình trạng thái đầu ra
-

Sử dụng tùy chọn --summary-export và --summary-trend-stats để xuất và hiển
thị trạng thái đầu ra của K6.

-

Ví dụ: k6 run --summary-export=results.json --summarytrendstats=avg,response_time script.js

3.1.3 Cú pháp và Skript
3.1.3.1 Cấu trúc cơ bản của một Skript K6
- Một Skript K6 có thể được viết bằng JavaScript hoặc TypeScript và được chia
thành các phần như: imports, exports, và functions.
-

Phần imports được sử dụng để import các thư viện và module cần thiết.

-

Phần exports chứa các hàm hoặc biến mà bạn muốn xuất ra ngoài để sử dụng ở
các Skript khác.

-

Phần functions chứa các hàm thực hiện các tác vụ cụ thể trong Skript.


3.1.3.2 Các hàm chính và vịng đời của K6
GIAI ĐOẠN MỤC ĐÍCH
VÍ DỤ

CÁCH GỌI

Setup

setup() { ... }

Chuẩn bị các thiết lập ban

Thiết lập các biến môi

đầu cho bài kiểm tra.

trường, khởi tạo phiên
10


bản, chuẩn bị dữ liệu
ban đầu.
Init

Khởi tạo và cấu hình các

Thiết lập và cấu hình

yếu tố kiểm tra như yêu cầu yêu cầu HTTP, thiết lập

HTTP, kết nối cơ sở dữ

export function
setup() { ... }

kết nối cơ sở dữ liệu.

liệu, etc.
Vuser

Tạo và điều khiển người

Tạo người dùng ảo với

export default

dùng ảo (virtual users)

các hoạt động như đăng

function () { ...

trong bài kiểm tra.

nhập, thao tác trên giao

}

diện, etc.
Action


Thực hiện các hành động

Gửi yêu cầu HTTP, thao

http.get(),

và hoạt động cần kiểm tra.

tác cơ sở dữ liệu, thực

http.post(),

hiện tính tốn phức tạp,

db.query(), ...

etc.
Teardown

Dọn dẹp và giải phóng tài

Đóng kết nối cơ sở dữ

teardown() { ...

nguyên sau khi kết thúc bài

liệu, xóa dữ liệu tạm


}

kiểm tra.

thời, giải phóng bộ nhớ.

3.1.3.3 Xử lý kết quả và báo cáo
K6 cung cấp các hàm và cú pháp để xử lý kết quả và tạo báo cáo trong quá trình
thực thi kịch bản. Dưới đây là một số hàm và đối tượng phổ biến:
-

Hàm ‘console.log()’ được sử dụng để ghi lại các thông tin và kết quả từ bài
kiểm tra, như thời gian phản hồi, mã trạng thái, và thông tin tùy chỉnh khác.

11


Hình 3.3 Ví dụ hàm console.log

-

Hàm ‘check()’ được sử dụng để kiểm tra một điều kiện và ghi lại kết quả kiểm
tra. Với check(), bạn có thể kiểm tra mã trạng thái của phản hồi HTTP, nội
dung phản hồi, thời gian phản hồi, hoặc bất kỳ điều kiện nào khác và ghi lại
kết quả kiểm tra. K6 sẽ tính tốn số lượng yêu cầu thành công và thất bại dựa
trên các kết quả kiểm tra này.

Hình 3.4 Ví dụ hàm check

-


Hàm sleep(): Hàm này được sử dụng để tạm dừng thực thi bài kiểm tra trong
một khoảng thời gian nhất định. Nó có thể được sử dụng để điều chỉnh tần suất
của các yêu cầu hoặc tạo ra các giao dịch giữa các u cầu.

Hình 3.5 Ví dụ hàm sleep

-

Hàm ‘group()’ được sử dụng để nhóm các bước thực hiện trong một khối và
ghi lại kết quả của khối đó. Bằng cách sử dụng group(), bạn có thể nhóm các
yêu cầu liên quan, đo thời gian thực hiện của một nhóm u cầu hoặc ghi lại
bất kỳ thơng tin nào mà bạn muốn theo dõi.
12


Hình 3.6 Ví dụ hàm group

-

Đối tượng ‘summary’ chứa các thơng tin thống kê về q trình thực thi kịch
bản. Bạn có thể truy cập các thơng tin như thời gian thực thi tổng cộng, thời
gian trung bình cho mỗi yêu cầu, số lượng yêu cầu thành công, số lượng yêu
cầu thất bại, tỷ lệ thành công, ...

13


Hình 3.7 Ví dụ đối tượng summary và hàm handleSummary


-

Đối tượng ‘trend’ chứa thông tin thống kê về sự thay đổi của các chỉ số trong
quá trình thực thi kịch bản. Có thể sử dụng trend để theo dõi các chỉ số như
thời gian phản hồi, số yêu cầu thành cơng, số u cầu thất bại theo thời gian.

Hình 3.8 Ví dụ đối tượng trend

14


3.1.4 Ưu điểm và nhược điểm của K6

Ưu điểm
• Dễ sử dụng: K6 có cú pháp đơn giản và dễ hiểu, điều này làm cho việc tạo ra
và chạy các bài kiểm tra hiệu năng trở nên dễ dàng hơn cho người dùng.
• Giao diện dịng lệnh: K6 có giao diện dịng lệnh linh hoạt, cho phép bạn tự
động hóa và tích hợp các bài kiểm tra hiệu năng vào quy trình CI/CD hoặc
hệ thống triển khai tự động.
• Hỗ trợ đa ngôn ngữ: K6 hỗ trợ nhiều ngôn ngữ lập trình như JavaScript và
TypeScript, giúp người dùng dễ dàng tạo ra các kịch bản thử nghiệm hiệu
năng linh hoạt
• Tích hợp dễ dàng: K6 có thể dễ dàng tích hợp với các công cụ quản lý phiên
bản như Git và các dịch vụ triển khai như Docker.
Nhược điểm
• Hạn chế cho các kịch bản phức tạp: K6 thích hợp cho các bài kiểm tra hiệu
năng đơn giản, nhưng nó có thể gặp khó khăn khi xử lý các kịch bản phức
tạp hoặc có tải lớn.
• Hiệu suất CPU: K6 tiêu thụ một lượng CPU đáng kể, điều này có thể ảnh
hưởng đến hiệu suất tổng thể của máy chủ hoặc máy tính cá nhân khi chạy

các bài kiểm tra với tải lớn.
• Hỗ trợ cộng đồng: Mặc dù K6 có một cộng đồng người dùng đang phát triển,
nhưng nó khơng có sự hỗ trợ và tài liệu phong phú như các công cụ thử
nghiệm hiệu năng phổ biến khác như Apache JMeter hay Gatling.
• Khơng chạy được trực tiếp trên trình duyệt.
3.2 Docker Swarm
3.2.1 Khởi đầu với Docker Swarm
3.2.1.1 Docker Swarm là gì ?
Docker Swarm là một cơng cụ quản lý và triển khai ứng dụng phân tán trong mơi
trường Docker. Nó là một tính năng tích hợp sẵn trong Docker Engine, cho phép

15


người dùng tạo ra một cụm (cluster) các máy chủ Docker để chạy các ứng dụng
phân tán một cách đơn giản và hiệu quả.
Với Docker Swarm, người dùng có thể quản lý các ứng dụng phức tạp chạy trên
nhiều máy chủ Docker, xử lý tải trọng lớn và cung cấp tính sẵn sàng cao. Swarm
cung cấp khả năng tự động phân chia công việc và quản lý tài nguyên, đảm bảo rằng
các container được triển khai và chạy trên cụm Swarm một cách hiệu quả.
Một số đặc điểm và lợi ích của Docker Swarm bao gồm:
-

Tính dễ sử dụng: Docker Swarm sử dụng các lệnh và cấu hình quen thuộc của
Docker, làm cho việc triển khai và quản lý cụm Swarm trở nên dễ dàng và
thuận tiện cho người dùng.

-

Mở rộng linh hoạt: Swarm cho phép người dùng mở rộng cụm Docker bằng

cách thêm máy chủ Docker vào cụm một cách dễ dàng. Người dùng có thể điều
chỉnh kích thước cụm theo nhu cầu và đáp ứng tải trọng cao hơn.

-

Tính sẵn sàng cao: Swarm tự động phát hiện và khắc phục sự cố trên các nút
trong cụm, đảm bảo rằng ứng dụng vẫn hoạt động một cách liên tục và ổn định
ngay cả khi có sự cố xảy ra.

-

Quản lý tài nguyên: Swarm quản lý việc phân chia tài nguyên trên các máy chủ
trong cụm, đảm bảo rằng các container được triển khai và chạy trên các máy
chủ có sẵn tài nguyên đủ để hoạt động hiệu quả.

Docker Swarm cung cấp một giải pháp đơn giản và mạnh mẽ cho việc triển khai và
quản lý các ứng dụng phân tán trên Docker, giúp tăng tính linh hoạt, sẵn sàng cao
và khả năng mở rộng trong việc xây dựng hệ thống phân tán.

16


Hình 3.9 Docker và Docker Swarm

3.2.1.2 Lịch sử hình thành và phát triển
- Docker Swarm là một công cụ quản lý container mã nguồn mở, được phát triển
bởi Docker, Inc. Nó được giới thiệu lần đầu tiên vào năm 2014 như là một
phần của phiên bản Docker 1.12. Đây là một phần mềm mã nguồn mở, cho
phép người dùng quản lý các container Docker trên nhiều máy tính khác nhau
trong một cụm.

-

Sau khi được giới thiệu, Docker Swarm đã được cải tiến và phát triển liên tục.
Các phiên bản mới của nó đã được phát hành để cải thiện tính năng và tăng
cường độ bảo mật. Tuy nhiên, vào tháng 3 năm 2021, Docker, Inc. đã chính
thức thơng báo rằng họ sẽ ngừng phát triển Docker Swarm và tập trung vào
Kubernetes, một công cụ quản lý container mã nguồn mở khác. Tuy nhiên,
Docker Swarm vẫn là một phần mềm rất hữu ích và tiếp tục được sử dụng
trong một số dự án phân tán. Nó cung cấp các tính năng tương tự như
Kubernetes, nhưng với một hệ thống quản lý đơn giản hơn và ít tài nguyên hơn
để triển khai. Nếu bạn đang tìm kiếm một cơng cụ quản lý container đơn giản
mà vẫn mạnh mẽ, Docker Swarm là một lựa chọn tuyệt vời.

-

Về hoàn cảnh ra đời của Docker Swarm, phải kể đến Docker compose. Docker
compose là công cụ dùng để định nghĩa và run multi- container cho Docker
17


application. Tuy nhiên, Docker Compose chỉ áp dụng được trên một Docker
Host duy nhất, điều này tạo nên sự giới hạn về mặt cấu hình phần cứng mà hệ
thống Docker Host đó có thể cung cấp, khiến việc scale up khả năng xử lý dịch
vụ và gia tăng số lượng Docker Container tương ứng với dịch vụ đó trở nên
khó khăn.
-

Từ đó ra đời Orchestration. Orchestration là một thuật ngữ dùng để chỉ việc lên
lịch container, quản lý cụm và khả năng cung cấp các máy chủ bổ sung.
Container Orchestration là tất cả những việc quản lý vòng đời của container,

đặc biệt trong mơi trường lớn, có thể kể đến như:
+ Cung cấp và triển khai container.
+ Quản lý Cluster.
+ Mở rộng hoặc loại bỏ các containers để phân bố ứng dụng tải đồng đều
trên cơ sở hạ tầng máy chủ.
+ Di chuyển containers từ máy host này sang máy host khác nếu thiếu tài
nguyên trong máy host nào đó, hoặc nếu 1 host nào đó chết.
+ Phân bổ resources giữa các container.

-

Docker Swarm là một trong những giải pháp orchestration mã nguồn mở bên
cạnh Kubernetes, Apache Mesos, ... Nó hỗ trợ việc tạo và quản lý các container
hoặc các hệ thống Container Orchestration. Nó là một cluster nơi mà người
dùng quản lý các Docker Engines hoặc các node để deploy service và chạy.

Hình 3.10 Trước khi sử dụng Docker Swarm

18


Hình 3.11 Sau khi sử dụng Docker Swarm

3.2.1.3 Cài đặt Docker Swarm
Để cài đặt Docker Swarm, bạn cần cài đặt Docker Engine trên tất cả các máy chủ
tham gia vào cụm. Sau đó, bạn có thể chọn một máy chủ làm quản lý và khởi động
Swarm mode trên đó. Các máy chủ khác trong cụm sẽ làm các nút làm việc (worker
nodes). Dưới đây là các bước cơ bản để cài đặt Docker Swarm:
Cài đặt Docker trên tất cả các máy chủ
-


Đối với hệ điều hành Linux, bạn có thể sử dụng các bản phân phối như
Ubuntu, CentOS, hoặc Debian để cài đặt Docker Engine.

-

Đối với hệ điều hành Windows hoặc macOS, bạn có thể sử dụng Docker
Desktop để cài đặt Docker Engine.

Chọn một máy chủ làm quản lý và khởi động Swarm mode
-

Trên máy chủ được chọn, mở terminal hoặc command prompt và chạy lệnh sau
để khởi động Swarm mode:

$ docker swarm init
Sao chép thông tin kết nối của Swarm
-

Khi khởi động Swarm mode thành công, bạn sẽ nhận được một đoạn mã để sao
chép và chạy trên các máy chủ làm nút làm việc. Đoạn mã này bao gồm một
lệnh docker swarm join kèm theo các thông tin cần thiết.

Chạy lệnh join trên các máy chủ làm nút làm việc:
-

Trên mỗi máy chủ làm nút làm việc, mở terminal hoặc command prompt và
chạy lệnh join mà bạn đã sao chép từ bước trước:
19



$ docker swarm join --token <TOKEN> <MANAGER-IP>:<PORT>
3.2.1.4 Thiết lập mạng và cụm
Tạo mạng overlay (mạng chồng)
-

Mạng overlay là một mạng ảo trên cụm Swarm cho phép các container trên các
máy chủ khác nhau trong cụm giao tiếp với nhau. Bạn có thể tạo một mạng
overlay bằng lệnh sau:

$ docker network create -d overlay <NETWORK-NAME>
Kiểm tra danh sách các mạng trong cụm
-

Để kiểm tra danh sách các mạng trong cụm Swarm, bạn có thể chạy lệnh sau:

$ docker network ls
Triển khai dịch vụ trên cụm
-

Để triển khai một dịch vụ trên cụm Swarm, bạn cần tạo một tệp dockercompose.yml chứa cấu hình của dịch vụ và chạy lệnh sau:

$ docker stack deploy -c <DOCKER-COMPOSE-FILE> <STACK-NAME>
Kiểm tra danh sách các dịch vụ trong cụm
-

Để kiểm tra danh sách các dịch vụ đang chạy trong cụm Swarm, bạn có thể
chạy lệnh sau:

$ docker service ls

Kiểm tra trạng thái của một dịch vụ cụ thể
-

Để kiểm tra trạng thái của một dịch vụ cụ thể, bạn có thể chạy lệnh sau:

$ docker service ps <SERVICE-NAME>
3.2.2 Triển khai ứng dụng trên Docker Swarm
3.2.2.1 Đóng gói ứng dụng với Docker
Trước khi triển khai ứng dụng trên Docker Swarm, bạn cần đóng gói ứng dụng vào
một container Docker. Điều này giúp đảm bảo rằng ứng dụng sẽ chạy đúng trên mọi
máy chủ trong cụm Swarm. Dưới đây là các bước để đóng gói ứng dụng với
Docker:
-

Tạo Dockerfile: Tạo một tệp Dockerfile trong thư mục gốc của dự án.
Dockerfile là một tệp văn bản định nghĩa cấu hình để xây dựng image của
20


container. Trong Dockerfile, bạn có thể chỉ định các phụ thuộc, cài đặt và cấu
hình ứng dụng của bạn.
-

Xây dựng image: Mở terminal hoặc command prompt và chạy lệnh sau trong
thư mục chứa Dockerfile để xây dựng image của container:
$ docker build -t <IMAGE-NAME> .

-

Kiểm tra image: Để kiểm tra xem image đã được xây dựng thành công hay

chưa, bạn có thể chạy lệnh sau:
$ docker images

3.2.2.2 Triển khai ứng dụng trên Swarm
Sau khi đã đóng gói ứng dụng thành image Docker, bạn có thể triển khai ứng dụng
trên cụm Docker Swarm. Dưới đây là các bước để triển khai ứng dụng trên Swarm:
-

Tạo một tệp docker-compose.yml: Docker Compose là một công cụ cho phép
bạn định nghĩa và quản lý nhiều container Docker như một ứng dụng duy nhất.
Trong tệp docker-compose.yml, bạn có thể chỉ định các dịch vụ và cấu hình
của chúng.

-

Triển khai dịch vụ trên Swarm: Mở terminal hoặc command prompt và chạy
lệnh sau để triển khai các dịch vụ trong tệp docker-compose.yml lên cụm
Swarm:
$ docker stack deploy -c <DOCKER-COMPOSE-FILE> <STACK-NAME>
Trong đó, <DOCKER-COMPOSE-FILE> là đường dẫn đến tệp dockercompose.yml và <STACK-NAME> là tên của stack (tập hợp các dịch vụ) trên
Swarm.

-

Kiểm tra trạng thái của dịch vụ: Để kiểm tra trạng thái của các dịch vụ đã triển
khai trên Swarm, bạn có thể chạy lệnh sau:
$ docker service ls

3.2.2.3 Quản lý và mở rộng dịch vụ
Sau khi đã triển khai dịch vụ trên Swarm, bạn có thể quản lý và mở rộng dịch vụ

một cách linh hoạt. Dưới đây là một số thao tác quản lý và mở rộng dịch vụ trên
Docker Swarm:
21


×