SlideShare a Scribd company logo
1 of 68
Download to read offline
@DebskiChris
#33rdDegree
Krzysztof Dębski
Allegro Group
Let’s build a solid base for a scale
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Agenda
The Allegro Situation
How to build a new World?
The way to improve
What’s in it for you?
Allegro The New World Improvement WIIFY
#33rdDegree @DebskiChris
The Allegro Situation
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Allegro
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Allegro
6 million LOC
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
400 people in IT
Allegro
Allegro The New World Improvement WIIFY
#33rdDegree @DebskiChris
A New Hope
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
A New Hope
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
A New Hope
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
A New Hope?
Service
Oriented
Ambiguity
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Domain Driven Design
Allegro The New World Improvement WIIFY
#33rdDegree @DebskiChris
(Micro)Services
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
(Micro)Services
Business needs
User
Transaction
Offer
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
(Micro)Services
Independent
User
Transaction
Offer
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
(Micro)Services
API
User
Transaction
Offer
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
(Micro)Services
Polyglot
Cassandra
MongoDB
Oracle
User
Transaction
Offer
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
(Micro)Services
Smart Endpoints
Cassandra
MongoDB
Oracle
Offer
Transaction
User
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
The first approach
Service
Auto deployable
Auto monitored
Auto scalable
Auto healable
Auto discoverable
… and many more features
Allegro The New World Improvement WIIFY
#33rdDegree @DebskiChris
How to build a new World?
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
The first project
Service
Jetty Server
War file
Spring
Gradle
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Let’s REST
JAX-RS / JSR Compliant
@Path("/users")
@Consumes(CONTENT_TYPE_JSON)
@Produces(CONTENT_TYPE_JSON)
public class UsersEndpoint {
// [...]
@GET
public UserCollectionResponse findAllUsers() {
//[...]
}
}
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Let’s expose our methods
Swagger
@Path("/users")
@Api(value = "/users")
@Consumes(CONTENT_TYPE_JSON)
@Produces(CONTENT_TYPE_JSON)
public class UsersEndpoint {
// [...]
@ApiOperation(value=“Get all users”,
response=UserCollectionResponse.class)
@GET
public UserCollectionResponse findAllUsers() {
//[...]
}
}
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Let’s expose our methods
Swagger
@Path("/users")
@Api(value = "/users")
@Consumes(CONTENT_TYPE_JSON)
@Produces(CONTENT_TYPE_JSON)
public class UsersEndpoint {
// [...]
@ApiOperation(value=“Get all users”,
response=UserCollectionResponse.class)
@GET
public UserCollectionResponse findAllUsers() {
//[...]
}
}
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Let’s expose our methods
Swagger
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
And make them discoverable
Offer
User
Discovery
ZooKeeper
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
And make them discoverable
Offer
User
Discovery
ZooKeeper
Register
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
And make them discoverable
Offer
User
Discovery
ZooKeeper
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
And make them discoverable
Offer
User
Discovery
ZooKeeper
Get User
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
And make them discoverable
Offer
User
Discovery
ZooKeeper
Get User
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
And make them discoverable
Offer
User
Discovery
ZooKeeper
Get User
Get offer for user
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Multiple API versions
Content negotiation
@Path("/users")
@Consumes(”application/json”)
@Produces(”application/json”)
public class UsersEndpoint {
// [...]
@GET
public UserCollectionResponse findAllUsers() {
//[...]
}
}
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Multiple API versions
Content negotiation
@Path("/users")
@Consumes(”application/vnd.allegro.user.v1+json”)
@Produces(”application/vnd.allegro.user.v1+json”)
public class UsersEndpoint {
// [...]
@GET
public UserCollectionResponse findAllUsers() {
//[...]
}
}
curl --dump-header - -H ”Accept: application/vnd.allegro.user.v1+json"
-X GET http://localhost:8080/users
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Multiple API versions
Content negotiation
@Path("/users")
@Consumes(”application/vnd.allegro.user.v1+json”)
@Produces(”application/vnd.allegro.user.v1+json”)
public class UsersEndpoint {
// [...]
@GET
@Produces(“application/vnd.allegro.user.v2+json”)
public UserCollectionResponse findAllUsers() {
//[...]
}
}
curl --dump-header - -H ”Accept: application/vnd.allegro.user.v2+json"
-X GET http://localhost:8080/users
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
And it became slow…
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Lower startup time
External Jetty Service
Jetty Server
War file
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Lower startup time
Embedded Jetty Service
Jetty Server
Jar file
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Lower startup time
Embedded Jetty Service
Jetty Server
Jar file
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Lower startup time
Embedded UnderTow Service
Jetty ServerUndertow
Jar file
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Lower startup time
Immutable Images Service
Undertow
Zip file
Server
Immutable image
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
How to configure it?
Service
java –jar service.jar
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
How to configure it?
Service ZooKeeper
java –jar service.jar –Dzookeeper.address=zookeper.service
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
How to configure it?
Service ZooKeeper
java –jar service.jar –Dzookeeper.address=zookeper.service –Denvironment=prod
prod.properties
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
How to configure it?
Service ZooKeeper
java –jar service.jar –Dzookeeper.address=zookeper.service –Denvironment=prod
-Dservice.name=testService
prod.properties
Allegro The New World Improvement WIIFY
#33rdDegree @DebskiChris
Tests
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Do you test your tests?
Pitest
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Integration tests
Test without mocks
Run from IDE
public class UsersIntegrationTest {
private static Map<String, String> overrideConfiguration = Maps.newHashMap();
static { overrideConfiguration.put("property.name", "This was overwritten value"); }
@ClassRule
public static final RestServiceStarted DEPLOYED_SERVICE =
new RestServiceStarted(overrideConfiguration);
private WebTarget getUsersResourceWebTarget() {
return DEPLOYED_SERVICE.getWebTarget().path("users");
}
}
Allegro The New World Improvement WIIFY
#33rdDegree @DebskiChris
Monitoring
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Let’s see what’s happening
NxLog
LogStash
Kibana
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Let’s see what’s happening
Graphite
# Metrics
metrics.reporters.graphite.enabled=true
metrics.reporters.graphite.host=graphite.service
metrics.reporters.graphite.port=2003
metrics.reporters.graphite.prefix=stats.Prod.service
metrics.reporters.interval=30
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Monolith Alert
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Monolith Alert
Multi module project support
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Monolith Alert
Multi module project support
Allegro The New World Improvement WIIFY
#33rdDegree @DebskiChris
The way to improve
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Authentication
OAuth2
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Patch Support
Standardized by IETF
https://tools.ietf.org/html/rfc6902
PATCH /user/1 HTTP/1.1
Host: user.service.local
Content-Length: 312
Content-Type: application/json-patch+json
[
{”op”: ”test”, ”path”: ”/firstname”, ”value”: ”Jane”},
{”op”: ”add”, ”path”: ”/maidenname”, ”value”: ”Smith”},
{”op”: ”replace”, ”path”: ”/lastname”, ”value”: ”Doe”},
{”op”: ”remove", ”path”: ”/meetings”},
{”op”: ”move”, ”from”: ”/balance”, ”path”: ”sharedbalance”},
{”op”: ”copy”, ”from”: ”/a”, ”path”: ”/b”}
]
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Simplify annotations
Swagger?
@Path("/users")
@Api(value = "/users")
@Consumes(CONTENT_TYPE_JSON)
@Produces(CONTENT_TYPE_JSON)
public class UsersEndpoint {
// [...]
@ApiOperation(value=“Get all users”,
response=UserCollectionResponse.class)
@GET
public UserCollectionResponse findAllUsers() {
//[...]
}
}
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Deployment
Docker support
Allegro The New World Improvement WIIFY
#33rdDegree @DebskiChris
What’s in it for you?
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Use the latest tools
GradleW in CI ENV and parent POM issues.
Don’t do DDOS yourself and your partners.
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Change is the only constant
Deployment tools
Service API provider
Dependency injection
HTTP Server
Cargo
Docker
Ecosystem
Swagger Jersey addon
Guice Spring
Jetty Undertow
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Focus on right metrics
How to have 100% code coverage?
public class UserMediaType {
public static final String V1_JSON =
"application/vnd.allegro.user.v1+json”
public static final String V2_JSON =
"application/vnd.allegro.user.v2+json”
}
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Focus on right metrics
import org.junit.Test;
import static net.trajano…
public class MediaTypesTest {
@Test
public void mediaTypesShouldBeValidUtilityClasses()
throws Throwable {
assertUtilityClassWellDefined(UserMediaType.class);
}
}
You don’t need 100% code coverage!
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Tools also lie
Metrics tend to lie
Configuration:
default PHP metrics
Tested file:
4535 CLOC
Imperative programming
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Tools also lie
How many violations are there?
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Tools also lie
How many violations are there?
4
At least according to Sonar.
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Learn to REST
REST is not so obvious
/api/bi/XYZ123/1
/recommendations/1/items
/offer/100?output=ESI/JSON
#33rdDegree @DebskiChris
Allegro The New World Improvement WIIFY
Community
Involve all developers in building the Bootstrap.
Or they will build their own tools.
Łukasz Drumiński Mateusz Gajewski
@wendigo
Allegro The New World Improvement WIIFY
#33rdDegree @DebskiChris
Q & A

More Related Content

What's hot

Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...
Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...
Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...Matt Raible
 
OpenTuesday: Agile Testautomatisierung und Continuous Integration
OpenTuesday: Agile Testautomatisierung und Continuous IntegrationOpenTuesday: Agile Testautomatisierung und Continuous Integration
OpenTuesday: Agile Testautomatisierung und Continuous IntegrationDigicomp Academy AG
 
Marko Berković
Marko BerkovićMarko Berković
Marko BerkovićCodeFest
 
Mastering Grails 3 Plugins - Greach 2016
Mastering Grails 3 Plugins - Greach 2016Mastering Grails 3 Plugins - Greach 2016
Mastering Grails 3 Plugins - Greach 2016Alvaro Sanchez-Mariscal
 
Inside GitHub
Inside GitHubInside GitHub
Inside GitHuberr
 
Introducing the new "react-native upgrade"
Introducing the new "react-native upgrade"Introducing the new "react-native upgrade"
Introducing the new "react-native upgrade"Nicolas Cuillery
 
Moderne Android Builds mit Gradle
Moderne Android Builds mit GradleModerne Android Builds mit Gradle
Moderne Android Builds mit Gradleinovex GmbH
 
Angular vs React Smackdown - Devoxx BE 2017
Angular vs React Smackdown - Devoxx BE 2017Angular vs React Smackdown - Devoxx BE 2017
Angular vs React Smackdown - Devoxx BE 2017Matt Raible
 
Intro to Git and GitHub
Intro to Git and GitHubIntro to Git and GitHub
Intro to Git and GitHubUri Goldstein
 
Transylvania JUG Pre-Meeting Announcements
Transylvania JUG Pre-Meeting AnnouncementsTransylvania JUG Pre-Meeting Announcements
Transylvania JUG Pre-Meeting AnnouncementsMatthew McCullough
 
Github Case Study By Amil Ali
Github Case Study By Amil AliGithub Case Study By Amil Ali
Github Case Study By Amil AliAmilAli1
 
WordPress automation and CI
WordPress automation and CIWordPress automation and CI
WordPress automation and CIRan Bar-Zik
 
Swagger Last version
Swagger Last versionSwagger Last version
Swagger Last versionDaniel Lim
 
A Taxonomy of Clustering, or, No Container is an Island
A Taxonomy of Clustering, or, No Container is an IslandA Taxonomy of Clustering, or, No Container is an Island
A Taxonomy of Clustering, or, No Container is an IslandTed M. Young
 
GitHub Actions in action
GitHub Actions in actionGitHub Actions in action
GitHub Actions in actionOleksii Holub
 
Git for Beginners
Git for BeginnersGit for Beginners
Git for BeginnersRick Umali
 
Three amigos: Bitbucket + Jenkins + Docker
Three amigos: Bitbucket + Jenkins + DockerThree amigos: Bitbucket + Jenkins + Docker
Three amigos: Bitbucket + Jenkins + DockerDaniel Gordillo
 

What's hot (20)

Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...
Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...
Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...
 
OpenTuesday: Agile Testautomatisierung und Continuous Integration
OpenTuesday: Agile Testautomatisierung und Continuous IntegrationOpenTuesday: Agile Testautomatisierung und Continuous Integration
OpenTuesday: Agile Testautomatisierung und Continuous Integration
 
Git and Github workshop
Git and Github workshopGit and Github workshop
Git and Github workshop
 
Marko Berković
Marko BerkovićMarko Berković
Marko Berković
 
Mastering Grails 3 Plugins - Greach 2016
Mastering Grails 3 Plugins - Greach 2016Mastering Grails 3 Plugins - Greach 2016
Mastering Grails 3 Plugins - Greach 2016
 
Inside GitHub
Inside GitHubInside GitHub
Inside GitHub
 
Introducing the new "react-native upgrade"
Introducing the new "react-native upgrade"Introducing the new "react-native upgrade"
Introducing the new "react-native upgrade"
 
Moderne Android Builds mit Gradle
Moderne Android Builds mit GradleModerne Android Builds mit Gradle
Moderne Android Builds mit Gradle
 
Angular vs React Smackdown - Devoxx BE 2017
Angular vs React Smackdown - Devoxx BE 2017Angular vs React Smackdown - Devoxx BE 2017
Angular vs React Smackdown - Devoxx BE 2017
 
Intro to Git and GitHub
Intro to Git and GitHubIntro to Git and GitHub
Intro to Git and GitHub
 
Transylvania JUG Pre-Meeting Announcements
Transylvania JUG Pre-Meeting AnnouncementsTransylvania JUG Pre-Meeting Announcements
Transylvania JUG Pre-Meeting Announcements
 
Inside GitHub with Chris Wanstrath
Inside GitHub with Chris WanstrathInside GitHub with Chris Wanstrath
Inside GitHub with Chris Wanstrath
 
Github Case Study By Amil Ali
Github Case Study By Amil AliGithub Case Study By Amil Ali
Github Case Study By Amil Ali
 
WordPress automation and CI
WordPress automation and CIWordPress automation and CI
WordPress automation and CI
 
Swagger Last version
Swagger Last versionSwagger Last version
Swagger Last version
 
A Taxonomy of Clustering, or, No Container is an Island
A Taxonomy of Clustering, or, No Container is an IslandA Taxonomy of Clustering, or, No Container is an Island
A Taxonomy of Clustering, or, No Container is an Island
 
GitHub Actions in action
GitHub Actions in actionGitHub Actions in action
GitHub Actions in action
 
Git for Beginners
Git for BeginnersGit for Beginners
Git for Beginners
 
Three amigos: Bitbucket + Jenkins + Docker
Three amigos: Bitbucket + Jenkins + DockerThree amigos: Bitbucket + Jenkins + Docker
Three amigos: Bitbucket + Jenkins + Docker
 
Introduction to Git
Introduction to GitIntroduction to Git
Introduction to Git
 

Viewers also liked

PENGURUSAN IZIN DOKUMEN PERUSAHAAN PT. JEKLINDO CONSULTING - 085262245981 ( M...
PENGURUSAN IZIN DOKUMEN PERUSAHAAN PT. JEKLINDO CONSULTING - 085262245981 ( M...PENGURUSAN IZIN DOKUMEN PERUSAHAAN PT. JEKLINDO CONSULTING - 085262245981 ( M...
PENGURUSAN IZIN DOKUMEN PERUSAHAAN PT. JEKLINDO CONSULTING - 085262245981 ( M...PT.Jeklindo Persada Consulting 085262245981
 
Buletin Cacds 12-2015(39-23)
Buletin Cacds 12-2015(39-23)Buletin Cacds 12-2015(39-23)
Buletin Cacds 12-2015(39-23)cacds_ukraine
 
КОНФЛІКТ В УКРАЇНІ І ЕВОЛЮЦІЯ МІЖНАРОДНОГО ПРАВОПОРЯДКУ
КОНФЛІКТ В УКРАЇНІ І ЕВОЛЮЦІЯ МІЖНАРОДНОГО ПРАВОПОРЯДКУКОНФЛІКТ В УКРАЇНІ І ЕВОЛЮЦІЯ МІЖНАРОДНОГО ПРАВОПОРЯДКУ
КОНФЛІКТ В УКРАЇНІ І ЕВОЛЮЦІЯ МІЖНАРОДНОГО ПРАВОПОРЯДКУcacds_ukraine
 
PENGURUSAN IZIN DOKUMEN PERUSAHAAN PT. JEKLINDO CONSULTING - 085262245981 ( M...
PENGURUSAN IZIN DOKUMEN PERUSAHAAN PT. JEKLINDO CONSULTING - 085262245981 ( M...PENGURUSAN IZIN DOKUMEN PERUSAHAAN PT. JEKLINDO CONSULTING - 085262245981 ( M...
PENGURUSAN IZIN DOKUMEN PERUSAHAAN PT. JEKLINDO CONSULTING - 085262245981 ( M...PT.Jeklindo Persada Consulting 085262245981
 
Newsletter 30 10-2015(36-20) (1)
Newsletter 30 10-2015(36-20) (1)Newsletter 30 10-2015(36-20) (1)
Newsletter 30 10-2015(36-20) (1)cacds_ukraine
 
BIRO JASA CONSULTING PT.JEKLINDO PERSADA (CEPAT, MURAH DAN TERJAMIN) O8526224...
BIRO JASA CONSULTING PT.JEKLINDO PERSADA (CEPAT, MURAH DAN TERJAMIN) O8526224...BIRO JASA CONSULTING PT.JEKLINDO PERSADA (CEPAT, MURAH DAN TERJAMIN) O8526224...
BIRO JASA CONSULTING PT.JEKLINDO PERSADA (CEPAT, MURAH DAN TERJAMIN) O8526224...PT.Jeklindo Persada Consulting 085262245981
 
Geecon.cz 2015 debski krzysztof
Geecon.cz 2015 debski krzysztofGeecon.cz 2015 debski krzysztof
Geecon.cz 2015 debski krzysztofKrzysztof Debski
 
BIRO JASA CONSULTING PT.JEKLINDO PERSADA (CEPAT, MURAH DAN TERJAMIN) O8526224...
BIRO JASA CONSULTING PT.JEKLINDO PERSADA (CEPAT, MURAH DAN TERJAMIN) O8526224...BIRO JASA CONSULTING PT.JEKLINDO PERSADA (CEPAT, MURAH DAN TERJAMIN) O8526224...
BIRO JASA CONSULTING PT.JEKLINDO PERSADA (CEPAT, MURAH DAN TERJAMIN) O8526224...PT.Jeklindo Persada Consulting 085262245981
 
Newsletter 01 12-2015(38-22) (1)
Newsletter 01 12-2015(38-22) (1)Newsletter 01 12-2015(38-22) (1)
Newsletter 01 12-2015(38-22) (1)cacds_ukraine
 
PENGURUSAN IZIN DOKUMEN PERUSAHAAN PT. JEKLINDO CONSULTING - 085262245981 ( M...
PENGURUSAN IZIN DOKUMEN PERUSAHAAN PT. JEKLINDO CONSULTING - 085262245981 ( M...PENGURUSAN IZIN DOKUMEN PERUSAHAAN PT. JEKLINDO CONSULTING - 085262245981 ( M...
PENGURUSAN IZIN DOKUMEN PERUSAHAAN PT. JEKLINDO CONSULTING - 085262245981 ( M...PT.Jeklindo Persada Consulting 085262245981
 
Bulletin cacds (30-14)
Bulletin cacds (30-14)Bulletin cacds (30-14)
Bulletin cacds (30-14)cacds_ukraine
 

Viewers also liked (20)

PENGURUSAN IZIN DOKUMEN PERUSAHAAN PT. JEKLINDO CONSULTING - 085262245981 ( M...
PENGURUSAN IZIN DOKUMEN PERUSAHAAN PT. JEKLINDO CONSULTING - 085262245981 ( M...PENGURUSAN IZIN DOKUMEN PERUSAHAAN PT. JEKLINDO CONSULTING - 085262245981 ( M...
PENGURUSAN IZIN DOKUMEN PERUSAHAAN PT. JEKLINDO CONSULTING - 085262245981 ( M...
 
Gustav the parakeet
Gustav the parakeetGustav the parakeet
Gustav the parakeet
 
Buletin Cacds 12-2015(39-23)
Buletin Cacds 12-2015(39-23)Buletin Cacds 12-2015(39-23)
Buletin Cacds 12-2015(39-23)
 
КОНФЛІКТ В УКРАЇНІ І ЕВОЛЮЦІЯ МІЖНАРОДНОГО ПРАВОПОРЯДКУ
КОНФЛІКТ В УКРАЇНІ І ЕВОЛЮЦІЯ МІЖНАРОДНОГО ПРАВОПОРЯДКУКОНФЛІКТ В УКРАЇНІ І ЕВОЛЮЦІЯ МІЖНАРОДНОГО ПРАВОПОРЯДКУ
КОНФЛІКТ В УКРАЇНІ І ЕВОЛЮЦІЯ МІЖНАРОДНОГО ПРАВОПОРЯДКУ
 
Buletin 28-12
Buletin 28-12Buletin 28-12
Buletin 28-12
 
buletin 10 cacds
buletin 10 cacdsbuletin 10 cacds
buletin 10 cacds
 
PENGURUSAN IZIN DOKUMEN PERUSAHAAN PT. JEKLINDO CONSULTING - 085262245981 ( M...
PENGURUSAN IZIN DOKUMEN PERUSAHAAN PT. JEKLINDO CONSULTING - 085262245981 ( M...PENGURUSAN IZIN DOKUMEN PERUSAHAAN PT. JEKLINDO CONSULTING - 085262245981 ( M...
PENGURUSAN IZIN DOKUMEN PERUSAHAAN PT. JEKLINDO CONSULTING - 085262245981 ( M...
 
Newsletter 30 10-2015(36-20) (1)
Newsletter 30 10-2015(36-20) (1)Newsletter 30 10-2015(36-20) (1)
Newsletter 30 10-2015(36-20) (1)
 
DHL
DHLDHL
DHL
 
BIRO JASA CONSULTING PT.JEKLINDO PERSADA (CEPAT, MURAH DAN TERJAMIN) O8526224...
BIRO JASA CONSULTING PT.JEKLINDO PERSADA (CEPAT, MURAH DAN TERJAMIN) O8526224...BIRO JASA CONSULTING PT.JEKLINDO PERSADA (CEPAT, MURAH DAN TERJAMIN) O8526224...
BIRO JASA CONSULTING PT.JEKLINDO PERSADA (CEPAT, MURAH DAN TERJAMIN) O8526224...
 
Geecon.cz 2015 debski krzysztof
Geecon.cz 2015 debski krzysztofGeecon.cz 2015 debski krzysztof
Geecon.cz 2015 debski krzysztof
 
BIRO JASA CONSULTING PT.JEKLINDO PERSADA (CEPAT, MURAH DAN TERJAMIN) O8526224...
BIRO JASA CONSULTING PT.JEKLINDO PERSADA (CEPAT, MURAH DAN TERJAMIN) O8526224...BIRO JASA CONSULTING PT.JEKLINDO PERSADA (CEPAT, MURAH DAN TERJAMIN) O8526224...
BIRO JASA CONSULTING PT.JEKLINDO PERSADA (CEPAT, MURAH DAN TERJAMIN) O8526224...
 
Newsletter 01 12-2015(38-22) (1)
Newsletter 01 12-2015(38-22) (1)Newsletter 01 12-2015(38-22) (1)
Newsletter 01 12-2015(38-22) (1)
 
PENGURUSAN IZIN DOKUMEN PERUSAHAAN PT. JEKLINDO CONSULTING - 085262245981 ( M...
PENGURUSAN IZIN DOKUMEN PERUSAHAAN PT. JEKLINDO CONSULTING - 085262245981 ( M...PENGURUSAN IZIN DOKUMEN PERUSAHAAN PT. JEKLINDO CONSULTING - 085262245981 ( M...
PENGURUSAN IZIN DOKUMEN PERUSAHAAN PT. JEKLINDO CONSULTING - 085262245981 ( M...
 
PERUSAHAAN JASA CONSULTING PT. JEKLINDO PERSADA ( 085262245981 )
PERUSAHAAN JASA CONSULTING PT. JEKLINDO PERSADA ( 085262245981 )PERUSAHAAN JASA CONSULTING PT. JEKLINDO PERSADA ( 085262245981 )
PERUSAHAAN JASA CONSULTING PT. JEKLINDO PERSADA ( 085262245981 )
 
PT.JEKLINDO PERSADA JASA PENGURUSAN IZIN DOKUMEN PERUSAHAAN ( 085262245981)
PT.JEKLINDO PERSADA JASA PENGURUSAN IZIN DOKUMEN PERUSAHAAN ( 085262245981)PT.JEKLINDO PERSADA JASA PENGURUSAN IZIN DOKUMEN PERUSAHAAN ( 085262245981)
PT.JEKLINDO PERSADA JASA PENGURUSAN IZIN DOKUMEN PERUSAHAAN ( 085262245981)
 
PT.JEKLINDO PERSADA JASA PENGURUSAN IZIN DOKUMEN PERUSAHAAN ( 085262245981)
PT.JEKLINDO PERSADA JASA PENGURUSAN IZIN DOKUMEN PERUSAHAAN ( 085262245981)PT.JEKLINDO PERSADA JASA PENGURUSAN IZIN DOKUMEN PERUSAHAAN ( 085262245981)
PT.JEKLINDO PERSADA JASA PENGURUSAN IZIN DOKUMEN PERUSAHAAN ( 085262245981)
 
Buletin 13
Buletin 13Buletin 13
Buletin 13
 
Buletin (31-15)
Buletin (31-15)Buletin (31-15)
Buletin (31-15)
 
Bulletin cacds (30-14)
Bulletin cacds (30-14)Bulletin cacds (30-14)
Bulletin cacds (30-14)
 

Similar to Building a Solid Base for Allegro Group with Microservices and DDD

AtmosphereConf - Let's build a solid base for a scale
AtmosphereConf - Let's build a solid base for a scaleAtmosphereConf - Let's build a solid base for a scale
AtmosphereConf - Let's build a solid base for a scaleKrzysztof Debski
 
Atmosphere 2014: Let's build a solid base for a scale. - Krzysztof Debski
Atmosphere 2014: Let's build a solid base for a scale. - Krzysztof DebskiAtmosphere 2014: Let's build a solid base for a scale. - Krzysztof Debski
Atmosphere 2014: Let's build a solid base for a scale. - Krzysztof DebskiPROIDEA
 
DWX 2013 Nuremberg
DWX 2013 NurembergDWX 2013 Nuremberg
DWX 2013 NurembergMarcel Bruch
 
Hack the System - Introduction to Stellar
Hack the System - Introduction to StellarHack the System - Introduction to Stellar
Hack the System - Introduction to StellarVanessa Lošić
 
[KubeCon NA 2018] Effective Kubernetes Develop: Turbocharge Your Dev Loop - P...
[KubeCon NA 2018] Effective Kubernetes Develop: Turbocharge Your Dev Loop - P...[KubeCon NA 2018] Effective Kubernetes Develop: Turbocharge Your Dev Loop - P...
[KubeCon NA 2018] Effective Kubernetes Develop: Turbocharge Your Dev Loop - P...Ambassador Labs
 
Candies for everybody: Hacking from 9 to 6
Candies for everybody: Hacking from 9 to 6Candies for everybody: Hacking from 9 to 6
Candies for everybody: Hacking from 9 to 6Alberto López Martín
 
はじめての JFrog Artifactory
はじめての JFrog Artifactoryはじめての JFrog Artifactory
はじめての JFrog ArtifactoryTsuyoshi Miyake
 
Free The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own DomainFree The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own DomainKen Collins
 
From Android NDK To AOSP
From Android NDK To AOSPFrom Android NDK To AOSP
From Android NDK To AOSPMin-Yih Hsu
 
Java 11 - Keeping the Java Release Train on the Right Track
Java 11 - Keeping the Java Release Train on the Right TrackJava 11 - Keeping the Java Release Train on the Right Track
Java 11 - Keeping the Java Release Train on the Right TrackC4Media
 
Big Data with BigQuery, presented at DevoxxUK 2014 by Javier Ramirez from teo...
Big Data with BigQuery, presented at DevoxxUK 2014 by Javier Ramirez from teo...Big Data with BigQuery, presented at DevoxxUK 2014 by Javier Ramirez from teo...
Big Data with BigQuery, presented at DevoxxUK 2014 by Javier Ramirez from teo...javier ramirez
 
IIIF Discovery Walkthrough
IIIF Discovery WalkthroughIIIF Discovery Walkthrough
IIIF Discovery WalkthroughRobert Sanderson
 
Managing Github via Terrafom.pdf
Managing Github via Terrafom.pdfManaging Github via Terrafom.pdf
Managing Github via Terrafom.pdfmicharaeck
 
CloudML talk at DevFest Madurai 2016
CloudML talk at DevFest Madurai 2016 CloudML talk at DevFest Madurai 2016
CloudML talk at DevFest Madurai 2016 Karthik Padmanabhan
 
What's in a community like Liferay's
What's in a community like Liferay'sWhat's in a community like Liferay's
What's in a community like Liferay'sDavid Gómez García
 
Drivetribe: A Social Network on Streams
Drivetribe: A Social Network on StreamsDrivetribe: A Social Network on Streams
Drivetribe: A Social Network on StreamsC4Media
 
Horacio Gonzalez - Rediscover the known Universe with NASA datasets - Codemot...
Horacio Gonzalez - Rediscover the known Universe with NASA datasets - Codemot...Horacio Gonzalez - Rediscover the known Universe with NASA datasets - Codemot...
Horacio Gonzalez - Rediscover the known Universe with NASA datasets - Codemot...Codemotion
 
NUDGE AND SLUDGE: DRIVING SECURITY WITH DESIGN // J. WOLFGANG GOERLICH, Duo S...
NUDGE AND SLUDGE: DRIVING SECURITY WITH DESIGN // J. WOLFGANG GOERLICH, Duo S...NUDGE AND SLUDGE: DRIVING SECURITY WITH DESIGN // J. WOLFGANG GOERLICH, Duo S...
NUDGE AND SLUDGE: DRIVING SECURITY WITH DESIGN // J. WOLFGANG GOERLICH, Duo S...DevOpsDays Tel Aviv
 
Clean Code I - Design Patterns and Best Practices at SoCal Code Camp San Dieg...
Clean Code I - Design Patterns and Best Practices at SoCal Code Camp San Dieg...Clean Code I - Design Patterns and Best Practices at SoCal Code Camp San Dieg...
Clean Code I - Design Patterns and Best Practices at SoCal Code Camp San Dieg...Theo Jungeblut
 
Choosing the right NOSQL database
Choosing the right NOSQL databaseChoosing the right NOSQL database
Choosing the right NOSQL databaseTobias Lindaaker
 

Similar to Building a Solid Base for Allegro Group with Microservices and DDD (20)

AtmosphereConf - Let's build a solid base for a scale
AtmosphereConf - Let's build a solid base for a scaleAtmosphereConf - Let's build a solid base for a scale
AtmosphereConf - Let's build a solid base for a scale
 
Atmosphere 2014: Let's build a solid base for a scale. - Krzysztof Debski
Atmosphere 2014: Let's build a solid base for a scale. - Krzysztof DebskiAtmosphere 2014: Let's build a solid base for a scale. - Krzysztof Debski
Atmosphere 2014: Let's build a solid base for a scale. - Krzysztof Debski
 
DWX 2013 Nuremberg
DWX 2013 NurembergDWX 2013 Nuremberg
DWX 2013 Nuremberg
 
Hack the System - Introduction to Stellar
Hack the System - Introduction to StellarHack the System - Introduction to Stellar
Hack the System - Introduction to Stellar
 
[KubeCon NA 2018] Effective Kubernetes Develop: Turbocharge Your Dev Loop - P...
[KubeCon NA 2018] Effective Kubernetes Develop: Turbocharge Your Dev Loop - P...[KubeCon NA 2018] Effective Kubernetes Develop: Turbocharge Your Dev Loop - P...
[KubeCon NA 2018] Effective Kubernetes Develop: Turbocharge Your Dev Loop - P...
 
Candies for everybody: Hacking from 9 to 6
Candies for everybody: Hacking from 9 to 6Candies for everybody: Hacking from 9 to 6
Candies for everybody: Hacking from 9 to 6
 
はじめての JFrog Artifactory
はじめての JFrog Artifactoryはじめての JFrog Artifactory
はじめての JFrog Artifactory
 
Free The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own DomainFree The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own Domain
 
From Android NDK To AOSP
From Android NDK To AOSPFrom Android NDK To AOSP
From Android NDK To AOSP
 
Java 11 - Keeping the Java Release Train on the Right Track
Java 11 - Keeping the Java Release Train on the Right TrackJava 11 - Keeping the Java Release Train on the Right Track
Java 11 - Keeping the Java Release Train on the Right Track
 
Big Data with BigQuery, presented at DevoxxUK 2014 by Javier Ramirez from teo...
Big Data with BigQuery, presented at DevoxxUK 2014 by Javier Ramirez from teo...Big Data with BigQuery, presented at DevoxxUK 2014 by Javier Ramirez from teo...
Big Data with BigQuery, presented at DevoxxUK 2014 by Javier Ramirez from teo...
 
IIIF Discovery Walkthrough
IIIF Discovery WalkthroughIIIF Discovery Walkthrough
IIIF Discovery Walkthrough
 
Managing Github via Terrafom.pdf
Managing Github via Terrafom.pdfManaging Github via Terrafom.pdf
Managing Github via Terrafom.pdf
 
CloudML talk at DevFest Madurai 2016
CloudML talk at DevFest Madurai 2016 CloudML talk at DevFest Madurai 2016
CloudML talk at DevFest Madurai 2016
 
What's in a community like Liferay's
What's in a community like Liferay'sWhat's in a community like Liferay's
What's in a community like Liferay's
 
Drivetribe: A Social Network on Streams
Drivetribe: A Social Network on StreamsDrivetribe: A Social Network on Streams
Drivetribe: A Social Network on Streams
 
Horacio Gonzalez - Rediscover the known Universe with NASA datasets - Codemot...
Horacio Gonzalez - Rediscover the known Universe with NASA datasets - Codemot...Horacio Gonzalez - Rediscover the known Universe with NASA datasets - Codemot...
Horacio Gonzalez - Rediscover the known Universe with NASA datasets - Codemot...
 
NUDGE AND SLUDGE: DRIVING SECURITY WITH DESIGN // J. WOLFGANG GOERLICH, Duo S...
NUDGE AND SLUDGE: DRIVING SECURITY WITH DESIGN // J. WOLFGANG GOERLICH, Duo S...NUDGE AND SLUDGE: DRIVING SECURITY WITH DESIGN // J. WOLFGANG GOERLICH, Duo S...
NUDGE AND SLUDGE: DRIVING SECURITY WITH DESIGN // J. WOLFGANG GOERLICH, Duo S...
 
Clean Code I - Design Patterns and Best Practices at SoCal Code Camp San Dieg...
Clean Code I - Design Patterns and Best Practices at SoCal Code Camp San Dieg...Clean Code I - Design Patterns and Best Practices at SoCal Code Camp San Dieg...
Clean Code I - Design Patterns and Best Practices at SoCal Code Camp San Dieg...
 
Choosing the right NOSQL database
Choosing the right NOSQL databaseChoosing the right NOSQL database
Choosing the right NOSQL database
 

Recently uploaded

Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 

Recently uploaded (20)

Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 

Building a Solid Base for Allegro Group with Microservices and DDD

  • 2. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Agenda The Allegro Situation How to build a new World? The way to improve What’s in it for you?
  • 3. Allegro The New World Improvement WIIFY #33rdDegree @DebskiChris The Allegro Situation
  • 4. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Allegro
  • 5. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Allegro 6 million LOC
  • 6. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY 400 people in IT Allegro
  • 7. Allegro The New World Improvement WIIFY #33rdDegree @DebskiChris A New Hope
  • 8. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY A New Hope
  • 9. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY A New Hope
  • 10. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY A New Hope? Service Oriented Ambiguity
  • 11. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Domain Driven Design
  • 12. Allegro The New World Improvement WIIFY #33rdDegree @DebskiChris (Micro)Services
  • 13. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY (Micro)Services Business needs User Transaction Offer
  • 14. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY (Micro)Services Independent User Transaction Offer
  • 15. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY (Micro)Services API User Transaction Offer
  • 16. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY (Micro)Services Polyglot Cassandra MongoDB Oracle User Transaction Offer
  • 17. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY (Micro)Services Smart Endpoints Cassandra MongoDB Oracle Offer Transaction User
  • 18. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY The first approach Service Auto deployable Auto monitored Auto scalable Auto healable Auto discoverable … and many more features
  • 19. Allegro The New World Improvement WIIFY #33rdDegree @DebskiChris How to build a new World?
  • 20. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY The first project Service Jetty Server War file Spring Gradle
  • 21. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Let’s REST JAX-RS / JSR Compliant @Path("/users") @Consumes(CONTENT_TYPE_JSON) @Produces(CONTENT_TYPE_JSON) public class UsersEndpoint { // [...] @GET public UserCollectionResponse findAllUsers() { //[...] } }
  • 22. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Let’s expose our methods Swagger @Path("/users") @Api(value = "/users") @Consumes(CONTENT_TYPE_JSON) @Produces(CONTENT_TYPE_JSON) public class UsersEndpoint { // [...] @ApiOperation(value=“Get all users”, response=UserCollectionResponse.class) @GET public UserCollectionResponse findAllUsers() { //[...] } }
  • 23. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Let’s expose our methods Swagger @Path("/users") @Api(value = "/users") @Consumes(CONTENT_TYPE_JSON) @Produces(CONTENT_TYPE_JSON) public class UsersEndpoint { // [...] @ApiOperation(value=“Get all users”, response=UserCollectionResponse.class) @GET public UserCollectionResponse findAllUsers() { //[...] } }
  • 24. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Let’s expose our methods Swagger
  • 25. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY And make them discoverable Offer User Discovery ZooKeeper
  • 26. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY And make them discoverable Offer User Discovery ZooKeeper Register
  • 27. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY And make them discoverable Offer User Discovery ZooKeeper
  • 28. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY And make them discoverable Offer User Discovery ZooKeeper Get User
  • 29. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY And make them discoverable Offer User Discovery ZooKeeper Get User
  • 30. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY And make them discoverable Offer User Discovery ZooKeeper Get User Get offer for user
  • 31. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Multiple API versions Content negotiation @Path("/users") @Consumes(”application/json”) @Produces(”application/json”) public class UsersEndpoint { // [...] @GET public UserCollectionResponse findAllUsers() { //[...] } }
  • 32. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Multiple API versions Content negotiation @Path("/users") @Consumes(”application/vnd.allegro.user.v1+json”) @Produces(”application/vnd.allegro.user.v1+json”) public class UsersEndpoint { // [...] @GET public UserCollectionResponse findAllUsers() { //[...] } } curl --dump-header - -H ”Accept: application/vnd.allegro.user.v1+json" -X GET http://localhost:8080/users
  • 33. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Multiple API versions Content negotiation @Path("/users") @Consumes(”application/vnd.allegro.user.v1+json”) @Produces(”application/vnd.allegro.user.v1+json”) public class UsersEndpoint { // [...] @GET @Produces(“application/vnd.allegro.user.v2+json”) public UserCollectionResponse findAllUsers() { //[...] } } curl --dump-header - -H ”Accept: application/vnd.allegro.user.v2+json" -X GET http://localhost:8080/users
  • 34. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY And it became slow…
  • 35. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Lower startup time External Jetty Service Jetty Server War file
  • 36. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Lower startup time Embedded Jetty Service Jetty Server Jar file
  • 37. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Lower startup time Embedded Jetty Service Jetty Server Jar file
  • 38. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Lower startup time Embedded UnderTow Service Jetty ServerUndertow Jar file
  • 39. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Lower startup time Immutable Images Service Undertow Zip file Server Immutable image
  • 40. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY How to configure it? Service java –jar service.jar
  • 41. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY How to configure it? Service ZooKeeper java –jar service.jar –Dzookeeper.address=zookeper.service
  • 42. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY How to configure it? Service ZooKeeper java –jar service.jar –Dzookeeper.address=zookeper.service –Denvironment=prod prod.properties
  • 43. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY How to configure it? Service ZooKeeper java –jar service.jar –Dzookeeper.address=zookeper.service –Denvironment=prod -Dservice.name=testService prod.properties
  • 44. Allegro The New World Improvement WIIFY #33rdDegree @DebskiChris Tests
  • 45. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Do you test your tests? Pitest
  • 46. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Integration tests Test without mocks Run from IDE public class UsersIntegrationTest { private static Map<String, String> overrideConfiguration = Maps.newHashMap(); static { overrideConfiguration.put("property.name", "This was overwritten value"); } @ClassRule public static final RestServiceStarted DEPLOYED_SERVICE = new RestServiceStarted(overrideConfiguration); private WebTarget getUsersResourceWebTarget() { return DEPLOYED_SERVICE.getWebTarget().path("users"); } }
  • 47. Allegro The New World Improvement WIIFY #33rdDegree @DebskiChris Monitoring
  • 48. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Let’s see what’s happening NxLog LogStash Kibana
  • 49. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Let’s see what’s happening Graphite # Metrics metrics.reporters.graphite.enabled=true metrics.reporters.graphite.host=graphite.service metrics.reporters.graphite.port=2003 metrics.reporters.graphite.prefix=stats.Prod.service metrics.reporters.interval=30
  • 50. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Monolith Alert
  • 51. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Monolith Alert Multi module project support
  • 52. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Monolith Alert Multi module project support
  • 53. Allegro The New World Improvement WIIFY #33rdDegree @DebskiChris The way to improve
  • 54. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Authentication OAuth2
  • 55. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Patch Support Standardized by IETF https://tools.ietf.org/html/rfc6902 PATCH /user/1 HTTP/1.1 Host: user.service.local Content-Length: 312 Content-Type: application/json-patch+json [ {”op”: ”test”, ”path”: ”/firstname”, ”value”: ”Jane”}, {”op”: ”add”, ”path”: ”/maidenname”, ”value”: ”Smith”}, {”op”: ”replace”, ”path”: ”/lastname”, ”value”: ”Doe”}, {”op”: ”remove", ”path”: ”/meetings”}, {”op”: ”move”, ”from”: ”/balance”, ”path”: ”sharedbalance”}, {”op”: ”copy”, ”from”: ”/a”, ”path”: ”/b”} ]
  • 56. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Simplify annotations Swagger? @Path("/users") @Api(value = "/users") @Consumes(CONTENT_TYPE_JSON) @Produces(CONTENT_TYPE_JSON) public class UsersEndpoint { // [...] @ApiOperation(value=“Get all users”, response=UserCollectionResponse.class) @GET public UserCollectionResponse findAllUsers() { //[...] } }
  • 57. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Deployment Docker support
  • 58. Allegro The New World Improvement WIIFY #33rdDegree @DebskiChris What’s in it for you?
  • 59. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Use the latest tools GradleW in CI ENV and parent POM issues. Don’t do DDOS yourself and your partners.
  • 60. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Change is the only constant Deployment tools Service API provider Dependency injection HTTP Server Cargo Docker Ecosystem Swagger Jersey addon Guice Spring Jetty Undertow
  • 61. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Focus on right metrics How to have 100% code coverage? public class UserMediaType { public static final String V1_JSON = "application/vnd.allegro.user.v1+json” public static final String V2_JSON = "application/vnd.allegro.user.v2+json” }
  • 62. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Focus on right metrics import org.junit.Test; import static net.trajano… public class MediaTypesTest { @Test public void mediaTypesShouldBeValidUtilityClasses() throws Throwable { assertUtilityClassWellDefined(UserMediaType.class); } } You don’t need 100% code coverage!
  • 63. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Tools also lie Metrics tend to lie Configuration: default PHP metrics Tested file: 4535 CLOC Imperative programming
  • 64. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Tools also lie How many violations are there?
  • 65. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Tools also lie How many violations are there? 4 At least according to Sonar.
  • 66. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Learn to REST REST is not so obvious /api/bi/XYZ123/1 /recommendations/1/items /offer/100?output=ESI/JSON
  • 67. #33rdDegree @DebskiChris Allegro The New World Improvement WIIFY Community Involve all developers in building the Bootstrap. Or they will build their own tools. Łukasz Drumiński Mateusz Gajewski @wendigo
  • 68. Allegro The New World Improvement WIIFY #33rdDegree @DebskiChris Q & A