So, I'm a little stuck on how should go about this, I've only ever dealt with programs/apps that are supposed to deal with 1 or a few users at a time, never needing to think past a single native program or 1 web server, but now I'm having to and I'm not sure of the best direction I should be heading. This is for an idea me & my friend had but I'm the only one that knows any programming in the slightest which is all self taught.
Overview
As a brief overview, this system will be dealing with vast amounts of data for corporate use anywhere in the world. A user will log on to the system and have the ability to access any of the data as fast as possible hopefully from a server within the country or neighboring country they are in, but this data needs to be synced with all of the servers dotted around the world in real time (think facebook here). It should be able to be scaled from a single server to a complete server farm if necessary. This system will be able to be accessed via a web interface, and native applications (Windows, OSX, iOS, Android etc.)
Thoughts so far
Here is what I'm thinking about so far;
Authentication Server Software - Acts as the contact point for any incoming connections from users and a network load balancer to send the user to the main server with the lightest load with the lowest ping. All connections will go through this system even after they have logged in to stop direct communication with the main server. This should be able to support a massive number of users as hard drive issues wont be a problem and it will be just acting as a security layer between the user and the main server.
Main Server Software - Will deal with accessing, sorting, calculating and returning any data the user needs. It will only be accessible through the Authentication server.
Database - I've been looking around at various database software and have come across http://cassandra.apache.org/ as an option to store data across multiple locations.
I was thinking about writing the server software in C# due to it just being a lot less of a pain in the arse to things like C++, it might be a little slower than C++, but it will be a lot easier to maintain in the long run.
And now to the question...
My main question is this; How would you approach this type of system? Also, where it comes to accessing the data should the main server only ever access data straight from the database or should it load all of the data the user could potentially use into the RAM and dump it once they log out to speed data access up? Or wouldn't this be needed with something like cassandra?
A second question would be how would you go about creating some modular software in c# where you can just plug in components to add new features to the overall software (something like http://codeigniter.com/)? But the above question is mainly what I'm focused on right now.
Final words
I'm kinda guessing at the moment so I'm really just after some guidance & wisdom from the guru's of OCUK for the best direction to head with this project. For all I know I could be going about this in the completely wrong way, or I could be bang on the money, but having never attempted anything like this before I'm kinda lost.
Sorry for the wall of text but I really needed to explain what was going on to try and get the best answer possible. Thanks for any replies!
Overview
As a brief overview, this system will be dealing with vast amounts of data for corporate use anywhere in the world. A user will log on to the system and have the ability to access any of the data as fast as possible hopefully from a server within the country or neighboring country they are in, but this data needs to be synced with all of the servers dotted around the world in real time (think facebook here). It should be able to be scaled from a single server to a complete server farm if necessary. This system will be able to be accessed via a web interface, and native applications (Windows, OSX, iOS, Android etc.)
Thoughts so far
Here is what I'm thinking about so far;
Authentication Server Software - Acts as the contact point for any incoming connections from users and a network load balancer to send the user to the main server with the lightest load with the lowest ping. All connections will go through this system even after they have logged in to stop direct communication with the main server. This should be able to support a massive number of users as hard drive issues wont be a problem and it will be just acting as a security layer between the user and the main server.
Main Server Software - Will deal with accessing, sorting, calculating and returning any data the user needs. It will only be accessible through the Authentication server.
Database - I've been looking around at various database software and have come across http://cassandra.apache.org/ as an option to store data across multiple locations.
I was thinking about writing the server software in C# due to it just being a lot less of a pain in the arse to things like C++, it might be a little slower than C++, but it will be a lot easier to maintain in the long run.
And now to the question...
My main question is this; How would you approach this type of system? Also, where it comes to accessing the data should the main server only ever access data straight from the database or should it load all of the data the user could potentially use into the RAM and dump it once they log out to speed data access up? Or wouldn't this be needed with something like cassandra?
A second question would be how would you go about creating some modular software in c# where you can just plug in components to add new features to the overall software (something like http://codeigniter.com/)? But the above question is mainly what I'm focused on right now.
Final words
I'm kinda guessing at the moment so I'm really just after some guidance & wisdom from the guru's of OCUK for the best direction to head with this project. For all I know I could be going about this in the completely wrong way, or I could be bang on the money, but having never attempted anything like this before I'm kinda lost.
Sorry for the wall of text but I really needed to explain what was going on to try and get the best answer possible. Thanks for any replies!