Success With MicroservicesThe Critical C'sBarry S. StahlSolution Architect & Developer@bsstahl@cognitiveinheritance.comhttps://CognitiveInheritance.com |
|
Favorite Physicists
Other notables: Stephen Hawking, Edwin Hubble, Leonard Susskind, Christiaan Huygens |
Favorite Mathematicians
Other notables: Daphne Koller, Grady Booch, Leonardo Fibonacci, Evelyn Berezin, Benoit Mandelbrot |
|
|
|
|
The Law of Gravitation: an Example of Physical Law by Richard Feynman from the Cornell Messenger Lectures, November 9, 1964.
|
Given: A telemetry message is sent by a bus in our network When: The message requires maintenance action (details to be supplied) Then: A WorkOrder is created for the bus And: The bus manufacturer is notified |
|
|
|
|
|
The real world doesn't require the consistency we tend to demand of our systems - Kendall Miller 2022-01-14
|
|
|
|
|
|
|
Development teams should have conversations around Consistency that are primarily focused around making certain that the system is assumed to be eventually consistency throughout. |
|
|
|
A process for modeling a business domain from the perspective of the business experts |
|
|
|
|
|
Two changes can be made to system state in a single execution context if:
|
|
|
|
|
|
|
|
|
Development teams should have conversations around Context that are primarily focused around the tools and techniques that they intend to use to define their Bounded Contexts and to avoid the Dual-Writes Anti-Pattern. |
|
What database technologies will we use and how can we leverage these tools to create downstream events based on changes to the database state?
Which of our services are currently idempotent and which ones could reasonably made so? How can we leverage our idempotent services to improve system reliability?
Do we have any services right now that contain business processes implemented in a less-reliable way? If so, pulling this functionality out into their own microservices might be a good starting point for decomposition.
What processes will we as a development team implement to track and manage the technical debt of having business processes implemented in a less-reliable way?
What processes will we implement to be sure that any future less-reliable implementations of business functionality are made only after strong consideration and with a plan to pay it off, appropriate documentation and prioritization by the business and product owner.
|
|
|
|
|
|
|
|
|
|
|
|
|
Development teams should have conversations around Contract that are primarily focused around creating processes that define any integration contracts for both upstream and downstream services, and serve to defend their internal data representations and implementations against any external consumers. |
|
|
|
|
|
|
Development teams should have conversations around Chaos that are primarily focused around procedures for identifying and remediating possible failure points in the application. |
|
How can we make our systems self-healing?
How will we evaluate potential sources of failures in our systems before they are built?
How will we expose possible sources of failures during any pre-deployment testing?
How will we expose possible sources of failures in the production environment before they occur for users?
How will we identify errors that occur for users within production?
How will we prioritize changes to the system based on the results of these experiments?
|
|
|
|
|
Development teams should have conversations around Competencies that are primarily focused around what systems, sub-systems, and components should be built, which should be installed off-the-shelf, and what libraries or infrastructure capabilities should be utilized. |
|
|
|
|
Development teams should have conversations around Coalescence that are primarily focused around what data streams are available that provide insight into the system, and how to make them available easily to all who might need them. |
|
|
|
|
|
|
|
3-9's (unimportant)
4-9's (important)
5-9's (critical)
At-Least Once
At-Most once
Exactly once