Looks like no one added any tags here yet for you.
A service
Doing something for someone else when requested, here an IT system does something for another IT system on request
RPC
Remote Procedure Call - execute code on another computer connected over a network
API
Application Programming Interface - the things you need to do to call code on another computer
Space coupling (time-coupled)
Communication directed towards a receiver that exists at that moment in time - message passing, remote invocation
Space coupling (time-uncoupled)
Communication directed towards a receiver that can have an independent lifetime
Space uncoupling (time-coupled)
Sender does not need to know receivers identity, but receiver must exist at the point in time
Space uncoupling (time-uncoupled)
Sender does not need to know the identity of the receiver, sender and receiver can have independent lifetimes
Reliability
Tolerating hardware and software faults | Human error
Scalability
Measuring load and performance | Latency percentiles, throughput
Maintainability
Operability, simplicity and evolvability
RPC goal
Transparency through failure masking
HTTP resource
An artifact with state, fx. a document, an image, an airplane booking…
Interaction through CRUD (create, read, update, delete)
HTTP safety
CRUD (create, read, update, delete) is supposed to be idempotent (no additional effect if repeated)
GET and HEAD supposed to have no side-effects
IDL (gRPC)
Interface Definition Language - define messages
Cloud Native
Uses containers, service meshes, microservices, immutable infrastructure to enable loosely coupled systems that are resilient, manageable and observable
Monolithic application
Puts all functionality into single process - scaled by replicating monolith on several servers
Microservices
Puts each element of functionality into a separate service - scaled by distributing services across servers, only replicating when needed
Small, independent, and loosely coupled.
Internal implementation details are hidden.
Microservice philosophy
Service with some philosophy
Business flexibility
Lifecycle - independent changes
High cohesion, low coupling
Microservice downsides
Complexity
Testing
(Lack of) governance
Network load
Data integrity
Versioning
Componentization
Build systems by plugging components together
Products vs projects
Products! Projects end, software stays.
Pipes responsibility
Only transportation, fx. message routing
Synchronous?
Harmful
Time and space decoupled
Multiplies downtime
Implies waiting
You don’t need it!