geecon prague 2015 - what i learned writing a trillion dollar trading system

56
What I Learned Writing a Trillion $ Trading System Nick Zeeb & Antonio Molina @NickZeeb @ajmolinacom 23 rd October 2015 $ $

Upload: antonio-jose-molina-gutierrez

Post on 22-Jan-2018

1.426 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

What I Learned Writing a Trillion $

Trading System

Nick Zeeb & Antonio Molina @NickZeeb @ajmolinacom

23rd October 2015

$$

Page 2: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

Challenges

{ FX Market }

Source: http://www.fxkeys.com, April 29th, 2015 by Chris Pottorff

Page 3: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ $1.9 Trillion / year }{ $7.3 Billion / day }{ $5.0 Million / minute }

Page 4: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System
Page 5: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System
Page 6: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

Challenges

{ spikes of 250,000 transactions / second }

Page 7: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

7

Page 8: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

Challenges

{ Innovation }{ Risk of Failure }

Page 9: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System
Page 10: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ simpler is better }

Plain Old Java(JavaSE)

Page 11: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ integrate integrate integrate }

Page 12: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

12

Page 13: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ feedback }

Page 14: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ embargo }

Nick and Antonio at GeeCon Prague!

Page 15: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ invest }- Virtualized dedicated system- Acceptance Tests : 664 cores, 4.9TB RAM, 5.4

TB SSD Storage, 3.3TB SAS Storage, 10.1TB NL-SAS Storage.

- Commit build: 80 cores, 128GB RAM, 1.2TB Storage.

- Staging: 240 cores, 2.3TB RAM, 4.8TB SSD Storage, 24TB NL-SAS.

- Native 10gig networking throughout CI.

Page 16: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

Classification: Public

{ everyone is a tester }

Page 17: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

Go Crazy on Tests

Acceptance Tests Integration tests

Unit tests

Software unit

Unit tests

Software unit

Unit tests

Software unit

{ test like crazy }

Client

Page 18: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ acceptance tests }

Page 19: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ acceptance tests }

@Testpublic void shouldNotLoginWithInvalidCredentials(){ tradingUI.login("user: demo", "password: NotCorrect1.",

"failureMessage: BAD_CREDENTIALS");

logsAPI.checkCustomerAuditLogContains("user: demo", "expression: Failed log on: BAD_CREDENTIALS");

}

Page 20: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ clean logs }

20

Page 21: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ reliability }

Page 22: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

@Testpublic void shouldFailOverToSecondaryMatchingEngine() {

//when coordinator.killService("primary matching engine") tradingGateway.placeOrder("id: myOrder",

"side: buy", "price: 10",

"quantity: 10"); //then tradingGateway.waitForOrder("id: myOrder",

"expectStatus: OK");}

{ reliability }

Page 23: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ performance }

Page 24: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ what does NOT work }

O(x^2)

Page 25: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ be a scientist }

Page 26: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ performance tests }

Microbenchmarks

(class, algo level)

Macrobenchmarks

(whole system)

shorter time to feedback

longer time to feedback

less realistic more realistic

Mesobenchmarks

(business operation

level)

Page 27: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ microbenchmarks }

Page 28: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ microbenchmarks }public BigDecimal myDivision(long quantity){ BigDecimal bd = BigDecimal.valueOf(quantity)

.setScale(SCALE, UNNECESSARY);

return bd.divide(DIVISOR, UNNECESSARY);}

public BigDecimal myDivision(long quantity){ BigDecimal bd = BigDecimal.valueOf(quantity); return bd.divide(DIVISOR);}

Page 29: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ microbenchmarks }

Page 30: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ macrobenchmarks }- Representative of production.- We need load generators:

- Statistical models.- Spiky scenarios.- Maintained load (red line).

- Real usage from journals.

Page 31: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ releases }

Page 32: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

Revision X

Revision X+1

{ releases }

Software changesdata migration

Page 33: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ compatibility }download & import data -> migrate -> run test

Page 34: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

@Testpublic void shouldHaveASecurityRoleForEveryRoleIdInUse() {

Collection<Integer> validIds = SecurityRole.getIds();

roleDao.getAllRolIdInUse().stream().forEach(roleId -> {

assertThat("Unexpected role ID on the DB: " + roleId, validIds.contains(roleId), is(true));

} );}

{ compatibility }

Page 35: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ staging release }

Deploy the current production revision to staging

Load production data (sanitized)

Migrate staging to the new revision that we are going to

deploy

START and CHECK system is working as expected

Page 36: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

Host1

Host3 Host2

Host4

Real Exchange(with $$$)

Testing in Live Exchange

{ testing in live }physical view of the system logical view of the system

Testing in Live(set of representative

Acceptance Test)

Page 37: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ other tests... }{ static analysis }{ invariant test }

{ configuration test }{ disaster recovery test }

Page 38: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ culture }

Page 39: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

Have Standup Meetings

{ standup }

Page 40: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

Swarm on Stories

{ swarm }

Page 41: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

Collectively Own the Code

{ everyone owns the code }

Page 42: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

Pair Program

{ pair }

Page 43: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

Don’t be a Jerk

{ be nice }

Page 44: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ rotate }

Page 45: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

Take Time to Sharpen Your Tools

{ sharpen your tools }

Page 46: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

Share Your Knowledge

{ share your knowledge }

Page 47: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

Share Your Code { share your code }

Page 48: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ share your process }

@NickZeeb@ajmolinacom

Page 49: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

Be Pragmatic

{ be pragmatic }

Page 50: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

{ last responsible moment }

Page 51: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

Avoid Irreversible Decisions

{ avoid irreversible decisions }

Page 52: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

It’s OK to Change Your Mind

{ it’s OK to change your mind }

Page 53: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

The Business Must Trust You{ trust }

Page 54: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

The Most Important Thing You’ll Do

{ find the right people }

Page 55: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

55

{ thanks! ;) }

@ajmolinacom@NickZeeb

Page 56: Geecon Prague 2015 - What I learned writing a Trillion Dollar Trading System

Images thanks to

Classification: Public

• Icons and predesigned images: Pixabay http://www.pixabay.com• Rafael Matsunaga https://www.flickr.com/photos/rednuht/ • Philippe Lewicki https://www.flickr.com/photos/lewicki/ • Martin Fisch https://www.flickr.com/photos/marfis75/ • Talus https://www.flickr.com/photos/nocallerid_man/ • Kevin Jarrett https://www.flickr.com/photos/kjarrett/ • Jeffrey Beall https://www.flickr.com/photos/denverjeffrey/ • Improve It https://www.flickr.com/photos/improveit/ • Where is wally image https://upload.wikimedia.org/wikipedia/commons/2/27/Where%E2%80%

99s_Wally_World_Record_(5846121513).jpg• Vajrapani666

https://commons.wikimedia.org/w/index.php?title=User:Vajrapani666&action=edit&redlink=1 • MECU https://commons.wikimedia.org/wiki/User:MECU • Ehsan Lebatihem https://www.flickr.com/photos/lebatihem/ • Massimo Valiani https://www.flickr.com/photos/leader_maximo/ • Skip Steuart https://www.flickr.com/photos/omnidirectional/ • Karl-Ludwig Poggemann https://www.flickr.com/photos/hinkelstone/ • Open Clipart https://openclipart.org • Miguel Librero https://www.flickr.com/photos/dark_imp666/ • Police Cars of the Ohio Valley & the Great Lakes https://www.flickr.com/groups/1597741@N24/pool/38396373@N08/• Gaming4JC at English Wikipedia http://commons.wikimedia.org/wiki/File:3DCrystal_ball.png• some guy called Darren https://www.flickr.com/photos/59239214@N08/ • JD Hancock https://www.flickr.com/photos/jdhancock/