I spent quite a while with SOA, but I find Kubernetes a little different.
To me, SOA is more about the implementation-- especially the old WSDL-driven part.
But Kubernetes is more about infrastructure. The applications are written in different styles and different languages. K8S is more like a platform than anything else, to me.
> The S was meant to be service as in windows service but it was co-opted to be service as in web service.
That assertion makes no sense as SOA is a software architecture approach and the communication between services has no impact on the system's architecture.
Communication between services has a huge impact on system architecture. A web service is an RPC mechanism, whether it's SOAP, REST, CORBA or whatever, it's nothing new and didn't need a new name. SOA was supposed to be message driven, usually through an ESB or something similar, MSMQ was popular at the time.
Yeah. The basic idea is fine. (Don't write huge monolithic software blobs!) But the term was effectively coopted to be about a lot of specific heavyweight proprietary software and the heavyweight specs associated with them.
I'm not disagreeing but the reason SOA is more complex is that it does a whole lot more than "REST" microservices. It encompasses standardized protocols for transactions, faults, asynchronous services, auth, and more, in addition to payload typing and state. Such QoS dimensions aren't either considered in naive "REST" services at all, or at least not in upfront design (because waterfall sucks right?). Hence they're implemented for each service in an ad-hoc fashion, if at all. Implementing ad-hoc security in Docker containers (a technology proud of cutting ties with established ways of keeping eg OpenSSL lib up-to-date) in the "REST architectural style" (appealing to junior devs) and without transactions sure sounds like calling for trouble and acrueing technical debt like there's no tomorrow.
And also not disagreeing. While not an expert (thankfully!), it was very prescriptive and theoretically suited to the development styles of the time. As you suggest, microservices is more ad hoc and puts a greater burden on good architectural and operations practices which are more informally enforced.
But, net net, I put SOA in the same general bucket as ITIL and other associated practices of the time. They meant well but for most purposes they involved too much process and were ultimately too tied to big vendors trying to sell stuff.
> I'm not disagreeing but the reason SOA is more complex is that it does a whole lot more than "REST" microservices. It encompasses standardized protocols for transactions, faults, asynchronous services, auth, and more, in addition to payload typing and state.
"REST" microservices also do that, but they aren't bound to quasi-proprietary protocols and tooling.
How does "REST" handle coordinated transaction rollback/compensation over multiple heterogenous service calls? How is SOAP, XML, WS-*, AMQP proprietary?
> How does "REST" handle coordinated transaction rollback/compensation over multiple heterogenous service calls?
By "REST" I assume you're referring to non-SOA distributed systems which might happen to use REST or RPC-over-HTTP interfaces, and not the architecture style.
Assuming that, "REST" handles all those features by integrating services that support coordinated transaction rollback/compensation over multiple heterogenous service calls.
> How is SOAP, XML, WS-*, AMQP proprietary?
If you read what I said you'll notice that I explicitly said "quasi-proprietary protocols and tooling".
To me, SOA is more about the implementation-- especially the old WSDL-driven part.
But Kubernetes is more about infrastructure. The applications are written in different styles and different languages. K8S is more like a platform than anything else, to me.