SlideShare a Scribd company logo
Microservices, the lean way
Bruno Bossola
(JUG Torino)
AMSTERDAM
11-12 MAY 2016
`
Microservices, the lean way
...now with 100% more llamas!
AMSTERDAM
11-12 MAY 2016
l
● Developer since 1988
● XP Coach 2000+
● Co-founder and coordinator of JUG Torino
● Java Champion since 2005
● VP of Engineering @Workshare.com
….and microservices
addicted since 2013
Hey mate, who are you?
@bbossola
● Why microservices?
● What are microservices?
● Demo
● Common antipatterns
● Demo
● How do we work with microservices?
● Conclusions?
Agenda
@bbossola
● Why microservices?
● What are microservices?
● Common antipatterns
● How do we work with
microservices?
Agenda
@bbossola
Why microservices?
J2EE
Ruby on Rails
.NET
Are you living with a monolith?
@bbossola
Why microservices?
J2EE
Ruby on Rails
.NET
● your IDE is bloated
Are you living with a monolith?
@bbossola
Why microservices?
J2EE
Ruby on Rails
.NET
● your IDE is bloated
● you are locked onto a language
Are you living with a monolith?
@bbossola
Why microservices?
J2EE
Ruby on Rails
.NET
● your IDE is bloated
● you are locked onto a language
● your tests can take hours to run
Are you living with a monolith?
@bbossola
Why microservices?
J2EE
Ruby on Rails
.NET
● your IDE is bloated
● you are locked onto a language
● your tests can take hours to run
● your db migrations are HUGE and
scary
Are you living with a monolith?
@bbossola
Why microservices?
J2EE
Ruby on Rails
.NET
● your IDE is bloated
● you are locked onto a language
● your tests can take hours to run
● your db migrations are HUGE and scary
● you always scale EVERYTHING
Are you living with a monolith?
@bbossola
Why microservices?
J2EE
Ruby on Rails
.NET
● your IDE is bloated
● you are locked onto a language
● your tests can take hours to run
● your db migrations are HUGE and scary
● you always scale EVERYTHING
● you have a single BIG team
Are you living with a monolith?
@bbossola
Why microservices?
J2EE
Ruby on Rails
.NET
● your IDE is bloated
● you are locked onto a language
● your tests can take hours to run
● your db migrations are HUGE and scary
● you always scale EVERYTHING
● you have a single BIG team
● you are generating HTML pages
(no, well... really?)
Are you living with a monolith?
@bbossola
● Would not be better if...
Why microservices?
@bbossola
● Would not be better if...
– you can use an IDE. Or not :)
– you can choose your favourite programming language
– your integration tests run in minutes
– your db migrations are small and cosy
– you scale independently
– you have small teams, pizza size
– you work on green field projects every time
– you can choose cool technologies
– you can fail
Why microservices?
@bbossola
● Would not be better if...
– you can use an IDE. Or not :)
– you can choose your favourite programming language
– your integration tests run in minutes
– your db migrations are small and cosy
– you scale independently
– you have small teams, pizza size
– you work on green field projects every time
– you can choose cool technologies
– you can fail
Why microservices?
@bbossola
● Would not be better if...
– you can use an IDE. Or not :)
– you can choose your favourite programming language
– your integration tests run in minutes
– your db migrations are small and cosy
– you scale independently
– you have small teams, pizza size
– you work on green field projects every time
– you can choose cool technologies
– you can fail
Why microservices?
@bbossola
● Would not be better if...
– you can use an IDE. Or not :)
– you can choose your favourite programming language
– your integration tests run in minutes
– your db migrations are small and cosy
– you scale independently
– you have small teams, pizza size
– you work on green field projects every time
– you can choose cool technologies
– you can fail
Why microservices?
@bbossola
● Would not be better if...
– you can use an IDE. Or not :)
– you can choose your favourite programming language
– your integration tests run in minutes
– your db migrations are small and cosy
– you scale independently
– you have small teams, pizza size
– you work on green field projects every time
– you can choose cool technologies
– you can fail
Why microservices?
@bbossola
● Would not be better if...
– you can use an IDE. Or not :)
– you can choose your favourite programming language
– your integration tests run in minutes
– your db migrations are small and cosy
– you scale independently
– you have small teams, pizza size
– you work on green field projects every time
– you can choose cool technologies
– you can fail
Why microservices?
@bbossola
● Would not be better if...
– you can use an IDE. Or not :)
– you can choose your favourite programming language
– your integration tests run in minutes
– your db migrations are small and cosy
– you scale independently
– you have small teams, pizza size
– you work on green field projects every time
– you can choose cool technologies
– you can fail
Why microservices?
@bbossola
● Would not be better if...
– you can use an IDE. Or not :)
– you can choose your favourite programming language
– your integration tests run in minutes
– your db migrations are small and cosy
– you scale independently
– you have small teams, pizza size
– you work on green field projects every time
– you can choose cool technologies
– you can fail
Why microservices?
@bbossola
● Would not be better if...
– you can use an IDE. Or not :)
– you can choose your favourite programming language
– your integration tests run in minutes
– your db migrations are small and cosy
– you scale independently
– you have small teams, pizza size
– you work on green field projects every time
– you can choose cool technologies
– you can fail
Why microservices?
@bbossola
● Why microservices?
● What are microservices?
● Common antipatterns
● How do we work with microservices?
Agenda
@bbossola
● independent (processes) communicating with each other using
language-agnostic APIs
● small, highly decoupled and focus on doing a small task
● can be written in any programming language
– we do use Ruby, C#. Java and Javascript
●
micro means small, very!
– we run 20 of them on one single machine
● deployed independently, run independently
● each use its own database
● each owned by a team
What are microservices?
@bbossola
● Pros!
– highly cohesive, loosely coupled
– clean api contracts and SOC
– very easy to write and replace
– self-contained, very easy to deploy
– scaling can be very focused
– small releases, less risky to deploy
– separate databases for separate migrations
– enabler to have many small teams
● each team is in charge of some of them
● QA and OPS can be embedded in the team
● CX teams can be built around this!
What are microservices?
@bbossola
● Cons!
– Lots of them!
– Every microservice is doing one thing, so a lot
of collaboration is required to perform a task
– Scaling may require considerable effort
– Frequent duplicated configuration
– Proxying for external apps is not easy
– management overhead (more moving parts)
What are microservices?
@bbossola
In the meantime, at Workshare...
What are microservices?
@bbossola
Demo!
ROME 18-19 MARCH
2016
All pictures belong
to their respective authors
➢ simple WS services (time and location)
➢ complex WS services (groups and folders)
➢ a nodejs live sample that shows some
simple microservices speaking to each
other, part one (code available at
https://github.com/bbossola/microjs )
@bbossola
● Why microservices?
● What are microservices?
● Common antipatterns
● How do we work with microservices?
@bbossola
● Disneyworld
● Monolith Database
● Unknown Caller
● Hardcoded Hell
● Synchronous World
● Babel Tower
● Monolith Frontend
● Early Mornings
● Crapper
Common antipatterns
Stay tuned go get more!
bbossola.wordpress.com
@bbossola
● we are small, everything is nice, cosy and lovely
– no healthchecks
– no metrics
– no monitoring
● Solution
– adopt a stack that implements these basic functionalities
– adopt (and connect!) one (or two) monitoring systems
– use a circuit breaker!
Antipatterns - Disneyworld
@bbossola
● your microservices uses a shared database
– all your services are coupled
– migration hell awaits you
– cannot be released indipendently
● Solution
– each server has his own database
– services talking trough API
● do you really believe that mysql wire protocol is faster
than sockets?
Antipatterns - Monolith Database
@bbossola
● there's no identification in your comms:
– a call does not contain any identification
– nobody knows who called
– diagnosing a malfunction become an
endless marathon
● Solution
– each server must inject a call id if missing
– each server must propagate the call id if present
– each server should log each call (with the id please!)
–
Antipatterns – Unkown Caller
@bbossola
● address of services are hardcoded
– microservices directly know about each other
– only light indirection mechanisms are supported
● configuration
● DNS or naming trickery
● Solution
– build your own simple discovery
mechanism
– introduce a discovery mechanism
● eureka, zookeper, consul, and why not, msnos
Antipatterns - Harcoded Hell
@bbossola
● every call in your systems is synchronous
– microservices wait for the final result
– every call can potentially hang forever
– one bad apple and your harvest is gone!
● Solution
– respond 201 and location as much
as you can
– put queues on top of your receivers
– implement asynchronicity from
the start
Antipatterns - Synchronous World
@bbossola
● using all sort of different lingos to talk
– someone uses REST
– someone uses SOAP
– someone uses RMIP
– someone uses IIOP
● Solution
– standardize protocols
● one sync protocol (i.e. REST over http)
● one async protocol (i.e. pub/sub on Redis)
Antipatterns – Babel Tower
@bbossola
● you have a big fat frontend:
– you have a single page application
– you have to deploy it in full for any upgrade
– you are using vertical "feature" teams
● Solution
– split the app in small independent pieces
– make sure those are deployable independently
– assign the entire frontend to a
separate team
–
Antipatterns – Monolith Frontend
@bbossola
● You have a scheduled deploy rhythm and...
– you deploy services in the early morning (6am?)
– you wan to to avoid any disturbance to the world
– you have a wiki page that lists all the new services
● Solution
– implement continuous deployment
– introduce necessary scaling in your
microservices
– onboard devops help to normalize
everything
Antipatterns – Early Mornings
@bbossola@bbossola
● “Our monolith code is crap, let's write microservices!”
– your decided to move to microservices
– your code is still crap
– your microservices are difficult to change
● Solution
– DO NOT discount proper design in
your code
– LOD, S.O.L.I.D., SOC, DRY, YAGNI
must have a central place in your
code
Antipatterns – Crapper
@bbossola
Demo!
ROME 18-19 MARCH
2016
All pictures belong
to their respective authors
➢ let's kick some antipatterns!
➢ a nodejs live sample that shows some
simple microservices speaking to each
other (code available at
https://github.com/bbossola/microjs)
@bbossola@bbossola
● Why microservices?
● What are microservices?
● Common antipatterns
● How do we work with microservices?
@bbossola
How do we work with microservices?
●
How did we get there?
– Replacing the monolith!
●
by executive decision
●
legacy code progressively replaced
with microservices
●
each new feature can now drive
a new microservice
– Moving to continuous delivery!
●
the business need to experiment, quickly!
●
we moved in small steps: from month, to weeks, to
days, to anytime!
@bbossola
How do we work with microservices?
●
Teams!
– each team owns some microservices
●
development and QA
●
deployment procedures
●
maintenance
– each team is cross-functional
●
QA, DEV, DEVOPS
●
also Design in the future
– we follow the
Spotify Model
@bbossola
How do we work with microservices?
●
What about client applications?
– the frontends must be modular
●
each team controls a vertical “slice” of the system
●
allows independent deployments :)
– edge microservices are useful!
●
they aggregate calls
●
they minimize roundtrips
●
they optimize content
– a proxy layer is always needed!
●
not all APIs are public
●
signing may be used internally
@bbossola
How do we work with microservices?
●
Some numbers!
– 9 different products (web, mobile, desktop, server)
– 40+ microservices
– 28k unit tests (run in minutes)
– 3k end-to-end integration tests (run in 3 hours)
– up to 200 RPS on the busiest microservice
– up to 0.000001 RPS on the least used :)
– fastest response in 2 ms
– slowest response in 12 seconds (!)
@bbossola
Conclusions?
●
Have it your way!
@bbossola
Thanks!
ROME 18-19 MARCH
2016
bbossola@gmail.com
@bbossola
https://bbossola.wordpress.com
https://github.com/bbossola
All pictures belong
to their respective authors
Why consider NodeJS?
●
It's faaaaaaaaaast
– marvellous V8 engine, compiles JS in native code
– non blocking I/O all over the place
●
Has a small footprint
– uses a tiny amount of CPU and memory compared to
traditional solutions
– can scale very easily trough clustering
●
It's easy
– Ecma6 is well, kind of Java :)
– it's single threaded: no concurrency at all!
– frontend developers can write backebd code (after training :)
@bbossola
Why consider NodeJS?
@bbossola
● keeps working under incredibly hard conditions!
...yep, it kept pumping!

More Related Content

What's hot

React web development
React web developmentReact web development
React web development
Rully Ramanda
 
OSDC 2015: Kris Buytaert | From ConfigManagementSucks to ConfigManagementLove
OSDC 2015: Kris Buytaert | From ConfigManagementSucks to ConfigManagementLoveOSDC 2015: Kris Buytaert | From ConfigManagementSucks to ConfigManagementLove
OSDC 2015: Kris Buytaert | From ConfigManagementSucks to ConfigManagementLove
NETWAYS
 
Java User Groups in Austria (2013)
Java User Groups in Austria (2013)Java User Groups in Austria (2013)
Java User Groups in Austria (2013)
Peter Kofler
 
Pair Programming (2015)
Pair Programming (2015)Pair Programming (2015)
Pair Programming (2015)
Peter Kofler
 
Kotlin vs Java • Bapusaheb Patil • TechieAid Talk
Kotlin vs Java • Bapusaheb Patil • TechieAid TalkKotlin vs Java • Bapusaheb Patil • TechieAid Talk
Kotlin vs Java • Bapusaheb Patil • TechieAid Talk
Bapusaheb Patil
 
Letter to a Junior Developer: The Engineering Side of Programming
Letter to a Junior Developer: The Engineering Side of ProgrammingLetter to a Junior Developer: The Engineering Side of Programming
Letter to a Junior Developer: The Engineering Side of Programming
Lazar Kovacevic
 
Joomlaplatform en
Joomlaplatform enJoomlaplatform en
Joomlaplatform en
Robert Deutz
 
The Professional Programmer
The Professional ProgrammerThe Professional Programmer
The Professional Programmer
Dave Cross
 
A sip of elixir
A sip of elixirA sip of elixir
A sip of elixir
Uttam Kini
 
Porting 100k Lines of Code to TypeScript
Porting 100k Lines of Code to TypeScriptPorting 100k Lines of Code to TypeScript
Porting 100k Lines of Code to TypeScript
Tiny
 
Jak aspekty uporządkują twój kod.
Jak aspekty uporządkują twój kod.Jak aspekty uporządkują twój kod.
Jak aspekty uporządkują twój kod.
Future Processing
 
Merged Automation Talk - Pete Carapetyan - Feb 2016
Merged Automation Talk - Pete Carapetyan - Feb 2016 Merged Automation Talk - Pete Carapetyan - Feb 2016
Merged Automation Talk - Pete Carapetyan - Feb 2016
petecarapetyan
 
How aspects clean your code
How aspects clean your codeHow aspects clean your code
How aspects clean your code
Barbara Fusinska
 
Python Django Intro V0.1
Python Django Intro V0.1Python Django Intro V0.1
Python Django Intro V0.1
Udi Bauman
 
Developer Job in Practice
Developer Job in PracticeDeveloper Job in Practice
Developer Job in Practice
intive
 
Swift for back end: A new generation of full stack languages?
Swift for back end: A new generation of full stack languages?Swift for back end: A new generation of full stack languages?
Swift for back end: A new generation of full stack languages?
Koombea
 
The working architecture of node js applications open tech week javascript ...
The working architecture of node js applications   open tech week javascript ...The working architecture of node js applications   open tech week javascript ...
The working architecture of node js applications open tech week javascript ...
Viktor Turskyi
 
TypeScript Overview
TypeScript OverviewTypeScript Overview
TypeScript Overview
Aniruddha Chakrabarti
 
Adopting language server for apache camel feedback from a java/Eclipse plugi...
Adopting language server for apache camel  feedback from a java/Eclipse plugi...Adopting language server for apache camel  feedback from a java/Eclipse plugi...
Adopting language server for apache camel feedback from a java/Eclipse plugi...
Aurélien Pupier
 
Kotlin & arrow: the functional way
Kotlin & arrow:  the functional wayKotlin & arrow:  the functional way
Kotlin & arrow: the functional way
nluaces
 

What's hot (20)

React web development
React web developmentReact web development
React web development
 
OSDC 2015: Kris Buytaert | From ConfigManagementSucks to ConfigManagementLove
OSDC 2015: Kris Buytaert | From ConfigManagementSucks to ConfigManagementLoveOSDC 2015: Kris Buytaert | From ConfigManagementSucks to ConfigManagementLove
OSDC 2015: Kris Buytaert | From ConfigManagementSucks to ConfigManagementLove
 
Java User Groups in Austria (2013)
Java User Groups in Austria (2013)Java User Groups in Austria (2013)
Java User Groups in Austria (2013)
 
Pair Programming (2015)
Pair Programming (2015)Pair Programming (2015)
Pair Programming (2015)
 
Kotlin vs Java • Bapusaheb Patil • TechieAid Talk
Kotlin vs Java • Bapusaheb Patil • TechieAid TalkKotlin vs Java • Bapusaheb Patil • TechieAid Talk
Kotlin vs Java • Bapusaheb Patil • TechieAid Talk
 
Letter to a Junior Developer: The Engineering Side of Programming
Letter to a Junior Developer: The Engineering Side of ProgrammingLetter to a Junior Developer: The Engineering Side of Programming
Letter to a Junior Developer: The Engineering Side of Programming
 
Joomlaplatform en
Joomlaplatform enJoomlaplatform en
Joomlaplatform en
 
The Professional Programmer
The Professional ProgrammerThe Professional Programmer
The Professional Programmer
 
A sip of elixir
A sip of elixirA sip of elixir
A sip of elixir
 
Porting 100k Lines of Code to TypeScript
Porting 100k Lines of Code to TypeScriptPorting 100k Lines of Code to TypeScript
Porting 100k Lines of Code to TypeScript
 
Jak aspekty uporządkują twój kod.
Jak aspekty uporządkują twój kod.Jak aspekty uporządkują twój kod.
Jak aspekty uporządkują twój kod.
 
Merged Automation Talk - Pete Carapetyan - Feb 2016
Merged Automation Talk - Pete Carapetyan - Feb 2016 Merged Automation Talk - Pete Carapetyan - Feb 2016
Merged Automation Talk - Pete Carapetyan - Feb 2016
 
How aspects clean your code
How aspects clean your codeHow aspects clean your code
How aspects clean your code
 
Python Django Intro V0.1
Python Django Intro V0.1Python Django Intro V0.1
Python Django Intro V0.1
 
Developer Job in Practice
Developer Job in PracticeDeveloper Job in Practice
Developer Job in Practice
 
Swift for back end: A new generation of full stack languages?
Swift for back end: A new generation of full stack languages?Swift for back end: A new generation of full stack languages?
Swift for back end: A new generation of full stack languages?
 
The working architecture of node js applications open tech week javascript ...
The working architecture of node js applications   open tech week javascript ...The working architecture of node js applications   open tech week javascript ...
The working architecture of node js applications open tech week javascript ...
 
TypeScript Overview
TypeScript OverviewTypeScript Overview
TypeScript Overview
 
Adopting language server for apache camel feedback from a java/Eclipse plugi...
Adopting language server for apache camel  feedback from a java/Eclipse plugi...Adopting language server for apache camel  feedback from a java/Eclipse plugi...
Adopting language server for apache camel feedback from a java/Eclipse plugi...
 
Kotlin & arrow: the functional way
Kotlin & arrow:  the functional wayKotlin & arrow:  the functional way
Kotlin & arrow: the functional way
 

Similar to Microservices, the lean way

What drives Innovation? Innovations And Technological Solutions for the Distr...
What drives Innovation? Innovations And Technological Solutions for the Distr...What drives Innovation? Innovations And Technological Solutions for the Distr...
What drives Innovation? Innovations And Technological Solutions for the Distr...
Stefano Fago
 
Path Dependent Development (PyCon AU)
Path Dependent Development (PyCon AU)Path Dependent Development (PyCon AU)
Path Dependent Development (PyCon AU)
ncoghlan_dev
 
Path dependent-development (PyCon India)
Path dependent-development (PyCon India)Path dependent-development (PyCon India)
Path dependent-development (PyCon India)
ncoghlan_dev
 
Software Engineering Advice from Google's Jeff Dean for Big, Distributed Systems
Software Engineering Advice from Google's Jeff Dean for Big, Distributed SystemsSoftware Engineering Advice from Google's Jeff Dean for Big, Distributed Systems
Software Engineering Advice from Google's Jeff Dean for Big, Distributed Systems
adrianionel
 
Are you using an opensource library? There's a good chance you are vulnerable...
Are you using an opensource library? There's a good chance you are vulnerable...Are you using an opensource library? There's a good chance you are vulnerable...
Are you using an opensource library? There's a good chance you are vulnerable...
Codemotion
 
Are you using an open source library? - Bruno Bossola - Codemotion Rome 2018
Are you using an open source library? - Bruno Bossola - Codemotion Rome 2018Are you using an open source library? - Bruno Bossola - Codemotion Rome 2018
Are you using an open source library? - Bruno Bossola - Codemotion Rome 2018
Codemotion
 
Not my problem - Delegating responsibility to infrastructure
Not my problem - Delegating responsibility to infrastructureNot my problem - Delegating responsibility to infrastructure
Not my problem - Delegating responsibility to infrastructure
Yshay Yaacobi
 
Trunk Based Development in the Enterprise - Its Relevance and Economics
Trunk Based Development in the Enterprise - Its Relevance and EconomicsTrunk Based Development in the Enterprise - Its Relevance and Economics
Trunk Based Development in the Enterprise - Its Relevance and Economics
Perforce
 
Drupal and Devops , the Survey Results
Drupal and Devops , the Survey ResultsDrupal and Devops , the Survey Results
Drupal and Devops , the Survey Results
Kris Buytaert
 
Scalable, good, cheap
Scalable, good, cheapScalable, good, cheap
Scalable, good, cheap
Marc Cluet
 
Services, tools & practices for a software house
Services, tools & practices for a software houseServices, tools & practices for a software house
Services, tools & practices for a software house
Paris Apostolopoulos
 
QCon'17 talk: CI/CD at scale - lessons from LinkedIn and Mockito
QCon'17 talk: CI/CD at scale - lessons from LinkedIn and MockitoQCon'17 talk: CI/CD at scale - lessons from LinkedIn and Mockito
QCon'17 talk: CI/CD at scale - lessons from LinkedIn and Mockito
Szczepan Faber
 
SACon 2019 - Surviving in a Microservices Environment
SACon 2019 - Surviving in a Microservices EnvironmentSACon 2019 - Surviving in a Microservices Environment
SACon 2019 - Surviving in a Microservices Environment
Steve Pember
 
From open source labs to ceo methods and advice by sysfera
From open source labs to ceo methods and advice by sysferaFrom open source labs to ceo methods and advice by sysfera
From open source labs to ceo methods and advice by sysfera
fOSSa - Free Open Source Software Academia Conference
 
Effective entrepreneurship for developers
Effective entrepreneurship for developersEffective entrepreneurship for developers
Effective entrepreneurship for developers
Carlos Ble
 
Development Environment Tips
Development Environment TipsDevelopment Environment Tips
Development Environment Tips
Adam Culp
 
From prototype to production - The journey of re-designing SmartUp.io
From prototype to production - The journey of re-designing SmartUp.ioFrom prototype to production - The journey of re-designing SmartUp.io
From prototype to production - The journey of re-designing SmartUp.io
Máté Lang
 
Cloud accounting software uk
Cloud accounting software ukCloud accounting software uk
Cloud accounting software uk
Arcus Universe Ltd
 
Introducing systems analysis, design & development Concepts
Introducing systems analysis, design & development ConceptsIntroducing systems analysis, design & development Concepts
Introducing systems analysis, design & development Concepts
Shafiul Azam Chowdhury
 
Building a SaaS App: From Paper to Prototype to Product.
Building a SaaS App: From Paper to Prototype to Product.Building a SaaS App: From Paper to Prototype to Product.
Building a SaaS App: From Paper to Prototype to Product.
Josh Rodriguez
 

Similar to Microservices, the lean way (20)

What drives Innovation? Innovations And Technological Solutions for the Distr...
What drives Innovation? Innovations And Technological Solutions for the Distr...What drives Innovation? Innovations And Technological Solutions for the Distr...
What drives Innovation? Innovations And Technological Solutions for the Distr...
 
Path Dependent Development (PyCon AU)
Path Dependent Development (PyCon AU)Path Dependent Development (PyCon AU)
Path Dependent Development (PyCon AU)
 
Path dependent-development (PyCon India)
Path dependent-development (PyCon India)Path dependent-development (PyCon India)
Path dependent-development (PyCon India)
 
Software Engineering Advice from Google's Jeff Dean for Big, Distributed Systems
Software Engineering Advice from Google's Jeff Dean for Big, Distributed SystemsSoftware Engineering Advice from Google's Jeff Dean for Big, Distributed Systems
Software Engineering Advice from Google's Jeff Dean for Big, Distributed Systems
 
Are you using an opensource library? There's a good chance you are vulnerable...
Are you using an opensource library? There's a good chance you are vulnerable...Are you using an opensource library? There's a good chance you are vulnerable...
Are you using an opensource library? There's a good chance you are vulnerable...
 
Are you using an open source library? - Bruno Bossola - Codemotion Rome 2018
Are you using an open source library? - Bruno Bossola - Codemotion Rome 2018Are you using an open source library? - Bruno Bossola - Codemotion Rome 2018
Are you using an open source library? - Bruno Bossola - Codemotion Rome 2018
 
Not my problem - Delegating responsibility to infrastructure
Not my problem - Delegating responsibility to infrastructureNot my problem - Delegating responsibility to infrastructure
Not my problem - Delegating responsibility to infrastructure
 
Trunk Based Development in the Enterprise - Its Relevance and Economics
Trunk Based Development in the Enterprise - Its Relevance and EconomicsTrunk Based Development in the Enterprise - Its Relevance and Economics
Trunk Based Development in the Enterprise - Its Relevance and Economics
 
Drupal and Devops , the Survey Results
Drupal and Devops , the Survey ResultsDrupal and Devops , the Survey Results
Drupal and Devops , the Survey Results
 
Scalable, good, cheap
Scalable, good, cheapScalable, good, cheap
Scalable, good, cheap
 
Services, tools & practices for a software house
Services, tools & practices for a software houseServices, tools & practices for a software house
Services, tools & practices for a software house
 
QCon'17 talk: CI/CD at scale - lessons from LinkedIn and Mockito
QCon'17 talk: CI/CD at scale - lessons from LinkedIn and MockitoQCon'17 talk: CI/CD at scale - lessons from LinkedIn and Mockito
QCon'17 talk: CI/CD at scale - lessons from LinkedIn and Mockito
 
SACon 2019 - Surviving in a Microservices Environment
SACon 2019 - Surviving in a Microservices EnvironmentSACon 2019 - Surviving in a Microservices Environment
SACon 2019 - Surviving in a Microservices Environment
 
From open source labs to ceo methods and advice by sysfera
From open source labs to ceo methods and advice by sysferaFrom open source labs to ceo methods and advice by sysfera
From open source labs to ceo methods and advice by sysfera
 
Effective entrepreneurship for developers
Effective entrepreneurship for developersEffective entrepreneurship for developers
Effective entrepreneurship for developers
 
Development Environment Tips
Development Environment TipsDevelopment Environment Tips
Development Environment Tips
 
From prototype to production - The journey of re-designing SmartUp.io
From prototype to production - The journey of re-designing SmartUp.ioFrom prototype to production - The journey of re-designing SmartUp.io
From prototype to production - The journey of re-designing SmartUp.io
 
Cloud accounting software uk
Cloud accounting software ukCloud accounting software uk
Cloud accounting software uk
 
Introducing systems analysis, design & development Concepts
Introducing systems analysis, design & development ConceptsIntroducing systems analysis, design & development Concepts
Introducing systems analysis, design & development Concepts
 
Building a SaaS App: From Paper to Prototype to Product.
Building a SaaS App: From Paper to Prototype to Product.Building a SaaS App: From Paper to Prototype to Product.
Building a SaaS App: From Paper to Prototype to Product.
 

Recently uploaded

UI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design SystemUI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design System
Peter Muessig
 
14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision
ShulagnaSarkar2
 
The Rising Future of CPaaS in the Middle East 2024
The Rising Future of CPaaS in the Middle East 2024The Rising Future of CPaaS in the Middle East 2024
The Rising Future of CPaaS in the Middle East 2024
Yara Milbes
 
Malibou Pitch Deck For Its €3M Seed Round
Malibou Pitch Deck For Its €3M Seed RoundMalibou Pitch Deck For Its €3M Seed Round
Malibou Pitch Deck For Its €3M Seed Round
sjcobrien
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
Remote DBA Services
 
Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...
Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...
Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...
The Third Creative Media
 
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
Bert Jan Schrijver
 
Enhanced Screen Flows UI/UX using SLDS with Tom Kitt
Enhanced Screen Flows UI/UX using SLDS with Tom KittEnhanced Screen Flows UI/UX using SLDS with Tom Kitt
Enhanced Screen Flows UI/UX using SLDS with Tom Kitt
Peter Caitens
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
Grant Fritchey
 
What’s New in Odoo 17 – A Complete Roadmap
What’s New in Odoo 17 – A Complete RoadmapWhat’s New in Odoo 17 – A Complete Roadmap
What’s New in Odoo 17 – A Complete Roadmap
Envertis Software Solutions
 
Modelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - AmsterdamModelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - Amsterdam
Alberto Brandolini
 
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsUI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
Peter Muessig
 
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...
kalichargn70th171
 
Transforming Product Development using OnePlan To Boost Efficiency and Innova...
Transforming Product Development using OnePlan To Boost Efficiency and Innova...Transforming Product Development using OnePlan To Boost Efficiency and Innova...
Transforming Product Development using OnePlan To Boost Efficiency and Innova...
OnePlan Solutions
 
Operational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptx
Operational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptxOperational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptx
Operational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptx
sandeepmenon62
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
Drona Infotech
 
What is Continuous Testing in DevOps - A Definitive Guide.pdf
What is Continuous Testing in DevOps - A Definitive Guide.pdfWhat is Continuous Testing in DevOps - A Definitive Guide.pdf
What is Continuous Testing in DevOps - A Definitive Guide.pdf
kalichargn70th171
 
Boost Your Savings with These Money Management Apps
Boost Your Savings with These Money Management AppsBoost Your Savings with These Money Management Apps
Boost Your Savings with These Money Management Apps
Jhone kinadey
 
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
dakas1
 
Baha Majid WCA4Z IBM Z Customer Council Boston June 2024.pdf
Baha Majid WCA4Z IBM Z Customer Council Boston June 2024.pdfBaha Majid WCA4Z IBM Z Customer Council Boston June 2024.pdf
Baha Majid WCA4Z IBM Z Customer Council Boston June 2024.pdf
Baha Majid
 

Recently uploaded (20)

UI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design SystemUI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design System
 
14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision
 
The Rising Future of CPaaS in the Middle East 2024
The Rising Future of CPaaS in the Middle East 2024The Rising Future of CPaaS in the Middle East 2024
The Rising Future of CPaaS in the Middle East 2024
 
Malibou Pitch Deck For Its €3M Seed Round
Malibou Pitch Deck For Its €3M Seed RoundMalibou Pitch Deck For Its €3M Seed Round
Malibou Pitch Deck For Its €3M Seed Round
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
 
Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...
Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...
Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...
 
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
 
Enhanced Screen Flows UI/UX using SLDS with Tom Kitt
Enhanced Screen Flows UI/UX using SLDS with Tom KittEnhanced Screen Flows UI/UX using SLDS with Tom Kitt
Enhanced Screen Flows UI/UX using SLDS with Tom Kitt
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
 
What’s New in Odoo 17 – A Complete Roadmap
What’s New in Odoo 17 – A Complete RoadmapWhat’s New in Odoo 17 – A Complete Roadmap
What’s New in Odoo 17 – A Complete Roadmap
 
Modelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - AmsterdamModelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - Amsterdam
 
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsUI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
 
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...
 
Transforming Product Development using OnePlan To Boost Efficiency and Innova...
Transforming Product Development using OnePlan To Boost Efficiency and Innova...Transforming Product Development using OnePlan To Boost Efficiency and Innova...
Transforming Product Development using OnePlan To Boost Efficiency and Innova...
 
Operational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptx
Operational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptxOperational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptx
Operational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptx
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
 
What is Continuous Testing in DevOps - A Definitive Guide.pdf
What is Continuous Testing in DevOps - A Definitive Guide.pdfWhat is Continuous Testing in DevOps - A Definitive Guide.pdf
What is Continuous Testing in DevOps - A Definitive Guide.pdf
 
Boost Your Savings with These Money Management Apps
Boost Your Savings with These Money Management AppsBoost Your Savings with These Money Management Apps
Boost Your Savings with These Money Management Apps
 
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
 
Baha Majid WCA4Z IBM Z Customer Council Boston June 2024.pdf
Baha Majid WCA4Z IBM Z Customer Council Boston June 2024.pdfBaha Majid WCA4Z IBM Z Customer Council Boston June 2024.pdf
Baha Majid WCA4Z IBM Z Customer Council Boston June 2024.pdf
 

Microservices, the lean way

  • 1. Microservices, the lean way Bruno Bossola (JUG Torino) AMSTERDAM 11-12 MAY 2016
  • 2. ` Microservices, the lean way ...now with 100% more llamas! AMSTERDAM 11-12 MAY 2016
  • 3. l ● Developer since 1988 ● XP Coach 2000+ ● Co-founder and coordinator of JUG Torino ● Java Champion since 2005 ● VP of Engineering @Workshare.com ….and microservices addicted since 2013 Hey mate, who are you? @bbossola
  • 4. ● Why microservices? ● What are microservices? ● Demo ● Common antipatterns ● Demo ● How do we work with microservices? ● Conclusions? Agenda @bbossola
  • 5. ● Why microservices? ● What are microservices? ● Common antipatterns ● How do we work with microservices? Agenda @bbossola
  • 6. Why microservices? J2EE Ruby on Rails .NET Are you living with a monolith? @bbossola
  • 7. Why microservices? J2EE Ruby on Rails .NET ● your IDE is bloated Are you living with a monolith? @bbossola
  • 8. Why microservices? J2EE Ruby on Rails .NET ● your IDE is bloated ● you are locked onto a language Are you living with a monolith? @bbossola
  • 9. Why microservices? J2EE Ruby on Rails .NET ● your IDE is bloated ● you are locked onto a language ● your tests can take hours to run Are you living with a monolith? @bbossola
  • 10. Why microservices? J2EE Ruby on Rails .NET ● your IDE is bloated ● you are locked onto a language ● your tests can take hours to run ● your db migrations are HUGE and scary Are you living with a monolith? @bbossola
  • 11. Why microservices? J2EE Ruby on Rails .NET ● your IDE is bloated ● you are locked onto a language ● your tests can take hours to run ● your db migrations are HUGE and scary ● you always scale EVERYTHING Are you living with a monolith? @bbossola
  • 12. Why microservices? J2EE Ruby on Rails .NET ● your IDE is bloated ● you are locked onto a language ● your tests can take hours to run ● your db migrations are HUGE and scary ● you always scale EVERYTHING ● you have a single BIG team Are you living with a monolith? @bbossola
  • 13. Why microservices? J2EE Ruby on Rails .NET ● your IDE is bloated ● you are locked onto a language ● your tests can take hours to run ● your db migrations are HUGE and scary ● you always scale EVERYTHING ● you have a single BIG team ● you are generating HTML pages (no, well... really?) Are you living with a monolith? @bbossola
  • 14. ● Would not be better if... Why microservices? @bbossola
  • 15. ● Would not be better if... – you can use an IDE. Or not :) – you can choose your favourite programming language – your integration tests run in minutes – your db migrations are small and cosy – you scale independently – you have small teams, pizza size – you work on green field projects every time – you can choose cool technologies – you can fail Why microservices? @bbossola
  • 16. ● Would not be better if... – you can use an IDE. Or not :) – you can choose your favourite programming language – your integration tests run in minutes – your db migrations are small and cosy – you scale independently – you have small teams, pizza size – you work on green field projects every time – you can choose cool technologies – you can fail Why microservices? @bbossola
  • 17. ● Would not be better if... – you can use an IDE. Or not :) – you can choose your favourite programming language – your integration tests run in minutes – your db migrations are small and cosy – you scale independently – you have small teams, pizza size – you work on green field projects every time – you can choose cool technologies – you can fail Why microservices? @bbossola
  • 18. ● Would not be better if... – you can use an IDE. Or not :) – you can choose your favourite programming language – your integration tests run in minutes – your db migrations are small and cosy – you scale independently – you have small teams, pizza size – you work on green field projects every time – you can choose cool technologies – you can fail Why microservices? @bbossola
  • 19. ● Would not be better if... – you can use an IDE. Or not :) – you can choose your favourite programming language – your integration tests run in minutes – your db migrations are small and cosy – you scale independently – you have small teams, pizza size – you work on green field projects every time – you can choose cool technologies – you can fail Why microservices? @bbossola
  • 20. ● Would not be better if... – you can use an IDE. Or not :) – you can choose your favourite programming language – your integration tests run in minutes – your db migrations are small and cosy – you scale independently – you have small teams, pizza size – you work on green field projects every time – you can choose cool technologies – you can fail Why microservices? @bbossola
  • 21. ● Would not be better if... – you can use an IDE. Or not :) – you can choose your favourite programming language – your integration tests run in minutes – your db migrations are small and cosy – you scale independently – you have small teams, pizza size – you work on green field projects every time – you can choose cool technologies – you can fail Why microservices? @bbossola
  • 22. ● Would not be better if... – you can use an IDE. Or not :) – you can choose your favourite programming language – your integration tests run in minutes – your db migrations are small and cosy – you scale independently – you have small teams, pizza size – you work on green field projects every time – you can choose cool technologies – you can fail Why microservices? @bbossola
  • 23. ● Would not be better if... – you can use an IDE. Or not :) – you can choose your favourite programming language – your integration tests run in minutes – your db migrations are small and cosy – you scale independently – you have small teams, pizza size – you work on green field projects every time – you can choose cool technologies – you can fail Why microservices? @bbossola
  • 24. ● Why microservices? ● What are microservices? ● Common antipatterns ● How do we work with microservices? Agenda @bbossola
  • 25. ● independent (processes) communicating with each other using language-agnostic APIs ● small, highly decoupled and focus on doing a small task ● can be written in any programming language – we do use Ruby, C#. Java and Javascript ● micro means small, very! – we run 20 of them on one single machine ● deployed independently, run independently ● each use its own database ● each owned by a team What are microservices? @bbossola
  • 26. ● Pros! – highly cohesive, loosely coupled – clean api contracts and SOC – very easy to write and replace – self-contained, very easy to deploy – scaling can be very focused – small releases, less risky to deploy – separate databases for separate migrations – enabler to have many small teams ● each team is in charge of some of them ● QA and OPS can be embedded in the team ● CX teams can be built around this! What are microservices? @bbossola
  • 27. ● Cons! – Lots of them! – Every microservice is doing one thing, so a lot of collaboration is required to perform a task – Scaling may require considerable effort – Frequent duplicated configuration – Proxying for external apps is not easy – management overhead (more moving parts) What are microservices? @bbossola
  • 28. In the meantime, at Workshare... What are microservices? @bbossola
  • 29. Demo! ROME 18-19 MARCH 2016 All pictures belong to their respective authors ➢ simple WS services (time and location) ➢ complex WS services (groups and folders) ➢ a nodejs live sample that shows some simple microservices speaking to each other, part one (code available at https://github.com/bbossola/microjs ) @bbossola
  • 30. ● Why microservices? ● What are microservices? ● Common antipatterns ● How do we work with microservices? @bbossola
  • 31. ● Disneyworld ● Monolith Database ● Unknown Caller ● Hardcoded Hell ● Synchronous World ● Babel Tower ● Monolith Frontend ● Early Mornings ● Crapper Common antipatterns Stay tuned go get more! bbossola.wordpress.com @bbossola
  • 32. ● we are small, everything is nice, cosy and lovely – no healthchecks – no metrics – no monitoring ● Solution – adopt a stack that implements these basic functionalities – adopt (and connect!) one (or two) monitoring systems – use a circuit breaker! Antipatterns - Disneyworld @bbossola
  • 33. ● your microservices uses a shared database – all your services are coupled – migration hell awaits you – cannot be released indipendently ● Solution – each server has his own database – services talking trough API ● do you really believe that mysql wire protocol is faster than sockets? Antipatterns - Monolith Database @bbossola
  • 34. ● there's no identification in your comms: – a call does not contain any identification – nobody knows who called – diagnosing a malfunction become an endless marathon ● Solution – each server must inject a call id if missing – each server must propagate the call id if present – each server should log each call (with the id please!) – Antipatterns – Unkown Caller @bbossola
  • 35. ● address of services are hardcoded – microservices directly know about each other – only light indirection mechanisms are supported ● configuration ● DNS or naming trickery ● Solution – build your own simple discovery mechanism – introduce a discovery mechanism ● eureka, zookeper, consul, and why not, msnos Antipatterns - Harcoded Hell @bbossola
  • 36. ● every call in your systems is synchronous – microservices wait for the final result – every call can potentially hang forever – one bad apple and your harvest is gone! ● Solution – respond 201 and location as much as you can – put queues on top of your receivers – implement asynchronicity from the start Antipatterns - Synchronous World @bbossola
  • 37. ● using all sort of different lingos to talk – someone uses REST – someone uses SOAP – someone uses RMIP – someone uses IIOP ● Solution – standardize protocols ● one sync protocol (i.e. REST over http) ● one async protocol (i.e. pub/sub on Redis) Antipatterns – Babel Tower @bbossola
  • 38. ● you have a big fat frontend: – you have a single page application – you have to deploy it in full for any upgrade – you are using vertical "feature" teams ● Solution – split the app in small independent pieces – make sure those are deployable independently – assign the entire frontend to a separate team – Antipatterns – Monolith Frontend @bbossola
  • 39. ● You have a scheduled deploy rhythm and... – you deploy services in the early morning (6am?) – you wan to to avoid any disturbance to the world – you have a wiki page that lists all the new services ● Solution – implement continuous deployment – introduce necessary scaling in your microservices – onboard devops help to normalize everything Antipatterns – Early Mornings @bbossola@bbossola
  • 40. ● “Our monolith code is crap, let's write microservices!” – your decided to move to microservices – your code is still crap – your microservices are difficult to change ● Solution – DO NOT discount proper design in your code – LOD, S.O.L.I.D., SOC, DRY, YAGNI must have a central place in your code Antipatterns – Crapper @bbossola
  • 41. Demo! ROME 18-19 MARCH 2016 All pictures belong to their respective authors ➢ let's kick some antipatterns! ➢ a nodejs live sample that shows some simple microservices speaking to each other (code available at https://github.com/bbossola/microjs) @bbossola@bbossola
  • 42. ● Why microservices? ● What are microservices? ● Common antipatterns ● How do we work with microservices? @bbossola
  • 43. How do we work with microservices? ● How did we get there? – Replacing the monolith! ● by executive decision ● legacy code progressively replaced with microservices ● each new feature can now drive a new microservice – Moving to continuous delivery! ● the business need to experiment, quickly! ● we moved in small steps: from month, to weeks, to days, to anytime! @bbossola
  • 44. How do we work with microservices? ● Teams! – each team owns some microservices ● development and QA ● deployment procedures ● maintenance – each team is cross-functional ● QA, DEV, DEVOPS ● also Design in the future – we follow the Spotify Model @bbossola
  • 45. How do we work with microservices? ● What about client applications? – the frontends must be modular ● each team controls a vertical “slice” of the system ● allows independent deployments :) – edge microservices are useful! ● they aggregate calls ● they minimize roundtrips ● they optimize content – a proxy layer is always needed! ● not all APIs are public ● signing may be used internally @bbossola
  • 46. How do we work with microservices? ● Some numbers! – 9 different products (web, mobile, desktop, server) – 40+ microservices – 28k unit tests (run in minutes) – 3k end-to-end integration tests (run in 3 hours) – up to 200 RPS on the busiest microservice – up to 0.000001 RPS on the least used :) – fastest response in 2 ms – slowest response in 12 seconds (!) @bbossola
  • 49. Why consider NodeJS? ● It's faaaaaaaaaast – marvellous V8 engine, compiles JS in native code – non blocking I/O all over the place ● Has a small footprint – uses a tiny amount of CPU and memory compared to traditional solutions – can scale very easily trough clustering ● It's easy – Ecma6 is well, kind of Java :) – it's single threaded: no concurrency at all! – frontend developers can write backebd code (after training :) @bbossola
  • 50. Why consider NodeJS? @bbossola ● keeps working under incredibly hard conditions! ...yep, it kept pumping!