Readit News logoReadit News
cookiengineer · 3 years ago
Honestly I never understood why Docker stopped at where it's at.

Imagine a world where a "docker push aws.io production" leads to an automatically updated docker remote, and where the endpoint is automatically NATed, scaled and shutdown if not needed anymore.

Could have been so convenient. Instead there's this pile of networking glue code that's so custom for each platform that nobody wants to deal with load balancers.

In my opinion the biggest "innovation" in the cloud space was heroku back then, where code deployment was fully integrated to the dev workflow via git.

siquick · 3 years ago
They kind of have it[0] with ECS deployments but it’s being retired in November.

[0] https://docs.docker.com/cloud/ecs-integration/

cookiengineer · 3 years ago
The issue I had with the EC2 deployment workflow was that it needed the AWS CLI configured, so it relied totally on AWS'es locked in workflow.

I was thinking more of the lines as a standard API/set of protocols that works on the NAT-scale automatically.

Humans are bad at guessing resources, and having people tweak all their VMs all the time with crappy code and crappy APIs is kinda the weakness of all dyno based workflows nowadays.

All the "web scale" jokes have a core truth in them, and are actually not so funny for a reason :-/

But relying on a standard set of NAT rules and relationships, which the Dockerfile already provides, could make this an advantage instead.

re-thc · 3 years ago
> Honestly I never understood why Docker stopped at where it's at.

They originally wanted to build docker swarm, which was to compete with kubernetes. Direction 360-ed after that fizzed.

fomine3 · 3 years ago
They originally dotCloud...
vbezhenar · 3 years ago
Cloud is difficult because it stiched together from fragments of old applications and approaches.

Cloud will be easy with consistent approach. One or very few languages for everything, from configuring resources, to configuring policies and writing code.

Cloud will be easy with opinionated tooling. No Dockerfile and supporting of miriads languages. Just file with dependencies and folder with source code.

Cloud will be easy with opinionated approach to configuration. No need to support PASSWORD env, PASSWORD_FILE env, some secret access service. Only one secure and simple way.

Basically rebuild cloud from the ground up. Remove Linux from equation, we don't need it. Remove filesystem from equation. You have a source code which executex somewhere. You can declare that your service needs database and it'll get it. You can declare that your service needs to access another service and you'll be able to use API to access another service, without thinking about URLS, auth tokens and all this nonsense. Just RPC.

Lambdas are good idea, but very convoluted. Lots of abstractions over abstractions. Terraform which calls AWS API.

Things could be so much simpler and faster. There's nothing that prevents you from redeploying your service in microsecond, just as you hit "Save" button in vscode.

fathyb · 3 years ago
> There's nothing that prevents you from redeploying your service in microsecond, just as you hit "Save" button in vscode.

I knew someone would find some merit to my PHP + SSHFS setup someday

drdaeman · 3 years ago
> and supporting of miriads languages

It might have better chances with some common language runtime, than declaring One True Language. No matter what language you pick or invent, it's gonna be hated by many. Intermediate representations? Sure, but much less so.

But you are absolutely right that clouds need a fundamentally different runtime, built on different ideas and principles - not virtual machines running containers pretending to be functions, all completely separate from resource declarations (which are in turn all individual nuanced messes).

afandian · 3 years ago
That tight, opinionated integration of hardware and software sounds a lot like 'mainframe'.
stingraycharles · 3 years ago
That’s what I was reading here, everything old is new and opinionated again.
drdaeman · 3 years ago
Lisp machines strike back? ;)
themodelplumber · 3 years ago
> Cloud will be easy with consistent approach.

> Cloud will be easy with opinionated tooling.

> Cloud will be easy with opinionated approach to configuration.

This is really true. AND in no time at all, it will turn from "easy" into "steady, reliable" and then FOMO-derived cognitive dissonance will set in for either engineers, developers, sales team, or users, or some set of those. You'll get people inviting you back to FOMO-squirrel-duct-tape-emergencies-cloud.

At that point I'm convinced you have to find a way to act like you are FOMO+ while keeping easy-cloud well-maintained, if you wish to keep the squirrel cloud difficulties at bay. If you are part of a team then I wish you the best of luck.

nathants · 3 years ago
this.

the problem is people, not tech.

the solution is taste and discipline, same as its always been.

ojkelly · 3 years ago
There’s a good chance this is realised within 5 years, built on WebAssembly.

While it’s not on the metal performance like native compilation, it’s close. I wouldn’t be surprised to see CPU instructions for WASM to get to native performance, if it got popular enough as a runtime.

otabdeveloper4 · 3 years ago
"Cloud" is just "datacenter" with special mark-up for the pointy haired boss.

Adopting a PHB-friendly name won't make the problems go away.

> There's nothing that prevents you from redeploying your service in microsecond, just as you hit "Save" button in vscode.

Yeah, we had that 20 years ago with PHP. It had its downsides too, let me tell you.

phito · 3 years ago
What would you replace Linux with?
bsder · 3 years ago
WASM? BEAM? JVM? Anything?

"Linux" is huge overkill for a cloud abstraction.

Cloud applications don't need 99% of all device drivers and the desired ones need to be tuned for cloud anyways. Cloud applications need a persistent store but not necessarily a filesystem. Cloud applications don't want to think about process scheduling they want to assume they have the CPU and memory they need. etc.

drdaeman · 3 years ago
You don't really need any OS to run, say, BEAM VM (just an example). Language runtime could be an OS of its own, as long as it has all the necessary primitives so you can have your concurrency, messaging and persistence in a distributed fashion. All you need is a thin HAL (or a hypervisor, e.g. consider https://data-room-software.org/erlangonxen/ - just a first result I've found searching for running BEAM on bare metal) that's just enough to support the hardware.

Deleted Comment

lmm · 3 years ago
You'd build language-specific unikernels, like MirageOS. No point carting a whole operating system around to run one process as one user.
vbezhenar · 3 years ago
Actually by Linux I mean the whole POSIX-"compatible" operating system.

Linux itself might be fine as a HAL.

But at this point there might be better alternatives.

moltar · 3 years ago
Have you tried AWS CDK in watch and hotswap mode? It’ll quickly replace all Lambdas with new versions upon save. Not a few ms, but a few seconds.
nathants · 3 years ago
this is the LambdaUpdateCode api, and it’s definitely fast enough for a good dev workflow.

it even lets you pass the zip data as the post body when less than 50mb. otherwise it points to a zip in s3 or a container uri.

skinny85 · 3 years ago
Isn't the described vision a little bit like Heroku, which famously had some issues?
deathanatos · 3 years ago
> Or that in order to be able to publish a message to SNS, my IAM policy must have a statement that allows the sns:Publish action on the topic's ARN.

Like, sure … it's "annoying", in a sense, to need to understand what permissions your program requires.

> Can we get rid of it?

This is the thesis the article ought to have dug into. It seems innately obvious that there is no removing the need for understanding that your program requires sns:Publish, and then writing an IAM policy to that effect. (Well … short of just removing authorization outright, but good luck convincing the security team that IAM is silly?)

AFAICT glacing at the repo, it derives the policy from the code, and proposes that as "PoLP". In a sense … "yes", it's PoLP as to what the code literally requires … but it ignores the number of times an IAM policy has been proposed to me that is trivially not PoLP in what the code should require, and you ask "what do you need these permissions for?" and first round trip is through "well, the code does $thing that requires that permission" and well, okay, but what possibly for? since you tend to know the rough design of the thing being built, and the implementing the design shouldn't require anywhere near as many perms as what are being requested … and then you suss out the bugs in the code for that.

S3 is notorious in my book for this: devs will merrily call "GetBucket" on a bucket that by design you know exists, and boto's API encourages this. (And then you have legions of devs who think S3 is slow, and … well, yes, when you make network API calls whose result is entirely discarded!)

I've seen "Publish" on a topic requested by the service that's the consumer. The bucket thing about. Requesting a permission against all resources, not a specific one.

eladbenisrael · 3 years ago
Elad here (the author). That's a very good point. If a developer decides to use `bucket.list().filter(x => x == myFile)` instead of `bucket.get(myFile)` the result will be fundamentally different both from a security perspective (e.g. `ListObjects` instead of `GetObject` on AWS), but also from a performance perspective (`list` is O(n) but `get` is O(1)).

If you think about this is primarily an issue of software engineering quality. The fact that today we are forcing the developer to go their devops team to request these permissions creates an organizational workflow that increases quality. That's why most of the teams I worked at requires code reviews.

I believe the right approach is to enable devops teams to put up boundaries and rules that will get enforced downstream (build => deployment => production). This will allow both developers and devops teams to be be more independent but still be in control.

Curious what people think about winglang's compiler plugin system as a way to help streamline these boundaries (https://www.winglang.io/docs/tools/compiler-plugins).

gravlaks · 3 years ago
In my organization, we teach developers Terraform, and give them a reference Terraform setup (IaC repository) for running their apps in.

They also have broad permissions in their own, isolated AWS account.

There are some tradeoffs, but one pro is that they don't need to request permissions from a devops teams.

baq · 3 years ago
Let me declare permissions inside the service and not in some completely unrelated cdk repo. OpenBSD pledge style. Yes privileges should be the least necessary but effort to actually declare them should also be the least necessary.
choeger · 3 years ago
As someone with more than a little bit of PLs: That's the wrong approach. Doing PLs is hard it's the ultimate naysayer's profession. Modern programming languages are built around a dozen or so major design decisions, or dimensions for the machine learning crowd, (that's why there are so many) - and many combinations, if not most of them, are simply incompatible. Like, you-end-up-with-undecidable-problems incompatible.

So doing a PL should focus solely on expressing computations. A different platform, even a very different platform like the cloud, does hardly justify the effort necessary to design and implement a language. In the end you won't do neither a good language nor good platform support.

Instead, develop a dialect using as much of the parent language as possible and only restrict the parts that are indeed incompatible with your goal.

zsoltkacsandi · 3 years ago
Sorry to say this, but some developers tend to think about themselves as the center of the world.

“Cloud” is nothing but a bunch of virtualized resources (computer, network, storage, etc) that you can manage on demand through an API.

You could write a post about “Computer, Why So Difficult?”.

By the way all of the complaints in this post can be solved if OP uses a PaaS solution.

alex_lav · 3 years ago
> By the way all of the complaints in this post can be solved if OP uses a PaaS solution.

This statement is untrue. PaaS offerings just trade one set of problems for a maybe slightly smaller but mostly the same set of problems. I actually can't find a single complaint in the article that is solved by PaaS solutions.

xixixao · 3 years ago
If you're looking for something that fits the motivation (including "give me the developer experience of the 90s"), but uses a language you probably know already (JavaScript), check out https://www.convex.dev/.
danjac · 3 years ago
I remember when early 2000s enterprise web development had J2EE, a convoluted mess of over-abstraction oversold by Sun, presumably so they could sell more servers. I recall a Sun consultant telling us that this was the "one true way". Meanwhile, we got the job done with PHP (albeit the kind of PHP that got written in the early 2000s could be its own convoluted mess).

Now you hear consultants telling you Kubernetes on top of whatever cloud service they are shilling is the one true way, or some other convoluted mess built on top of a Jenga tower of Cloud Formation and Terraform configuration files. JSON has replaced XML but otherwise, same old.

Exoristos · 3 years ago
The one true way was actually Perl CGIs.
xet7 · 3 years ago
Is Convex backend Open Source?

I found only frontend related code https://github.com/get-convex , is backend somewhere there?

Meteor has all of frontend and backend Open Source.

xixixao · 3 years ago
Not yet.
foobarbecue · 3 years ago
Is this like meteor?
xixixao · 3 years ago
It is a modern alternative to Meteor, Firebase, Supabase and similar, but it should be much easier to work with, especially from React. Unlike Meteor it has a relational DB and data is accessed via server-side functions. It's got some cool properties like automatic realtime updates and ACID transactionality for any server write.
Roark66 · 3 years ago
I'm not buying it(yet). Yes, cloud (especially if you want to use serverless and not pay an arm and a leg)is relatively difficult for devs used to traditional model or just new devs period. But that's what devops is for. Not just to write infrastructure as code, test and scale, but to help devs get to know cloud services. I found the source of this perceived difficulty is the vastness of documentation and the fact lots of stuff is not documented. The services themselves are fairly easy to understand in a conversation with someone who knows them well.

However, then the author complains about how long it takes to redeploy cloud infrastructure. So I'm thinking, sure. I too had cloudformation stacks that took 45min to run, but that can be resolved by not tearing all resources down and recreating, but by intelligent updates, container use and so on.

So then, we learn a solution is a new provider agnostic programming language for the cloud... But we already have terraform for python that is provider agnostic, but don't imagine you'll have the same infrastructure as code run on aws one say and gcloud the next. There will always be tweaks required per provider.

Still,personally I prefer to either use tools like ansible, terraform(for future readability) or straight python with boto(an aws specific framework). I see no need for an entire new programming language.

user6723 · 3 years ago
Developers want something that is like Heroku
danjac · 3 years ago
Pretty much, yes. An application developer should be able to focus on data model, business logic and user interface, and everything else at a minimum. If you are burning your available hours working on issues with your infrastructure - whether it's cloud or hosted or on-prem - that's not delivering business value.
gravlaks · 3 years ago
As long as it's part of the required steps to delivering business value, it doesn't matter that much if it's application code or infrastructure (as code). Both are required, hence both are delivering business value.
systemvoltage · 3 years ago
I want a total chad Heroku at good prices, not this weak ass 0.04vCPU crap for $120/month.

Give me 8vCPU 16GB ram machine at Hetzner prices that has Heroku-like devops layer. The marginal cost of Heroku software layer should IMO get ammortized into nothingness.

user6723 · 3 years ago
I may have something for you in the works actually. A team I consult with is working on a bare-metal as a service based service offering that provides a Heroku-like experience. Storage is network-attached on a low latency network and customers can select dedicated disk pools if they want. One of the interfaces to the infra is a Heroku-like interface.
mdekkers · 3 years ago
Developers don’t want to ops.
sam_lowry_ · 3 years ago
You'll surprised.