Go Production Performance Gotcha – GOMAXPROCS
metoro.io
metoro.io
https://kubernetes.io/docs/tasks/administer-cluster/cpu-mana...
Using this (plus guaranteed QoS), you end up with containers which can only even "see" a subset of cores of the whole node (and they get those cores all to themselves), which is great for reducing noisy neighbors when big machines are running many different services.
Interesting link nonetheless, thanks!
Although it's not well known benchmarks for programming languages would show even faster results for Go with GOMAXPROCS set to 1.
This lets single-threaded benchmarks run with less overhead.
A real missed opportunity in communication. Because this isn't the first time we see articles like these pop up.
This is something that needs to be fixed in the runtime itself to be appropriately container-aware and not require the users to write their own libraries to patch this out.
For example: https://github.com/dotnet/runtime/pull/99508
(alternatively, the goroutine runtime could have been made auto-scalable which would have reduced the impact at the cost of implementation complexity, like .net's threadpool is)
Alas (OFF TOPIC) clicking the burger menu on the site (mobile) gives a rather novel fullscreen black error
> "Application error: a client-side exception has occurred (see the browser console for more information)."
Looking forward to having full-brain time, super intriguing to see folk so much further down the eBPF tracing path
Best of luck with the offering!
This is what software engineering looks like nowadays (at least based on my last jobs). The times I discuss truly software engineering topics (modelling, abstractions, algorithms, etc.) is significantly less than the times I discuss about: k8s shenanigans, Go/Java/etc. intricate details, library incompatibilities, build systems, S3 access rights, etc.
I don’t like it. I used to work in more interesting topics when I was junior, precisely because there were at most 3 components involved: the db, the server framework, the client side. So I was spending time in the core of the business (business logic). There was no need to scale, no sharding, no k8s, no aws, no failover. We were making money for the company (not like nowadays where every single company I work for is a “unicorn” and is not profitable)
In short, computer science is algorithms, data structures, etc. Engineering is those things applied for a given set of constraints including time and budgetary constraints. Or at least that's how I've come to define the differences.
I generally tell my family my job is more like lego than anything else. It's about knowing the pieces available and how to put them together into something cool. And occasionally, you do get to build a new piece that brings the whole set together nicely if the brick you need doesn't exist yet.
But there's still a world of difference in my opinion between "how can I put all these tools together to deliver a solution to the problem" versus "oh crap, the service is running out of CPU again, argh, my service provider changed how we specify CPUs because the old way wasn't good for someone who isn't me, and okay, I'm upgrading, and oh shit the upgrade also changes how we get to the encryption keys and now it's busted, let's revert, what do you mean it irrevocably upgraded our key store to the new version and now the old version doesn't work, fix that then, oh, we can't because that's all in the cloud and we missed the upgrade emails in our other big pile of emails argh argh argh fine, call an incident and bring in half the teams in the company".
The latter was not created in the past 5 years, but it has gotten noticeably worse. When things work, they work better than they did before, but when things fail, they fail harder, in the sense that they can create much more complicated snarls than they used to. I much prefer even dull requirements elicitation meetings to too much of the latter.
I suspect it was possible because availability/performance requirements were different.
also-I think your defined problem is partially caused by developers themselves: if you give them simple (even if it is challenging) project, they get bored and start creating problems themselves to make project "worthy" of their time
So yea, I can understand why you’d find this kind of work annoying, but in my experience it’s mixed in with more traditional harder problems.
Which is quite trendy on enterprise consulting nowadays.
Bizztalk and BPEL were ahead of modern times, apparently replacing XML with REST/JSON made them cool.
also, i'd argue those are more computer science topics, software engineering is much more about practical application and integration with wider systems.
There are still people focusing on those 3 components nowadays, but it's because either they're so small they don't have to scale yet, or they're big enough they have an SRE/Devops/Whatever team that deals with the cloud crap so they can focus on the actual applications.
For example, while a software engineer needs to know about let’s say, DDD, the business logic of the product, and K8s, a platform engineer in the same company only needs to know about K8s.
Abstraction has done horrible things to our industry.
We're so many layers up now that hardly anyone (except a blessed few) can really understand the whole thing, so the average engineer is left thrashing against the mountain of abstraction created for the sake of some nebulous "standardization" or even just for abstractions sake.
I argue that public cloud systems are harder to "get right" and present a larger security risk than many appreciate and Kubernetes is, while very cool, a massive chunk of complexity that makes it harder to actually understand what is going on; to not even mention the opaque, intentionally confusing and under-documented complexities that come with operating in public clouds in the first place.
It's not always possible to make a simpler system, but it's always possible to make a more complex one. I think modern day systems are firmly in the "more complicated than they need to be" territory. To be completely honest, I don't really see that changing.
Honestly if you can get testing, build and deploy right you've solved 90% of the problems in any company I've worked at. Most places suffer from low morale and velocity because their software is fragile and poorly factored. Tons of haunted forests requiring specialist knowledge to manually test every release.
I don't see a distinction, tbh. Coordinating software is part of software engineering even if it's "boring" or "frustrating". If you want to code business logic in a vacuum you'll be left with useless code and nowhere to run it.
when was it different? Java has had a jillion flags to fiddle in prod for 30 years, every company comes up with their own C++ subset that they and their compiler can tolerate, every Python shop has idiosyncratic linter settings.
are you saying you wished we'd all ended up writing Eiffel?