4 ms·
I think there's a few misconceptions here, but I also think I kind of agree with the general point. First, yes, Docker is a hack to make a fat binary. But that
by peterwwillis 7y ago
I think there's a few misconceptions here, but I also think I kind of agree with the general point.
First, yes, Docker is a hack to make a fat binary. But that's not the only reason people use it. People use it because it's easier than packaging and running their app "the right way". Running 10 fat binaries all listening on the same TCP port and IP won't work. Even if your 10 binaries all co-exist on the filesystem just fine, you still need to run them in a way that won't conflict. You can do that without Docker, but Docker makes your life easier, so people use it.
Second, concurrency frameworks don't make your life easier, they make it harder. It's a language-specific abstraction that you have to design your app for. You should be able to just call fork() and join(), or listen() and accept(), and have some OS-level, generic component handle the concurrency for your app. This is not a failing of the language, but a failing of the OS.
And if you're going to rag on the industry, target the lack of standards. "Integration" is the opposite of standardization. The fact that I have to re-write 10 layers of glue to make some shitty web app run on AWS versus Azure is frankly one of the stupidest things I've seen in my career, but it makes sense when you realize all this tech was written by small departments in companies who don't give a shit about standards. Why spend time on interoperability for a product that only needs to work with one thing, right now?
You should be able to just call one function call in any app, and your runtime should communicate with a language-agnostic ABI for anything needed to route communications between a service broker and the code being executed, including changing the location the computation is happening on. And executing any application should allow you to include some isolation guarantees, because any application can have interoperability problems with other components running on the system. Containerisation is, I believe, the only thing besides Jails that has attempted to do this.
And if we're serious about microservices, why do specific clusters need to live behind a dozen levels of security groups, load balancers, VPCs, etc that all have to be custom crafted before we can even run an app in a specific region? That's a shit load of state surrounding a supposedly stateless service.
I think k8s is in some ways a response to all this, but it's still a poorly designed hack that enslaves itself to traditional OS models. What we really need are distributed operating systems. But just like we will never retrofit our highways with electric tracks for self-driving electric cars, we will never begin to upgrade the OS to be more standard, automated, and distributed. Instead we'll just push more shit into the app layer. Browsers now implement their own TCP/IP stack, and nearly all modern apps support encryption without ever allowing the OS to handle it. We're just too damn lazy to tackle anything but short term goals.
- viraptor 7y ago> And if we're serious about microservices, why do specific clusters need to live behind a dozen levels of security groups, load balancers, VPCs, etc that all have to be custom crafted before we can even run an app That's the difference between IaaS and PaaS. If you don't want to deal with custom infra, go with heroku or platform.sh rather than AWS.
- deleted 7y ago[deleted]
- viraptor 7y agoI'm really curious about the downvotes. We've got PaaS options which get rid of all that extra management for you. The configuration of networking and the details of load balancing will always exist at some level. Which layer you choose to interact with is your completely your choice at this point. (Although the more details you want to control, the more you have to do yourself) Many PaaS solutions are great for microservices and give you that nice "from the repo to live production" workflow. What do people actually disagree with here?
- peterwwillis 7y agoOh, it's that many businesses (and all Enterprises) just can't often use PaaS. You need to deal with regulations, customers who want you to retain tight control of data, private links back to corporate networks, SSO, IAM, support and availability contracts, NDAs, code quality gates, security scanning, policy auditing, dedicated performance guarantees, microservice ecosystems, network access control for partners, overall cost. And as far as "lock-in" goes, you can't get much more locked-in. Enterprise won't even use hosted CI/CD [unless it's for an open source product/service]. You have to fit a very specific niche to be Enterprise-compatible.
- viraptor 7y agoI don't buy it. If you're an enterprise which needs a PaaS but policies prevent an external one, then you build an internal one. HP did it. Oracle did it. I'm sure others do it too. This still doesn't prevent millions of non-enterprise companies from using it. If you don't want to create something from scratch you can even use ready solutions like Flynn.