report: add introduction

This commit is contained in:
Bruno BELANYI 2021-07-20 19:36:46 +02:00
parent 46d6011c8a
commit d9ee4abd06

View file

@ -36,6 +36,50 @@ and my girlfriend Sarah for her unwavering support.
# Introduction
My internship is about benchmarking the new service being used at IMC for
connecting to and communicating with exchanges.
IMC is a technology-driven trading company, specializing in market making on
various exchanges world-wide. Due to this position, they strive for continuous
improvement by making use of technology. And in particular, they have to pay
special attention to the performance of their trading system across the whole
infrastructure.
In the face of continuous improvement of their system, the performance aspect of
any upgrade must be kept at the forefront of the mind in order to stay
competitive, and rise to a dominant position globally.
My project fits into the migration of IMC's trading algorithms from their legacy
*driver* connecting each of them directly to the exchanges, to a new central
service being developed to translate and interface between IMC-internal
communication and exchange-facing orders, requests, and notifications.
Given the scale of this change, and how important such a piece of software is in
the trading infrastructure of the company, the performance impacts of its
introduction and further development must be measured, and its evolution
followed closely.
The first part of my internship was about writing a framework to benchmark such
a gateway with a dummy load being generated according to scenarios that can
simulate varying circumstances. From those runs, it is also in charge of
recording the performance measurements that it has gathered from the gateway,
allowing for further analysis of a single run and comparison of their evolution
as time goes on.
This initial work being finished, I integrated my framework with the tooling in
use at IMC to allow for smoother use of the runner, either locally for
development purposes or remotely for measurements. This is also used to test for
breakage in the Continuous Integration pipeline, to keep the benchmarks runnable
as changes are merged into the code base.
Once that was done, I then picked up a user story about compatibility testing:
with the way IMC deploys software, we want to ensure that both the gateway and
its clients are retro and forward compatible to avoid any surprises in
production. This was only ensured at the protocol level when I first worked on
this subject, my goal being to add tests using the actual binaries used in
production to test their behaviour across various versions, ensuring that they
behave identically.
# Subject
The first description of my internship project was given to me as: