· kaynak dev.to (home feed)
Knight Capital'ın 460 milyon dolarlık başarısızlığı: yeniden kullanılan bir feature flag ve 45 dakikalık kontrolden çıkan işlemler
Ağustos 2012'de, yeniden kullanılan bir feature flag, gözden kaçan tek bir sunucuda çoktan emekliye ayrılmış işlem kodunu yeniden hayata döndürdü ve Knight Capital yaklaşık 45 dakikada 460 milyon dolardan fazla kaybetti.

1 Ağustos 2012'de ne oldu
O dönemde ABD hisse senedi işlemlerinin yaklaşık onda birinden sorumlu olan Knight Capital, NYSE'nin Perakende Likidite Programı'nın (Retail Liquidity Program) lansmanı öncesinde SMARS emir yönlendiricisine (order router) yeni kod dağıttı. SEC'in idari kararına (Release 34-70694) dayanan ayrıntılı bir dev.to anlatımına göre, tek bir teknisyen 27-31 Temmuz 2012 arasında yeni kodu sekiz SMARS sunucusuna elle kopyaladı ve bir sunucu gözden kaçtı. Dağıtımı ikinci bir kişi incelemedi ve bunu gerektiren yazılı bir prosedür de yoktu.
Piyasa açıldığında, yaması yapılmamış sunucu durmaksızın alt emir (child order) göndermeye başladı. Yaklaşık 45 dakika boyunca Knight, akış saat 10:15 civarında sona ermeden önce 154 hisse senedinde yaklaşık 4 milyon işlem — yaklaşık 397 milyon hisse — gerçekleştirdi. Ertesi gün yapılan 8-K bildirimi vergi öncesi kaybı yaklaşık 440 milyon dolar olarak açıkladı; dev.to hesabına göre nihai rakam 460 milyon doları aştı — New York Times'ın hesapladığı üzere dakikada kabaca 10 milyon dolarlık bir hız.
Tek flag, iki anlam
Yeni kod taze bir toggle almadı. SEC kararına göre, kod daha önce Power Peg'i — Knight'ın 2003'te emekliye ayırdığı ama hiç silmediği bir emir gerçekleştirme işlevini — etkinleştiren bir flag'i yeniden kullanmaya başladı; Power Peg ortadan kalktığında, eski flag'in "evet"i artık yeni davranışı açması gerekiyordu.
Bu, güncellenen yedi sunucuda böyle oldu. Sekizincisinde flag hâlâ Power Peg'i çağırıyordu — ve bu işlev bozuktu. Knight, 2005'te bir üst emrin (parent order) tamamlandığını Power Peg'e bildiren kümülatif miktar kontrolünü taşıdı ve emekliye ayrılan işlev sonrasında bir daha hiç test edilmedi. 2012'de yeniden hayata döndürüldüğünde, hiçbir durma koşulu olmadan kesintisiz alt emirler gönderdi. SEC, milyonlarca giden alt emir üreten 212 üst emir sayıyor.
Kimse görmeye konumlanmamışken gelen uyarılar
İşlemler başlamadan önce, saat 08:01'den itibaren dahili bir sistem "Power Peg disabled" bildiren 97 e-posta gönderdi. Bunlar alert olarak tasarlanmamıştı, personel gelen kutusuna düşüyorlardı ve kimse üzerinde işlem yapmadı.
Diğer kontroller de aynı derecede pasifti. Başıboş işlemler, 2 milyon dolar brüt limitine hiçbir otomatik yaptırım bağlanmamış bir tutma hesabında birikti ve PMON risk ekranı insan gözlemcilerine bağlıydı, hacim fırladığında da gecikmeli kalıyordu. SEC ayrıca Knight'ın yönlendiricinin kendisi hatalı davrandığında SMARS'ı durdurmak için bir prosedürü olmadığını tespit etti.
Sorunu daha da kötüleştiren bir geri alma
Olay playbook'u olmadığından personel canlı piyasada sezgisel olanı yaptı: yeni kodu doğru şekilde güncellenen yedi sunucudan kaldırdılar. SEC kararının kaydettiği gibi, bu sorunu daha da kötüleştirdi — yeni kod kaldırıldığında flag eski anlamına geri döndü ve Power Peg sekiz sunucunun tamamında çalıştı. Bir rollback, yalnızca önceki sürüm güvenliyse güvenlidir ve burada önceki sürüm tehlikeyi içeriyordu.
Etki alanı
Zarar yalnızca Knight'ın değildi. 75 hisse senedinde Knight'ın işlemleri hacmin yüzde 20'sini aştı ve fiyatları yüzde 5'ten fazla hareket ettirdi; SEC kararına göre bu vakaların 37'sinde firma hacmin yarısından fazlasından ve yüzde 10'u aşan fiyat hareketlerinden sorumluydu.
Knight yalnızca 6 Ağustos'ta hisse başına yaklaşık 1,50 dolara dönüştürülebilir 400 milyon dolarlık bir kurtarma paketiyle ayakta kaldı ve 8-K bildirimlerine göre Aralık'ta GETCO ile hisse başına 3,75 dolardan birleşmeyi kabul etti. Ekim 2013'te SEC 12 milyon dolarlık bir ceza kesti — bu, Piyasa Erişim Kuralı (Market Access Rule) kapsamındaki ilk yaptırım eylemiydi.
Neden önemli
Baştan çıkarıcı okuma "bir teknisyen bir sunucuyu gözden kaçırdı" şeklinde, ancak dev.to anlatımı bu kişiyi ortadan kaldırsanız bile aynı başarısızlığın başka herhangi bir günde tek bir yazım hatası uzağınızda kalacağını savunuyor. Ortaya çıkan her koşul bir karardı:
Yeni bir flag yaratmak yerine mevcut birini yeniden kullanmak, böylece aynı ayar farklı sunucularda farklı anlamlara gelmek.
Ölü kodu silmek yerine dokuz yıl boyunca çağrılabilir bırakmak.
2005'teki refactor Power Peg'in durma koşulunu sessizce bozduktan sonra yeniden testi atlamak.
Sekiz sunucunun tamamının eşleştiğini doğrulayan hiçbir kontrol olmaksızın elle, doğrulanmamış bir dağıtım yürütmek.
Kanamayı durduracak otomatik limit, eyleme dönüştürülebilir alert veya kill switch bulunmaması.
Feature flag'ler ardında yazılım teslim eden ekipler bugün aynı geometriyle karşı karşıya. Benzersiz flag isimleri, ölü kodu flag'lemek yerine silmek, doğrulamalı otomatik dağıtımlar, uyarı mesajlarını gürültü değil sinyal olarak ele almak ve bir rollback'in gerçekte neyi yeniden etkinleştirdiğini test etmek, kötü bir deploy ile ölümcül bir deploy arasındaki farktır.
- #feature-flags
- #deployment
- #incident-postmortem
- #fintech
- #risk-management