These forums have been archived and are now read-only.

The new forums are live and can be found at https://forums.eveonline.com/

EVE Technology Lab

 
  • Topic is locked indefinitely.
123Next pageLast page
 

Real-time market data service: EVE Market Data Relay

Author
Ilyk Halibut
Deep Core Mining Inc.
Caldari State
#1 - 2012-04-13 05:55:22 UTC  |  Edited by: Ilyk Halibut
EVE Market Data Relay is a publicly accessible, highly-available, highly-scalable, real-time market data feed. Players point their uploads at EMDR, and we relay it to anyone who would like to receive the data. All data is validated and relayed in Unified Uploader and Data Interchange Format to all connected consumers.

The idea is to lower the barrier to entry for developers who are working on, or thinking about working on market data-driven sites or applications (this is not limited to being useful on just websites). Instead of having to write boring pollers/scrapers/listeners for the various market sites, and/or get players to point their uploaders at you, EMDR takes care of that, giving you a firehose of data to subscribe to. Over time, we can point our users' uploaders at EMDR, and consolidate data, without some of the past concerns about stability and availability (our only single point of failure is Amazon's DNS service).

The "Using Data from the EMDR network" page shows how easy it is to get started consuming the real-time feed in a number of different languages.

For the curious/nerdy sorts, here's a High Level Overview of the project, as well as a glimpse into its innards and design.

If you are interested in, or are using EMDR, I highly recommend hopping on the mailing list. We are still in testing, things may change, and that's where you're going to get the heads-up.

Even better, join the #emdr IRC room on irc.coldfront.net and bark at me/us directly. Or just hang out, so I don't have to mutter to myself.

Project Status
EMDR has transitioned into what I would call very late beta. The only reason I haven't stuck a "1.0" label on it yet is that I'm being paranoid. We have over a dozen different regular consumers to the feed, and many more that appear and disappear throughout the course of the day.

Data Volume
Depending on activity and the day of the week, we receive anywhere from 1,000,000 to 3,000,000 uploads a day. Up-to-date traffic stats can be seen on eve-markets.com. The vast majority of these come from EVEMon's built-in uploader. We bear the brunt of the HTTP uploads so you don't have to, and instead feed you over a single, persistent, compressed connection. This makes that 1-3 million number a whole lot less of an issue, since you aren't being hammered by dozens of TCP connections every second (it adds up very quickly).

FAQ

  • A centralized data source sounds neat, but what about reliability?
  • EMDR is built in a way that eliminates all single points of failure (aside from Amazon's DNS servers). Here's a chart and a run-down showing a dual-stack model.

  • Can I get historical data from EMDR?
  • No. EMDR is only a dumb data firehose. We feed the sites that offer historical data APIs. They are the ones that serve this need, not EMDR. That said, if you find yourself constantly hammering other APIs to fill your DB, you should probably just consume EMDR and stop burdening other sites.

  • What does it cost to use this service?
  • Nothing. Additionally, if your application is in the same data center or service as one of our relays, you may not use any of your allotted bandwidth (depends on your provider).

  • Why is this better than downloading X Market Service's daily data dumps?
  • Depending on your usage case, it may not be better. EMDR is more useful to those who want timely updates to market data, and those who don't want to write software that pulls data from a number of different market sites.

  • Why not just use EVE Central's SMTP data feed?
  • EVE Central's SMTP service is the closest equivalent to EMDR. However, SMTP is horribly suited to the volume of data that we now deal with. Mails are not compressed, can be erratic as far as delivery times, and if EVE Central's SMTP servers go down, you're without data. EMDR is built from the ground up for high availability, and lets us deliver the data to you compressed, and in an easily readable/parsed format.

  • Is the source code available for this project?
  • Yes, and it's BSD licensed.

  • I have some resources to volunteer. What do I do to help?
  • We'd love to have you! See our Volunteering computing resources page.

EVE Market Data Relay - A real-time feed of EVE Market data http://www.eve-emdr.com

Desmont McCallock
#2 - 2012-04-13 08:21:43 UTC  |  Edited by: Desmont McCallock
I see that you are currently using the EMK & EMD format for uploaded data. What about the unified format?
Shellac Brookdale
Cutting Edge Incorporated
#3 - 2012-04-13 09:07:42 UTC
Wow, this looks really ambitious. The technology stack is also sexy. I'd love to play around with ZMQ a bit.
However, I'm not sure how useful such a service will be for real world applications, as you don't seem to provide any kind of query methods to access already broadcasted orders. I'm not sure what kind of applications you had in mind when creating this. But being able to pull orders from a certain point back in time would certainly help for apps that won't be online 24/7 and need to keep in sync.

Another approach would be a http feed based solution such as:
http://code.google.com/p/pubsubhubbub/
Its based on HTTP and would allow more flexible access to orders by e.g. using URLs for different market categories or regions, access to archived data and caching and load balancing methods.

Ilyk Halibut
Deep Core Mining Inc.
Caldari State
#4 - 2012-04-13 13:32:57 UTC
We support EMK/EMD and Unified Uploader format. If you're talking about the instructions here, I couldn't suggest using Unified Uploader format because, ironically, the EVE Unified Uploader doesn't support the format yet :)

Are there any other clients that do? I'd love to get testing with them. I can share details on how to upload.

Desmont McCallock wrote:
I see that you are currently using the EMK & EMD format for uploaded data. What about the unified format?

EVE Market Data Relay - A real-time feed of EVE Market data http://www.eve-emdr.com

Ilyk Halibut
Deep Core Mining Inc.
Caldari State
#5 - 2012-04-13 13:39:55 UTC
Such a service would probably better be accomplished by someone who is subscribed to our firehose, who stored and offered the data up to others. Perhaps one of the other major market sites will get on board eventually. However, historical data is outside the scope of EMDR. I'm not being stubborn, EMDR is just going to do one thing and do it really well. If someone wants to take the data and make it available on their market site, I will gladly point to them in the docs as a source of historical data that at least partially came through EMDR.

Shellac Brookdale wrote:

However, I'm not sure how useful such a service will be for real world applications, as you don't seem to provide any kind of query methods to access already broadcasted orders. I'm not sure what kind of applications you had in mind when creating this. But being able to pull orders from a certain point back in time would certainly help for apps that won't be online 24/7 and need to keep in sync.


I guess it does technically rule out a lot of desktop/mobile apps, since they aren't online 24/7, but my primary intended audience is those that want near real-time access to market data. For that particular usage case, EMDR is synonymous to getting uploader data over HTTP, but much more fast, reliable, and efficient. In other words, this is probably most appropriate for websites, or real-time trading applications in the case of a desktop/mobile app (with historical backfilling from EVE Central or EMK/EMD).

EVE Market Data Relay - A real-time feed of EVE Market data http://www.eve-emdr.com

Desmont McCallock
#6 - 2012-04-13 13:43:45 UTC  |  Edited by: Desmont McCallock
I created the EVECacheParser library in order to use it to built in EVEMon an uploader (EVEHQ will use it too at some point). I intent to support only the unified uploading format so to kinda 'force' the market data sites devs to support that format.
As soon as I have the uploader coded and I'm ready to test, I'll drop you all a pm to notify you about it.

Edit: And of course you will have to create another URL as the endpoint for those using a unified format uploader.
Ilyk Halibut
Deep Core Mining Inc.
Caldari State
#7 - 2012-04-13 13:59:26 UTC
Excellent. I quite literally just updated the uploading documentation to include specifics for Unified Format uploading. This may be useful for your test purposes.

Desmont McCallock wrote:
I created the EVECacheParser library in order to use it to built in EVEMon an uploader (EVEHQ will use it too at some point). I intent to support only the unified uploading format so to kinda 'force' the market data sites devs to support that format.
As soon as I have the uploader coded and I'm ready to test, I'll drop you all a pm to notify you about it.

Edit: And of course you will have to create another URL as the endpoint for those using a unified format uploader.


If you let me know when you support the Unified Format, I'll add you to our list on the instructions page as a client that supports it, and may go as far as screenshotting the config process for our users.

EVE Market Data Relay - A real-time feed of EVE Market data http://www.eve-emdr.com

Desmont McCallock
#8 - 2012-04-13 14:04:31 UTC
Further more I intent to provide you with code in C# for the using page.
Ilyk Halibut
Deep Core Mining Inc.
Caldari State
#9 - 2012-04-13 14:16:18 UTC
That would be awesome. Thanks!

Desmont McCallock wrote:
Further more I intent to provide you with code in C# for the using page.

EVE Market Data Relay - A real-time feed of EVE Market data http://www.eve-emdr.com

Ilyk Halibut
Deep Core Mining Inc.
Caldari State
#10 - 2012-04-15 04:35:42 UTC
We've had a good deal of interest, and the network appears to be handling the subscribers without a hitch. The outbound compression of the data has kept us under 32 MB outbound a day, with our current "replicate EVE Central's feed" data set. Considering that EVE Central appears to be sending us about 320 MB a day, this is a pretty nice ratio.

We'll see how the usage data looks as we add more market data (we're talking to other market sites about getting involved), and may find that we don't need to get very fancy with our relays at all.

EVE Market Data Relay - A real-time feed of EVE Market data http://www.eve-emdr.com

LifeHatesMe
LifeHatesUsAll
#11 - 2012-04-15 19:14:25 UTC
Ilyk Halibut wrote:
We've had a good deal of interest, and the network appears to be handling the subscribers without a hitch. The outbound compression of the data has kept us under 32 MB outbound a day, with our current "replicate EVE Central's feed" data set. Considering that EVE Central appears to be sending us about 320 MB a day, this is a pretty nice ratio.

We'll see how the usage data looks as we add more market data (we're talking to other market sites about getting involved), and may find that we don't need to get very fancy with our relays at all.

Holy batman, you use the same service I use! +1 for Linode. I do have to ask two questions tho;

1. Are you doing any error detection for bogus submissions that are not valid?
2. Which linode location are you located at, and why haven't you setup a alias for;
tcp://relay-linode-atl-1.eve-emdr.com:8050

Let me know, thanks!
Ilyk Halibut
Deep Core Mining Inc.
Caldari State
#12 - 2012-04-15 21:57:03 UTC
LifeHatesMe wrote:

1. Are you doing any error detection for bogus submissions that are not valid?


At this point, it's pretty basic, but we do catch some obviously bogus submissions. We'll be improving this with time, though. Ideas are welcome.

LifeHatesMe wrote:

2. Which linode location are you located at,


We're still in initial test deploy mode, so just Atlanta right now. We'll be looking to add additional relays on other providers and other regions within Linode (and other providers) once I have the setup process streamlined a bit. However, we're finding resource util to be so low that there is very little downside to connecting and consuming the feed from other providers right now.

LifeHatesMe wrote:

and why haven't you setup a alias for; tcp://relay-linode-atl-1.eve-emdr.com:8050


ZeroMQ has no notion of aliases. It needs a URI to something, whether it be a TCP socket, a local IPC socket, or etc. When you write an application that connects to EMDR, you are using your language's bindings for ZeroMQ, which is maintained by someone other than me. So I really have nothing to do with that, and there's no way to "alias" the URI, since EMDR requires no "EMDR client". Make sense?

EVE Market Data Relay - A real-time feed of EVE Market data http://www.eve-emdr.com

Vaerah Vahrokha
Vahrokh Consulting
#13 - 2012-04-15 22:44:06 UTC
The idea is very good, but in RL finance the pure real time feeds are a minority and mostly used for pure buy / sell trading platforms.

All the others (I'd say 95 percent of the existing platforms) have a mechanism to query for past data up to present or from time X to time Y.

Without past data storage many of the advanced trading tecniques cannot be used.

Example:

This whole thread.

What can be achieved with data feed + history:

Tritanium, on professional trading platform

Nitrogen Isotopes, on Microsoft Excel graph

Nitrogen Isotopes, with very clear price action

Technetium, on a semi-professional trading platform

There is data available from 2009 (already digested in various formats including industry OHLC, on EvEMarketeer.com) but also older data (EvE Central stored data).

For how EvE markets are structured and because of the lack of leverage, the minimum resolution you can really work with is daily prices.

Having a continuous stream is fantastic but without the ability to go back at least 2 years (even with just daily data) it really falls short.
Ilyk Halibut
Deep Core Mining Inc.
Caldari State
#14 - 2012-04-16 00:22:48 UTC
Vaerah, I think you may be missing the primary usage case for EMDR.

As far as a market-driven site is concerned, the feed is the exact same thing as having player upload clients pointed at your site. The big difference is that instead of an inefficient smattering of HTTP requests, EMDR feeds you a compressed, fast stream of market data. The actual contents are identical to what a client supporting Unified Uploader Interchange format would be sending to you directly.

You can't think of EMDR as a substitute for actually storing the data, it is only a firehose to feed your data store. If you need historical data, store the stream, or fill in your gaps from external services.

So think of it as a substitute for needing to have uploaders pointed specifically at you. Additionally, it's a central place that the players can point their uploaders at, where the greater community of market sites can get to it. The current reality is that people are forced to solicit their users to point uploaders at their site, and data is supplemented by EVE Central's SMTP feed. If we combined more of our data, we'll all be better off.

EVE Market Data Relay - A real-time feed of EVE Market data http://www.eve-emdr.com

LifeHatesMe
LifeHatesUsAll
#15 - 2012-04-16 02:44:05 UTC  |  Edited by: LifeHatesMe
Ilyk Halibut wrote:
[...]

So think of it as a substitute for needing to have uploaders pointed specifically at you. Additionally, it's a central place that the players can point their uploaders at, where the greater community of market sites can get to it. The current reality is that people are forced to solicit their users to point uploaders at their site, and data is supplemented by EVE Central's SMTP feed. If we combined more of our data, we'll all be better off.
I agree with Vaerah, without historical data this does not seem much different than being apart of the unified data uploader tool. Specifically because it introduces a different point of failure where a developer (like me) does not necessarily need a feed as much as snapshot of transaction history for the market.
Vaerah Vahrokha
Vahrokh Consulting
#16 - 2012-04-16 08:41:31 UTC
Ilyk Halibut wrote:
Vaerah, I think you may be missing the primary usage case for EMDR.


I don't miss it, I actually used a similar service with Infinity Futures (a futures broker).

What you miss is that your service at time = 0 has value only in the technical achievement point of view and its finance POV value will slowly increase as the connected 3rd party websites will store more and more of the data.

But if you start with zero history data, it'll take months before the stored data is of good and / or statistical use.

If you are just after the technology per se, then ok.
Ilyk Halibut
Deep Core Mining Inc.
Caldari State
#17 - 2012-04-16 13:48:41 UTC
Vaerah Vahrokha wrote:

But if you start with zero history data, it'll take months before the stored data is of good and / or statistical use.


Again, EMDR is a replacement for having uploaders pointed at your site directly. It is for market sites to get their users pointed at a central place in order to combine incoming data feeds. Instead of X player's uploads just going to EVE Central or EVE Marketeer, their uploads go to everyone. That is the point, not historical data.

If you need historical data and you're not storing any of your own, EMDR is not for you. There is an entry in the FAQ above that says as much. EMDR is more appropriate for the sites that store the feed. For sites that are just getting started out, I recommend connecting to EMDR, and backfilling data from EVE Central, EVE Marketeer, and EVE Market data as needed.


EVE Market Data Relay - A real-time feed of EVE Market data http://www.eve-emdr.com

Ilyk Halibut
Deep Core Mining Inc.
Caldari State
#18 - 2012-04-16 13:53:11 UTC
LifeHatesMe wrote:

agree with Vaerah, without historical data this does not seem much different than being apart of the unified data uploader tool.


That's just the thing, you should be thinking of it as a uploader tool :) That's the point! It's an uploader firehose that anyone can use, instead of just one site.

LifeHatesMe wrote:

Specifically because it introduces a different point of failure where a developer (like me) does not necessarily need a feed as much as snapshot of transaction history for the market.


Since you are currently dependent on other sites for your data, it actually reduces failure points. EMDR is highly distributed, and has no single point of failure. In fact, you can connect to multiple Relay nodes to protect yourself against one of them going down. You have no such flexibility with any of the other real-time means of getting market data (EVE Central SMTP and having uploader clients pointed at you).

The best way to think of EMDR is as an upload tool that combines data from all over the place for you. If you don't want/need real-time data, or don't want to store said data, it is not for you.

EVE Market Data Relay - A real-time feed of EVE Market data http://www.eve-emdr.com

Snarf Aldes
University of Caille
Gallente Federation
#19 - 2012-04-16 16:04:15 UTC
Hi,
I have been playing around with emdr over the weekend, and I like the idea.

I do however have some questions/remarks.

In an ideal world, everyone would upload only to emdr, and not to any of the market data sites. The sites would all get their data from emdr and would not have to supply any data to emdr.

Unfortunately, we do not live in an ideal world, so the situation will be something like this:

Users will upload to (multiple) market data sites and emdr, and market data sites will supply data to emdr (like eve-central is doing now).

Now consider the following situation, a user is uploading to a total of 4 endpoints: eve-central, eve-marketeer, emdr and eve-addicts.
Eve-central, eve-marketeer and eve addicts all push the uploads they are getting to emdr. Lets say they are smart and don’t push anything they get from emdr back into the relay system.

Eve-central, eve-marketeer and eve addicts all also subscribe to emdr.

Now the user uploads data for item X, I get it directly, and I get it an additional 3 times from emdr (once from the direct user upload to emdr and twice from the 2 other sites).

Currently there is no way for me to see that I have already received that data directly. So I have to accept and process all copies I get from emdr.

This can be resolved, but it requires a change in the json layout. If the uploading client software sends its destinations, for instance the urls it’s uploading to, then I as an endpoint can see if the data was already sent to me directly, and just discard it if it comes in again via emdr.

For example:
“destinations” : [
{“url”:”http://eve.addicts.nl/api/upload.php”}
{“url”:”http://www.evemarketeer.com/api/upload”}
{“url”:”http://master.eve-emdr.com/upload/eve_marketeer/”}
{“url”:”http://eve-central.com/datainput.py/inputdata”}
]

Destinations should not be deleted, only added to by intermediate sites if they upload it somewhere else.
If I would see that emdr is in the list, I don’t have to push it into the relay system, if it’s not I can decide to upload it after adding the url for emdr to the list.

This would ofcource only work for uploaders using the unified format.

So, the bottom line, I like the idea, but at the moment I’m a bit concerned about all the duplicate data that I will have to process if I scubscribe to the stream. Without a way to tell if you have already seen the data before, it will require a significant amount of processing to work through all the duplicates.

Snarf

Creator of Eve Addicts

Ilyk Halibut
Deep Core Mining Inc.
Caldari State
#20 - 2012-04-16 16:13:03 UTC  |  Edited by: Ilyk Halibut
I think the destinations field makes a lot of sense. I'll have to dig up the thread for discussing the spec and point them here. I help out some with the Unified Uploader client, so I could submit a pull request for this if it sounds good to everyone.

Edit: Posted here: https://forums.eveonline.com/default.aspx?g=posts&m=1139899#post1139899

EVE Market Data Relay - A real-time feed of EVE Market data http://www.eve-emdr.com

123Next pageLast page