paint-brush
Trường hợp mất tiền: Cách tôi sử dụng kỹ năng thám tử để theo dõi lỗi trong ứng dụng 🔍từ tác giả@mikeynyzw
12,226 lượt đọc
12,226 lượt đọc

Trường hợp mất tiền: Cách tôi sử dụng kỹ năng thám tử để theo dõi lỗi trong ứng dụng 🔍

từ tác giả Michael Nyamande5m2023/01/10
Read on Terminal Reader

dài quá đọc không nổi

Một ứng dụng Android chuyển tiền phổ biến đã không thể gửi tiền đến một khu vực cụ thể. Ứng dụng đang thực hiện các yêu cầu mạng thông thường, nhưng không có dấu hiệu nào cho thấy nguyên nhân gây ra sự cố. Nó sẽ sử dụng tất cả các kỹ năng thám tử của tôi, cũng như một chút may mắn, để tìm ra nguyên nhân gốc rễ.
featured image - Trường hợp mất tiền: Cách tôi sử dụng kỹ năng thám tử để theo dõi lỗi trong ứng dụng 🔍
Michael Nyamande HackerNoon profile picture

Là một nhà phát triển Android làm việc trên một ứng dụng chuyển tiền phổ biến hỗ trợ hơn 100 nghìn người dùng, nhiệm vụ của tôi là đảm bảo ứng dụng chạy trơn tru và tất cả các vấn đề được báo cáo đều được giải quyết kịp thời. Tôi đã quen với việc thỉnh thoảng nhận được phiếu hỗ trợ từ những người dùng báo cáo sự cố với ứng dụng. Nhưng một ngày nọ, tôi nhận được vô số vé từ những người không thể gửi tiền đến một khu vực cụ thể thông qua ứng dụng. Điều này đặc biệt đáng lo ngại vì gần đến kỳ nghỉ lễ, thời điểm mà nhiều người dựa vào ứng dụng của chúng tôi để gửi tiền cho những người thân yêu của họ.


Tôi biết mình phải đi đến tận cùng của vấn đề này càng nhanh càng tốt. Vì vậy, tôi tìm đến sự khôn ngoan của Sherlock Holmes và bắt đầu công việc thám tử của mình. Nhưng tôi nhanh chóng phát hiện ra, giải quyết vấn đề này sẽ không phải là một nhiệm vụ dễ dàng. Nó sẽ sử dụng tất cả các kỹ năng thám tử của tôi, cũng như một chút may mắn, để tìm ra nguyên nhân cốt lõi của lỗi và làm cho ứng dụng hoạt động bình thường trở lại.

thiết lập

Ảnh của Mediamodifier trên Bapt

Tôi bắt đầu bằng cách tái tạo sự cố trên thiết bị của mình, cố gắng gửi tiền đến khu vực bị ảnh hưởng. Chắc chắn rồi, ứng dụng bị treo và hiển thị thông báo lỗi có nội dung: "Giao dịch không thành công. Vui lòng thử lại sau." Tôi đã thử sử dụng trình lược tả trong Android Studio để xem liệu có bất kỳ vấn đề nào về hiệu suất có thể gây ra sự cố hay không. Ứng dụng đã hoạt động như mong đợi.


Tôi nhanh chóng kiểm tra nhật ký để xem liệu có bất kỳ thông tin nào có thể giúp tôi hiểu chuyện gì đang xảy ra không. Thật không may, nhật ký không hữu ích lắm. Họ chỉ ra rằng ứng dụng đang thực hiện các yêu cầu mạng thông thường, nhưng không có dấu hiệu nào cho thấy nguyên nhân gây ra sự cố. Tuy nhiên, có vẻ như lỗi sẽ xảy ra mỗi khi chúng tôi thử thực hiện yêu cầu POST tới điểm cuối transactions nhưng chỉ cho khu vực cụ thể đó. Có vẻ như bất kể tôi đã cố gắng gì; Tôi dường như không thể tiến gần hơn đến việc giải quyết bí ẩn.


Tiếp theo, tôi lấy mã mới nhất và kiểm tra nhánh sản xuất để xem liệu có bất kỳ cam kết nào gần đây có thể liên quan đến vấn đề hiện tại hay không. Tôi cũng đã thử thực hiện các yêu cầu riêng lẻ bằng Postman và nhận thấy một điều gì đó đặc biệt. Yêu cầu trả về mã phản hồi là 400 , nghĩa là đó là một yêu cầu không hợp lệ; điều này thường có nghĩa là máy khách không gửi tất cả thông tin theo yêu cầu của chương trình phụ trợ. Tuy nhiên, nó không thể trả về một lỗi có ý nghĩa nêu chi tiết dữ liệu nào bị thiếu trong yêu cầu. Cho rằng yêu cầu này đã hoạt động trước đây, có vẻ như sự cố nằm ở phía máy chủ.


Để kiểm tra lý thuyết này, tôi đã sử dụng debugger để tìm hiểu sâu hơn về mã. Tôi đặt các điểm dừng tại các điểm chính trong mã và cố gắng gửi lại một giao dịch, lần này chú ý kỹ đến những gì đang diễn ra bên trong. Tôi đã kiểm tra xem yêu cầu có chứa tất cả dữ liệu cần thiết mà chương trình phụ trợ yêu cầu hay không và thậm chí đã đăng xuất yêu cầu và phản hồi. Than ôi, mọi thứ đều như mong đợi, nhưng tôi vẫn gặp lỗi Yêu cầu không hợp lệ.

Các âm mưu dày

Ảnh của Volodymyr Hryshchenko trên Bapt

Khi tôi tiếp tục cuộc điều tra của mình, tôi không thể không cảm thấy như mình đã bỏ lỡ điều gì đó. Có vẻ như cần phải có một lời giải thích rõ ràng cho vấn đề này, nhưng dù tôi có cố gắng thế nào đi chăng nữa, tôi vẫn không thể tìm thấy nó. Tôi có thể cảm thấy muốn chế nhạo tôi, Moriarty của chính tôi, con bọ chưa được giải quyết.


Ngay khi tôi bắt đầu mất hy vọng, tôi nảy ra một ý tưởng. Tôi nhớ rằng hai tuần trước khi sự cố bắt đầu, nhóm phụ trợ đã đưa ra một bản cập nhật cho mã phía máy chủ của ứng dụng. Có thể là bản cập nhật đã gây ra vấn đề?


Tôi đã liên hệ với các nhà phát triển phụ trợ trên Slack để xem liệu họ có bất kỳ thông tin chi tiết nào về vấn đề này không. Họ nói với tôi rằng gần đây họ đã tung ra một bản cập nhật cho mã phía máy chủ, nhưng họ không chắc liệu nó có liên quan đến sự cố mà tôi đang gặp phải hay không. Họ hiện đang bận sửa chữa một vấn đề khác và chỉ có thể xem xét vấn đề của tôi sau. Họ đề cập rằng bản cập nhật đã được tung ra dần dần, với chỉ một tỷ lệ nhỏ người dùng nhận được nó lúc đầu. Do một chính sách mới, việc triển khai của chúng tôi hiện đã được thực hiện theo từng giai đoạn và người dùng sẽ nhận được nó trong khoảng thời gian hai tuần. Có thể nào bản cập nhật chỉ gây ra sự cố cho những người dùng đã nhận được nó không?

Khoảnh khắc bóng đèn

Ảnh của Jack Carter trên Bapt

Tôi đã nhanh chóng kiểm tra nhật ký phân tích sự cố firebase của mình để xem liệu có bất kỳ mối tương quan nào giữa thời điểm cập nhật và thời điểm người dùng bắt đầu gặp sự cố hay không. Và chắc chắn, tôi đã tìm ra manh mối!


Sau khi trao đổi qua lại với nhóm, lý thuyết của tôi đã được xác nhận. Bản cập nhật bao gồm một thay đổi đối với cách máy chủ xử lý một số loại giao dịch. Và hóa ra sự thay đổi này đã gây ra các vấn đề cụ thể đối với các giao dịch đến khu vực bị ảnh hưởng. Khi điều tra thêm, tôi phát hiện ra rằng chương trình phụ trợ hiện yêu cầu thêm một trường để đưa vào các yêu cầu giao dịch, một trường trước đây là tùy chọn. Sự thay đổi này đã được thực hiện do các quy định mới trong khu vực, nhưng thật không may, nó đã được thực hiện vội vàng, tài liệu sơ sài và không được kiểm tra kỹ lưỡng. Do đó, trường không được đưa vào yêu cầu giao dịch cho khu vực bị ảnh hưởng, khiến giao dịch không thành công.


Tôi không thể tin được. Sau tất cả công việc thám tử của mình, cuối cùng tôi đã tìm ra nguyên nhân cốt lõi của lỗi. Phải mất rất nhiều suy luận giống như Sherlock và một số suy nghĩ sáng tạo, nhưng cuối cùng tôi đã giải quyết được trường hợp số tiền bị mất.


Tôi ngay lập tức liên hệ với nhóm phụ trợ để cho họ biết những gì tôi đã khám phá ra. Họ đã bị sốc khi biết rằng bản cập nhật của họ đã gây ra sự cố và xin lỗi vì sơ suất. Chúng tôi đã đồng ý về một giải pháp hai hướng. Nhóm phụ trợ sẽ phát hành một hotfix với giá trị mặc định cho trường hiện bắt buộc, cho phép người dùng giao dịch trong thời gian chờ đợi trong khi nhóm ứng dụng dành cho thiết bị di động phát hành phiên bản cập nhật của ứng dụng Android sẽ yêu cầu thông tin bổ sung này.

Phần kết luận

Giải quyết lỗi này là một trải nghiệm đầy thách thức và bổ ích. Nó nhắc nhở tôi về tầm quan trọng của việc suy nghĩ sáng tạo và không ngại thử các cách tiếp cận khác nhau khi gỡ lỗi một vấn đề. Và cũng giống như mối quan hệ bền chặt giữa Sherlock và Watson, nó cũng nhắc nhở tôi về sức mạnh của sự hợp tác và tinh thần đồng đội – nếu không có sự trợ giúp của nhóm phụ trợ, có lẽ tôi sẽ không bao giờ giải quyết được vấn đề này.


Tôi hy vọng rằng câu chuyện về công việc thám tử này của tôi sẽ là lời nhắc nhở cho các nhà phát triển khác rằng hãy luôn tìm kiếm manh mối và không bao giờ từ bỏ việc giải quyết một vấn đề đầy thách thức. Như Sherlock Holmes đã từng nói, "Một khi bạn loại bỏ những điều không thể, thì điều còn lại, dù khó tin đến đâu, phải là sự thật." Với suy nghĩ đó, tôi biết rằng bất kỳ lỗi nào cũng có thể bị khuất phục, cho dù lúc đầu nó có vẻ phức tạp đến đâu.