Với kiến trúc hệ thống thử nghiệm tại Hình 4.1, luận văn sẽ trình bày một số kịch bản kiểm thử tại bảng Bảng 4.1 nhằm kiểm tra các chức năng chính của hệ thống liên quan đến việc tạo, xoá các mạng chuỗi khối và giao thức đồng thuận tương ứng có hoạt động chính xác hay không.
50
Bảng 4.1 Kịch bản và kết quả thử nghiệm các chức năng chính của hệ thống
STT Kịch bản Kết quả mong muốn Kết quả thực tế
1
Triển khai mạng Hyperledger Fabric với giao thức đồng thuận PBFT
Mạng chuỗi khối và giao thức đồng thuận tương ứng được triển khai
Đạt
2
Triển khai mạng Hyperledger Fabric với giao thức đồng thuận RAFT
Mạng chuỗi khối và giao thức đồng thuận tương ứng được triển khai
Đạt
3
Triển khai mạng Hyperledger Sawtooth với giao thức đồng thuận PBFT
Mạng chuỗi khối và giao thức đồng thuận tương ứng được triển khai
Đạt
4
Triển khai mạng Hyperledger Sawtooth với giao thức đồng thuận PoET
Mạng chuỗi khối và giao thức đồng thuận tương ứng được triển khai
Đạt
5 Xoá mạng chuỗi khối đã được triển khai
Mạng chuỗi khối và các tài
nguyên được giải phóng Đạt
Dưới đây là các bước người dùng sử dụng hệ thống thử nghiệm để tạo một mạng chuỗi khối và giao thức đồng thuận tương ứng.
51
Hình 4.3 Màn hình lựa chọn giao thức đồng thuận và mạng chuỗi khối
Hình 4.4 Màn hình cấu hình thông tin các nút trong chuỗi khối và hạ tầng triển khai
52
Hình 4.5 Màn hình kết thúc bước cài đặt
53
Hình 4.7 Màn hình kiểm tra trạng thái hạ tầng trên Digital Ocean
Hình 4.8 Màn hình kiểm tra các nút chuỗi khối trên Kubernetes
4.3 Thử nghiệm tốc độ xử lý giao dịch
Mục tiêu của thử nghiệm này để đánh giá tốc độ xử lý các giao dịch của mạng chuỗi khối và giao thức đồng thuận được triển khai có đáp ứng được nhu cầu về tốc độ xử lý giao dịch của các ứng dụng phi tập trung hay không. Hệ thống yêu cầu phải đáp ứng tối thiểu 15 giao dịch/giây với các ứng dụng phi tập trung liên quan đến lĩnh vực quản lý đất đai của Trung tâm Thông tin Lưu trữ và Thư viện
54 tài nguyên môi trường quốc gia, Cục Công nghệ thông tin và Dữ liệu tài nguyên môi trường, Bộ Tài nguyên và Môi trường.
Các bước tiến hành như sau:
Xây dựng và triển khai một số ứng dụng phi tập trung (DAPP) trên mạng chuỗi khối được tự động triển khai bằng hệ thống đề xuất tại Hình 4.1. Ta có thể kể đến một số các ứng dụng như: dịch vụ công quản lý chứng chỉ định giá đất (dvcchungchidgd), dịch vụ công quản lý hồ sơ (dvchoso), dịch vụ công quản lý quá trình xử lý hồ sơ (dvcquatrinhxulyhs), dịch vụ quản lý tài liệu (dvctailieu), dịch vụ quản lý giấy chứng giấy (dvcttgiaychungnhan).
Phát triển một module để đánh giá tốc độ xử lý giao dịch của mạng chuỗi khối (Benchmark Engine) dựa trên công cụ wrk [25]. Benchmark Engine sẽ tạo nhiều luồng xử lý, mô tả quá trình người dùng tương tác với các ứng dụng phi tập trung. Từ đó tính toán ra tốc độ xử lý của nền tảng vừa triển khai. Minh hoạ tại Hình 4.9.
55
Bảng 4.2 Testcase TC01-01
Testcase ID TC01-01
Tác vụ Thêm mới
Mô tả Thực hiện kiểm thử tác vụ Thêm mới và đo số giao dịch được xử lý trên một đơn vị thời gian
Dữ liệu kiểm thử { “MaHoSo”: “mahoso01”, “SoChungChi”: “2020”,
“NgayCoHieuLuc”: “01/01/2020”, “NgayHetHieuLuc”: “31/12/2020”, “CoQuanCap”: “UBND Ha Noi”, “ChuSoHuu”: “Nguyen Van A”, “QuocTich”: “VietNam”,
“SoCMND”: “012345678”,
“NgayCapCMND”: “01/01/1978”, “NguoiKy”: “Tran Van B”,
“NgaySinh”: “01/01/1960”, “ChungChi”: chungchidgd.doc “CreatedDate”: “09/09/2020”, “CreatedBy”: “UserTest”, “ModifitedDate”: “09/09/2020”, “ModifitedBy”: “UserTest” } Điều kiện tiền đề Xác thực người dùng thành công
Các bước thực hiện Bước 1: Tạo người dùng và xác thực người dùng Bước 2: Chạy mô-đun và kiểm thử với dữ liệu kiểm thử Bước 3: Lưu kết quả kiểm thử
Kết quả mong muốn 15 giao dịch được xử lý trên 1 giây
Kết quả thực tế ●
TPS: 15.28 giao dịch/giây
● Tổng số yêu cầu: 3669 yêu cầu
● Lỗi kết nối: 0
● Lỗi quá thời gian chờ: 0
56
Bảng 4.3 Testcase TC01-02
Testcase ID TC01-02
Tác vụ Cập nhật
Mô tả Thực hiện kiểm thử tác vụ Cập nhật và đo số giao dịch được xử lý trên một đơn vị thời gian
Dữ liệu kiểm thử { “NgayCoHieuLuc”: “01/01/2020”, “NgayHetHieuLuc”: “31/12/2020”, “ChungChi”: dvcchungchidgd.doc “ModifitedDate”: “09/09/2020”, “ModifitedBy”: “UserTest”, “ID”: “3f3492af-12d3-49d3-a649- ed585d47fb76” }
Điều kiện tiền đề Đã xác thực người dùng
Các bước thực hiện Bước 1: Tạo người dùng và xác thực người dùng
Bước 2: Chạy mô-đun và kiểm thử với dữ liệu kiểm thử Bước 3: Lưu kết quả kiểm thử
Kết quả mong muốn 15 giao dịch được xử lý trên 1 giây Kết quả thực tế ●
TPS: 26.02 giao dịch/giây
● Tổng số yêu cầu: 6248 yêu cầu
● Lỗi kết nối: 0
● Lỗi quá thời gian chờ: 0
57
Bảng 4.4 Testcase TC01-03
Testcase ID TC01-03
Tác vụ Cập nhật tất cả
Mô tả Thực hiện kiểm thử tác vụ Cập nhật tất cả và đo số giao dịch được xử lý trên một đơn vị thời gian
Dữ liệu kiểm thử { “MaHoSo”: “mahoso01”, “SoChungChi”: “2020”,
“NgayCoHieuLuc”: “01/01/2020”, “NgayHetHieuLuc”: “31/12/2020”, “CoQuanCap”: “UBND Ha Noi”, “ChuSoHuu”: “Nguyen Van A”, “QuocTich”: “VietNam”,
“SoCMND”: “012345678”,
“NgayCapCMND”: “01/01/1978”, “NguoiKy”: “Tran Van B”,
“NgaySinh”: “01/01/1960”, “ChungChi”: dvcchungchidgd.doc “CreatedDate”: “09/09/2020”, “CreatedBy”: “UserTest”, “ModifitedDate”: “09/09/2020”, “ModifitedBy”: “UserTest”, “SoChungChiCu”: “2019”, “ID”:“3f3492af-12d3-49d3-a649-ed585d47fb76”} Điều kiện tiền đề Đã xác thực người dùng
Các bước thực hiện Bước 1: Tạo người dùng và xác thực người dùng
Bước 2: Chạy mô-đun và kiểm thử với dữ liệu kiểm thử Bước 3: Lưu kết quả kiểm thử
Kết quả mong muốn 15 giao dịch được xử lý trên 1 giây Kết quả thực tế
● TPS: 25.52 giao dịch/giây
● Tổng số yêu cầu: 6128 yêu cầu
● Lỗi kết nối: 0
58
Bảng 4.5 Testcase TC01-04
Testcase ID TC01-04
Tác vụ Lấy theo mã hồ sơ
Mô tả Thực hiện kiểm thử tác vụ Lấy theo mã hồ sơ và đo số giao dịch được xử lý trên một đơn vị thời gian
Dữ liệu kiểm thử {“MaHoSo”: “mahoso01”} Điều kiện tiền đề Đã xác thực người dùng
Các bước thực hiện Bước 1: Tạo người dùng và xác thực người dùng
Bước 2: Chạy mô-đun và kiểm thử với dữ liệu kiểm thử Bước 3: Lưu kết quả kiểm thử
Kết quả mong muốn 15 giao dịch được xử lý trên 1 giây Kết quả thực tế
● TPS: 40.72 giao dịch/giây
● Tổng số yêu cầu: 9775 yêu cầu
● Lỗi kết nối: 0
● Lỗi quá thời gian chờ: 0
Bảng 4.6 Testcase TC01-05
Testcase ID TC01-05
Tác vụ Lấy theo số chứng chỉ
Mô tả Thực hiện kiểm thử tác vụ Lấy theo số chứng chỉ và đo số giao dịch được xử lý trên một đơn vị thời gian Dữ liệu kiểm thử {“SoChungChi”: “2020”}
Điều kiện tiền đề Đã xác thực người dùng
Các bước thực hiện Bước 1: Tạo người dùng và xác thực người dùng Bước 2: Chạy mô-đun và kiểm thử với dữ liệu kiểm thử Bước 3: Lưu kết quả kiểm thử
Kết quả mong muốn 15 giao dịch được xử lý trên 1 giây Kết quả thực tế
● TPS: 43.69 giao dịch/giây
● Tổng số yêu cầu: 10490 yêu cầu
● Lỗi kết nối: 0
● Lỗi quá thời gian chờ: 0
59
Bảng 4.7 Testcase TC01-06
Testcase ID TC01-06
Tác vụ Lấy theo số chứng chỉ cũ
Mô tả Kiểm thử tác vụ Lấy theo số chứng chỉ cũ và đo đạc Dữ liệu kiểm thử {“SoChungChiCu”: “2019”}
Điều kiện tiền đề Đã xác thực người dùng
Các bước thực hiện Bước 1: Tạo người dùng và xác thực người dùng Bước 2: Chạy mô-đun và kiểm thử với dữ liệu kiểm thử Bước 3: Lưu kết quả kiểm thử
Kết quả mong muốn 15 giao dịch được xử lý trên 1 giây Kết quả thực tế
● TPS: 37.25 giao dịch/giây
● Tổng số yêu cầu: 8944 yêu cầu
● Lỗi kết nối: 0
● Lỗi quá thời gian chờ: 0
Bảng 4.8 Testcase TC01-07
Testcase ID TC01-07
Tác vụ Lấy chứng chỉ
Mô tả Thực hiện kiểm thử tác vụ Lấy chứng chỉ và đo số giao dịch được xử lý trên một đơn vị thời gian
Dữ liệu kiểm thử { “SoChungChi”: “2020”,
“NgayCoHieuLuc”: “01/01/2020”,
“NgayHetHieuLuc”: “31/12/2020” } Điều kiện tiền đề Đã xác thực người dùng
Các bước thực hiện Bước 1: Tạo người dùng và xác thực người dùng Bước 2: Chạy mô-đun và kiểm thử với dữ liệu kiểm thử Bước 3: Lưu kết quả kiểm thử
Kết quả mong muốn 15 giao dịch được xử lý trên 1 giây Kết quả thực tế
● TPS: 45.31 giao dịch/giây
● Tổng số yêu cầu: 10879 yêu cầu
● Lỗi kết nối: 0
60 Ta có thể thấy rằng các thao tác với ứng dụng phi tập trung triển khai để thử nghiệm đều có thể được thực hiện với tốc độ phù hợp với yêu cầu nghiệp vụ khi có nhiều truy vấn đồng thời. Các giao dịch lấy dữ liệu từ chuỗi khối thường có tốc độ cao hơn. Ngược lại, các thao tác ghi dữ liệu mới, cập nhật dữ liệu thường tốn thời gian. Một phần nguyên nhân do dữ liệu truyền tải lớn, các nút phải tham gia quá trình đồng thuận trong mạng để thống nhất dữ liệu ghi lên chuỗi. Dù vậy, các ứng dụng phi tập trung và các thao tác đều đạt tốc độ lớn hơn 15 giao dịch/giây, đáp ứng hoàn toàn yêu cầu của Trung tâm Thông tin Lưu trữ và Thư viện tài nguyên môi trường quốc gia, Cục Công nghệ thông tin và Dữ liệu tài nguyên môi trường, Bộ Tài nguyên và Môi trường.
4.4 Thử nghiệm khả năng chịu tải, chịu lỗi
Ở phần này, tôi sẽ mô tả một số kịch bản hệ thống có thể gặp phải trong quá trình vận hành để thử nghiệm khía cạnh chịu tải và chịu lỗi của hệ thống.
Bảng 4.9 Testcase TC02-01
Testcase ID TC02-01
Mô tả Một nút vật lý dừng hoạt động
Điều kiện tiền đề Nút dừng hoạt động không phải nút master của cụm Các bước thực hiện Bước 1: Tắt máy vật lý
Bước 2: Kiểm tra trạng thái của các dịch vụ Kết quả mong muốn Các dịch vụ được triển khai sang các nút vật lý khác
và hoạt động bình thường.
Kết quả thực tế Hệ thống có thể không xử lý được yêu cầu trong một khoảng thời gian. Sau đó các dịch vụ sẽ được triển khai lại trên 2 nút còn hoạt động và có thể nhận yêu cầu từ phía người dùng
61
Bảng 4.10 Testcase TC02-02
Testcase ID TC02-02
Mô tả Consensus Driver dừng hoạt động Điều kiện tiền đề Message Queue vẫn hoạt động
Các bước thực hiện Bước 1: Tắt Consensus Driver
Bước 2: Gửi một yêu cầu tạo mạng chuỗi khối và giao thức đồng thuận
Bước 3: Kiểm tra trạng thái của việc tạo mạng chuỗi khối
Bước 4: Sau 5 phút, chạy lại Consensus Driver Bước 5: Kiểm tra trạng thái của việc tạo mạng
chuỗi khối
Kết quả mong muốn Mạng chuỗi khối ở trạng thái CREATE_PENDING Consensus Driver không hoạt động. Yêu cầu tạo mạng được lưu trữ tại message queue
Mạng chuỗi khối được triển khai sau khi Consensus Driver hoạt động trở lại. Chuyển trạng thái mạng sang CREATED
Kết quả thực tế Mạng chuỗi khối ở trạng thái CREATE_PENDING Consensus Driver không hoạt động. Yêu cầu tạo mạng được lưu trữ tại message queue
Mạng chuỗi khối được triển khai sau khi Consensus Driver hoạt động trở lại. Chuyển trạng thái mạng sang CREATED
62
Bảng 4.11 Testcase TC02-03
Testcase ID TC02-03
Mô tả Infrastructure Controllers dừng hoạt động Điều kiện tiền đề Message Queue vẫn hoạt động
Các bước thực hiện Bước 1: Tắt Infrastructure Controllers
Bước 2: Gửi một yêu cầu tạo mạng chuỗi khối và giao thức đồng thuận
Bước 3: Kiểm tra trạng thái của việc tạo mạng chuỗi khối
Bước 4: Sau 5 phút, chạy lại Infrastructure Controllers
Bước 5: Kiểm tra trạng thái của việc tạo mạng chuỗi khối
Kết quả mong muốn Mạng chuỗi khối ở trạng thái CREATE_PENDING Infrastructure Controllers không hoạt động. Yêu cầu tạo mạng được lưu trữ tại message queue
Mạng chuỗi khối được triển khai sau khi Infrastructure Controllers hoạt động trở lại. Chuyển trạng thái mạng sang CREATED Kết quả thực tế Mạng chuỗi khối ở trạng thái
CREATE_PENDING Infrastructure Controllers không hoạt động. Yêu cầu tạo mạng được lưu trữ tại message queue
Mạng chuỗi khối được triển khai sau khi Infrastructure Controllers hoạt động trở lại. Chuyển trạng thái mạng sang CREATED
63
Bảng 4.12 Testcase TC02-04
Testcase ID TC02-04
Mô tả Message Queue dừng hoạt động
Điều kiện tiền đề Các dịch vụ khác vẫn hoạt động bình thường Các bước thực hiện Bước 1: Tắt Message Queue
Bước 2: Gửi một yêu cầu tạo mạng chuỗi khối và giao thức đồng thuận
Bước 3: Kiểm tra trạng thái của việc tạo mạng chuỗi khối
Bước 4: Sau 5 phút, chạy lại Message Queue Bước 5: Kiểm tra trạng thái của việc tạo mạng
chuỗi khối
Kết quả mong muốn Mạng chuỗi khối ở trạng thái CREATE_PENDING Message Queue không hoạt động.
Mạng chuỗi khối được triển khai sau khi Message Queue hoạt động trở lại. Chuyển trạng thái mạng sang CREATED
Kết quả thực tế Các dịch vụ không kết nối được với message queue
Sau vài lần kết nối không thành công, các dịch vụ bị dừng hoạt động
64
Bảng 4.13 Testcase TC02-05
Testcase ID TC02-05
Mô tả Tăng số lượng bản sao của Consensus Driver khi có nhiều yêu cầu gửi đến từ người dùng
Điều kiện tiền đề Các dịch vụ trong hệ thống hoạt động bình thường Các bước thực hiện Bước 1: Gửi 11 yêu cầu liên tục tới hệ thống
Bước 2: Thiết lập hệ thống tạo một bản sao của Consenus Driver nếu số message trên message queue lớn hơn 10 message và chỉ cho phép tồn tại 1 bản sao của Consensus Driver khi số message nhỏ hơn 3
Bước 3: Kiểm tra số lượng bản sao của Consensus Driver trong cụm
Bước 4: Dừng gửi yêu cầu đến hệ thống
Bước 5: Kiểm tra số lượng bản sao của Consensus Driver khi số lượng message nhỏ hơn 3
Kết quả mong muốn Một bản sao mới của Consenus Driver được tạo khi số message trong message queue lớn hơn 10
Hệ thống chỉ tồn tại một bản sao khi số lượng message nhỏ hơn 3
Kết quả thực tế Một bản sao mới của Consenus Driver được tạo khi số message trong message queue lớn hơn 10
Hệ thống chỉ tồn tại một bản sao khi số lượng message nhỏ hơn 3
Với một số kịch bản thử nghiệm trên, ta có thể thấy rằng hệ thống triển khai thử nghiệm có thể vượt qua được một số vấn đề gặp phải trong quá trình vận hành như: một số dịch vụ bị dừng hoạt động đột ngột hay đảm bảo các dịch vụ được triển khai lên các nút vật lý khác khi xảy ra sự cố, tự động mở rộng và thu hẹp tài nguyên khi cần thiết. Điều này đã chứng minh được rằng, hệ thống thử nghiệm có khả năng chịu tải, chịu lỗi nhờ sử dụng nguyên lý thiết kế microservice, message queue
65 và một số công nghệ hỗ trợ như Docker, Kubernetes... Tuy nhiên, qua các thử nghiệm ta cũng có thể thấy hệ thống không thể vượt qua được trường hợp message queue dừng hoạt động, đặc biệt là trường hợp chỉ có một nút message queue duy nhất. Để khắc phục điều này, ta có thể triển khai phân tán một cụm message queue để tăng tính sẵn có (Availability) của dịch vụ này, giúp hệ thống vận hành ổn định hơn.
66
CHƯƠNG 5.KẾT LUẬN 5.1 Kết luận
Với sự phát triển mạnh mẽ của công nghệ chuỗi khối, các giao thức đồng thuận và các nền tảng chuỗi khối mới liên tục được ra đời nhằm giải quyết những bài toán khác nhau trong thực tế. Quá trình lựa chọn, triển khai một giao thức đồng thuận cho một nền tảng chuỗi khối phải trải qua nhiều bước từ tìm hiểu công nghệ,