SpiderStream
Overview
SpiderStream multicast data feeds are distributed from SpiderRock datacenters using proprietary record layouts. All SpiderStream multicast feeds utilize publicly assigned and routable multicast addresses and cna be transported over standard 1/10/40/100 Gb IP network links.
SpiderStream data is organized into records which have a primary key. When the state of a record with a given primary key changes, an update message with that primary key is sent on the Feed.
To allow an application to obtain the current state of records of interest, SpiderStream data records are available from SpiderRock hosted cache servers.
SpiderStream multicast data is also consumed by our SRSE/SQL servers and can be accessed from those servers using traditional SQL queries. If you are looking for a semi-live query-able datasource, you should consider this product.
Connectivity
A connection to SpiderRock is required in order to access SpiderStream data. Currently, the following are supported:
- Cross connect with SpiderRock in either Equinix CH2 (Chicago) or Equinix NY4 (New Jersey).
- Connect via a commercial network provider. Contact SpiderRock customer support for more details.
SpiderStream Data Provisioning
SpiderStream data is delivered via a series of data channels where each channel corresponds to a unique public IP multicast address and also a unique multicast port. Clients are typically provisioned to only receive individual channels or channel groups. Provisioning, in the case of certain live market data streams, may require approval of the originating exchange or data source and may incur additional data fees.
SpiderStream Message Layouts
SpiderStream message layouts are designed for fast message parsing using struct overlay (blitting) techniques - however, any suitable parsing technique could be used.
All individual messages have the following layout: [FIX LENGTH HEADER] [FIXED LENGTH KEY] [BODY].
Individual IP packets may contain one or more messages laid out sequentially. The maximum size of a transmitted UDP packet is 1,500 bytes (1 MTU). Fragmented UDP packets are not transmitted.
Note:
Fields in the message BODY can be either fixed or variable length. Typically, only fixed length fields are used for high velocity messages.
A SpiderStream API is available in C++ and in C# on GitHub. The API can be used to parse SpiderStream messages. The documentation can also be used to review message layout on the wire.
Message Header
Each message begins with a fixed length header, which includes the following information:
| Field Name | Field Description |
|---|---|
| SysEnvironment | None=0, V7_Stable=3, V7_Latest=4 |
| message_type | See the message summary for type values. |
| source_id | Sequence number source |
| sequence_number | |
| sent_time | Datacenter synchronized timestamp |
| message_length | Length of the message (inclusive of this header) |
| key_length | Length of the message key |
See cpp/include/SpiderRock/DataFeed/Header.H in the SRDataFeed repository for details about header field data types and layout.
SpiderStream Data Channels
The following SpiderStream channels are available:
| Multicast Channel | Multicast Address | Multicast Port |
|---|---|---|
| CfeAdmin | 233.74.249.27 | 30277 |
| CmeAdmin | 233.74.249.25 | 30275 |
| EqtAdmin | 233.74.249.28 | 30278 |
| FundQuoteMfqs | 233.74.249.39 | 30289 |
| FutNbboQuoteV | 233.74.249.45 | 30295 |
| FutNbboQuoteX | 233.74.249.43 | 30293 |
| FutNbboQuoteY | 233.74.249.44 | 30294 |
| FutPrintMarkupCbot | 233.74.249.185 | 30435 |
| FutPrintMarkupCfe | 233.74.249.189 | 30439 |
| FutPrintMarkupCme | 233.74.249.184 | 30434 |
| FutPrintMarkupComex | 233.74.249.187 | 30437 |
| FutPrintMarkupIce | 233.74.249.188 | 30438 |
| FutPrintMarkupNymex | 233.74.249.186 | 30436 |
| FutQuoteCbot | 233.74.249.22 | 30272 |
| FutQuoteCfe | 233.74.249.41 | 30291 |
| FutQuoteCme | 233.74.249.21 | 30271 |
| FutQuoteComex | 233.74.249.24 | 30274 |
| FutQuoteIce | 233.74.249.20 | 30270 |
| FutQuoteNymex | 233.74.249.23 | 30273 |
| IceAdmin | 233.74.249.26 | 30276 |
| IdxQuoteCboe | 233.74.249.53 | 30303 |
| IdxQuoteMIAX | 233.74.249.54 | 30304 |
| IdxQuoteSR | 233.74.249.52 | 30302 |
| Imbalance | 233.74.249.169 | 30419 |
| ImbalanceArca | 233.74.249.170 | 30420 |
| ImbalanceNasdaq | 233.74.249.172 | 30422 |
| ImbalanceNyse | 233.74.249.171 | 30421 |
| ImpliedQuoteCbot | 233.74.249.63 | 30313 |
| ImpliedQuoteCme | 233.74.249.62 | 30312 |
| ImpliedQuoteComex | 233.74.249.65 | 30315 |
| ImpliedQuoteIce | 233.74.249.66 | 30316 |
| ImpliedQuoteNmsA | 233.74.249.71 | 30321 |
| ImpliedQuoteNmsB | 233.74.249.71 | 30321 |
| ImpliedQuoteNmsC | 233.74.249.72 | 30322 |
| ImpliedQuoteNmsD | 233.74.249.72 | 30322 |
| ImpliedQuoteNmsE | 233.74.249.73 | 30323 |
| ImpliedQuoteNmsF | 233.74.249.73 | 30323 |
| ImpliedQuoteNmsG | 233.74.249.74 | 30324 |
| ImpliedQuoteNmsH | 233.74.249.74 | 30324 |
| ImpliedQuoteNmsLoop | 233.74.249.61 | 30311 |
| ImpliedQuoteNymex | 233.74.249.64 | 30314 |
| NmsSpreadQuote | 233.74.249.17 | 30267 |
| OptNbboQuoteA | 233.74.249.11 | 30261 |
| OptNbboQuoteB | 233.74.249.11 | 30261 |
| OptNbboQuoteC | 233.74.249.12 | 30262 |
| OptNbboQuoteD | 233.74.249.12 | 30262 |
| OptNbboQuoteE | 233.74.249.13 | 30263 |
| OptNbboQuoteF | 233.74.249.13 | 30263 |
| OptNbboQuoteG | 233.74.249.14 | 30264 |
| OptNbboQuoteH | 233.74.249.14 | 30264 |
| OptNbboQuoteSpx | 233.74.249.15 | 30265 |
| OptNbboQuoteX | 233.74.249.18 | 30268 |
| OptNbboQuoteY | 233.74.249.19 | 30269 |
| OptQuoteCbot | 233.74.249.32 | 30282 |
| OptQuoteCme | 233.74.249.31 | 30281 |
| OptQuoteComex | 233.74.249.34 | 30284 |
| OptQuoteIce | 233.74.249.30 | 30280 |
| OptQuoteNymex | 233.74.249.33 | 30283 |
| OTCNbboQuote | 233.74.249.5 | 30255 |
| StkNbboQuoteA | 233.74.249.1 | 30251 |
| StkNbboQuoteB | 233.74.249.1 | 30251 |
| StkNbboQuoteC | 233.74.249.2 | 30252 |
| StkNbboQuoteD | 233.74.249.2 | 30252 |
| StkNbboQuoteE | 233.74.249.3 | 30253 |
| StkNbboQuoteF | 233.74.249.3 | 30253 |
| StkNbboQuoteG | 233.74.249.4 | 30254 |
| StkNbboQuoteH | 233.74.249.4 | 30254 |
| StkPrintMarkup | 233.74.249.180 | 30430 |