Coggle requires JavaScript to display documents.
Single responsibility (SOLID) Encapsulation Easily re-writable code (Smaller code bases) Why Scalable Reliable Flexible
Honor contracts and interfaces Stateless Independently changeable Independently deployable Backward compatibility Concurrent developmnet
Scope of service Identify boundaries Responsive to business change
Another service Third party system Degrade functionality Default functionality Multiple instances Register on start up Deregister on failure Types of failure Exceptions / Errors Delays Unavailability Network issues Delays Unavailability Validate input Service to service Client to service
Manual regression testing Time taken on testing integration Environment set up for testing Tools to provide quick feedback Integration feedback on check in (CI) Tools to prvide quick deployments Automated deployments Reliable deployements Continuos deployments Why Distributed systems Multiple instances of services Manual integration testing takes too long Manual deployment time consuming and unreliable
Logs Status Errors Centralized monitoring Centralized logging why? Distributed transactions Quick problem solving Quick deployments require feedback (We use automated deploy tools) Data used for capacity planing and scaling What is actually used
Services are stateless. The same code behind the service runs when the service is called from web or mobile or any other...
Efficient scalability Flexibility High performance Microservice is a single service with a single focus. Does one thing and one thing well. Independent data storage Independently changeable Independently deployable Distributed transactions Lightweight communication mechanism (both client-service and service-service)
Longer dev time Longer deployment time Technology stack is fixed High level of coupling between modules between services Failure could affect entire system Scaling requires duplication of the whole Single service on server is an advantage, dev is easily done
Need for reliability (If one part break down, we still have other running parts) Automated test tools, release and deplyment tools are available and they make things easy On-demand hosting (cloud / clone)
Reliable and faster deployments (Enables frequent updates) Decouple the changeble parts Security (data is distributed, can have different security implementations for different services) Increased uptime (Only one service will be down at a time) Highly scalable and better performance (can duplicate necessary services to better performance) Better ownership and knowledge