-3

excited to be here. I'm trying to decide for an optimal architecture for the application I'm building and I'd appreciate your thoughts on it.

In most general terms, our application will serve dozens or hundreds of large corporate users in real-time. It will have direct integrations with customer banks and it will be able to show / manage funds across different financial institutions for a customer.

Considering the above, I'll need an architecture that can easily scale horizontally, but I don't want to, by no means, compromise the ease or quality of development.

I'm deciding between micro-service and serverless architecture. I have a lot of experience building in micro-service environments on JVM/AWS stack and I like the flexibility one gets with Terraform when it comes to spinning up new components or having multiple environments (testing / production / ... ). However, I'm reading lately a lot about serverless architectures and their ability to organically scale. Specifically, I've been looking at Kotless - a serverless architecture based around Kotlin language and AWS.

With Kotless, they're using LocalStack to simulate non-production builds and all the Terraform is auto-generated. While this can be cool to save some development time, I'm a bit skeptical about the:

  • flexibility of such solution
  • whether the generated Terraform code is actually 100% what is needed
  • the ability to spin up several environments (e.g. Sandbox) that are functionally the same as Production environment
  • the ability to confidently test such solution with functional and/or manual tests
  • overall sustainability of such solution

I'm attracted to the idea of out-of-the-box autoscaling and not a huge deal of DevOps, but at the same time a bit wary of how flexible that architecture generally is. The last thing I want to do is to start serverless only to realize I simply can not do some stuff with it, and then revert back to micro-services.

Would be amazing to get your feedback, especially if you have experience with serverless architectures.

3
  • 3
    You are comparing apples and oranges. Microservices are about software architecture and serverless is about hardware. Microservices can run on owned servers, containerized servers, or serverless services.
    – Rik D
    Jul 31 at 10:10
  • jeez guys, this guy is excited and you come in down with all the downvotes again.
    – Dirk Boer
    Jul 31 at 17:00
  • "I'm trying to decide for an optimal architecture." As an engineer, you should be aware that "optimal" and "optimize" only have meaning when paired with optimization variables. For example, your compiler offers options to optimize for speed or optimize for size; these are often conflicting concerns. What are you optimizing your architecture for? If you are optimizing to minimize learning curve, serverless is obviously suboptimal, since you are just learning about it. If you are optimizing for minimal support cost, they may be optimal. You have to define your NFRs.
    – John Wu
    Jul 31 at 22:56

1 Answer 1

-3

I don't know what people refer to as "serverless".

Personally I prefer not to maintain my own database, storage and backups, so usually I take these as "serverless" from Azure or AWS. You get a nice portal and all the diagnostic tools you need without logging into some kind of terminal.

About microservices - in my experience it's usually better to start with a monolith until you really know well how your architecture will look like.

Just take into account that you make it easy for yourself to split off things into microservices when it's needed.

See also:

https://martinfowler.com/bliki/MonolithFirst.html

Not the answer you're looking for? Browse other questions tagged or ask your own question.