- Lessons Learned, Survival-Stories etc. von Firmen mit Amazon-Infrastruktur Before 5 AM Eastern on April 21st, 2011, an outage started at EC2's northern Virginia datacenter that brought down hundreds of web 2.0 and social media websites including Foursquare, Springpad, Reddit, Quora, BigDoor and Hootsuite. Specifically, attempts to use Amazon's elastic-disk and database services hung, failed, or were slow. Service was restored to some parts of the datacenter (three of four "availability zones" in Amazon's terms) by late afternoon Eastern time that day
...it has to process many trades with low latency. The system is built on the JVM platform and centers on a Business Logic Processor that can handle 6 million orders per second on a single thread. The Business Logic Processor runs entirely in-memory using event sourcing. The Business Logic Processor is surrounded by Disruptors - a concurrency component that implements a network of queues that operate without needing locks.
Common mistake in arch: Using functionality to id services ("Buying Stocks", "Selling Stocks", ...). Functional decomposition maximizes impact of change, is coupled to it. Better encapsulate change to insulate. Do not resonate with change. |
The conclusion is that you should never design against the requirements (or the features, or the use cases, or the user stories). What you must do instead is identify the smallest set of building blocks, call them microservices if you like, that you can put together to satisfy ANY requirement: present and future, known and unknown. There is a strong process angle of how you go about doing just that.
Identify areas of volatilities, and those you encapsulate in (micro)services. Then you implement the required behavior as the interaction between those services. A new requirement would simply mean a different services interaction, not a different decomposition, so now when the requirements change, your design does not.
https://www.infoq.com/news/2016/07/lowy-every-class-service?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global