58
(micro)services avec Symfony et Tolerance

(micro)services avec Symfony et Tolerance

Embed Size (px)

Citation preview

Page 1: (micro)services avec Symfony et Tolerance

(micro)services avec Symfony et Tolerance

Page 2: (micro)services avec Symfony et Tolerance

Samuel RozeInviqa / SensioLabs UK

@samuelrozegithub.com/sroze

Page 3: (micro)services avec Symfony et Tolerance

(micro)services

Page 4: (micro)services avec Symfony et Tolerance
Page 5: (micro)services avec Symfony et Tolerance

The monolith

Page 6: (micro)services avec Symfony et Tolerance

Maintenancetrès chère

Page 7: (micro)services avec Symfony et Tolerance

SOA

Page 8: (micro)services avec Symfony et Tolerance

Microservices

Page 9: (micro)services avec Symfony et Tolerance
Page 10: (micro)services avec Symfony et Tolerance

Fléxibilité

Page 11: (micro)services avec Symfony et Tolerance
Page 12: (micro)services avec Symfony et Tolerance
Page 13: (micro)services avec Symfony et Tolerance

Points clés» Organisation

» Déploiement

» Monitoring

» Résiliance

» Debugging

Page 14: (micro)services avec Symfony et Tolerance

Points clésOrganisation

» Responsabilité humaine (équipe)

» Responsabilité technique (boudaries)

» Communication humaine (objectifs communs)

» Communication technique (documentation, BC, ...)

Page 15: (micro)services avec Symfony et Tolerance

Points clésDéploiement

» Continuous Deployment

» Continuous Delivery

» Simple (Platform.sh, ContinuousPipe.io, ...)

» Scalable (AWS, Google Cloud, ...)

Page 16: (micro)services avec Symfony et Tolerance

Points clésMonitoring

» User-end monitoring (NewRelic, Google Analytics, ...)

» Infrastructure monitoring (NewRelic, Sysdig, Datadog, ...)

» Application monitoring (StatsD, ELK, Keen.io, ...)

» Pro-active monitoring

Page 17: (micro)services avec Symfony et Tolerance

Points clés» Organisation

» Déploiement

» Monitoring

» Résiliance

» Debugging

Page 18: (micro)services avec Symfony et Tolerance

Tolerance github.com/Tolerance/Tolerance

tolerance.io

Page 19: (micro)services avec Symfony et Tolerance

 Résiliance

Page 20: (micro)services avec Symfony et Tolerance

Une opération$comments = $client->getLastComments();

Page 21: (micro)services avec Symfony et Tolerance

Une opérationuse Tolerance\Operation\Callback;

$operation = new Callback(function() use ($client) { return $client->getLastComments();});

Page 22: (micro)services avec Symfony et Tolerance

Runner$comments = $runner->run($operation);

Page 23: (micro)services avec Symfony et Tolerance

 Résilianceaux erreurs

Page 24: (micro)services avec Symfony et Tolerance

Retry

$waitStrategy = new CountLimited( new ExponentialBackOff( new SleepWaiter(), 1 ), 10);

$runner = new RetryOperationRunner( $decoratedRunner, $waitStrategy);

Page 25: (micro)services avec Symfony et Tolerance

Fallback

$staticResultFactory = new StaticResultFactory([]);

$runner = new FallbackOperationRunner( $decoratedRunner, $staticResultFactory);

// ...$messages = $runner->run($operation);

Page 26: (micro)services avec Symfony et Tolerance

Résilianceaux attaques

Page 27: (micro)services avec Symfony et Tolerance

Rate limiting

$rateLimit = new LeakyBucket( new InMemoryStorage(), new TimeRate(10, TimeRate::PER_SECOND));

$runner = new RateLimitedOperationRunner( $decoratedRunner, $rateLimit, new SleepWaiter());

Page 28: (micro)services avec Symfony et Tolerance

D'autres types de runners...

Page 29: (micro)services avec Symfony et Tolerance

Buffered

$buffer = new InMemoryOperationBuffer();$bufferedRunner = new BufferedOperationRunner($runner, $buffer);

// Run operations$bufferedRunner->run($firstOperation);$bufferedRunner->run($secondOperation);

// ...// ...

$results = $bufferedRunner->runBufferedOperations();

Page 30: (micro)services avec Symfony et Tolerance

Symfony!

Page 31: (micro)services avec Symfony et Tolerance

AppKernel.phpTolerance\Bridge\Symfony\Bundle\ToleranceBundle();

Page 32: (micro)services avec Symfony et Tolerance

Runners with YAML

tolerance: operation_runners: default: retry: runner: callback: ~

waiter: count_limited: count: 10 waiter: exponential_back_off: exponent: 1 waiter: sleep: ~

Page 33: (micro)services avec Symfony et Tolerance

 Buffered terminaison

» Automatically with factory

» Manual runners needs to be tagged

<service id="app.my_buffered_operation_runner" class="Tolerance\Operation\Runner\BufferedOperationRunner"> <!-- Arguments... -->

<tag name="tolerance.operation_runner" /></service>

Page 34: (micro)services avec Symfony et Tolerance

 AOP

Page 35: (micro)services avec Symfony et Tolerance

 AOP

tolerance: aop: ~

Page 36: (micro)services avec Symfony et Tolerance

AOP

<services> <service id="app.comments_client" class="App\Comments\HttpClient">

<tag name="tolerance.operation_wrapper" methods="getLastComments" runner="tolerance.operation_runner.default" />

</service></services>

Page 37: (micro)services avec Symfony et Tolerance

AOP

$comments = $this->client->getLastComments();

Page 38: (micro)services avec Symfony et Tolerance
Page 39: (micro)services avec Symfony et Tolerance

Debugging» Sentry

» Tideways

» NewRelic

» Logs "manuels"

» ...

Page 40: (micro)services avec Symfony et Tolerance
Page 41: (micro)services avec Symfony et Tolerance
Page 42: (micro)services avec Symfony et Tolerance
Page 43: (micro)services avec Symfony et Tolerance
Page 44: (micro)services avec Symfony et Tolerance
Page 45: (micro)services avec Symfony et Tolerance
Page 46: (micro)services avec Symfony et Tolerance
Page 47: (micro)services avec Symfony et Tolerance
Page 48: (micro)services avec Symfony et Tolerance
Page 49: (micro)services avec Symfony et Tolerance
Page 50: (micro)services avec Symfony et Tolerance

Tolerance MessageProfile

Page 51: (micro)services avec Symfony et Tolerance

MessageProfile

tolerance: message_profile: enabled: true storage: neo4j: neo4j_client_service_id

current_peer: service: "My service" environment: %kernel.environment% version: 12345

Page 52: (micro)services avec Symfony et Tolerance

MessageProfileIntegrations

» Guzzle

» Monolog

» RabbitMqBundle

» Symfony

» HttpFoundation

» PSR-7

Page 53: (micro)services avec Symfony et Tolerance
Page 54: (micro)services avec Symfony et Tolerance
Page 55: (micro)services avec Symfony et Tolerance
Page 56: (micro)services avec Symfony et Tolerance
Page 57: (micro)services avec Symfony et Tolerance
Page 58: (micro)services avec Symfony et Tolerance

Merci!@samuelroze

https://github.com/Tolerance/Tolerance

https://joind.in/event/nouveau-sfpot--lille-le-3103-