SlideShare una empresa de Scribd logo
1 de 102
Resilience reloaded
More resilience patterns
Uwe Friedrichsen, codecentric AG, 2015-2016
@ufried
Uwe Friedrichsen | uwe.friedrichsen@codecentric.de | http://slideshare.net/ufried | http://ufried.tumblr.com
Previously on “Resilience” …
Why resilience?
It‘s all about production!
Business
Production
Availability
Availability ≔
MTTF
MTTF + MTTR
MTTF: Mean Time To Failure
MTTR: Mean Time To Recovery
Traditional stability approach
Availability ≔
MTTF
MTTF + MTTR
Maximize MTTF
(Almost) every system is a distributed system
Chas Emerick
The Eight Fallacies of Distributed Computing
1. The network is reliable
2. Latency is zero
3. Bandwidth is infinite
4. The network is secure
5. Topology doesn't change
6. There is one administrator
7. Transport cost is zero
8. The network is homogeneous
Peter Deutsch
https://blogs.oracle.com/jag/resource/Fallacies.html
A distributed system is one in which the failure
of a computer you didn't even know existed
can render your own computer unusable.
Leslie Lamport
Failures in todays complex, distributed and
interconnected systems are not the exception.
• They are the normal case
• They are not predictable
• They are not avoidable
Do not try to avoid failures. Embrace them.
Resilience approach
Availability ≔
MTTF
MTTF + MTTR
Minimize MTTR
resilience (IT)
the ability of a system to handle unexpected situations
 without the user noticing it (best case)
 with a graceful degradation of service (worst case)
Isolation
Latency Control
Fail Fast
Circuit Breaker
Timeouts
Fan out &
quickest reply
Bounded Queues
Shed Load
Bulkheads
Loose Coupling
Asynchronous
Communication
Event-Driven
Idempotency
Self-Containment
Relaxed
Temporal
Constraints
Location
Transparency
Stateless
Supervision
Monitor
Complete
Parameter
Checking
Error Handler
Escalation
… and there is more
• Recovery & mitigation patterns
• More supervision patterns
• Architectural patterns
• Anti-fragility patterns
• Fault treatment & prevention patterns
A rich pattern family
(Title music starts & opening credits shown)
Let’s complete the picture first …
Isolation
Latency Control
Loose Coupling
Supervision
Core
(Architectural)
Detection Treatment Prevention
Recovery
Mitigation
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Isolation
Loose Coupling
Latency Control
Node level
Supervision
System level
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Isolation Redundancy
Communication
paradigm
Supporting
patterns
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Supporting
patterns
Communication
paradigm
RedundancyIsolation
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Supporting
patterns
Communication
paradigm
RedundancyIsolation
Bulkhead
Bulkheads
• Core isolation pattern (a.k.a. “failure units” or “units of mitigation”)
• Shaping good bulkheads is hard (pure design issue)
• Diverse implementation choices available, e.g., µservice, actor, scs, ...
• Implementation choice impacts system and resilience design a lot
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Supporting
patterns
Communication
paradigm
RedundancyIsolation
Communication paradigm
• Request-response <-> messaging <-> events
• Not a pattern, but heavily influences resilience patterns to be used
• Also heavily influences functional bulkhead design
• Very fundamental decision which is often underestimated
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Supporting
patterns
Communication
paradigm
RedundancyIsolation
Redundancy
• Core resilience concept
• Applicable to all failure types
• Basis for many recovery and mitigation patterns
• Often different variants implemented in a system
Failure types
• Crash failure
• Omission failure
• Timing failure
• Response failure
• Byzantine failure
Failure types
• Crash failure
• Omission failure
• Timing failure
• Response failure
• Byzantine failure
Usage of redundancy
• Patterns
• Failover
• Schemes
• Active/Passive
• Active/Active
• N+M Redundancy
• Implementation examples
• Load balancer + health check
(e.g., HAProxy)
• Dynamic routing + health check
(e.g., Consul, ZooKeeper)
• Cluster manager with shared IP
(e.g., Pacemaker & Corosync)
Failure types
• Crash failure
• Omission failure
• Timing failure
• Response failure
• Byzantine failure
Usage of redundancy
• Patterns
• Retry (to different replica)
• Failover
• Backup Request
• Schemes
• Identical replicas
• Failover schemes (for failover)
• Implementation examples
• Client-based routing
• Load balancer
• Leaky bucket + dynamic routing
Failure types
• Crash failure
• Omission failure
• Timing failure
• Response failure
• Byzantine failure
Usage of redundancy
• Patterns
• Timeout + retry to different replica
• Timeout + failover
• Backup Request
• Schemes
• Identical replicas
• Failover schemes (for failover)
• Implementation examples
• Client-based routing
• Load balancer
• Circuit breaker + dynamic routing
Failure types
• Crash failure
• Omission failure
• Timing failure
• Response failure
• Byzantine failure
Usage of redundancy
• Patterns
• Voting
• Recovery blocks
• Routine exercise
• Schemes
• Identical replicas
• Different replicas (recovery blocks)
• Implementation examples
• Majority based quorum
• Adaptive weighted sum
• Synthetic computation
Failure types
• Crash failure
• Omission failure
• Timing failure
• Response failure
• Byzantine failure
Usage of redundancy
• Patterns
• Voting
• Recovery blocks
• Routine exercise
• Schemes
• Identical replicas
• Different replicas (recovery blocks)
• Implementation examples
• n > 3t quorum
• Adaptive weighted sum
• Synthetic computation
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Supporting
patterns
Communication
paradigm
RedundancyIsolation
Stateless Idempotency
Escalation
Structural Behavioral
Zero
downtime
deployment
Location
transparency
Relaxed
temporal
constraints
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Node level
Supporting
patterns
System level
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Node level
Supporting
patterns
System level
Timeout
Circuit breaker
Complete
parameter
checking
Checksum
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Node level
Supporting
patterns
System level
Monitor Watchdog
Heartbeat
Acknowledgement
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Node level
Supporting
patterns
System level
Voting
Synthetic
transaction
Leaky bucketRoutine checks
Health
check
Fail fast
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Retry
Limit retries
Retry
• Very basic recovery pattern
• Recover from omission errors
• Limit retries to minimize extra load on an already loaded resource
• Limit retries to avoid recurring errors
Retry example
// doAction returns true if successful, false otherwise
boolean doAction(...) {
...
}
// General pattern
boolean success = false
int tries = 0;
while (!success && (tries < MAX_TRIES)) {
success = doAction(...);
tries++;
}
// Alternative one-retry-only variant
success = doAction(...) || doAction(...);
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Retry
Limit retries
Rollback
Checkpoint Safe point
Rollback
• Roll back state and/or execution path to a defined safe state
• Recover from internal errors caused by external failures
• Use checkpoints and safe points to provide safe rollback points
• Limit retries to avoid recurring errors
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Retry
Limit retries
Rollback
Checkpoint Safe point
Roll-
forward
Roll-forward
• Advance execution past the point of error
• Often used as escalation if retry or rollback do not succeed
• Not applicable if skipped activity is essential
• Use checkpoints and safe points to provide safe roll-forward points
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Retry
Limit retries
Rollback Roll-
forward
Checkpoint Safe point
Restart
Reconnec
t
Data Reset
Startup
consistenc
y Reset
Reset
• Often used as radical escalation if all other measures failed
• Restart service – do not forget to provide a consistent startup state
• Reset data to a guaranteed consistent state if nothing else helps
• Sometimes simply trying to reconnect helps (often forgotten)
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Retry
Limit retries
Rollback
Restart
Roll-
forward
Reconnec
t
Checkpoint Safe point
Data Reset
Startup
consistenc
y Reset
Failover
Failover
• Used as escalation if other measures failed or would take too long
• Requires redundancy – trades resources for availability
• Many implementation variants available, incl. out-of-the-box
solutions
• Usually implemented as a monitor-dynamic router combination
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Retry
Limit retries
Rollback
Restart
Roll-
forward
Reconnec
t
Checkpoint Safe point
Data Reset
Startup
consistenc
y
Failover
Reset
Read repair
Read repair
• Handle response failures due to relaxed temporal constraints
• Requires redundancy – trades resources for availability
• Decides correct state based on conflicting siblings
• Often implemented in NoSQL databases (but not always accessible)
Read repair example (Riak, Java) 1/2
public class FooResolver implements ConflictResolver<Foo> {
@Override
public Foo resolve(List<Foo> siblings) {
// Insert your sibling resolution logic here
}
}
public class Buddy {
public String name;
public Set<String> nicknames;
public Buddy(String name, Set<String> nicknames) {
this.name = name;
this.nicknames = nicknames;
}
}
Read repair example (Riak, Java) 2/2
public class BuddyResolver implements ConflictResolver<Buddy> {
@Override
public Buddy resolve(List<Buddy> siblings) {
if (siblings.size == 0) {
return null;
} else if (siblings.size == 1) {
return siblings.get(0);
} else {
// Name is also used as key. Thus, all siblings have the same name
String name = siblings.get(0). name;
Set<String> mergedNicknames = new HashSet<String>();
for (Buddy buddy : siblings) {
mergedNicknames.addAll(buddy.nicknames);
}
return new Buddy(name, mergedNicknames);
}
}
}
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Retry
Limit retries
Rollback
Restart
Roll-
forward
Reconnec
t
Checkpoint Safe point
Data Reset
Startup
consistenc
y
Failover
Read repair
Reset
Error handler
Error Handler
• Separate business logic and error handling
• Business logic just focuses on getting the task done
• Error handler focuses on recovering from errors
• Easier to maintain – can be extended to structural escalation
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Retry
Limit retries
Rollback
Restart
Roll-
forward
Reconnec
t
Checkpoint Safe point
Data Reset
Startup
consistenc
y
Failover
Read repair
Error handler
Reset
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Fallback
Fail
silently
Alternative action
Default value
Fallback
• Execute an alternative action if the original action fails
• Basis for most mitigation patterns
• Fail silently – silently ignore the error and continue processing
• Default value – return a predefined default value if an error occurs
Default value example (Hystrix, Java) 1/2
public class DefaultValueCommand extends HystrixCommand<String> {
private static final String COMMAND_GROUP = "default”;
private final boolean preCondition;
public DefaultValueCommand(boolean preCondition) {
super(HystrixCommandGroupKey.Factory.asKey(COMMAND_GROUP));
this.preCondition = preCondition;
}
@Override
protected String run() throws Exception {
if (!preCondition)
throw new RuntimeException((”Action failed"));
return ”I am a result";
}
@Override
protected String getFallback() {
return ”I am a default value"; // Return default value if action fails
}
}
Default value example (Hystrix, Java) 2/2
@Test
public void shouldSucceed() {
DefaultValueCommand command = new DefaultValueCommand(true);
String s = command.execute();
assertEquals(”I am a result", s);
}
@Test
public void shouldProvideDefaultValue () {
DefaultValueCommand command = new DefaultValueCommand(false);
String s = null;
try {
s = command.execute();
} catch (Exception e) {
fail("Did not return default value");
}
assertEquals(”I am a default value", s);
}
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Fallback
Fail
silently
Alternative action
Default value
Queue for
resources
Bounded queue
Finish work
in progress
Fresh work
before stale
Queues for resources
• Protect resource from temporary overload situations
• Limit queue size to limit latency at longer-lasting overload
• Finish work in progress – Create pushback on the callers
• Fresh work before stale – Discard old entries
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Fallback
Fail
silently
Alternative action
Default value
Queue for
resources
Bounded queue
Finish work
in progress
Fresh work
before stale
Shed load
Shed Load
• Use if overload will lead to unacceptable throughput of resource
• Shed requests in order to keep throughput of resource acceptable
• Shed load at periphery – Minimize impact on resource itself
• Usually combined with monitor to watch load of resource
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Fallback
Fail
silently
Alternative action
Default value
Shed load
Queue for
resources
Bounded queue
Finish work
in progress
Fresh work
before stale
Share load
Statically Dynamically
Share Load
• Use if overload will lead to unacceptable throughput of resource
• Share load between (added) resources to keep throughput good
• Minimize amount of synchronization needed between resources
• Usually combined with monitor to watch load of resource(s)
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Fallback
Fail
silently
Alternative action
Default value
Shed loadShare load
Queue for
resources
Bounded queue
Finish work
in progress
Fresh work
before staleStatically Dynamically
Deferrable work
Deferrable work
• Maximize resources for online request processing under high load
• Pause or slow down routine and batch jobs
• Provide a means to pause routine and batch jobs from outside
• Alternatively use a scheduler with dynamic resource allocation
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Fallback
Fail
silently
Alternative action
Default value
Shed loadShare load
Queue for
resources
Bounded queue
Finish work
in progress
Fresh work
before stale
Marked data
Statically Dynamically
Deferrable work
Marked data
• Avoid repeated and/or spreading errors due to erroneous data
• Use if time or information to correct data immediately is missing
• Mark data as being erroneous – check flag before processing data
• Use routine maintenance job to correct data
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Fallback
Fail
silently
Alternative action
Default value
Shed loadShare load
Marked data
Queue for
resources
Bounded queue
Finish work
in progress
Fresh work
before staleStatically Dynamically
Deferrable work
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Let sleeping dogs lie
Small releasesHot deployments
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Routine
maintenance
Anti-entropy
Routine maintenance
• Reduce system entropy – keep preventable errors from occurring
• Especially important if errors were only mitigated, not corrected
• Check system periodically and fix detected faults and errors
• Balance benefits, costs and additional system load
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Routine
maintenance
Spread the news
Anti-entropy
Spread the news
• Pro-actively spread information about changes in system state
• Use a gossip or epidemic protocol for robustness and efficiency
• Can also be used for data reconciliation
• Balance benefits, costs and additional network load
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Routine
maintenance
Backup
request
Spread the news
Anti-entropy
Backup request
• Send request to multiple workers (optionally a bit offset)
• Use quickest reply and discard all other responses
• Prevents latent responses (or at least reduces probability)
• Requires redundancy – trades resources for availability
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Routine
maintenance
Backup
request
Anti-fragility
Diversity Jitter
Spread the news
Anti-entropy
Anti-fragility
• Avoid fragility caused by homogenization and standardization
• Protect against disastrous failures by using diverse solutions
• Protect against cumulating effects by introducing jitter
• Balance risks, benefits and added costs and efforts carefully
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Routine
maintenance
Backup
request
Anti-fragility
Diversity Jitter
Error
injection
Spread the news
Anti-entropy
Error injection
• Make resilient software design sustainable
• Inject errors at runtime and observe how the system reacts
• Can also be used to detect yet unknown failure modes
• Make sure to inject errors of all types
• Chaos Monkey
• Chaos Gorilla
• Chaos Kong
• Latency Monkey
• Compliance Monkey
• Security Monkey
• Janitor Monkey
• Doctor Monkey
https://github.com/Netflix/SimianArmy
PreventionDetectionCore
(Architectural)
Recovery
Mitigation
Treatment
Routine
maintenance
Backup
request
Anti-fragility
Diversity Jitter
Error
injection
Spread the news
Anti-entropy
Towards a pattern language …
Decisions to make
• General decisions
• Bulkhead type
• Communication paradigm
• Decisions per failure scenario (repeat)
• Error detection on node & system level
• Recovery/mitigation mechanism
• Supporting treatment mechanism
• Supporting prevention mechanism
• Complementing decisions
• Complementing redundancy mechanism(s)
• Complementing architectural patterns
Core
(Architectural)
Detection Treatment Prevention
Recovery
Mitigation
Isolation Redundancy
Communication
paradigm
Supporting
patterns
Node level
System level
1
Decide core
system
properties
2
Choose patterns per failure scenario
(Have the different failure types in mind)3
Decide
complementing
patterns
Ongoing
Create and refine system design and functional decomposition. Functionally decouple bulkheads
(A good functional decomposition on business level is the prerequisite for an effective resilience)
Core
(Architectural)
Detection Treatment Prevention
Recovery
Mitigation
Isolation Redundancy
Communication
paradigm
Supporting
patterns
Node level
System level
Example: Erlang (Akka)
MonitorMessaging
Actor
Escalation Heartbeat
Restart
(Let it crash)
Hot
deployments
Core
(Architectural)
Detection Treatment Prevention
Recovery
Mitigation
Isolation Redundancy
Communication
paradigm
Supporting
patterns
Node level
System level
Example: Netflix
Monitor
Request/r
esponse
(Micro)Service
Retry
Hot
deployments
(Canary releases)
Fallback
Share load
Bounded queue
Timeout
Circuit
breake
r
Several
variants
Error injection
Core
(Architectural)
Detection Treatment Prevention
Recovery
Mitigation
Isolation Redundancy
Communication
paradigm
Supporting
patterns
Node level
System level
What is your pattern language?
Wrap-up
• Today’s systems are distributed
• Failures are not avoidable
• Failures are not predictable
• Resilient software design needed
• Rich pattern language
• Start with core system properties
• Choose patterns based on failure scenarios
• Complement with careful functional design
Further reading
1. Michael T. Nygard, Release It!,
Pragmatic Bookshelf, 2007
2. Robert S. Hanmer,
Patterns for Fault Tolerant Software, Wiley, 2007
3. Andrew Tanenbaum, Marten van Steen,
Distributed Systems – Principles and Paradigms,
Prentice Hall, 2nd Edition, 2006
4. Hystrix Wiki,
https://github.com/Netflix/Hystrix/wiki
5. Uwe Friedrichsen, Patterns of resilience,
http://de.slideshare.net/ufried/patterns-of-
resilience
Do not avoid failures. Embrace them!
@ufried
Uwe Friedrichsen | uwe.friedrichsen@codecentric.de | http://slideshare.net/ufried | http://ufried.tumblr.com
Resilience reloaded - more resilience patterns

Más contenido relacionado

La actualidad más candente

The Case for Chaos
The Case for ChaosThe Case for Chaos
The Case for ChaosBruce Wong
 
Monitoring Apache Kafka
Monitoring Apache KafkaMonitoring Apache Kafka
Monitoring Apache Kafkaconfluent
 
Microservices Architecture - Cloud Native Apps
Microservices Architecture - Cloud Native AppsMicroservices Architecture - Cloud Native Apps
Microservices Architecture - Cloud Native AppsAraf Karsh Hamid
 
Airflow Clustering and High Availability
Airflow Clustering and High AvailabilityAirflow Clustering and High Availability
Airflow Clustering and High AvailabilityRobert Sanders
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice ArchitectureNguyen Tung
 
Kafka 101 and Developer Best Practices
Kafka 101 and Developer Best PracticesKafka 101 and Developer Best Practices
Kafka 101 and Developer Best Practicesconfluent
 
GOTO Berlin - Battle of the Circuit Breakers: Resilience4J vs Istio
GOTO Berlin - Battle of the Circuit Breakers: Resilience4J vs IstioGOTO Berlin - Battle of the Circuit Breakers: Resilience4J vs Istio
GOTO Berlin - Battle of the Circuit Breakers: Resilience4J vs IstioNicolas Fränkel
 
Stability Patterns for Microservices
Stability Patterns for MicroservicesStability Patterns for Microservices
Stability Patterns for Microservicespflueras
 
Microservices architecture overview v2
Microservices architecture overview v2Microservices architecture overview v2
Microservices architecture overview v2Dmitry Skaredov
 
Monitoring Microservices
Monitoring MicroservicesMonitoring Microservices
Monitoring MicroservicesWeaveworks
 
Microservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and SagaMicroservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and SagaAraf Karsh Hamid
 
Orchestration Patterns for Microservices with Messaging by RabbitMQ
Orchestration Patterns for Microservices with Messaging by RabbitMQOrchestration Patterns for Microservices with Messaging by RabbitMQ
Orchestration Patterns for Microservices with Messaging by RabbitMQVMware Tanzu
 
Quality in a Square. K8s-native Quality Assurance of Microservices with Testkube
Quality in a Square. K8s-native Quality Assurance of Microservices with TestkubeQuality in a Square. K8s-native Quality Assurance of Microservices with Testkube
Quality in a Square. K8s-native Quality Assurance of Microservices with TestkubeQAware GmbH
 
From Zero to Hero with Kafka Connect
From Zero to Hero with Kafka ConnectFrom Zero to Hero with Kafka Connect
From Zero to Hero with Kafka Connectconfluent
 
Slides: Why You Need End-to-End Data Quality to Build Trust in Kafka
Slides: Why You Need End-to-End Data Quality to Build Trust in KafkaSlides: Why You Need End-to-End Data Quality to Build Trust in Kafka
Slides: Why You Need End-to-End Data Quality to Build Trust in KafkaDATAVERSITY
 
Distributed sagas a protocol for coordinating microservices
Distributed sagas a protocol for coordinating microservicesDistributed sagas a protocol for coordinating microservices
Distributed sagas a protocol for coordinating microservicesJ On The Beach
 
IBM MQ: Managing Workloads, Scaling and Availability with MQ Clusters
IBM MQ: Managing Workloads, Scaling and Availability with MQ ClustersIBM MQ: Managing Workloads, Scaling and Availability with MQ Clusters
IBM MQ: Managing Workloads, Scaling and Availability with MQ ClustersDavid Ware
 

La actualidad más candente (20)

Production-ready Software
Production-ready SoftwareProduction-ready Software
Production-ready Software
 
The Case for Chaos
The Case for ChaosThe Case for Chaos
The Case for Chaos
 
Monitoring Apache Kafka
Monitoring Apache KafkaMonitoring Apache Kafka
Monitoring Apache Kafka
 
Microservices Architecture - Cloud Native Apps
Microservices Architecture - Cloud Native AppsMicroservices Architecture - Cloud Native Apps
Microservices Architecture - Cloud Native Apps
 
Airflow Clustering and High Availability
Airflow Clustering and High AvailabilityAirflow Clustering and High Availability
Airflow Clustering and High Availability
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecture
 
Kafka 101
Kafka 101Kafka 101
Kafka 101
 
Kafka 101 and Developer Best Practices
Kafka 101 and Developer Best PracticesKafka 101 and Developer Best Practices
Kafka 101 and Developer Best Practices
 
GOTO Berlin - Battle of the Circuit Breakers: Resilience4J vs Istio
GOTO Berlin - Battle of the Circuit Breakers: Resilience4J vs IstioGOTO Berlin - Battle of the Circuit Breakers: Resilience4J vs Istio
GOTO Berlin - Battle of the Circuit Breakers: Resilience4J vs Istio
 
Introduction to Apache Kafka
Introduction to Apache KafkaIntroduction to Apache Kafka
Introduction to Apache Kafka
 
Stability Patterns for Microservices
Stability Patterns for MicroservicesStability Patterns for Microservices
Stability Patterns for Microservices
 
Microservices architecture overview v2
Microservices architecture overview v2Microservices architecture overview v2
Microservices architecture overview v2
 
Monitoring Microservices
Monitoring MicroservicesMonitoring Microservices
Monitoring Microservices
 
Microservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and SagaMicroservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and Saga
 
Orchestration Patterns for Microservices with Messaging by RabbitMQ
Orchestration Patterns for Microservices with Messaging by RabbitMQOrchestration Patterns for Microservices with Messaging by RabbitMQ
Orchestration Patterns for Microservices with Messaging by RabbitMQ
 
Quality in a Square. K8s-native Quality Assurance of Microservices with Testkube
Quality in a Square. K8s-native Quality Assurance of Microservices with TestkubeQuality in a Square. K8s-native Quality Assurance of Microservices with Testkube
Quality in a Square. K8s-native Quality Assurance of Microservices with Testkube
 
From Zero to Hero with Kafka Connect
From Zero to Hero with Kafka ConnectFrom Zero to Hero with Kafka Connect
From Zero to Hero with Kafka Connect
 
Slides: Why You Need End-to-End Data Quality to Build Trust in Kafka
Slides: Why You Need End-to-End Data Quality to Build Trust in KafkaSlides: Why You Need End-to-End Data Quality to Build Trust in Kafka
Slides: Why You Need End-to-End Data Quality to Build Trust in Kafka
 
Distributed sagas a protocol for coordinating microservices
Distributed sagas a protocol for coordinating microservicesDistributed sagas a protocol for coordinating microservices
Distributed sagas a protocol for coordinating microservices
 
IBM MQ: Managing Workloads, Scaling and Availability with MQ Clusters
IBM MQ: Managing Workloads, Scaling and Availability with MQ ClustersIBM MQ: Managing Workloads, Scaling and Availability with MQ Clusters
IBM MQ: Managing Workloads, Scaling and Availability with MQ Clusters
 

Similar a Resilience reloaded - more resilience patterns

Designing apps for resiliency
Designing apps for resiliencyDesigning apps for resiliency
Designing apps for resiliencyMasashi Narumoto
 
Fault tolerant presentation
Fault tolerant presentationFault tolerant presentation
Fault tolerant presentationskadyan1
 
Nelson: Rigorous Deployment for a Functional World
Nelson: Rigorous Deployment for a Functional WorldNelson: Rigorous Deployment for a Functional World
Nelson: Rigorous Deployment for a Functional WorldTimothy Perrett
 
Automining Presentation by Andre Gibson - Key Engineering Solutions
Automining Presentation by Andre Gibson - Key Engineering SolutionsAutomining Presentation by Andre Gibson - Key Engineering Solutions
Automining Presentation by Andre Gibson - Key Engineering SolutionsKey Engineering Solutions
 
Resisting to The Shocks
Resisting to The ShocksResisting to The Shocks
Resisting to The ShocksStefano Fago
 
Dependable Systems -Fault Tolerance Patterns (4/16)
Dependable Systems -Fault Tolerance Patterns (4/16)Dependable Systems -Fault Tolerance Patterns (4/16)
Dependable Systems -Fault Tolerance Patterns (4/16)Peter Tröger
 
Performance Issue? Machine Learning to the rescue!
Performance Issue? Machine Learning to the rescue!Performance Issue? Machine Learning to the rescue!
Performance Issue? Machine Learning to the rescue!Maarten Smeets
 
Azure architecture design patterns - proven solutions to common challenges
Azure architecture design patterns - proven solutions to common challengesAzure architecture design patterns - proven solutions to common challenges
Azure architecture design patterns - proven solutions to common challengesIvo Andreev
 
Art of Cloud Workload Translation
Art of Cloud Workload TranslationArt of Cloud Workload Translation
Art of Cloud Workload TranslationPaul Cooper
 
Microservices Gone Wrong!
Microservices Gone Wrong!Microservices Gone Wrong!
Microservices Gone Wrong!Bert Ertman
 
Reactive programming with examples
Reactive programming with examplesReactive programming with examples
Reactive programming with examplesPeter Lawrey
 
The Great Disconnect of Data Protection: Perception, Reality and Best Practices
The Great Disconnect of Data Protection: Perception, Reality and Best PracticesThe Great Disconnect of Data Protection: Perception, Reality and Best Practices
The Great Disconnect of Data Protection: Perception, Reality and Best Practicesiland Cloud
 
Service Stampede: Surviving a Thousand Services
Service Stampede: Surviving a Thousand ServicesService Stampede: Surviving a Thousand Services
Service Stampede: Surviving a Thousand ServicesAnil Gursel
 
Finding Bugs Faster with Assertion Based Verification (ABV)
Finding Bugs Faster with Assertion Based Verification (ABV)Finding Bugs Faster with Assertion Based Verification (ABV)
Finding Bugs Faster with Assertion Based Verification (ABV)DVClub
 
Системный взгляд на параллельный запуск Selenium тестов
Системный взгляд на параллельный запуск Selenium тестовСистемный взгляд на параллельный запуск Selenium тестов
Системный взгляд на параллельный запуск Selenium тестовCOMAQA.BY
 
Production Ready Microservices at Scale
Production Ready Microservices at ScaleProduction Ready Microservices at Scale
Production Ready Microservices at ScaleRajeev Bharshetty
 

Similar a Resilience reloaded - more resilience patterns (20)

Designing apps for resiliency
Designing apps for resiliencyDesigning apps for resiliency
Designing apps for resiliency
 
Fault tolerant presentation
Fault tolerant presentationFault tolerant presentation
Fault tolerant presentation
 
Nelson: Rigorous Deployment for a Functional World
Nelson: Rigorous Deployment for a Functional WorldNelson: Rigorous Deployment for a Functional World
Nelson: Rigorous Deployment for a Functional World
 
Introduction
IntroductionIntroduction
Introduction
 
Automining Presentation by Andre Gibson - Key Engineering Solutions
Automining Presentation by Andre Gibson - Key Engineering SolutionsAutomining Presentation by Andre Gibson - Key Engineering Solutions
Automining Presentation by Andre Gibson - Key Engineering Solutions
 
Resisting to The Shocks
Resisting to The ShocksResisting to The Shocks
Resisting to The Shocks
 
Dependable Systems -Fault Tolerance Patterns (4/16)
Dependable Systems -Fault Tolerance Patterns (4/16)Dependable Systems -Fault Tolerance Patterns (4/16)
Dependable Systems -Fault Tolerance Patterns (4/16)
 
Performance Issue? Machine Learning to the rescue!
Performance Issue? Machine Learning to the rescue!Performance Issue? Machine Learning to the rescue!
Performance Issue? Machine Learning to the rescue!
 
DevOps 101
DevOps 101DevOps 101
DevOps 101
 
Azure architecture design patterns - proven solutions to common challenges
Azure architecture design patterns - proven solutions to common challengesAzure architecture design patterns - proven solutions to common challenges
Azure architecture design patterns - proven solutions to common challenges
 
Art of Cloud Workload Translation
Art of Cloud Workload TranslationArt of Cloud Workload Translation
Art of Cloud Workload Translation
 
Microservices Gone Wrong!
Microservices Gone Wrong!Microservices Gone Wrong!
Microservices Gone Wrong!
 
Reactive programming with examples
Reactive programming with examplesReactive programming with examples
Reactive programming with examples
 
The Great Disconnect of Data Protection: Perception, Reality and Best Practices
The Great Disconnect of Data Protection: Perception, Reality and Best PracticesThe Great Disconnect of Data Protection: Perception, Reality and Best Practices
The Great Disconnect of Data Protection: Perception, Reality and Best Practices
 
Real-Time Design Patterns
Real-Time Design PatternsReal-Time Design Patterns
Real-Time Design Patterns
 
Service Stampede: Surviving a Thousand Services
Service Stampede: Surviving a Thousand ServicesService Stampede: Surviving a Thousand Services
Service Stampede: Surviving a Thousand Services
 
Finding Bugs Faster with Assertion Based Verification (ABV)
Finding Bugs Faster with Assertion Based Verification (ABV)Finding Bugs Faster with Assertion Based Verification (ABV)
Finding Bugs Faster with Assertion Based Verification (ABV)
 
Ml2 production
Ml2 productionMl2 production
Ml2 production
 
Системный взгляд на параллельный запуск Selenium тестов
Системный взгляд на параллельный запуск Selenium тестовСистемный взгляд на параллельный запуск Selenium тестов
Системный взгляд на параллельный запуск Selenium тестов
 
Production Ready Microservices at Scale
Production Ready Microservices at ScaleProduction Ready Microservices at Scale
Production Ready Microservices at Scale
 

Más de Uwe Friedrichsen

Timeless design in a cloud-native world
Timeless design in a cloud-native worldTimeless design in a cloud-native world
Timeless design in a cloud-native worldUwe Friedrichsen
 
The hitchhiker's guide for the confused developer
The hitchhiker's guide for the confused developerThe hitchhiker's guide for the confused developer
The hitchhiker's guide for the confused developerUwe Friedrichsen
 
Digitization solutions - A new breed of software
Digitization solutions - A new breed of softwareDigitization solutions - A new breed of software
Digitization solutions - A new breed of softwareUwe Friedrichsen
 
Real-world consistency explained
Real-world consistency explainedReal-world consistency explained
Real-world consistency explainedUwe Friedrichsen
 
Excavating the knowledge of our ancestors
Excavating the knowledge of our ancestorsExcavating the knowledge of our ancestors
Excavating the knowledge of our ancestorsUwe Friedrichsen
 
The truth about "You build it, you run it!"
The truth about "You build it, you run it!"The truth about "You build it, you run it!"
The truth about "You build it, you run it!"Uwe Friedrichsen
 
The promises and perils of microservices
The promises and perils of microservicesThe promises and perils of microservices
The promises and perils of microservicesUwe Friedrichsen
 
DevOps is not enough - Embedding DevOps in a broader context
DevOps is not enough - Embedding DevOps in a broader contextDevOps is not enough - Embedding DevOps in a broader context
DevOps is not enough - Embedding DevOps in a broader contextUwe Friedrichsen
 
Towards complex adaptive architectures
Towards complex adaptive architecturesTowards complex adaptive architectures
Towards complex adaptive architecturesUwe Friedrichsen
 
Conway's law revisited - Architectures for an effective IT
Conway's law revisited - Architectures for an effective ITConway's law revisited - Architectures for an effective IT
Conway's law revisited - Architectures for an effective ITUwe Friedrichsen
 
Microservices - stress-free and without increased heart attack risk
Microservices - stress-free and without increased heart attack riskMicroservices - stress-free and without increased heart attack risk
Microservices - stress-free and without increased heart attack riskUwe Friedrichsen
 
Modern times - architectures for a Next Generation of IT
Modern times - architectures for a Next Generation of ITModern times - architectures for a Next Generation of IT
Modern times - architectures for a Next Generation of ITUwe Friedrichsen
 
The Next Generation (of) IT
The Next Generation (of) ITThe Next Generation (of) IT
The Next Generation (of) ITUwe Friedrichsen
 
Why resilience - A primer at varying flight altitudes
Why resilience - A primer at varying flight altitudesWhy resilience - A primer at varying flight altitudes
Why resilience - A primer at varying flight altitudesUwe Friedrichsen
 

Más de Uwe Friedrichsen (20)

Timeless design in a cloud-native world
Timeless design in a cloud-native worldTimeless design in a cloud-native world
Timeless design in a cloud-native world
 
Deep learning - a primer
Deep learning - a primerDeep learning - a primer
Deep learning - a primer
 
Life after microservices
Life after microservicesLife after microservices
Life after microservices
 
The hitchhiker's guide for the confused developer
The hitchhiker's guide for the confused developerThe hitchhiker's guide for the confused developer
The hitchhiker's guide for the confused developer
 
Digitization solutions - A new breed of software
Digitization solutions - A new breed of softwareDigitization solutions - A new breed of software
Digitization solutions - A new breed of software
 
Real-world consistency explained
Real-world consistency explainedReal-world consistency explained
Real-world consistency explained
 
Excavating the knowledge of our ancestors
Excavating the knowledge of our ancestorsExcavating the knowledge of our ancestors
Excavating the knowledge of our ancestors
 
The truth about "You build it, you run it!"
The truth about "You build it, you run it!"The truth about "You build it, you run it!"
The truth about "You build it, you run it!"
 
The promises and perils of microservices
The promises and perils of microservicesThe promises and perils of microservices
The promises and perils of microservices
 
Watch your communication
Watch your communicationWatch your communication
Watch your communication
 
Life, IT and everything
Life, IT and everythingLife, IT and everything
Life, IT and everything
 
DevOps is not enough - Embedding DevOps in a broader context
DevOps is not enough - Embedding DevOps in a broader contextDevOps is not enough - Embedding DevOps in a broader context
DevOps is not enough - Embedding DevOps in a broader context
 
Towards complex adaptive architectures
Towards complex adaptive architecturesTowards complex adaptive architectures
Towards complex adaptive architectures
 
Conway's law revisited - Architectures for an effective IT
Conway's law revisited - Architectures for an effective ITConway's law revisited - Architectures for an effective IT
Conway's law revisited - Architectures for an effective IT
 
Microservices - stress-free and without increased heart attack risk
Microservices - stress-free and without increased heart attack riskMicroservices - stress-free and without increased heart attack risk
Microservices - stress-free and without increased heart attack risk
 
Modern times - architectures for a Next Generation of IT
Modern times - architectures for a Next Generation of ITModern times - architectures for a Next Generation of IT
Modern times - architectures for a Next Generation of IT
 
The Next Generation (of) IT
The Next Generation (of) ITThe Next Generation (of) IT
The Next Generation (of) IT
 
Why resilience - A primer at varying flight altitudes
Why resilience - A primer at varying flight altitudesWhy resilience - A primer at varying flight altitudes
Why resilience - A primer at varying flight altitudes
 
No stress with state
No stress with stateNo stress with state
No stress with state
 
Resilience with Hystrix
Resilience with HystrixResilience with Hystrix
Resilience with Hystrix
 

Último

DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamUiPathCommunity
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024The Digital Insurer
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfOverkill Security
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKJago de Vreede
 

Último (20)

DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 

Resilience reloaded - more resilience patterns