skip to Main Content

I am going to be developing a fairly large system that needs to have all the “qualities” of a large system. This system will be in the financial space, so there are some mandatory things that are required (99.999%, fail over, load balancing etc.). The system is more of a switch then a “web” application.

I have been doing allot of research… Especially current Big systems like twitter, ebay, amazon, facebook and the like, but unfortunately they are mostly web based. I have chosen the Java root as I am quiet proficient in that language although I am open to anything new.

I have spent hours reading up here in Stack overflow and the one thing I gather is that there is no “Silver Bullet”. The system will need to be fine tuned/developed specifically to my needs.

So this is my current mindset and thoughts…

Database

I am pretty impressed with Mysql 7 and their clustering capabilities. I would create a Mysql cluster of a few machines. This cluster would then be replicated to another offsite machine with their async mater-slave replication. The mysql cluster would be fronted by a mysql load balancer. Is the NoSQL root better maybe?

Load Balancing

HAProxy looks great but I might settle for a hardware solution…

Application

After playing around with many different AS servers (Glassfish, JBoss and a few others), I have come to the conclusion that j2EE limits me in a few things which cause cause problems down the line (see this previous question). What I am looking for is a framework for java that enables me to modularize my code. Basically write “JARS”/modules that can be distribute into a cluster of machines that load balance and have failover.

For example – Lets say I have Module A and Module B. I want to have the ability to deploy the two modules both on two machines OR module A on one machine and B on the other. As well as have module A load balance to B (if B is on one or more machines). Is this achieved by glassfish3 and EJB? I like the idea of scaling out and not up, I would rather have 50 machines in a cluster than X insanely spec’ed machines (kind of googles mindset, I think)
I was thinking of doing it from scratch but re-inventing the wheel is my second choice.

Cache

I am looking at hazelcast for a memory cache as I am most impressed with that solution.

Any input,feedback, links, keywords or guidlines will be greatly appreciated 🙂 I also don’t mind non-free solutions.

EDIT: I should fill in the details missing as pointed out by Jeremy:

  1. By Switch I mean something similar to PayPal
  2. There will be potentially large volumes (I cant give an estimate)
  3. Skills and budget dont play a role as I fortunately have the resources.

2

Answers


  1. It’s almost impossible for anyone here to give cogent advice without understanding

    • the kind of application you’re building (a “switch”?)
    • who you’re building it for – how many people? how do they use it?
    • the skills of the development team
    • the budget for the system

    However, what it looks like you’ve decided is something that cloud vendors like Amazon AWS provide out of the box – a loosely coupled, load balanced, highly available infrastructure.


    EDIT based on your edit:

    • Don’t build the infrastructure yourself. Others, such as Amazon and Microsoft, already have this solved. In particular Amazon’s solution is PCI compliant and can deliver the “five nines” you need immediately without you needing to do anything.

    • Rather, focus on what the application will do and how it will do it reliably and scalably.

    At this stage I’d suggest hiring a couple of consultants for a couple of weeks, minimum. Have them put together three or four alternative application architectures. Budget $1000/day/consultant minimum to get someone who knows what they’re talking about.

    And, bear in mind you won’t get sensible answers or guidance from a free site like this. If you really want to build a “PayPal killer” you’ll need to pay for advice from someone who’s been in the trenches on this kind of project. That’ll either be upfront to consultants or in equity to a technical co-founder.

    Login or Signup to reply.
  2. You seem too concerned about technological choices, which is not architecture. Better focus on your application’s Core Domain (in DDD terms).

    Also, I wouldn’t be too concerned about scalability issues upfront. It is way easier to build useful solution first, and only then, once it is proven to be useful, begin to scale. Otherwise, you are risking of investing all your money into building scalable architecture for useless application.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search