SlideShare a Scribd company logo
1 of 90
Download to read offline
SYMFONYSYMFONY
COMPONENTS INCOMPONENTS IN
MICROSERVICESMICROSERVICES
ARCHITECTUREARCHITECTURE
ABOUT MEABOUT ME
Daniele D'Angeli
@dangelidaniele
http://danieledangeli.com
http://www.sainsburys.co.uk/
London
Born and raised in Rome
WHAT WE'RE DOINGWHAT WE'RE DOING
A "brownfield" project
8 "micro" service so far
API gateway written in GoLang
Python, PHP, Symfony, Django, GoLang
TECHNOLOGIESTECHNOLOGIES
... LET ME START... LET ME START
FROMFROM
CONCLUSIONSCONCLUSIONS
IS SYMFONY SUITABLE FOR
A MICROSERVICES
ARCHITECTURE?
UNDER CERTAINUNDER CERTAIN
CONDITIONSCONDITIONS
YESYES
.What they are
.Drawbacks
.When Symfony can fail?
.When Symfony can success?
MICROSERVICESMICROSERVICES
WHAT THEY AREWHAT THEY ARE
BUZZWORD WINNINGBUZZWORD WINNING
AWARD 2015AWARD 2015
...EMERGED FROM...EMERGED FROM
#CONTINUOS#CONTINUOS
DELIVERYDELIVERY
#DOMAIN DRIVEN#DOMAIN DRIVEN
DESIGNDESIGN
#ON DEMAND#ON DEMAND
VIRTUALIZATIONVIRTUALIZATION
#INFRASTRACTURE#INFRASTRACTURE
AUTOMATIONAUTOMATION
SMALL, AUTONOMOUSSMALL, AUTONOMOUS
SERVICES THAT WORKSERVICES THAT WORK
TOGETHERTOGETHER
small and focused on doing one thing well
"Gather together those things that
change for the same reason,
and separate those things that
change for different reasons"
Robert C. Martin
HOW SMALL IS SMALL?HOW SMALL IS SMALL?
AUTONOMOUSAUTONOMOUS
Each microservice
can be able to change independently
without requiring consumer to change
IDEALLY!!!IDEALLY!!!
DRAWBACKSDRAWBACKS
TESTINGTESTING
REPRODUCE THE ENTIREREPRODUCE THE ENTIRE
STACK ON A LOCAL ENVSTACK ON A LOCAL ENV
WHEN SYMFONY CANWHEN SYMFONY CAN
FAILFAIL
SYMFONY IS NOT ASYMFONY IS NOT A
MICROMICRO FRAMEWORKFRAMEWORK
IT CAN BEIT CAN BE
CONSIDERED MORECONSIDERED MORE
AA "FULL-STACK""FULL-STACK"
FRAMEWORKFRAMEWORK
...IF THEY ARE SO...IF THEY ARE SO
SMALLSMALL
TOO MANY TOOLS INTOO MANY TOOLS IN
OUR "FRAMEWORK"OUR "FRAMEWORK"
SYMFONY IS HARDSYMFONY IS HARD
TO LEARNTO LEARN
MICROSERVICESMICROSERVICES
====
ETEREGENOUS TEAMETEREGENOUS TEAM
WHAT ABOUT IFWHAT ABOUT IF
YOU ASK TO AYOU ASK TO A
PYTHONIST TOPYTHONIST TO
WORK WITHWORK WITH
SYMFONY?SYMFONY?
TOO MANY CONFIGURATIONTOO MANY CONFIGURATION
FILESFILES
WHEN SYMFONY CANWHEN SYMFONY CAN
SUCCESS?SUCCESS?
...THEY ARE SO...THEY ARE SO
SMALL?SMALL?
THERE ARE A LOT OFTHERE ARE A LOT OF
EXAMPLES WHEREEXAMPLES WHERE
COMPANIES FAILEDCOMPANIES FAILED
WITH MICROSERVICESWITH MICROSERVICES
IT'S NOT ABOUTIT'S NOT ABOUT
SYMFONY, OR OTHERSYMFONY, OR OTHER
MVC FRAMEWORKS...MVC FRAMEWORKS...
IT'S ABOUTIT'S ABOUT
PREMATUREPREMATURE
DECOMPOSITIONDECOMPOSITION
HTTPS://RCLAYTON.SILVRBACK.COM/FAILING-HTTPS://RCLAYTON.SILVRBACK.COM/FAILING-
AT-MICROSERVICESAT-MICROSERVICES
"... ANOTHER LESSON I LEARNED WAS"... ANOTHER LESSON I LEARNED WAS
TO NOT GET TOO GRANULAR WITHTO NOT GET TOO GRANULAR WITH
MICROSERVICES AT THE BEGINNINGMICROSERVICES AT THE BEGINNING
OF A PROJECT"OF A PROJECT"
"... INSTEAD OF DOING WHAT WE DID"... INSTEAD OF DOING WHAT WE DID
(STARTING WITH 8 SERVICES), TRY(STARTING WITH 8 SERVICES), TRY
STARTING WITH TWO OR THREESTARTING WITH TWO OR THREE
SERVICES OF LOGICALLY RELATEDSERVICES OF LOGICALLY RELATED
FUNCTIONALITY (THEY WON'T BEFUNCTIONALITY (THEY WON'T BE
MICRO, HOWEVER)"MICRO, HOWEVER)"
HOW FACINGHOW FACING
PREMATUREPREMATURE
DECOMPOSITION?DECOMPOSITION?
FIRST APPROACHFIRST APPROACH
MONOLITH FIRSTMONOLITH FIRST
http://martinfowler.com/bliki/MonolithFirst.html
RealityHope vs.
http://martinfowler.com/articles/dont-start-monolith.html
DOMAIN DRIVENDOMAIN DRIVEN
DESIGN PRINCIPLESDESIGN PRINCIPLES
ARE USEFULARE USEFUL
ERIC EVANSERIC EVANS
He talked about how microservices boundary enable DDD
https://skillsmatter.com/skillscasts/6259-ddd-and-microservices-at-last-some-
bounderies
DDD eXchange 2015
THOUGHWORKSTHOUGHWORKS
https://www.thoughtworks.com/insights/blog/domain-driven-design-services-
architecture
Domain Driven Design for Services Architecture
Bounded Contexts Designed as Service Applications
ONEONE
"MICRO"SERVICE"MICRO"SERVICE
FOR EACH BOUNDEDFOR EACH BOUNDED
CONTEXTCONTEXT
https://flic.kr/p/3p16o1
IN A NUTSHELLIN A NUTSHELL
LESS MICRO, MORELESS MICRO, MORE
"MACRO""MACRO"
WE NEED TO DESIGNWE NEED TO DESIGN
OUR APPLICATIONSOUR APPLICATIONS
PROPERLYPROPERLY
IN SUCHIN SUCH
SCENARIOSSCENARIOS
SYMFONY CAN HELPSYMFONY CAN HELP
...BUT PROBABLY WE...BUT PROBABLY WE
NEED SOMENEED SOME
EXPEDIENTSEXPEDIENTS
A PRATICAL EXAMPLEA PRATICAL EXAMPLE
.Symfony scaffolding
&minimal configuration
.Testing
.How develop the integrations
LET'SLET'S
CONSIDER ANCONSIDER AN
APPLICATIONAPPLICATION
LIKE SLACKLIKE SLACK
DISCOVERDISCOVER
BOUNDED CONTEXT (HARD)BOUNDED CONTEXT (HARD)
Channel
Context
Message
Context
Authorization
Context
Authentication
Context
User
management
Context
MESSAGE CONTEXTMESSAGE CONTEXT
Messages
Context
ALLOWS AALLOWS A PUBLISHERPUBLISHER
TO PUBLISH AND DELETETO PUBLISH AND DELETE
MESSAGGES ONMESSAGGES ON OPENOPEN
CHANNELSCHANNELS
AA PUBLISHERPUBLISHER MUST BEMUST BE
AUTHORIZEDAUTHORIZED TOTO
PUBLISH A MESSAGE ONPUBLISH A MESSAGE ON
A CHANNELA CHANNEL
SYMFONYSYMFONY
SCAFFOLDINGSCAFFOLDING
AND MINIMALAND MINIMAL
CONFIGURATIONCONFIGURATION
AVOID A CLASSICAVOID A CLASSIC
SYMFONYSYMFONY
SCAFFOLDINGSCAFFOLDING
USE A MINIMALUSE A MINIMAL
SYMFONYSYMFONY
CONFIGURATIONCONFIGURATION
PLUSPLUS
DDD DIRECTORYDDD DIRECTORY
STRUCTURESTRUCTURE
https://github.com/danieledangeli/symfony-microservice-
bounded-context-example
Github repository
MINIMAL SYMFONY CONFMINIMAL SYMFONY CONF
Inspired by:
http://www.whitewashing.de/2014/10/26/symfony_all_the_things_web.html
environment variables
.env files
only one config.yml
only one entry point (index.php)
DotEnv
https://github.com/vlucas/phpdotenv
require_once __DIR__ . "/../vendor/autoload.php";
require_once __DIR__ . "/../app/AppKernel.php";
use SymfonyComponentHttpFoundationRequest;
use DotenvDotenv;
//load environment variables. It doesn't overwrite existing ones
$dotenv = new Dotenv(__DIR__ . '/../');
$dotenv->load();
$request = Request::createFromGlobals();
$kernel = new AppKernel(
$_SERVER['SYMFONY_ENV'],
(bool)$_SERVER['SYMFONY_DEBUG']
);
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);
Only one index.php
Only 1 config.yml
public function registerBundles()
{
...
}
public function registerContainerConfiguration(LoaderInterface $loader)
{
$loader->load(__DIR__ . '/config/config.yml');
if (in_array($this->getEnvironment(), array('dev', 'test'))) {
$loader->load(function ($container) {
$container->loadFromExtension('web_profiler', array(
'toolbar' => true,
));
$container->loadFromExtension('framework', array(
'test' => true,
));
});
}
}
The result:
START TOSTART TO
CODINGCODING
TESTINGTESTING
TEST BEHAVIOURTEST BEHAVIOUR
FIRSTFIRST
MAKE THE VALUE EXPLICITMAKE THE VALUE EXPLICIT
(It's important also for other developers)
Feature: message publisher
As a Publisher
I need to be able to publish a message on a channel
...
Scenario: A publisher, if not authorized
is not able to publish a new
message on a channel
Given I am publisher
And exists an "open" channel
And I'm not authorized
to publish messages on that channel
When I write the message "Hi guys"
Then I'm informed that I'm not authorized
And no new messages will be published on
that channel
FUNCTIONAL TESTSFUNCTIONAL TESTS
Stub dependencies
http://martinfowler.com/articles/microservice-testing/
PHPUNIT/PHPSPECPHPUNIT/PHPSPEC
with or without
MOCKERYMOCKERY
UNIT TESTSUNIT TESTS
MAKE CLEAR THE TESTMAKE CLEAR THE TEST
TYPE:TYPE: FUNCTIONAL,FUNCTIONAL, UNIT,UNIT, INTEGRATIONINTEGRATION
PHPUNIT @GROUPSPHPUNIT @GROUPS
HOW TOHOW TO
DEVELOP THEDEVELOP THE
INTEGRATIONSINTEGRATIONS
final class Publisher
{
public function publishOnChannel(
Channel $channel,
ChannelAuthorization $channelAuthorization,
BodyMessage $body
) {
if($channelAuthorization->canPublisherPublishOnChann
if (!$channel->isClosed()) {
//create message
}
throw new ChannelClosedException(
sprintf("The channel %s is closed", $channel
);
}
throw new PublisherNotAuthorizedException;
}
}
Channel {
id ChannelId
isOpen boolean
}
ChannelAuthorization {
publisherId PublisherId
channelId ChannelId
isAuthorized boolean
}
MESSAGE CONTEXT MODELSMESSAGE CONTEXT MODELS
Publisher {
id PublisherId
}
sent within the
authenticated
request
taken from services integrations
(Channel Context, Channel Authorization Context)
namespace MessageContextDomainServiceGateway;
interface ChannelGatewayInterface
{
/**
* @param ChannelId $channelId
*
* @return Channel
*/
public function getChannel(ChannelId $channelId);
}
<?php
namespace MessageContextInfrastructureBundleServiceChannel;
class ChannelGateway implements ChannelGatewayInterface
{
private $channelAdapter;
...
/**
* @param ChannelId $channelId
*
* @return Channel
*/
public function getChannel(ChannelId $channelId)
{
return $this->channelAdapter
->toChannel($channelId);
}
}
namespace MessageContextInfrastructureBundleServiceChannelAuthorizatio
class ChannelAdapter
{
...
public function toChannel(ChannelId $channelId)
{
$request = new Request("GET", sprintf("%s/api/channels/%s",
$this->channelContextUri,
$channelId
));
$request->addHeader("Accept", "application/json");
$response = $this->requestHandler->handle($request);
return $this->channelTranslator->toChannelFromResponse(
$response
);
}
}
class ChannelTranslator
{
public function toChannelFromResponse(Response $response)
{
if (200 === $response->getStatusCode()) {
$contentArray = $this->validateAndGetResponseBodyArray($response);
return new Channel(new ChannelId($contentArray["id"]), $contentArray["isOpen"]);
}
....
}
private function validateAndGetResponseBodyArray(Response $response)
{
$contentArray = $response->getBody();
if (isset($contentArray["id"]) && isset($contentArray["isOpen"])) {
return $contentArray;
}
....
}
}
Only what we need
{
"id": "456t-889-4444",
"isOpen": false,
"createAt": "26/05/2015",
"publisherId": "11111-5555-3333-5555",
"name": "a channel name",
"spot": "a channel spot",
"messagges_count": 450
...
...
}
The original response
ARE WE MISSINGARE WE MISSING
SOMETHINGSOMETHING
??
<?php
interface ServiceIntegrationInterface
{
/**
* @param $message
*
* @throws ServiceNotAvailableException
*/
public function onServiceNotAvailable($message);
/**
* @param $message
*
* @throws ServiceFailureException
*/
public function onServiceFailure($message);
}
namespace MessageContextDomainServiceGateway;
interface ChannelGatewayInterface
extends ServiceIntegrationInterface
{
/**
* @param ChannelId $channelId
*
* @throws MicroServiceIntegrationException
* @return Channel
*/
public function getChannel(ChannelId $channelId);
}
class ChannelGateway implements ChannelGatewayInterface
{
...
/**
* @param $message
* @throws ServiceNotAvailableException
*/
public function onServiceNotAvailable($message)
{
throw new ServiceNotAvailableException($message);
}
/**
* @param $message
* @throws ServiceFailureException
*/
public function onServiceFailure($message)
{
throw new ServiceFailureException($message);
}
ARE WE STILLARE WE STILL
MISSINGMISSING
SOMETHINGSOMETHING
??
IF AN INTEGRATIONIF AN INTEGRATION
IS NOT AVAILABLE,IS NOT AVAILABLE,
WHY CONTINUINGWHY CONTINUING
TO SEND REQUESTSTO SEND REQUESTS
TO IT?TO IT?
CIRCUIT BREAKERCIRCUIT BREAKER
"A CIRCUIT BREAKER IS"A CIRCUIT BREAKER IS
USED TO DETECT FAILURESUSED TO DETECT FAILURES
AND ENCAPSULATES LOGICAND ENCAPSULATES LOGIC
OF PREVENTING A FAILUREOF PREVENTING A FAILURE
TO REOCCURTO REOCCUR
CONSTANTLY"CONSTANTLY"
HTTPS://GITHUB.COM/EJSMONT-ARTUR/PHP-HTTPS://GITHUB.COM/EJSMONT-ARTUR/PHP-
CIRCUIT-BREAKERCIRCUIT-BREAKER
namespace MessageContextInfrastructureBundleCircuitBreaker;
class CircuitBreaker implements PostContextCircuitBreakerInterface
{
private $circuitBreaker;
...
public function isAvailable($serviceName)
{
return $this->circuitBreaker->isAvailable($serviceName);
}
public function reportSuccess($serviceName)
{
$this->circuitBreaker->reportSuccess($serviceName);
}
public function reportFailure($serviceName)
{
$this->circuitBreaker->reportFailure($serviceName);
}
}
public function getChannel(ChannelId $channelId)
{
if ($this->circuitBreaker->isAvailable($this->serviceName)) {
try {
$channel = $this->channelAdapter->toChannel($channelId);
$this->circuitBreaker->reportSuccess($this->serviceName);
return $channel;
} catch (UnableToProcessResponseFromService $e) {
$this->handleNotExpectedResponse($e->getResponse());
}
}
$this->onServiceNotAvailable("Service not available");
}
private function handleNotExpectedResponse(Response $response)
{
$this->circuitBreaker->reportFailure($this->serviceName);
...
}
CONCLUSIONCONCLUSION
(AGAIN)(AGAIN)
SYMFONY CAN BE USED INSYMFONY CAN BE USED IN
SOME MICROSERVICESOME MICROSERVICE
ARCHITECTURES,ARCHITECTURES,
ESPECIALLY IF WE STARTESPECIALLY IF WE START
WITH A MONOLITH FIRSTWITH A MONOLITH FIRST
APPROACHAPPROACH
HOWEVER WE MAY NEED TOHOWEVER WE MAY NEED TO
CONSIDER SOMECONSIDER SOME
EXPEDIENTSEXPEDIENTS
(env variables, avoid complex tools)
(IT DEPENDS ON THE TEAM!!)(IT DEPENDS ON THE TEAM!!)
MINIMAL INTEGRATIONSMINIMAL INTEGRATIONS
&
HANDLING FAILURESHANDLING FAILURES
ARE A GOOD STARTING POINTARE A GOOD STARTING POINT
TO FACE THE OVERCOMPLEXITYTO FACE THE OVERCOMPLEXITY
INTRODUCED BYINTRODUCED BY
THIS ARCHITECTURETHIS ARCHITECTURE
WHAT WE HAVEWHAT WE HAVE
MISSEDMISSED
OTHER INTEGRATION WAYS:OTHER INTEGRATION WAYS:
SERVICE CHOREOGRAPHYSERVICE CHOREOGRAPHY
OTHER TESTING WAYS:OTHER TESTING WAYS:
CONSUMER DRIVEN CONTRACTCONSUMER DRIVEN CONTRACT
TESTSTESTS
QUESTIONS?QUESTIONS?
https://www.slideshare.net/danieledangeli10/symfony-in-
microservice-architecture

More Related Content

What's hot

nioで作ったBufferedWriterに変えたら例外になった
nioで作ったBufferedWriterに変えたら例外になったnioで作ったBufferedWriterに変えたら例外になった
nioで作ったBufferedWriterに変えたら例外になったchibochibo
 
Software design as a cooperative game with EventStorming
Software design as a cooperative game with EventStormingSoftware design as a cooperative game with EventStorming
Software design as a cooperative game with EventStormingAlberto Brandolini
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootDNG Consulting
 
Fondamentaux d’une API REST
Fondamentaux d’une API RESTFondamentaux d’une API REST
Fondamentaux d’une API RESTAbdoulaye Dieng
 
도메인 주도 설계 (Domain Driven Design)
도메인 주도 설계 (Domain Driven Design)도메인 주도 설계 (Domain Driven Design)
도메인 주도 설계 (Domain Driven Design)Ashal aka JOKER
 
Microservices Architectures: Become a Unicorn like Netflix, Twitter and Hailo
Microservices Architectures: Become a Unicorn like Netflix, Twitter and HailoMicroservices Architectures: Become a Unicorn like Netflix, Twitter and Hailo
Microservices Architectures: Become a Unicorn like Netflix, Twitter and Hailogjuljo
 
CraftConf 2023 "Microservice Testing Techniques: Mocks vs Service Virtualizat...
CraftConf 2023 "Microservice Testing Techniques: Mocks vs Service Virtualizat...CraftConf 2023 "Microservice Testing Techniques: Mocks vs Service Virtualizat...
CraftConf 2023 "Microservice Testing Techniques: Mocks vs Service Virtualizat...Daniel Bryant
 
Microservices architecture
Microservices architectureMicroservices architecture
Microservices architectureAbdelghani Azri
 
Introduction à l’intégration continue avec Jenkins
Introduction à l’intégration continue avec JenkinsIntroduction à l’intégration continue avec Jenkins
Introduction à l’intégration continue avec JenkinsEric Hogue
 
Sécurité des Applications WEB -LEVEL1
 Sécurité des Applications WEB-LEVEL1 Sécurité des Applications WEB-LEVEL1
Sécurité des Applications WEB -LEVEL1Tarek MOHAMED
 
도메인구현 KSUG 20151128
도메인구현 KSUG 20151128도메인구현 KSUG 20151128
도메인구현 KSUG 20151128beom kyun choi
 
Hexagonal architecture with Spring Boot
Hexagonal architecture with Spring BootHexagonal architecture with Spring Boot
Hexagonal architecture with Spring BootMikalai Alimenkou
 
Dissecting the rabbit: RabbitMQ Internal Architecture
Dissecting the rabbit: RabbitMQ Internal ArchitectureDissecting the rabbit: RabbitMQ Internal Architecture
Dissecting the rabbit: RabbitMQ Internal ArchitectureAlvaro Videla
 

What's hot (20)

Introduction à Angular
Introduction à AngularIntroduction à Angular
Introduction à Angular
 
nioで作ったBufferedWriterに変えたら例外になった
nioで作ったBufferedWriterに変えたら例外になったnioで作ったBufferedWriterに変えたら例外になった
nioで作ったBufferedWriterに変えたら例外になった
 
Software design as a cooperative game with EventStorming
Software design as a cooperative game with EventStormingSoftware design as a cooperative game with EventStorming
Software design as a cooperative game with EventStorming
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring Boot
 
Quarkus k8s
Quarkus   k8sQuarkus   k8s
Quarkus k8s
 
spring-boot-fr.pdf
spring-boot-fr.pdfspring-boot-fr.pdf
spring-boot-fr.pdf
 
Fondamentaux d’une API REST
Fondamentaux d’une API RESTFondamentaux d’une API REST
Fondamentaux d’une API REST
 
도메인 주도 설계 (Domain Driven Design)
도메인 주도 설계 (Domain Driven Design)도메인 주도 설계 (Domain Driven Design)
도메인 주도 설계 (Domain Driven Design)
 
Introduction to container based virtualization with docker
Introduction to container based virtualization with dockerIntroduction to container based virtualization with docker
Introduction to container based virtualization with docker
 
Microservices Architectures: Become a Unicorn like Netflix, Twitter and Hailo
Microservices Architectures: Become a Unicorn like Netflix, Twitter and HailoMicroservices Architectures: Become a Unicorn like Netflix, Twitter and Hailo
Microservices Architectures: Become a Unicorn like Netflix, Twitter and Hailo
 
CraftConf 2023 "Microservice Testing Techniques: Mocks vs Service Virtualizat...
CraftConf 2023 "Microservice Testing Techniques: Mocks vs Service Virtualizat...CraftConf 2023 "Microservice Testing Techniques: Mocks vs Service Virtualizat...
CraftConf 2023 "Microservice Testing Techniques: Mocks vs Service Virtualizat...
 
Microservices architecture
Microservices architectureMicroservices architecture
Microservices architecture
 
Introduction à l’intégration continue avec Jenkins
Introduction à l’intégration continue avec JenkinsIntroduction à l’intégration continue avec Jenkins
Introduction à l’intégration continue avec Jenkins
 
Sécurité des Applications WEB -LEVEL1
 Sécurité des Applications WEB-LEVEL1 Sécurité des Applications WEB-LEVEL1
Sécurité des Applications WEB -LEVEL1
 
도메인구현 KSUG 20151128
도메인구현 KSUG 20151128도메인구현 KSUG 20151128
도메인구현 KSUG 20151128
 
Hexagonal architecture with Spring Boot
Hexagonal architecture with Spring BootHexagonal architecture with Spring Boot
Hexagonal architecture with Spring Boot
 
Springboot Microservices
Springboot MicroservicesSpringboot Microservices
Springboot Microservices
 
Dissecting the rabbit: RabbitMQ Internal Architecture
Dissecting the rabbit: RabbitMQ Internal ArchitectureDissecting the rabbit: RabbitMQ Internal Architecture
Dissecting the rabbit: RabbitMQ Internal Architecture
 
Jenkins
JenkinsJenkins
Jenkins
 

Similar to Symfony in microservice architecture

Building a full-stack app with Golang and Google Cloud Platform in one week
Building a full-stack app with Golang and Google Cloud Platform in one weekBuilding a full-stack app with Golang and Google Cloud Platform in one week
Building a full-stack app with Golang and Google Cloud Platform in one weekDr. Felix Raab
 
5 Practices for Better, Cheaper, Faster Service Delivery
5 Practices for Better, Cheaper, Faster Service Delivery5 Practices for Better, Cheaper, Faster Service Delivery
5 Practices for Better, Cheaper, Faster Service DeliveryRob Schoening
 
Let's pwn a chinese web browser!
Let's pwn a chinese web browser!Let's pwn a chinese web browser!
Let's pwn a chinese web browser!Juho Nurminen
 
Fixing the mobile web - Internet World Romania
Fixing the mobile web - Internet World RomaniaFixing the mobile web - Internet World Romania
Fixing the mobile web - Internet World RomaniaChristian Heilmann
 
Connecting with the enterprise - The how and why of connecting to Enterprise ...
Connecting with the enterprise - The how and why of connecting to Enterprise ...Connecting with the enterprise - The how and why of connecting to Enterprise ...
Connecting with the enterprise - The how and why of connecting to Enterprise ...Kevin Poorman
 
(Christian heilman) firefox
(Christian heilman) firefox(Christian heilman) firefox
(Christian heilman) firefoxNAVER D2
 
Microservices for the Masses with Spring Boot, JHipster, and OAuth - South We...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - South We...Microservices for the Masses with Spring Boot, JHipster, and OAuth - South We...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - South We...Matt Raible
 
Cucumber meets iPhone
Cucumber meets iPhoneCucumber meets iPhone
Cucumber meets iPhoneErin Dees
 
IBM MobileFirst Platform v7.0 POT Offers Lab v1.0
IBM MobileFirst Platform v7.0 POT Offers Lab v1.0IBM MobileFirst Platform v7.0 POT Offers Lab v1.0
IBM MobileFirst Platform v7.0 POT Offers Lab v1.0Banking at Ho Chi Minh city
 
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl...Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl...Matt Raible
 
Deploying 3 times a day without a downtime @ Rocket Tech Summit in Berlin
Deploying 3 times a day without a downtime @ Rocket Tech Summit in BerlinDeploying 3 times a day without a downtime @ Rocket Tech Summit in Berlin
Deploying 3 times a day without a downtime @ Rocket Tech Summit in BerlinAlessandro Nadalin
 
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav DukhinFwdays
 
Xamarin in real life: our MVP approach - Daniele Leombruni Antonino Cacace - ...
Xamarin in real life: our MVP approach - Daniele Leombruni Antonino Cacace - ...Xamarin in real life: our MVP approach - Daniele Leombruni Antonino Cacace - ...
Xamarin in real life: our MVP approach - Daniele Leombruni Antonino Cacace - ...Codemotion
 
OpenY: Scaling and Sharing with Custom Drupal Distribution
OpenY: Scaling and Sharing with Custom Drupal DistributionOpenY: Scaling and Sharing with Custom Drupal Distribution
OpenY: Scaling and Sharing with Custom Drupal DistributionDrupalCamp Kyiv
 
JavaScript Revolution - 5/Nov/13 - PrDC Saskatoon, SK
JavaScript Revolution - 5/Nov/13 - PrDC Saskatoon, SKJavaScript Revolution - 5/Nov/13 - PrDC Saskatoon, SK
JavaScript Revolution - 5/Nov/13 - PrDC Saskatoon, SKDavid Wesst
 
MCollective installed. And now? by Thomas Gelf
MCollective installed. And now? by Thomas GelfMCollective installed. And now? by Thomas Gelf
MCollective installed. And now? by Thomas GelfNETWAYS
 
README.MD for building the first purely digital mobile bank in Indonesia
README.MD for building the first purely digital mobile bank in Indonesia README.MD for building the first purely digital mobile bank in Indonesia
README.MD for building the first purely digital mobile bank in Indonesia Richard Radics
 

Similar to Symfony in microservice architecture (20)

Building a full-stack app with Golang and Google Cloud Platform in one week
Building a full-stack app with Golang and Google Cloud Platform in one weekBuilding a full-stack app with Golang and Google Cloud Platform in one week
Building a full-stack app with Golang and Google Cloud Platform in one week
 
5 Practices for Better, Cheaper, Faster Service Delivery
5 Practices for Better, Cheaper, Faster Service Delivery5 Practices for Better, Cheaper, Faster Service Delivery
5 Practices for Better, Cheaper, Faster Service Delivery
 
Let's pwn a chinese web browser!
Let's pwn a chinese web browser!Let's pwn a chinese web browser!
Let's pwn a chinese web browser!
 
Fixing the mobile web - Internet World Romania
Fixing the mobile web - Internet World RomaniaFixing the mobile web - Internet World Romania
Fixing the mobile web - Internet World Romania
 
Connecting with the enterprise - The how and why of connecting to Enterprise ...
Connecting with the enterprise - The how and why of connecting to Enterprise ...Connecting with the enterprise - The how and why of connecting to Enterprise ...
Connecting with the enterprise - The how and why of connecting to Enterprise ...
 
(Christian heilman) firefox
(Christian heilman) firefox(Christian heilman) firefox
(Christian heilman) firefox
 
Microservices for the Masses with Spring Boot, JHipster, and OAuth - South We...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - South We...Microservices for the Masses with Spring Boot, JHipster, and OAuth - South We...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - South We...
 
Cucumber meets iPhone
Cucumber meets iPhoneCucumber meets iPhone
Cucumber meets iPhone
 
Metasploit
MetasploitMetasploit
Metasploit
 
IBM MobileFirst Platform v7.0 POT Offers Lab v1.0
IBM MobileFirst Platform v7.0 POT Offers Lab v1.0IBM MobileFirst Platform v7.0 POT Offers Lab v1.0
IBM MobileFirst Platform v7.0 POT Offers Lab v1.0
 
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl...Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl...
 
Deploying 3 times a day without a downtime @ Rocket Tech Summit in Berlin
Deploying 3 times a day without a downtime @ Rocket Tech Summit in BerlinDeploying 3 times a day without a downtime @ Rocket Tech Summit in Berlin
Deploying 3 times a day without a downtime @ Rocket Tech Summit in Berlin
 
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin
 
Xamarin in real life: our MVP approach - Daniele Leombruni Antonino Cacace - ...
Xamarin in real life: our MVP approach - Daniele Leombruni Antonino Cacace - ...Xamarin in real life: our MVP approach - Daniele Leombruni Antonino Cacace - ...
Xamarin in real life: our MVP approach - Daniele Leombruni Antonino Cacace - ...
 
OpenY: Scaling and Sharing with Custom Drupal Distribution
OpenY: Scaling and Sharing with Custom Drupal DistributionOpenY: Scaling and Sharing with Custom Drupal Distribution
OpenY: Scaling and Sharing with Custom Drupal Distribution
 
JavaScript Revolution - 5/Nov/13 - PrDC Saskatoon, SK
JavaScript Revolution - 5/Nov/13 - PrDC Saskatoon, SKJavaScript Revolution - 5/Nov/13 - PrDC Saskatoon, SK
JavaScript Revolution - 5/Nov/13 - PrDC Saskatoon, SK
 
MCollective installed. And now? by Thomas Gelf
MCollective installed. And now? by Thomas GelfMCollective installed. And now? by Thomas Gelf
MCollective installed. And now? by Thomas Gelf
 
Hacking ingress
Hacking ingressHacking ingress
Hacking ingress
 
Call ringout app
Call ringout appCall ringout app
Call ringout app
 
README.MD for building the first purely digital mobile bank in Indonesia
README.MD for building the first purely digital mobile bank in Indonesia README.MD for building the first purely digital mobile bank in Indonesia
README.MD for building the first purely digital mobile bank in Indonesia
 

Recently uploaded

Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfkalichargn70th171
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作qr0udbr0
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 

Recently uploaded (20)

Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
Odoo Development Company in India | Devintelle Consulting Service
Odoo Development Company in India | Devintelle Consulting ServiceOdoo Development Company in India | Devintelle Consulting Service
Odoo Development Company in India | Devintelle Consulting Service
 

Symfony in microservice architecture