Errors frequently occur when processing records in transactional applications. Often times the underlying issue causing the error is transient, for example a remote system might be briefly offline or temporary network latency may cause a timeout. In these scenarios, frameworks like Mule and Spring have the ability to backoff and retry the operation until the underlying issue resolves itself.
When these errors occur because of a semantic issue with the record itself, however, the record will never be processed. A malformed XML payload or a CSV record with an
Decoupling monitoring infrastructure from an application’s behavior and infrastructure is a foundational technique for scaling a distributed system. There is unfortunately no escape from the “Observer Effect”, even in application development. Attempting to “observe” an application generally involves either adding code with the associated complexity costs or using agent based techniques. Either of which, when applied incorrectly, can introduce unnecessary performance overhead on both the application and the upstream monitoring systems they are feeding data into.
A particular challenge we’ve seen with our clients over the last year or so has been directly coupled central monitoring aggregation services
Combining API-Led and Domain Driven Design to Govern Your Microservices Architecture (MSA)
API-Led Connectivity is a technique of organizing the API's microservices expose into three categories: System, Process and Experience. In previous blog posts I've covered how System API's act as an Anti-Corruption Layer on top of systems-of-record and how Experience API's enable business agility through modern development platforms. In this post I'll consider the role Process API's play in Service Meshes and Application Networks, and how leveraging hexagonal architectural patterns and Domain Driven Design (“DDD”) for identifying and managing microservices that will be surfaced as API’s.
As alternative modern development platforms, such as SalesForce Lightning, Mendix and even analytics platforms like R proliferate, the role and value of API's can be a critical component to unleash their full potential. While these platforms promise rapid application development by trading off the amount of freedom developers have to "go off the rails" of the framework and enable developers to become productive more quickly by limiting the amount of onboarding and knowledge required to rapidly deliver applications on the platform, the use of “Experience” API's are a foundational component to rapidly deliver applications by exposing data in
Anti-Corruption Layers (ACLs) are an important Domain Driven Design pattern. ACLs translate data from foreign systems into the Ubiquitous Language (the practice of developing a common and rigorous vocabulary between the developers and users within a given business domain to minimize miscommunication, ambiguity, delays, and errors) of the Bounded Context.
ACL's serve a tangential purpose in the context of enterprise integration. In addition to data translation, ACL's also hide the complexity of integration with external systems. Combined with resiliency patterns like Circuit Breakers, the ACL can become an integration abstraction in its own right.
While generally implemented as a tactical
John is a technologist, developer and author who brings over 20 years of technology experience as Omni3's CTO.