Trước tiên mình sẽ giới thiệu cho những ai chưa biết Goreplay là gì.

Goreplay là một ứng dụng viết bằng Go Lang. Nó có tác dụng Capture một Http Request và Replay đến một site khác.

Vậy nó dùng làm gì ?

Chúng ta có thể dùng nó để theo dõi và phân tích chi tiết các request. Trong trường hợp của mình, mình đã dùng nó để testing, phát hiện bug có thể xảy trên production.

Ok. Xem ví dụ cụ thể nào.

Mình đã từng tiếp nhận một project sử dụng Rails 2. Nó là một ứng dụng quản lý giáo dục rất cũ, và siêu to khổng lồ :)). Gần 2 triệu dòng code và số lượng client đang sử dụng lên đến 300.

Nhiệm vụ của team mình là phải nâng cấp lên rails 3. Đây thực sự là một step tiềm ẩn rất nhiều rủi ro. Mình đã gặp phải vấn đề trong testing. Project này không có một dòng test nào hữu ích cả.

Vấn đề đặt ra ở đây, làm sao chúng ta biết được bản upgrade sẽ gặp vấn đề ở đâu? Chúng ta có team QA nhưng như thế là không đủ cho một ứng dụng quá lớn như vậy.

Sau một hồi tìm kiếm, mình đã tìm ra giải pháp clone một production client lên staging site. Nhưng vậy mình đã có một bản copy của production trên staging.

Tiếp theo mình sẽ setup cho tất cả những request đi từ production sẽ được capture và replay đến staging site của mình.

Ở staging site này mình đã setup Rollbar. Nó sẽ giúp chúng ta biết khi có một exception nào được được raise lên ở staging site. Đến đây mọi việc đã cực kì dễ dàng để nhận biết và fix lỗi xảy ra, giống như bạn deploy ứng dụng lên production và bắt client phải ngồi test. Thật hạnh phúc :))

Việc cài đặt Goreplay rất đơn giản, bạn chỉ việc tải bản release ở đây và copy nó vào thư mục /usr/local/bin trên production server.

Sau đó chạy command như sau trên production server

goreplay --input-raw :80 --output-http=http://stagingdomain.com --http-allow-header Host:productiondomain.com'

Mình giải thích một chút về command trên

  • --input-raw: Nhận dữ liệu từ port 80
  • --output-http: URL đến staging site của bạn
  • -http-allow-header: Đây là một bộ lọc những request nào sẽ được replay đến staging. Mình sử dụng nó vì production server bên mình đang host vài client với nhiều domain khác nhau. Do đó mình chỉ muốn những request nào đi vào productiondomain.com mới được replay đến http://stagingdomain.com

Còn rất nhiều setting hữu ích, bạn có thể tham khảo thêm ở Latest documents

Đây là một ứng dụng thực sự hữu ích trong trường hợp của mình. Hy vọng sẽ giúp được các bạn.