Cách đánh giá hiệu suất của server Redis trên Ubuntu 18.04
Đo điểm chuẩn là một thực hành quan trọng khi nói đến phân tích hiệu suất tổng thể của các server database . Nó hữu ích cho việc xác định các điểm nghẽn cũng như các cơ hội cải tiến trong các hệ thống đó.Redis là một repository dữ liệu trong bộ nhớ được dùng làm database , bộ nhớ cache và message broker . Nó hỗ trợ từ cấu trúc dữ liệu đơn giản đến phức tạp bao gồm băm, chuỗi, tập hợp được sắp xếp, bitmap, dữ liệu không gian địa lý, cùng các loại khác. Trong hướng dẫn này, ta sẽ trình bày cách đánh giá hiệu suất của server Redis chạy trên Ubuntu 18.04, bằng cách sử dụng một số công cụ và phương pháp khác nhau.
Yêu cầu
Để làm theo hướng dẫn này, bạn cần:
- Một server Ubuntu 18.04 với user sudo không phải root và một firewall cơ bản được cấu hình . Để cài đặt điều này, bạn có thể làm theo Hướng dẫn Cài đặt Server Ban đầu cho Ubuntu 18.04 của ta .
- Redis được cài đặt trên server của bạn, như được giải thích trong hướng dẫn của ta về Cách cài đặt và bảo mật Redis trên Ubuntu 18.04 .
Lưu ý: Các lệnh được trình bày trong hướng dẫn này được thực thi trên server Redis chuyên dụng chạy trên server DigitalOcean 4GB.
Sử dụng Công cụ redis-benchmark
Redis đi kèm với một công cụ điểm chuẩn được gọi là redis-benchmark
. Chương trình này được dùng để mô phỏng một số lượng khách hàng tùy ý kết nối cùng một lúc và thực hiện các hành động trên server , đo lường thời gian các yêu cầu được hoàn thành. Dữ liệu kết quả sẽ cung cấp cho bạn ý tưởng về số lượng yêu cầu trung bình mà server Redis của bạn có thể xử lý mỗi giây.
Danh sách sau nêu chi tiết một số tùy chọn lệnh phổ biến được sử dụng với redis-benchmark
:
-
-h
: Chủ nhà Redis. Mặc định là127.0.0.1
. -
-p
: Cổng Redis. Mặc định là6379
. -
-a
: Nếu server của bạn yêu cầu xác thực, bạn có thể sử dụng tùy chọn này để cung cấp password . -
-c
: Số lượng client (kết nối song song) để mô phỏng. Giá trị mặc định là 50. -
-n
: Có bao nhiêu yêu cầu thực hiện. Mặc định là 100000. -
-d
: Kích thước dữ liệu cho các giá trịSET
vàGET
, được đo bằng byte. Mặc định là 3. -
-t
: Chỉ chạy một tập hợp con các bài kiểm tra. Ví dụ, bạn có thể sử dụng-t get,set
để chuẩn hiệu suất của các lệnhGET
vàSET
. -
-P
: Sử dụng pipelining để cải thiện hiệu suất. -
-q
: Chế độ im lặng, chỉ hiển thị thông tin yêu cầu trung bình trên giây .
Ví dụ: nếu bạn muốn kiểm tra số lượng yêu cầu trung bình mỗi giây mà server Redis local của bạn có thể xử lý, bạn có thể sử dụng:
- redis-benchmark -q
Bạn sẽ nhận được kết quả tương tự như thế này, nhưng với các số khác:
OutputPING_INLINE: 85178.88 requests per second PING_BULK: 83056.48 requests per second SET: 72202.16 requests per second GET: 94607.38 requests per second INCR: 84961.77 requests per second LPUSH: 78988.94 requests per second RPUSH: 88652.48 requests per second LPOP: 87950.75 requests per second RPOP: 80971.66 requests per second SADD: 80192.46 requests per second HSET: 84317.03 requests per second SPOP: 78125.00 requests per second LPUSH (needed to benchmark LRANGE): 84175.09 requests per second LRANGE_100 (first 100 elements): 52383.45 requests per second LRANGE_300 (first 300 elements): 21547.08 requests per second LRANGE_500 (first 450 elements): 14471.78 requests per second LRANGE_600 (first 600 elements): 9383.50 requests per second MSET (10 keys): 71225.07 requests per second
Bạn cũng có thể giới hạn các bài kiểm tra trong một tập hợp con các lệnh mà bạn chọn bằng cách sử dụng tham số -t
. Lệnh sau chỉ hiển thị giá trị trung bình cho các lệnh GET
và SET
:
- redis-benchmark -t set,get -q
OutputSET: 76687.12 requests per second GET: 82576.38 requests per second
Các tùy chọn mặc định sẽ sử dụng 50 kết nối song song để tạo 100000 yêu cầu đến server Redis. Nếu bạn muốn tăng số lượng kết nối song song để mô phỏng mức sử dụng cao nhất, bạn có thể sử dụng tùy chọn -c
cho điều đó:
- redis-benchmark -t set,get -q -c 1000
Bởi vì điều này sẽ sử dụng 1000 kết nối đồng thời thay vì 50 kết nối mặc định, bạn sẽ thấy hiệu suất giảm:
OutputSET: 69444.45 requests per second GET: 70821.53 requests per second
Nếu bạn muốn thông tin chi tiết trong kết quả , bạn có thể loại bỏ tùy chọn -q
. Lệnh sau sẽ sử dụng 100 kết nối song song để chạy 1000000 yêu cầu SET trên server :
- redis-benchmark -t set -c 100 -n 1000000
Bạn sẽ nhận được kết quả tương tự như sau:
Output====== SET ====== 1000000 requests completed in 11.29 seconds 100 parallel clients 3 bytes payload keep alive: 1 95.22% <= 1 milliseconds 98.97% <= 2 milliseconds 99.86% <= 3 milliseconds 99.95% <= 4 milliseconds 99.99% <= 5 milliseconds 99.99% <= 6 milliseconds 100.00% <= 7 milliseconds 100.00% <= 8 milliseconds 100.00% <= 8 milliseconds 88605.35 requests per second
Cài đặt mặc định sử dụng 3 byte cho các giá trị chính. Bạn có thể thay đổi điều này bằng tùy chọn -d
. Lệnh sau sẽ chuẩn hóa các lệnh GET
và SET
bằng cách sử dụng các giá trị khóa 1MB:
- redis-benchmark -t set,get -d 1000000 -n 1000 -q
Vì lần này server đang làm việc với tải trọng lớn hơn nhiều, hiệu suất dự kiến sẽ giảm đáng kể:
OutputSET: 1642.04 requests per second GET: 822.37 requests per second
Điều quan trọng là nhận ra rằng mặc dù những con số này hữu ích như một cách nhanh chóng để đánh giá hiệu suất của một cá thể Redis, chúng không đại diện cho thông lượng tối đa mà một cá thể Redis có thể duy trì. Bằng cách sử dụng pipelining , các ứng dụng có thể gửi nhiều lệnh cùng một lúc để cải thiện số lượng yêu cầu mỗi giây mà server có thể xử lý. Với redis-benchmark
, bạn có thể sử dụng tùy chọn -P
để mô phỏng các ứng dụng trong thế giới thực sử dụng tính năng Redis này.
Để so sánh sự khác biệt, trước tiên hãy chạy lệnh redis-benchmark
với các giá trị mặc định và không có pipelining đối với các bài kiểm tra GET
và SET
:
- redis-benchmark -t get,set -q
OutputSET: 86281.27 requests per second GET: 89847.26 requests per second
Lệnh tiếp theo sẽ chạy các thử nghiệm tương tự, nhưng sẽ kết hợp 8 lệnh với nhau:
- redis-benchmark -t get,set -q -P 8
OutputSET: 653594.81 requests per second GET: 793650.75 requests per second
Như bạn thấy từ kết quả , có một sự cải thiện hiệu suất đáng kể với việc sử dụng pipelining.
Kiểm tra độ trễ bằng redis-cli
Nếu bạn muốn một phép đo đơn giản về thời gian trung bình mà một yêu cầu cần để nhận được phản hồi, bạn có thể sử dụng ứng dụng client Redis để kiểm tra độ trễ trung bình của server . Trong ngữ cảnh của Redis, độ trễ là thước đo thời gian để lệnh ping
nhận được phản hồi từ server .
Lệnh sau sẽ hiển thị thống kê độ trễ thời gian thực cho server Redis của bạn:
- redis-cli --latency
Bạn sẽ nhận được kết quả tương tự như thế này, hiển thị số lượng mẫu ngày càng tăng và độ trễ trung bình thay đổi:
Outputmin: 0, max: 1, avg: 0.18 (970 samples)
Lệnh này sẽ tiếp tục chạy vô thời hạn. Bạn có thể dừng nó bằng CTRL+C
Để theo dõi độ trễ trong một khoảng thời gian nhất định, bạn có thể sử dụng:
- redis-cli --latency-history
Điều này sẽ theo dõi độ trễ trung bình theo thời gian, với khoảng thời gian có thể cấu hình được đặt thành 15 giây theo mặc định. Bạn sẽ nhận được kết quả tương tự như sau:
Outputmin: 0, max: 1, avg: 0.18 (1449 samples) -- 15.01 seconds range min: 0, max: 1, avg: 0.16 (1449 samples) -- 15.00 seconds range min: 0, max: 1, avg: 0.17 (1449 samples) -- 15.00 seconds range min: 0, max: 1, avg: 0.17 (1444 samples) -- 15.01 seconds range min: 0, max: 1, avg: 0.17 (1446 samples) -- 15.01 seconds range min: 0, max: 1, avg: 0.17 (1449 samples) -- 15.00 seconds range min: 0, max: 1, avg: 0.16 (1444 samples) -- 15.00 seconds range min: 0, max: 1, avg: 0.17 (1445 samples) -- 15.01 seconds range min: 0, max: 1, avg: 0.16 (1445 samples) -- 15.01 seconds range ...
Vì server Redis trong ví dụ của ta không hoạt động, không có nhiều sự khác biệt giữa các mẫu độ trễ. Tuy nhiên, nếu bạn có mức sử dụng cao nhất, điều này sẽ được phản ánh khi độ trễ trong kết quả tăng lên.
Nếu bạn chỉ muốn đo độ trễ của hệ thống , bạn có thể sử dụng --intrinsic-latency
cho điều đó. Độ trễ nội tại là cố hữu đối với môi trường, tùy thuộc vào các yếu tố như phần cứng, kernel , hàng xóm của server và các yếu tố khác không được Redis kiểm soát.
Bạn có thể xem độ trễ nội tại làm cơ sở cho hiệu suất Redis tổng thể của bạn . Lệnh sau sẽ kiểm tra độ trễ nội tại của hệ thống, chạy thử nghiệm trong 30 giây:
- redis-cli --intrinsic-latency 30
Bạn sẽ nhận được kết quả tương tự như sau:
Output… 498723744 total runs (avg latency: 0.0602 microseconds / 60.15 nanoseconds per run). Worst run took 22975x longer than the average latency.
So sánh cả hai bài kiểm tra độ trễ có thể hữu ích để xác định các tắc nghẽn phần cứng hoặc hệ thống có thể ảnh hưởng đến hiệu suất của server Redis của bạn. Xem xét tổng độ trễ cho một yêu cầu đến server mẫu của ta có trung bình 0,18 micro giây để hoàn thành, độ trễ nội tại là 0,06 micro giây nghĩa là một phần ba tổng thời gian yêu cầu được hệ thống sử dụng trong các quy trình không được Redis kiểm soát.
Sử dụng Công cụ Điểm chuẩn Memtier
Memtier là một công cụ điểm chuẩn thông lượng cao cho Redis và Memcached do Redis Labs tạo ra. Mặc dù rất giống với redis-benchmark
ở nhiều khía cạnh khác nhau, Memtier có một số tùy chọn cấu hình có thể được điều chỉnh để mô phỏng tốt hơn loại tải bạn có thể mong đợi trên server Redis của bạn , ngoài việc cung cấp hỗ trợ cụm.
Để cài đặt Memtier trên server của bạn, bạn cần phải biên dịch phần mềm từ nguồn. Trước tiên, hãy cài đặt các phụ thuộc cần thiết để biên dịch mã:
- sudo apt-get install build-essential autoconf automake libpcre3-dev libevent-dev pkg-config zlib1g-dev
Tiếp theo, vào folder chính của bạn và sao chép dự án memtier_benchmark
từ kho lưu trữ Github của nó:
- cd
- git clone https://github.com/RedisLabs/memtier_benchmark.git
Điều hướng đến folder dự án và chạy lệnh autoreconf
để tạo các tập lệnh cấu hình ứng dụng:
- cd memtier_benchmark
- autoreconf -ivf
Chạy tập lệnh configure
để tạo các tạo tác ứng dụng cần thiết để biên dịch:
- ./configure
Bây giờ chạy make
để biên dịch ứng dụng:
- make
Khi quá trình xây dựng hoàn tất, bạn có thể kiểm tra file thực thi bằng:
- ./memtier_benchmark --version
Điều này sẽ cung cấp cho bạn kết quả sau:
Outputmemtier_benchmark 1.2.17 Copyright (C) 2011-2017 Redis Labs Ltd. This is free software. You may redistribute copies of it under the terms of the GNU General Public License <http://www.gnu.org/licenses/gpl.html>. There is NO WARRANTY, to the extent permitted by law.
Danh sách sau đây chứa một số tùy chọn phổ biến nhất được sử dụng với lệnh memtier_benchmark
:
-
-s
: Server lưu trữ. Mặc định là localhost . -
-p
: Cổng server . Mặc định là6379
. -
-a
: Xác thực yêu cầu bằng password được cung cấp. -
-n
: Số lượng yêu cầu trên mỗi client (mặc định là 10000). -
-c
: Số lượng khách hàng (mặc định là 50). -
-t
: Số stream (mặc định là 4). -
--pipeline
: Bật pipelining. -
--ratio
: Tỷ lệ giữa lệnhSET
vàGET
, mặc định là 1:10. -
--hide-histogram
: Ẩn thông tin kết quả chi tiết.
Hầu hết các tùy chọn này rất giống với các tùy chọn có trong redis-benchmark
, nhưng Memtier kiểm tra hiệu suất theo một cách khác. Để mô phỏng các môi trường thực tế phổ biến tốt hơn, điểm chuẩn mặc định do memtier_benchmark
thực hiện sẽ chỉ kiểm tra các yêu cầu GET
và SET
, theo tỷ lệ từ 1 đến 10. Với 10 hoạt động GET cho mỗi hoạt động SET trong thử nghiệm, sự sắp xếp này đại diện hơn cho một ứng dụng web phổ biến sử dụng Redis làm database hoặc bộ nhớ cache. Bạn có thể điều chỉnh giá trị tỷ lệ bằng tùy chọn --ratio
.
Lệnh sau chạy memtier_benchmark
với cài đặt mặc định, trong khi chỉ cung cấp thông tin kết quả cấp cao:
- ./memtier_benchmark --hide-histogram
Lưu ý : nếu bạn đã cấu hình server Redis của bạn để yêu cầu xác thực, bạn nên cung cấp tùy chọn -a
cùng với password Redis của bạn cho lệnh memtier_benchmark
:
- ./memtier_benchmark --hide-histogram -a your_redis_password
Bạn sẽ thấy kết quả tương tự như sau:
Output... 4 Threads 50 Connections per thread 10000 Requests per client ALL STATS ========================================================================= Type Ops/sec Hits/sec Misses/sec Latency KB/sec ------------------------------------------------------------------------- Sets 8258.50 --- --- 2.19800 636.05 Gets 82494.28 41483.10 41011.18 2.19800 4590.88 Waits 0.00 --- --- 0.00000 --- Totals 90752.78 41483.10 41011.18 2.19800 5226.93
Theo lần chạy memtier_benchmark
, server Redis của ta có thể thực thi khoảng 90 nghìn thao tác mỗi giây theo tỷ lệ SET
/ GET
1:10.
Điều quan trọng cần lưu ý là mỗi công cụ điểm chuẩn có thuật toán riêng để kiểm tra hiệu suất và trình bày dữ liệu. Vì lý do đó, bình thường có các kết quả hơi khác nhau trên cùng một server , ngay cả khi sử dụng các cài đặt tương tự.
Kết luận
Trong hướng dẫn này, ta đã trình bày cách thực hiện các bài kiểm tra điểm chuẩn trên server Redis bằng hai công cụ riêng biệt: redis-benchmark
và công cụ memtier_benchmark
do Redis Labs phát triển. Ta cũng đã biết cách kiểm tra độ trễ của server bằng redis-cli
. Dựa trên dữ liệu thu được từ các thử nghiệm này, bạn sẽ hiểu rõ hơn về những gì có thể mong đợi từ server Redis của bạn về hiệu suất và đâu là điểm nghẽn của cài đặt hiện tại của bạn.
Các tin liên quan
Cách cài đặt và bảo mật Redis trên Debian 102019-07-16
Cách cài đặt và bảo mật Redis trên Debian 9
2018-09-05
Cách cài đặt Redis từ nguồn trên Ubuntu 18.04
2018-06-27
Cách bảo mật cài đặt Redis của bạn trên Ubuntu 18.04
2018-06-27
Cách thiết lập server Redis làm trình xử lý phiên cho PHP trên Ubuntu 16.04
2016-11-14
Cách cấu hình Redis Replication trên Ubuntu 16.04
2016-11-11
Cách mã hóa lưu lượng truy cập vào Redis với Spiped trên Ubuntu 16.04
2016-11-09
Cách mã hóa lưu lượng truy cập vào Redis với Stunnel trên Ubuntu 16.04
2016-11-08
Cách mã hóa lưu lượng truy cập vào Redis với PeerVPN trên Ubuntu 16.04
2016-11-08
Cách cài đặt và cấu hình Redis trên Ubuntu 16.04
2016-05-11