Recently I attended a great talk about Lamba Architecture by Carlos. I particularly liked how information is underlying a tight control of accuracy, a concept that systems like HyperLogLog, F1 or Storm with Algebird have since some time. In my JAX 2012 Keynote I stated that Eventual Consistency will move into Hyper-Consistency that focuses more on perception than technical isolation. I could very well imagine Lamba Architecture being combined with CQRS, where some parts of the UI are "noisier"(a bit like VoIP scatter, coming from a queues and workers implementation) than others (maybe implemented using a functional paradigm). In functional programming as well as in event-driven systems, state is mainly neglected. But sometimes state is necessary, because it occurs in the real world, and addressing it in an immutable manner, just storing all information, can become costly, slow and inaccurate and insecure. By encapsulating functional logic and immutability where it makes sense, pairing it with a more state-driven, fuzzy, approach an architecture can scale more heterogeneously. The functional parts could be RESTful, and the fuzzy ones streams.
A good example is Microservices, an architecture pattern that gained traction as fast as a cat meme. A mix between SOA, DevOps, REST and Cell Architecture, Microservices build mainly on the availability of automated virtualization and out-of-the-box distributed infrastructure. They are a worthwhile answer to heavy infrastructure blocks that come with corporate processes designed to kill any form of agile solutioning. But they come with the cost of "Integration at every level" - a technical debt in the long term a Hipster Coder could not care less about. As mobile and social require distributed architectures, this debt is easily accepted in favour of time to market. But once the systems stabilise, operations cost will rise. I agree, versioned services running in their own container make a lot of sense. As does decoupling code from nonsense anachronistic operations onboarding processes. For some components, though, a shared infrastructure just makes total sense. Forcing everyone into a directed messaging model will eventually lead to an uncontrollable network of dependencies. Once the append-only databases start stalling debugging will be hard. Microservices should be used to get rid of noise in the development cycle, not so isolate your fancy pants from the context of the world.
Dear Hipsters, maybe you would be better off with a bit of Normcore.
No comments:
Post a Comment