Tech Off Thread

2 posts

Forum Read Only

This forum has been made read only by the site admins. No new threads or comments can be added.

Enterprise-level architectural question

Back to Forum: Tech Off
  • User profile image
    Larsenal

    I'm no architect.  For most of my career I've built basic web apps.  Right now I have a key role in a larger enterprise-level application.  I have a problem that I've never tackled in any fashion before.  I wanted to bounce my ideas off some Niner brains to reassure myself that I'm not going to be kicking myself 3 months down the road.

    The current problem I'm dealing with is that of data synchronization.

    I essentially have a number-crunching app that runs on multiple (10+) servers.  Each instance of the app (FORTRAN wrapped in C#, btw) is crunching numbers for a different problem-set.

    We need to be able to manage each of these instances from a web interface.  At the most basic level, we need to be able to display a list of all the instances along with statistics from the last batch run.  To this end, I have a monitoring service that sits on each server.  To put it in DNS terms, the service is "authoritative" for the instances which physically reside on that server.

    Each of the services need to keep their data in sync.  So the results from server #1 need to get propigated to servers 2 to 10.  Each batch run takes 2 to 3 minutes.

    One thought is to have a central hub for distributing results.  The other is to have each of the monitoring services communicate directly with eachother.

    Keep in mind, that this system needs to be fault tolerant to the degree that I can pull the plug on any one server, and the numbers keep crunching without too much of a burb.  This is another challenge, but it's probably relevant to this data propigation.

    Q: What else should I be thinking about?  What might work well in this situation?

    P.S. It's times like this that I wish I had hardcore programmers across the hall from me.  Instead I work at home--flying solo when it comes to these situations.

  • User profile image
    JPeless

    I would do the "central hub" idea, with each server that you want data replicated to responsible to "notify" the central system that it wants updates or simply request them when it dumps batch results.  If the central hub only responds to requests you can have as many client servers processing batches as you want and the hub would need to be responsible for ensuring data transfer to any except those that request the update.

    You could have a "backup" hub that the systems use in case the primary isn't available.

    How much data do you need to send as "updates"?  Is it simple results from batch processes that is very small?  If so, UDP might be a good, simple protocol to use, but I would probably only use it in cases where the entire message/update could reside in a single datagram.  Of course, you would need to make acknowledgement of package reception.  Check out the RADIUS specification for how RADIUS handles this.  It is quite simple.

    The RADIUS specification uses the concepts of primary/secondary in the way that if a response is not received from the primary configured server the client will attempt communication with the secondary, etc.

    All client machines could sync on the interval that is appropriate for them.

Conversation locked

This conversation has been locked by the site admins. No new comments can be made.