take care of our micro services

75
Let's take care of our micro-services

Upload: samuel-roze

Post on 22-Jan-2018

209 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Take care of our micro services

Let's take care of our micro-services

Page 2: Take care of our micro services

Samuel RozeInviqa

twitter.com/samuelrozegithub.com/sroze

Page 3: Take care of our micro services

(micro)services

Page 4: Take care of our micro services
Page 5: Take care of our micro services
Page 6: Take care of our micro services
Page 7: Take care of our micro services
Page 8: Take care of our micro services
Page 9: Take care of our micro services
Page 10: Take care of our micro services
Page 11: Take care of our micro services

Monolith costs a lot...(only) on the long run !

Page 12: Take care of our micro services
Page 13: Take care of our micro services
Page 14: Take care of our micro services
Page 15: Take care of our micro services
Page 16: Take care of our micro services
Page 17: Take care of our micro services

Microservices are flexible

but introduces complexity!

Page 18: Take care of our micro services
Page 19: Take care of our micro services
Page 20: Take care of our micro services
Page 21: Take care of our micro services

Key points» Organisation

» Deployment pipeline

» Monitoring & debugging

» Fault tolerance

Page 22: Take care of our micro services

Key pointsOrganisation

» In the teamsSpotify's squads: the team knows about their services

» Between the teamsResponsibility boundaries, communication, shared goals

Page 23: Take care of our micro services

Key pointsDeployment pipeline

» New servicesCreate new services within hours

» Continuous DeliverySmall and fast deployments

» Delivery as a ServiceThe teams can change the technology stack themselves

Page 24: Take care of our micro services

Key pointsMonitoring and debugging

» Pro-active monitoringhealth-checks

» Active error logging and altertingknow what is going on

» Debugging after incidenttracing between services

Page 25: Take care of our micro services

Key pointsFault tolerance

» Perfection, hopes or embracing faultsBecause that will happen

» ArchitectureA server dies

» ApplicationA service is down or throwing exceptions

Page 26: Take care of our micro services

Key points, again» Organisation

» Deployment pipeline

» Monitoring & debugging

» Fault tolerance

Page 27: Take care of our micro services
Page 28: Take care of our micro services

Environments

Page 29: Take care of our micro services
Page 30: Take care of our micro services
Page 31: Take care of our micro services
Page 32: Take care of our micro services
Page 33: Take care of our micro services
Page 34: Take care of our micro services

Fault tolerance

Page 35: Take care of our micro services
Page 36: Take care of our micro services
Page 37: Take care of our micro services
Page 38: Take care of our micro services
Page 39: Take care of our micro services
Page 40: Take care of our micro services
Page 41: Take care of our micro services
Page 42: Take care of our micro services
Page 43: Take care of our micro services

Tolerance github.com/Tolerance/Tolerance

tolerance.io

Page 44: Take care of our micro services

ToleranceOperations

Page 45: Take care of our micro services

Take something that can fail...$comments = $client->getLastComments();

Page 46: Take care of our micro services

Wrap into an Operationuse Tolerance\Operation\Callback;

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

Page 47: Take care of our micro services

Run the operation$comments = $runner->run($operation);

Page 48: Take care of our micro services

 Be fault tolerantby decorating the operation

runners

Page 49: Take care of our micro services

Retry

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

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

Page 50: Take care of our micro services

Fallback

$staticResultFactory = new StaticResultFactory([]);

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

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

Page 51: Take care of our micro services
Page 52: Take care of our micro services
Page 53: Take care of our micro services

Other operation runners...

Page 54: Take care of our micro services

Rate limiting

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

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

Page 55: Take care of our micro services

Buffered (ie postponed runs)

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

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

// ...// ...

$results = $bufferedRunner->runBufferedOperations();

Page 56: Take care of our micro services
Page 57: Take care of our micro services

AppKernel.phpnew Tolerance\Bridge\Symfony\Bundle

\ToleranceBundle();

Page 58: Take care of our micro services

Get runners from YAML

tolerance: operation_runners: default: retry: # ... callback: # ... buffered: # ... fallback: # ...

Page 59: Take care of our micro services

 Buffered runner

A lot of operations don't have to be executed just now.

$runner->run(new Callback(function() { $this->pushMyBusinessMetricToElasticSearch();}));

» Run operations on kernel.terminate event

Page 60: Take care of our micro services

 AOPAspect Oriented Programming

Page 61: Take care of our micro services

 AOP

tolerance: aop: ~

Page 62: Take care of our micro services

Wrap your services into operationsjust by using a tolerance.operation_wrapper tag

<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 63: Take care of our micro services

Use your service as usual

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

Page 64: Take care of our micro services

Tolerance MessageProfile

Page 65: Take care of our micro services
Page 66: Take care of our micro services
Page 67: Take care of our micro services

MessageProfile

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

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

Page 68: Take care of our micro services

MessageProfileIntegrations

» Guzzle

» Monolog

» RabbitMqBundle

» HttpFoundation

» PSR-7

Page 69: Take care of our micro services
Page 70: Take care of our micro services
Page 71: Take care of our micro services
Page 72: Take care of our micro services
Page 73: Take care of our micro services
Page 74: Take care of our micro services
Page 75: Take care of our micro services

Thank you!@samuelroze

https://github.com/Tolerance/Tolerance

https://joind.in/talk/2f75b