
Overview
Building complex enterprise applications is very challenging in an ever-changing environment.
Changes in the integration between services or systems will trigger changes in the design of the system. This course covers how to design maintainable, fit to the size and purpose of your organisation service and systems architecture and practical infrastructure.
This course covers common problems with building the landscape of distributed apps, starting from integration problem, infrastructure and modern approaches, to solving complexity issues.
This course explains the pros and cons of each solution (e.g. traditional SOA vs Microservice architecture), available tools (mostly open-source) supporting the development and maintenance, etc..
Course Format
It is mostly discussion (with limited presentations).
Requirements
- Basic understanding of software and system engineering required.
- Good understanding of system development and integration recommended.
- Some exposure to problems encountered during building complex enterprise solutions recommended.
Course Outline
Quick overview of traditional approaches
- Monolithic systems
- System of Systems
- Early service orientation (EAI, CORBA, etc…)
- Early webservices (SOAP, etc…)
- Service Oriented Architecture (SOA)
- Microservices
Design concepts and tradesoff
- Flexibility and Complexity tradeoff
- Cohesion, Coupling
- Hidden dependencies vs explicit dependencies
- Small system vs Big System
- Module/Component vs Service
Generic SOA
- Benefit and Costs of SOA
- Successes and failures in implementing SOA
- Messaging and ESB
- Infrastructure and tools supporting SOA
Microservices and implementation of SOA – concepts
- Do one thing and do it well
- Microservice vs Service
- DevOps
- Continuous Deployment and Delivery
- Lightweight protocols
Microservice protocols and tools
- HTTP, JMS, AMQP, Websockets, JSON, etc…
- Deployment
- Containers (Docker, K8N, LXC, etc…)
- Configuration Management (Ansible, etc…)
- Monitoring and Management
- Infrastructure
Cloud and Auto Scalability
- Microservice redundancy and fail-over
- Performance scalability
- Auto scalability
- Implement: OpenStack, AWS, etc….
Real problems
- Complexity of ecosystem
- Network Performance
- Security
- Deployment
- Testing
- Nano-services