Microservices are all the rage these days. Docker is a tool which makes managing Microservices a whole lot easier. But what do Microservices really mean? What are the best practices of composing your application with Microservices? How can you leverage Docker and the public cloud to help you build a more agile DevOps process? How does the Azure Container Service fit in? Join us to find out the answer.
3. About Alon
Chief Architect & Co-Founder at CodeValue
More than 25 years of hands-on experience
Microsoft Regional Director & Microsoft MVP
Active member of Microsoft Advisory Councils
Renowned speaker at both international and
domestic events
3
4. About Eran
Cloud Division Leader & Co-Founder at CodeValue
Software architect, consultant and instructor
Microsoft Azure MVP
More than 10 years of hands-on experience
Expert in large-scale, server-side, highly-concurrent
systems
Co-Founder of Azure Israel Meetup
4
5. About CodeValue & OzCode
CodeValue – Inspiring Code. Creating Value.
A consultancy and software development firm
High quality software projects and managed services
Valuable training and mentoring
Advanced software technology and methodology consulting
OzCode – an innovative VS debugging extension
Helps identify and fix bugs during C# development
Saves time and effort
Makes the debugging process easy and simple
7. What a Modern Architect SHOULD Know
7
SRS
UML
Use
Cases
User
Stories
Risk
Mitigations
Design
Redis
SRP
7
Client
Server
Schema
OOP
SQL
SOA
NoSQL
Encapsulation
Data
JSON
ETL
Reporting
AWS
BASE
Queue
XML
Cloud
Big Data
ACID
Micro
Services
Architecture
Distributed
Cache
REST
Idempotency
BI
Map
Reduce
NLB
HTTP
Indexing
CDN
Search
Security
Log
HPC
Authentication
Docker
Containers
HA
DRPub/Sub
UI/UX
CQRS
MEAN
ORM
Push
Notifications
8. What a Modern Architect MUST Know
Understand the requirements
Understand the constraints
Low coupling
High cohesion
Balance of size & number of components
Volatility
Workplace politics
9. Software Architecture
The system structure
Built from software components
The relationship between components
The properties of both components and relations
Software architecture is about making fundamental
structural choices
Which are costly to change once implemented
Designing software architecture is a mix of art and science!
10. Software Architecture Goals
Defining a structured solution that
Meets all the technical and operational requirements
Captures the non-volatile (hard to change) decisions
Focuses on important elements of the system (context)
Provide a solid foundation for a successful software product
Answer the requirements:
Functional
Non-Functional (quality attributes)
Constraints
10
11. Cohesion
The degree to which a module
performs one and only one function
Strive for high cohesion
A module can be:
Library (assembly, shared module, DLL)
File
Class
Method
COM/CORBA component
(Micro) Service
Any reusable element
11
12. Coupling
The degree to which each program module
relies on each of the other modules
Low coupling often correlates with
high cohesion, and vice versa
Low coupling is
A sign of a well-structured computer system
Good design
When combined with high cohesion
Supports high readability, maintainability, extendibility, and
reusability
Micro Service Architecture == High Cohesion & Low Coupling
12
13. Why Should I Care About Coupling
Tightly coupled systems tend to exhibit the following
developmental characteristics
A change in one module usually forces a ripple (cascading) effect
of changes in other modules
Assembly of modules might require more effort and/or time due
to the increased inter-module dependency
A particular module might be harder to reuse and/or test because
dependent modules must be included
The DevOps process becomes a nightmare!!!
13
14. Fan-In Fan-Out and Stable Module
One way to examine module stability (i.e. low coupling and high
cohesion) is by looking at its fan-in fan-out and other dependencies
Fan-In
The number of users of the module
Fan-Out
The number of modules that the current module is being used by
A stable module is a module that has high fun-in and low fan-out
This module can be easily reused
14
15. Just The Right Number Of Modules
15
number of modules
Module
integration cost
module development cost
The cost of
the software
16. Modern Software Project Challenges
16
We need to do more with less
More functional requirements and better quality
attributes
(Many) more end users
(Many) more servers to manage with less operators
More changes with less or even no maintenance
downtime
17. The 24/7 Challenge
How do you update a system running
24/7/365?
How do you keep the application servers
responsive?
How do you keep all application servers
synced?
How do you update the data/schema?
How do you update all your clients’ software?
Web, Mobile, Desktop…
How do you rollback on error?
How do you rollback data?
How do you know there is an error?
17
18. The 24/7 Challenge
Plan ahead
DevOps
Architect
Low Coupling, High Cohesion
Schema/API Versioning
Use supporting platforms
Cloud
Containers
18
19. Microservices Architecture (MSA) - Wikipedia
“Microservices is a specialization of and implementation approach for
service-oriented architectures (SOA) used to build flexible,
independently deployable software systems”
“Services are small in size, messaging enabled, bounded by contexts,
autonomously developed, independently deployable, decentralized
and built and released with automated processes”
“The benefit of distributing different responsibilities of the system into
different smaller services is that it enhances the cohesion and
decreases the coupling”
19
20. MSA Criticism
The architecture introduces additional complexity
such as:
Network latency
Message formats and versioning nightmare
Load balancing and fault tolerance management
Testing and deployment are more complicated
20
21. MSA Drawbacks Solution
Plan ahead
DevOps
Architect
Low Coupling, High Cohesion
Schema/API Versioning
Use supporting platforms
Cloud
Containers
21
23. Docker, Docker, Docker
Containers have been around for many years
Docker Inc. did not invent them
They created open source software to build and manage containers
Docker makes containers easy
Even I can create and run them
Docker is a container format and a set of tools
Docker CLI, Docker Engine, Docker Swarm, Docker Compose, Docker Machine
and more…
Docker is an eco-system
23
24. Server
Host OS
Hypervisor
Server
Host OS
Docker Engine
Guest
OS
Guest
OS
Guest
OS
Bins/Libs Bins/Libs Bins/Libs
App A App A’ App B
Bins/Libs Bins/Libs
AppA
AppA’
AppB
AppB’
AppB
AppB’
AppB
AppB’
Containers are isolated,
but share OS and, where
appropriate,
bins/libraries
Bins/Libs