1

My company will be in need of a backend to bootstrap its services and I'm in charge of the infrastructure choice. The products will consist of several apps (mobile, web, desktop) with a common backend (something like a huge API I guess).

Basically, we will need something like a VM (or several VMs? Or dedicated servers ?) where we can run anything we want (Python, Ruby, Node.js, PosgreSQL, MySQL, PosgreSQL, redis, etc.).

What questions should be asked (to me and my coworkers) in order to have a precised idea of our needs ? I don't want to realize one year from now that we forgot to consider something crucial (or at least I'd prefer to realize that we forgot 1, not 10).

I know this question may lead to opinionated answer, but I guess an answer is always a bit biased.

Simon
  • 129
  • 1
  • 3
  • 1. Users, how many now, how many in the future 2. Load 1 user causes on the system 3. Is your app scalable? 5. What are your DR needs? 6. What are your backup needs.. – NickW Jan 15 '14 at 13:44
  • 2
    Does anyone on staff have infrastructure experience? If not, you really should just hire someone to come in and help. You will learn a lot through the process, and will end up with a much better result. – EEAA Jan 15 '14 at 13:45
  • 1
    I agree with EEAA - don't pick something based on free advice from people who know nothing about your planned product(s). You need to hire someone, fulltime or contract, to do this for you. – mfinni Jan 15 '14 at 13:49
  • Ok thanks, I'll look into it. What is the name of such a job or set of skills ? DevOps ? – Simon Jan 15 '14 at 14:39
  • 2
    In my experience, most people who call themselves "DevOps", are really software developers that are **just** knowledgable enough on infrastructure topics to get by. You don't want one of those. You want a seasoned Systems Administrator that knows enough about development to be able to understand the requirements you give him and translate that to physical resources. – EEAA Jan 15 '14 at 22:53
  • WHY DO I KEEP AGREEING WITH EEAA? Probably because he's smart. – mfinni Jan 16 '14 at 14:31

1 Answers1

1

If you need multiple clients (web, desktop apps, mobile apps, ...) you need to decide how these will communicate with the backend(s). You could use REST, this forces one set of architectural choices; you could use (say) CORBA, this will naturally force some decisions, etc, etc, so on and so forth.

Once that has been sorted out, you can decide if you want to use just VMs on someone else's hardware, VMs on your own dedicated hardware or run machines "on the bare metal" (that is, without an intervening hypervisor layer). Or maybe simply run apps (on, say, Google AppEngine) that you communicate with using HTTP.

The driving factors here are:

  • cost, both in capital expenditure and in ongoing running costs.
  • Effort needed to keep it all running
  • Expandability (it's relatively quick to spin up new VMs on someone else's hardware, it is probably going to take longer or be expensive to have unused machines lying around if it is your own hardware).
  • Existing skill-set in keeping a server farm running
  • Cost in acquiring said skill-set

I can't, however, tell you what the right answer is, the best I can do is say "it depends".

Vatine
  • 5,440
  • 25
  • 24