Live data from Hacker News

Software Infrastructure 2.0: A Wishlist (2021)

erikbern.com

31–40 of 85 posts

Re: Software Infrastructure 2.0: A Wishlist (2021)

#31
It's a sub-component but Oracle Labs has a project to develop something like the FaaS platform he's asking for, called GraalOS.

The basic idea is that FaaS is a leaky abstraction because (a) lots of runtimes are slow to start up and (b) isolation tech isn't good enough. So FaaS services start up VMs and containers and then the user's function which might have to do a lot of init work, like to load reference data, and because that takes too long you have to keep idle capacity around. At that point the abstraction is broken.

So there's a two-part fix:

1. For Java users, the GraalVM native-image tool can pre-initialize and pre-compile a JVM app so that it starts up instantly (including with pre-loaded reference data).

2. Change the isolation model so VMs and containers don't need to be started up anymore. Containers alone can take hundreds of milliseconds to start.

There's also some interesting stuff there that takes advantage of Oracle Cloud's more "edgey" nature than other clouds, where it has more datacenters than others (but smaller).

The new isolation model works by exploiting new hardware features in CPUs that allow for intra-process memory isolation (Intel MPK) combined with hardware-enforced control flow integrity. This requires compiler support, but GraalVM knows about these features and so the cloud can just compile JVM apps to native for you. And what about other apps? Well, many languages run on GraalVM via Truffle, so those are covered (e.g. JavaScript) and for native code you can use a modified LLVM to compile and then do a static verification of any user supplied binaries, like NaCL used to do.

If you put those things together then starting user code that's already available locally becomes just mmapping a shared library into a process, which is extremely fast. It can only exit the hardware/software enforced isolate by going via a trampoline that's equivalent to a syscall, but without needing an actual syscall. The Linux kernel isn't reachable at all.

With that you can have functions that start and stop in milliseconds.

Re: Software Infrastructure 2.0: A Wishlist (2021)

#32
These are bad ideas. They are software wishes which no enterprise will pay for. Infra is setup once so optimising for setup time doesn't do the trick. Rollouts should take time deliberately so faulty software don't lead to an outage in seconds. No infra provider will bother turning off infra as again it can have impact on availability. AWS is optimising resource usage anyway barring a few services like Cloudwatch

Re: Software Infrastructure 2.0: A Wishlist (2021)

#33
Within a few lines of each other in TFA:

> We are, like what, 10 years into the cloud adoption? Most companies (at least the ones I talk to) run their stuff in the cloud. So why is software still acting as if the cloud doesn't exist?

> As in, I don't want to think about future resource needs, I just want things to magically handle it.

'nuff said.

Re: Software Infrastructure 2.0: A Wishlist (2021)

#34

> You know how crappy software is crappy in ways that are so blatantly obvious to the user that you wonder why it was released? It has crossed my mind several times recently that I want a word to describe this exact state of affairs. Where a thing has a defect so blatant that it is evident to any user that the creator of the thing has never tried using it. Eg. an airbnb with no towels in it. What's the word for this…

A tool with more than one way to use it?

Re: Software Infrastructure 2.0: A Wishlist (2021)

#35

> You know how crappy software is crappy in ways that are so blatantly obvious to the user that you wonder why it was released? It has crossed my mind several times recently that I want a word to describe this exact state of affairs. Where a thing has a defect so blatant that it is evident to any user that the creator of the thing has never tried using it. Eg. an airbnb with no towels in it. What's the word for this…

I want to expand on this :)

When I have to describe to people who don't work with me my interactions with developers (especially of the crappy code like that) from a standpoint of someone who represents the QA side of things... I describe to them my interactions with my five y.o. son:

    Me: How as school?
    Son: Goooood!
    Me: Did you behave?
    Son: Yes!
    Me: Did the teacher send you into timeout?
    Son: Yes...
    Me: So how come?  You told me you behaved...  What did you do?
    Son: Played with Ryan!
    Me: That doesn't seem like a good reason to send you into timeout.
And we go like this until I either discover that he was yelling in class or I will never know the reason why he was in detention. This is also the pattern of denial I very frequently face when talking to the programmers who wrote the crappy code. Somewhere on the back of their minds they understand that they screwed up, but they will come up with all sorts of concocted reasoning to pretend that they either don't understand why the product sucks, or they would claim that it cannot be made any better, or attack me for not understanding how the product is supposed to work etc. The most recent example would be (in slight adaptation):

    Me: I discovered that we set PYTHONPATH variable when loading a (Tcl) module.
    Dev: I see no problems with that.
    Me: The new feature we are releasing to the users is conda support.  Conda will not work (well) when this variable is set.
    Dev: Did the documentation tell users to load this module?
    Me: No, but it's obvious that users would like the functionality provided by the module in addition to using conda.  They are made to complement each other.  Besides, documentation doesn't say they shouldn't.
    Dev: (summons PM)
And then PM continues in the same spirit as the developer. And, my guess is that the reason for it is that nobody really wants to work too hard. There's no reward in making a better quality product if that quality isn't immediately appreciated. Features like latency, throughput, size etc. are immediately visible to the user and are an easy sell. Features like internal consistency in the face of more sophisticated usage: these might never happen, and the user might never know that they were protected from their system collapsing on them by a substantial development effort. So, commercial companies de-prioritize quality. And that's how we get crappy programs.

Re: Software Infrastructure 2.0: A Wishlist (2021)

#36
post #16

Earlier quoted context omitted.

>There is no such thing “truly serverless”. Your code will be executed by a server. Period. >Your application will run on one or multiple CPUs, will use the memory, the disk, the network. But the term "serverless" has never meant "serverless does not run on cpu, does not use any RAM, and does not use disk or network." You're attempting a clarification for "serverless" that nobody needs because reasonable people didn'…

> "Serverless" from the beginning has always meant not having to do "os management/operations" type of tasks in a vm such as So you mean that serverless is when someone else types in the commands of installing the dependencies of your software. I am genuinely curious, how difficult/expensive learning and issuing these commands on a VM, putting them into a packerfile, Dockerfile or ansible playbook, considering the wh…

Serverless/FaaS takes care of the following things that you otherwise need to do yourself:

1. Provisioning VMs and copying the right files up to them.

2. Linking them together behind an HTTP load balancer, which itself needs to be on one or more VMs and possibly DNS balancing.

3. Configuring that load balancer to respond on HTTPS endpoints and health check backends.

4. Collecting logs etc to a central place.

5. Making sure servers restart if they need to for versioning or crash reasons.

6. Shutting it all down and cleaning it up if you stop using them.

That's pretty much it. People like it because doing UNIX sysadmin work sucks. The usability just isn't very good.

Re: Software Infrastructure 2.0: A Wishlist (2021)

#37
post #14

> The speed that's not there is setting up infrastructure. If I make a change in the AWS console, or if I add a new pod to Kubernetes, or whatever, I want that to happen in seconds. I'm not asking for milliseconds! Milliseconds is now possible: https://kraft.cloud/ (e.g., an NGINX web server in under 20 millis).

Cool looking website :) Small nit feedback, you say "less servers to operate" when it should be "fewer servers to operate" because servers are countable.

Re: Software Infrastructure 2.0: A Wishlist (2021)

#38
One my basic design philosophies is I learn key things deeply, and fit them together, without layers of "make it easy" tools that introduce incessant XY problems and integration issues.

If something is "magically" easy, it either is a meaningful design/algo revolution or it overpromises the production case while showing off the trivial. Most of the time it's #2. Docker was #1.

Re: Software Infrastructure 2.0: A Wishlist (2021)

#39
I get where he is going with this... but idk. Feels like a somewhat mid take. Strong abstractions always means strong vendor lock-in and more power to infrastructure providers. But AWS, Netlify and whoever runs your apps are not your friends. Vertically integrating your infrastructure can be a pretty good source of cost reduction and can create interesting assets if you have good talent in-house. So idk... sometimes the fact that building something takes time and you have to think about how you are going to set it up actually is a good thing, because you take the time to build it right and you end up understanding how everything works together.

Re: Software Infrastructure 2.0: A Wishlist (2021)

#40
post #29

> You know how crappy software is crappy in ways that are so blatantly obvious to the user that you wonder why it was released? It has crossed my mind several times recently that I want a word to describe this exact state of affairs. Where a thing has a defect so blatant that it is evident to any user that the creator of the thing has never tried using it. Eg. an airbnb with no towels in it. What's the word for this…

Yet still people are using it? Otherwise it’s called an MVP and a promise of plugging the holes

It's overly naive to think that people who use such a tool choose to use it.

In many cases it's "you are hired into this job, this is the tool we give you, if you don't like the tool, take a hike".

Even more so, a lot of software is developed not to be competitive, but to be exclusive. It's a lot easier to be the only choice for doing something than trying to compete with a different tool. I've seen countless examples of tools developed in exactly this paradigm, where the decision to use the tool wasn't made by anyone anywhere close the users of the tool (eg. hospital procurement department buying a PACS or a large avionics company ordering a custom-made budget-management program).

Post reply on HN