Too start with its fantastic to see an open source system which has abstract components which the end user can tailor for their own requirements.
I had a question regarding live data. My understanding to build our own live data server we can extend the StandardLiveDataServer abstract class. Would that be correct?
If we had to build a LiveDataServer which based on Product type would be able to determine which vendor to subscribe. e.g. for Bonds --> Bloomberg, Equities --> Reuters… etc. This would give additional flexibility to clients to chose multiple vendors. I understand that open gamma is not built just to provide live data and this may be an over-engineered solution. Do you think this would be possible and would appreciate getting your had thoughts on this.
My initial thoughts are
- The subscription object looks generic enough to handle this as it works with a security unique id. (The ticks are also stored in the FieldHistoryStore in the subscription object)
- When overriding subscribe and unsubscribe we could have strategies to determine which vendor to subscribe with.
- However, the method to determine the uniqueID is based on the method which returns ExternalScheme, getUniqueIdDomain i.e.
String securityUniqueId = fullyQualifiedSpec.getIdentifier(getUniqueIdDomain()) [StandardLiveDataServer:Subscribe(line 495)]. The unique Id this way is linked to the Server and not the product (or some other identifier).
Another alternative, maybe to implement multiple StandardLiveDataServers (for each required vendor) and build a layer on top which delegates responsibility to appropriate StandardLiveDataServer based on requirements (e.g. product), however in this case i believe we would have to move the Subscriptions(tick data) into this new layer as an aggregation point for subscriptions.
The other question was around load balancing and cache synchronization, As the cache is with the StandardLiveDataServer, if live data server is unavailable how would one load balance, would you envisage this to be custom implementation where the caches are kept synchronized across multiple nodes. (We would be expecting multiple clients outside of OpenGamma, hence availability/redundancy would be a key issue).
Thanks in advance for your help.