BMC Anvil’s Introduction

3 minute read

A general intro to BMC_Anvil’s Tech Stack

The trigger for the app, a little story

an original thought to building this showcase app was to do so in a few languages and combinations of frameworks. Those languages and frameworks were:

  • java + springboot
  • java + quarkus
  • golang “raw”
  • golang + gorm + gin / fiber + …
  • nodejs + express

the idea was to try and continue a benchmark started some time ago on those frameworks, with a more realistic application than the ones used in benchmarks I’ve seen over the web.
that idea was very quickly discarded as one of the points of interest was time to market per featureand my level on each of the above combinations not being equal would not make much justice to the task.

having more experience in the java / js / ts family than in Golang it was quickly evident that a semi big app will play against Golang due to my own skills and not because of the language or ecosystem per se.

I had to resort to Go experienced friends with many questions to achieve this or that feature in an efficient manner. “Raw” golang will execute ok if directly hit against, but will be slower to deliver features unless an experienced dev is handling the code, and even then…

I’ll never know how this app built around Go / JS would play against the tech stack I chose, but what follows is what I know from the benchmark world.

when we look at round 21 (latest to date of this writing) @ techempower benchmarks r21 and check the single and multiple queries results we see this:

r21 single query
round 21 single query
r21 multi query
round 21 multi query

when checking cached queries:
the difference in performance between Go and Java best scores, is 0.2%

r21 cached query
round 21 cached query

when we look at round 20, round 19 and even far back, there is always a java framework contending for top performer.

I cannot tell why GoLang raw at least, is not on the top ten these last 2 years. Based on my personal benchmarks, I have a very strong feeling it must be up there, but there is no point arguing with the numbers. We could thou argue with the code behind and with the methodologies, but as stated at the beginning I would not be the one doing Go and its frameworks any justice.

I did some research and found a few articles and videos confirming or refuting techempower’s numbers.

What was strangely eye-opening was that the gofiber team uses techempower round 19 data on their own benchmark docs. They only kind of make go vs go comparisons, but the benchmark round they point to, when compared to all languages and frameworks paints a poor performance picture on most tests.

among others, I found this recent benchmark video about go+fiber vs java+springboot which gives a nice advantage in a few departments to Go+fiber but at the end of test 2 well… seems that when traffic increases go+fiber start to struggle, I just cannot tell what happened.

go fiber java Spring Boot anton video test 2 latency
go fiber java Spring Boot anton video test 2 latency
go fiber java Spring Boot anton video test 2 CPU
go fiber java Spring Boot anton video test 2 CPU

I could keep investigating but at some point I needed to start a showcase app.

So… one app one language

because of the above, I decided not to go for benchmarking multiple languages, but to focus instead on a single more rounded app built with a language in which I have more experience.

as stated on the disclaimer, the purpose of this application and accompanying notes is a way of making easier for tech recruiters and tech teams wanting to hire personnel, to check on my skills through various notes and a bigger app than a standard “coding challenge”.

once I started doing this application and researching on the techs I was implementing, I also discovered that many guides on the web use small examples to explain their own tech, that sometimes are hard to interpolate to a real world app. What I am building here can also be used to complement a few of these guides with bigger and more complex guides.

If you came for the showcase or for the examples / guides, and have any question, feel free to reach out over LinkedIn: Johnny X or GitHub.