Slide 1

Slide 1 text

Lock Component Symfony Live Paris 2017

Slide 2

Slide 2 text

@fbourigault Développeur backend

Slide 3

Slide 3 text

Cas d'utilisation Concurrence ? Exclusion mutuelle ! $room = $this->findRoom(); $booking->setRoom($room);

Slide 4

Slide 4 text

Lock Component Simple Fiable Évolutif

Slide 5

Slide 5 text

Persistance locale use Symfony\Component\Lock\Factory; use Symfony\Component\Lock\Store\FlockStore; $store = new FlockStore(); $factory = new Factory($store); $lock = $factory->createLock('find-room'); if ($lock->acquire(true)) { // The resource "find-room" is locked. $room = $this->findRoom(); $booking->setRoom($room); $lock->release(); }

Slide 6

Slide 6 text

Persistance distribuée Scalabilité horizontale Tolérance aux pannes Redis et Memcached

Slide 7

Slide 7 text

Persistance distribuée use Symfony\Component\Lock\Strategy\ConsensusStrategy; use Symfony\Component\Lock\Store\CombinedStore; use Symfony\Component\Lock\Store\RedisStore; $stores = []; foreach (['server1', 'server2', 'server3'] as $server) { $redis = new \Redis(); $redis->connect($server); $stores[] = new RedisStore($redis); } $store = new CombinedStore($stores, new ConsensusStrategy());

Slide 8

Slide 8 text

Persistance distribuée $store = new CombinedStore($stores, new ConsensusStrategy()); $factory = new Factory($store); $lock = $factory->createLock('find-room'); if ($lock->acquire(true)) { // The resource "find-room" is locked. $room = $this->findRoom(); $booking->setRoom($room); $lock->release(); }

Slide 9

Slide 9 text

Merci !