3 ms·
Seems to me that big progress will be made when we can decouple system boundaries from network calls.
by recursivedoubts 6y ago
Seems to me that big progress will be made when we can decouple system boundaries from network calls.
- bob1029 6y agoI still think the approach of baking the entire enterprise into 1 gigantic binary is the best. Stack traces are so much easier to work with compared to distributed logs and side effects. We are already at a point where you could hypothetically do this for a reasonably-sized organization. A 64 core CPU can support a huge number of clients. Stuff like .NET Core scales really well if you want to build something complex like this. One big binary that occupies an entire physical host is an extremely compelling development model. Literally everything becomes a direct method invocation. You can also have type enforcement and atomic releases for the entire enterprise. Also makes a monorepo an obvious choice for source code management.
- jzoch 6y agoThis falls apart when you care a lot about availability and therefore want a particular service to be stateless. Then you add some feature that needs a tiny bit of state and suddenly you can't scale up and down as easily and need to start paying attention. This rolls forward into a big ball of mud - a monolith can be tricky too at scale
- bob1029 6y agoOne trick is to leverage the fact that you have 1 type domain, and to develop a common persistence abstraction for the entire enterprise. Then, all of your business entities can be pushed through it for a consolidated replication flow. This can be [a]synchronously replicated to additional node(s) as required, potentially with replication rulesets defined in application code as well. It sounds like a complex monster until you build it one time. Then you are basically done. The leverage you get when you have 1 way to do everything is extremely powerful. I do recognize there are scenarios where you cant force one persistence abstraction on all use cases, but there's no reason you couldn't have a TimeSeriesEntity (keyed by time) in addition to a typical BusinessEntity (keyed by a unique integer). Both could have unique replication implementations, but it would still be standardized and all nodes would be speaking the same protocol because they all derive from the same source. The monolith only remains a monolith in operational terms until the engineering team develops some imagination.
- jen20 6y agoIndeed - this is the premise of the "4+1 View Model of Software Architecture" paper from 1995 [1]. [1]: https://www.cs.ubc.ca/~gregor/teaching/papers/4+1view-architecture.pdf https://www.cs.ubc.ca/~gregor/teaching/papers/4+1view-archit...
- Twisol 6y agoThanks for the paper. Where do you find that it discusses decoupling the concepts of network calls and system boundaries? I must be honest: aside from the context in which it was linked, I came away terribly unimpressed by this paper. I found myself disagreeing on a number of points. Having only spent half an hour on it, I can't claim to have a major problem with it, but I wouldn't couch my architectural work against it.