· kaynak dev.to (home feed)
Knight Capital, tek bir sunucunun deploy'u kaçırdığı için 45 dakikada 440 milyon dolar kaybetti
dev.to'da yayımlanan ve SEC'in Knight Capital kararını ele alan bir yazı, sekiz sunucudan yedisine ulaşan manuel bir deploy'un, 2003'ten beri ölü durumdaki kodun milyonlarca hatalı emir göndermesini nasıl sağladığını anlatıyor.

1 Ağustos 2012'de, piyasa yapıcılık firması Knight Capital, yaklaşık 45 dakikalık işlemde kabaca 440 milyon dolar kaybetti. SEC'in firmaya karşı açtığı 2013 tarihli ceza kararına (Release No. 34-70694) dayanan bir dev.to retrospektifi, olayın nasıl yaşandığını adım adım anlatıyor: sızma yoktu, haydut bir yatırımcı yoktu; yalnızca hiç silinmemiş eski bir yazılım, bir makineyi kaçıran elle yapılan bir deploy ve kimsenin okumadığı bir uyarı akışı vardı.
Olayın merkezindeki router
Anlatıya göre Knight, 2011 ve 2012'de ABD'de işlem gören hisselerdeki tüm işlemlerin yaklaşık onda birini elinde tutuyordu. Altyapısının merkezinde SMARS adlı otomatik bir router vardı; büyük "parent" emirleri alıyor, bunları daha küçük "child" emirlere bölüyor ve bunları borsalara gönderiyordu. SMARS içindeki bir sayaç, kümülatif fill'leri takip ediyor ve bir parent emir tamamlandığında, child emirlerin durdurulması gerektiğini bildiriyordu. Bu sayaç, sonrasında anlatacaklarımızın tümü için kritik.
Emekli edildiği halde hiç gitmeyen kod
SMARS, Power Peg adlı eski bir özellik içeriyordu; Knight bunu 2003'te kullanmayı bırakmış ama kodu silmemişti. 2005'te fill sayacı kod tabanının farklı bir bölümüne taşındı; Power Peg bir daha hiç test edilmedi, bu yüzden bir emrin tamamlandığını anlamak için nereye bakması gerektiğini artık bilmiyordu. NYSE, 1 Ağustos 2012'de yürürlüğe giren yeni bir perakende programı başlattığında, Knight bunun için yeni SMARS kodu yazdı. Geliştiriciler, özelliği etkinleştirmek için yeni bir flag tanıtmak yerine, eskiden Power Peg'i tetiklemiş olan flag'i yeniden kullandı; eski kodun her yerde değiştirileceği varsayımıyla.
Bir makineyi kaçıran manuel deploy
27 Temmuz 2012'den itibaren bir teknisyen, yeni kodu birkaç güne yayarak SMARS'ın sekiz sunucusuna elle kopyaladı. Yedi sunucu kodu aldı; sekizincisi almadı ve Power Peg'li sürümü çalıştırmaya devam etti. dev.to yazısı, deployment'ı ikinci bir kimsenin incelemediğini ve SMARS ekibinin, Knight'taki diğer ekiplerin aksine, böyle bir inceleme gerektiren yazılı bir prosedüre sahip olmadığını belirtiyor.
Okuyucusu olmayan 97 mesaj
Açılıştan önce, saat 08.01'den itibaren, Knight'ın bir sistemi, "Power Peg disabled" hatasıyla etiketlenmiş SMARS emirleri hakkında bir grup çalışana e-posta göndermeye başladı. Saat 09.30'a dek 97 e-posta gönderilmişti. Bunlar eyleme dönüştürülebilir alert'ler olarak tasarlanmamıştı ve yazıda atıfta bulunulan SEC kaydına göre, tam olarak hatayı adlandırmalarına rağmen genel olarak kimse bunları okumuyordu.
45 dakikalık kontrolden çıkan emirler
İşlemler açıldığında, yeniden kullanılan flag'i taşıyan müşteri emirleri gelmeye başladı. Güncellenen yedi sunucu yeni perakende kodunu doğru şekilde çalıştırdı. Sekizinci sunucu Power Peg'i çağırdı; onun sayaç kontrolü başarısız oldu ve fill'lere bakmaksızın child emirler göndermeye devam etti. Knight'ın kurulumundaki diğer bölümler parent emirlerin tamamlandığını biliyordu, ama bu bilgi hiçbir zaman SMARS'a geri beslenmedi. Yazıya göre sonuç şuydu: 154 hisse üzerinden 212 müşteri emri, yaklaşık 4 milyon işleme ve toplam 397 milyondan fazla hisseye dönüştü. Personel, bir risk aracında 2 milyon dolarlık hesap limitini aşan bir pozisyonun büyüdüğünü görebiliyordu; ama araç sadece insanlara sayı gösteriyordu. Emir sistemine bağlı değildi, otomatik bir alarm vermiyor ve hiçbir şeyi kesemiyordu.
Hatayı yayan rollback
Mühendisler sorunun yeni kodda olduğunu düşünüp onu, düzgün çalışan yedi sunucudan kaldırdılar. Emirler yeniden kullanılan flag'i taşımaya devam ediyordu; böylece artık sekiz sunucunun tamamı Power Peg'i uyandırdı.
Fatura
İşlem durduğunda Knight, hiç satın almayı amaçlamadığı yaklaşık 3,5 milyar dolarlık hisseye sahipti ve sahip olmadığı kabaca 3,15 milyar dolarlık hisseyi satmıştı. Firma zararı başlangıçta 440 milyon dolar olarak tahmin etti; SEC daha sonra bu tutarı 460 milyon doların üzerinde açıkladı. 37 hissede fiyatlar yüzde 10'dan fazla hareket etti ve hacmin büyük kısmını Knight oluşturdu. Yatırımcılar firmayı ayakta tutmak için beş gün sonra 400 milyon dolar enjekte etti; firma bir yıl içinde bir rakibiyle birleşti ve SEC, piyasa erişim kuralı gereği zorunlu risk kontrollerine sahip olmadığı için firmaya 12 milyon dolar ceza verdi.
Neden önemli
Bu hikâye hâlâ güncel, çünkü tek bir karar bile alındığı gün pervasız görünmüyordu ve rahatsız edici olan da bu. Yazının çıkardığı dersler, finansın çok ötesinde herhangi bir production sistemine uygulanabilir. Ölü kodu silin, çünkü devre dışı bırakılmış kod hâlâ çağrılabilir. Bir flag'i asla farklı özellikler arasında yeniden kullanmayın, çünkü eski yollar kimsenin aklına gelmeyen yollarla erişilebilir hale gelir. Deployment'ları otomatikleştirin ve her instance'a çalıştırdığı sürümü bildirtin; böylece sekizinci bir sunucu saklanamaz. Kill switch'i ihtiyaç duymadan önce kurun, çünkü makine hızındaki bir zararı durdurmak, önce hatayı anlamaya bağlı olmamalı. Ve kimsenin okumadığı bir alert'i gürültü olarak görün; çünkü yok sayılan 97 mesaj, önemli olan tek sinyali boğdu.
- #deployment
- #incident-postmortem
- #legacy-code
- #trading-systems
- #software