08/10/2026 · VietTechies · Biên tập

9 giờ 30 sáng ngày 1/8/2012, thị trường chứng khoán Mỹ mở cửa, và một trong những công ty giao dịch lớn nhất tại đây bắt đầu mua bán những cổ phiếu mà họ chưa từng có ý định đụng tới. Trong khoảng 45 phút, hệ thống định tuyến lệnh của Knight Capital đã bắn hàng triệu lệnh vào thị trường. Khi mọi chuyện kết thúc, Knight đã mất hơn 460 triệu USD.
Không có hacker nào nhúng tay. Cũng chẳng có trader nào tự ý hành động trái phép. Theo Ủy ban Chứng khoán và Giao dịch Mỹ (SEC), thủ phạm là một đoạn phần mềm đã bị tắt suốt chín năm, một cờ cấu hình (flag) bị gán cho ý nghĩa mới, và một trong tám server không hề nhận được bản cập nhật.
Một công ty nằm ở trung tâm thị trường
Knight không phải tay chơi nhỏ. Theo SEC, giao dịch của công ty này trong năm 2011 và 2012 thường chiếm khoảng mười phần trăm toàn bộ giao dịch cổ phiếu niêm yết tại Mỹ. Một trong những hệ thống cốt lõi của Knight là SMARS, bộ định tuyến lệnh thuật toán tốc độ cao. SMARS nhận các lệnh “mẹ” (parent order) khối lượng lớn từ những bộ phận khác trong nền tảng của Knight, rồi chia nhỏ thành các lệnh “con” (child order) để gửi tới các sàn giao dịch.
Mùa hè năm 2012, Knight chuẩn bị cho SMARS tham gia một chương trình mới của Sở Giao dịch Chứng khoán New York: Retail Liquidity Program, dự kiến khởi động ngày 1/8. Điều đó có nghĩa là phải viết code mới và deploy lên production đúng vào một ngày đã định sẵn.
Code cũ, ý nghĩa mới
Tính năng mới nhằm thay thế một đoạn code không còn ai sử dụng. Đoạn code này thuộc về một chức năng cũ tên là Power Peg, thứ Knight đã ngừng dùng từ năm 2003. Nhưng nó chưa bao giờ bị xóa. Nó vẫn nằm trong SMARS và vẫn có thể được gọi tới.
Code mới cho Retail Liquidity Program còn tái sử dụng chính cái flag từng dùng để bật Power Peg. Knight định xóa code cũ, để khi flag được đặt thành “yes”, thứ được kích hoạt sẽ là tính năng mới.
Bên dưới còn ẩn một vấn đề thứ hai, lâu đời hơn. Khi Power Peg còn hoạt động, có một hàm theo dõi xem mỗi lệnh mẹ đã được khớp bao nhiêu cổ phiếu, và báo cho bộ định tuyến dừng lại khi lệnh đã hoàn tất. Năm 2005, Knight chuyển hàm đếm này sang một vị trí khác trong code. Sau đó, họ không bao giờ test lại Power Peg. Nếu đoạn code ngủ quên ấy có ngày thức dậy, nó sẽ không còn biết khi nào phải dừng.
Bảy trên tám server
Từ ngày 27/7, Knight lần lượt triển khai code mới theo từng đợt trên tám server SMARS. Ở một server, kỹ thuật viên đã không sao chép code mới. Không ai khác kiểm tra lại đợt deploy này, và Knight cũng không có quy trình bằng văn bản nào yêu cầu phải có người làm việc đó. Server thứ tám vẫn giữ code Power Peg cũ và không có tính năng mới.
Sáng ngày 1/8, các tín hiệu cảnh báo đã bắt đầu xuất hiện. Từ khoảng 8 giờ 01, một hệ thống nội bộ gửi đi những e-mail tự động nhắc đến SMARS và một lỗi được mô tả là “Power Peg disabled.” Đến giờ mở cửa lúc 9 giờ 30, đã có 97 thư như vậy được gửi tới một nhóm nhân viên của Knight. Chúng vốn không được thiết kế để làm cảnh báo, và không ai hành động gì.
Bốn mươi lăm phút
Khi thị trường mở cửa, các lệnh mang cái flag đã bị đổi nghĩa bắt đầu đổ về. Bảy server đã được cập nhật xử lý chúng đúng cách. Server thứ tám thì chạy Power Peg. Vì logic đếm cổ phiếu đã bị dời đi từ nhiều năm trước, nó cứ liên tục bắn lệnh con cho mỗi lệnh mẹ, bất kể đã mua hay bán được bao nhiêu cổ phiếu.
Số liệu của SEC phơi bày một bức tranh trần trụi. Chỉ với 212 lệnh mẹ đầu vào, SMARS đã gửi đi hàng triệu lệnh con, tạo ra hơn bốn triệu lượt khớp lệnh trên 154 mã cổ phiếu, tổng cộng hơn 397 triệu cổ phiếu. Kết quả là Knight ôm một vị thế mua ròng khoảng 3,5 tỷ USD ở 80 mã và một vị thế bán ròng khoảng 3,15 tỷ USD ở 74 mã khác. Ở hàng chục mã, giao dịch của Knight chiếm tỷ trọng lớn trong khối lượng và đẩy giá biến động hơn năm phần trăm.
Cách phản ứng còn khiến mọi chuyện tệ hơn. Công cụ giám sát của Knight chỉ báo cáo vị thế sau khi giao dịch đã diễn ra, và phụ thuộc vào việc con người ngồi nhìn màn hình thay vì tự động phát cảnh báo. Knight không có quy trình ứng phó sự cố nào cho một tình huống như thế. Trong lúc các kỹ sư lần tìm nguyên nhân giữa thị trường đang chạy, họ đã gỡ code mới khỏi bảy server vốn được deploy đúng. Thế là những server này cũng bắt đầu định tuyến lệnh qua logic Power Peg cũ.
Cái giá phải trả
Khoản lỗ của Knight trên những vị thế ngoài ý muốn lên tới khoảng 460 triệu USD. Chỉ trong vài ngày, công ty đã cần đến một cuộc giải cứu: một nhóm nhà đầu tư rót vào 400 triệu USD để đổi lấy phần lớn cổ phần. Cuối năm đó, Knight đồng ý để công ty giao dịch Getco mua lại, và hai bên sáp nhập vào năm 2013 thành KCG Holdings. Tháng 10/2013, SEC kết luận Knight đã vi phạm Market Access Rule, quy định buộc các công ty môi giới phải có cơ chế kiểm soát để ngăn lệnh sai lọt vào thị trường. Knight nộp phạt 12 triệu USD.
Điều giới kỹ sư vẫn rút ra từ vụ việc
Sẽ rất dễ đổ lỗi cho người kỹ thuật viên đã bỏ sót một server. Nhưng kết luận của SEC chỉ ra một hướng hữu ích hơn. Mỗi mắt xích trong chuỗi sự cố là một lớp bảo vệ bị thiếu, chứ không phải một quyết định sai lầm đơn lẻ:
- Code chết vẫn có thể được gọi tới suốt chín năm.
- Một flag bị tái sử dụng với ý nghĩa mới trong khi hành vi cũ vẫn còn tồn tại.
- Một đợt deploy không có người thứ hai kiểm tra và không có bước kiểm tra tự động để bảo đảm mọi server đồng nhất.
- Cảnh báo được gửi vào hộp thư thay vì tới tay người chịu trách nhiệm dừng hệ thống.
- Không có kế hoạch lập sẵn để ngừng giao dịch khi hệ thống hoạt động bất thường.
Không điều nào trong số này là hiếm gặp. Phần lớn hệ thống production ngày nay đều mắc ít nhất một trong số đó. Thất bại của Knight cho thấy chúng cộng hưởng nhanh đến mức nào khi cùng hội tụ vào một thời điểm, ở tốc độ của thị trường.
Bài học lâu dài thì dễ nói mà khó làm: code bạn không còn dùng không hề vô hại chỉ vì bạn không còn gọi tới nó. Hãy xóa nó đi, hoặc chấp nhận rằng một ngày nào đó sẽ có thứ gọi tới nó.
Đọc bằng ngôn ngữ khác: English · Español · Deutsch · Français · Português (Brasil) · Tiếng Việt
Nguồn
- Ủy ban Chứng khoán và Giao dịch Mỹ (SEC), Order in the Matter of Knight Capital Americas LLC, Release No. 34-70694 (16/10/2013)
- NBC News: Knight Capital nhận khoản cứu trợ 400 triệu USD
- CNN Money: Getco đồng ý mua lại Knight Capital (tháng 12/2012)
- Business Insurance: KCG sắp đạt thỏa thuận dàn xếp 12 triệu USD với SEC về sự cố của Knight
- Ảnh đại diện: sàn giao dịch Sở Giao dịch Chứng khoán New York (ảnh minh họa, không chụp vào ngày xảy ra sự cố). Carol M. Highsmith, Thư viện Quốc hội Mỹ, qua Wikimedia Commons, phạm vi công cộng (public domain)
