Eduards Sizovs - Micro Service Architecture
description
Transcript of Eduards Sizovs - Micro Service Architecture
![Page 1: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/1.jpg)
![Page 2: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/2.jpg)
Service Architectureµwww.craftsmans.lv
![Page 4: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/4.jpg)
Agenda
• Anatomy of a micro service• Micro service architecture by
example• The Good Parts of the solution• Tooling• Q&A
![Page 5: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/5.jpg)
Anatomy of a micro service
![Page 6: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/6.jpg)
Micro services are tiny apps talking via uniform interface
installed as well-behaved OS services.
![Page 7: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/7.jpg)
java –jar micro-service.jar config.yml
![Page 8: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/8.jpg)
![Page 9: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/9.jpg)
Traditional application vs. µ service based
![Page 10: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/10.jpg)
Micro service architecture by example
![Page 11: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/11.jpg)
Dropwizard
• Jetty
• Jersey
• Jackson
• Metrics
• Guava
• Joda Time
• Hibernate Validator
• LiquiBase
• YAML configuration
• Graceful shutdown
• Command-line API
Foundation for production ready micro services developed by
Dropwizard on InfoQ goo.gl/2RYALb
![Page 12: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/12.jpg)
Command-line API?
unrecognized argument '--tpye'Did you mean: --type
![Page 13: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/13.jpg)
Internal Loan Underwriting System
Requirement №1
Perform underwriting according to rules
specified in DSL and store decisions in
relational DB.
![Page 14: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/14.jpg)
“…according to rules specified in DSL
DSL hero is…
![Page 15: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/15.jpg)
RDB hero is…
“…and store decisions in Relational DB
![Page 16: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/16.jpg)
Underwriter
Relational DB
RESTful API / JSON
![Page 17: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/17.jpg)
Internal Loan Underwriting System
Requirement №2
Fancy back-office application that allows users to
perform underwriting and look over decisions.
Why separate micro service?
• Back-office is a regular client. Many still to come.
• Back-office is stateful
• Back-office is server-centric, no JavaScript
experience
• Independent coding, testing & deployment
![Page 18: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/18.jpg)
“…fancy back-office application
Fancy UI hero
is…
…because we’re close to
Finland
![Page 19: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/19.jpg)
Underwriter
Relational DB
Back-Office
![Page 20: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/20.jpg)
Internal Loan Underwriting System
Requirement №3
Collect credit history from various 3rd party
providers in parallel.
Why separate micro service?
• SRP!
• We have a team of Scala enthusiasts
• ... which never Bootstrapped apps from scratch
• Operations must self-heal in case of failure –
Akka
![Page 21: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/21.jpg)
Underwriter
Relational DB
Back-Office
Credit History Collector
![Page 22: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/22.jpg)
Internal Loan Underwriting System
Requirement №4
Project codename «CHNAPI» - API for our brand new
partner «Chuck Norris».
Why separate micro service?
• Public service must run in DMZ
• Huge number of requests – queuing is a must
• Underwriter is not ready to scale – other dev
priorities
• We don’t know what kind of architecture to apply
yet
![Page 23: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/23.jpg)
Underwriter & CHNAPI Gateway integration
• Push can cause overload• What if Underwriter is down?
Underwriter CHNAPIGateway?
HTTPUnderwriter CHNAPI
Gateway
• More elements in chain• How well does it scale?
JMSUnderwriter CHNAPIGateway
• CHNAPI exposes Feed• Underwriter polls CHNAPI
for updates
Underwriter CHNAPIGateway
HTTP Polling
WebSockets Web Hooks
![Page 24: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/24.jpg)
Underwriter CHNAPIGateway
HTTP Polling
CHNAPIGateway
CHNAPIGateway
Load Balance
r
Load Balancer
DMZ
CHNAPI Gateway
JSON feed, OData or custom-crafted
Any JSON storage, e.g. MongoDB
![Page 25: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/25.jpg)
CHNAPI Gateway
Underwriter
Relational DB
Back-Office
Credit History Collector
MongoDB
![Page 26: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/26.jpg)
Internal Loan Underwriting System
Requirement №5
Chuck Norris is interested in all underwriting
decisions. Project codename «CHNORR».
Why separate micro service?
• Daily reporting, during active working hours
• External API Client with a tail of transitive
dependencies
• Neightbor dev team would like to use CHNORR!
![Page 27: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/27.jpg)
Underwriter CHNORR
CHNORR
CHNORR
DMZ
CHNORR
Load Balancer
Events
Spring Batch
Any storage for keeping data in reporting-friendly format
HTTP
![Page 28: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/28.jpg)
CHNAPI Gateway
Underwriter
Relational DB
Back-Office
Credit History Collector
MongoDB
CHNORR
MongoDB
![Page 29: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/29.jpg)
The Good Parts of the solution
![Page 30: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/30.jpg)
Toolset unchained
• Architectural approaches
• Polyglot• Storages
• Frameworks
![Page 31: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/31.jpg)
Scalability
• HTTP stack• Independent
provisioning• Fine tuning
• Elasticity
![Page 32: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/32.jpg)
Independence
• Development• Testing
• Deployment
![Page 33: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/33.jpg)
How to deploy in a proper order?
Supply Dependency Descriptor
with each micro service. For example:
depend.yaml for foo-service
dependencies:group: com.microservicesartifact: bar-serviceversion: 2.x.x
-
![Page 34: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/34.jpg)
How to deploy in a proper order?
We can forbid deployment in the wrong
order by validating dependencies on
Pipeline2.0.0
Test Prodbar-service
1.0.0
foo-service
Test Prod
1.9.0
bar-service
1.0.0
foo-service
![Page 35: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/35.jpg)
How to develop?
Together with Dependency Descriptor
(DD), put Vagrant file with DD-fed
provisioner in a root source directory.
- depend.yaml
- Vagrantfileup
Launch app with test doubles in place of real dependencies
![Page 36: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/36.jpg)
How to test?
For every dependency create a test
double
App
Foo
Bar Qux
Production
HTTP App
Foo-TD
Bar-TD
Testing
HTTP
Never mock internals. Mock externals
instead.
![Page 37: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/37.jpg)
![Page 38: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/38.jpg)
Tooling
![Page 39: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/39.jpg)
Testing & Live Doc
• MOCO for test double creation
• REST-assured for testing REST APIs
• Cucumber for describing API usage with examples
• Relish for publishing Cucumbers online
![Page 40: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/40.jpg)
![Page 41: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/41.jpg)
![Page 42: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/42.jpg)
![Page 43: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/43.jpg)
A shipping container system for your apps
VM without an overhead of VM
Docker on InfoQ http://goo.gl/ALnjYt
Why Docker? Why Not Chef? goo.gl/iJ8Idl
![Page 44: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/44.jpg)
Learn more • Micro Services by James Lewis goo.gl/PS7BYK
• Micro Services by Fred George goo.gl/dgd8Ya
![Page 45: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/45.jpg)
http://goo.gl/khddl
![Page 46: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/46.jpg)
Conclusion
![Page 47: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/47.jpg)
The next morning, "we had this orgy of `one liners.' Everybody had a one liner. Look at this, look at that. ...Everybody started putting forth the UNIX philosophy. Write programs that do one thing and do it well. Write programs to work together. Write programs that handle text streams, because that is a universal interface." Those ideas which add up to the tool approach, were there in some unformed way before pipes, but they really came together afterwards. Pipes became the catalyst for this UNIX philosophy. "The tool thing has turned out to be actually successful. With pipes, many programs could work together, and they could work together at a distance."
The Unix Philosophy http://www.faqs.org/docs/artu/ch01s06.html
The next morning, "we had this orgy of `one liners.' Everybody had a one liner. Look at this, look at that. ...Everybody started putting forth the UNIX philosophy. Write programs that do one thing and do it well. Write programs to work together. Write programs that handle text streams, because that is a universal interface." Those ideas which add up to the tool approach, were there in some unformed way before pipes, but they really came together afterwards. Pipes became the catalyst for this UNIX philosophy. "The tool thing has turned out to be actually successful. With pipes, many programs could work together, and they could work together at a distance."
The next morning, "we had this orgy of `one liners.' Everybody had a one liner. Look at this, look at that. ...Everybody started putting forth the UNIX philosophy. Write programs that do one thing and do it well. Write programs to work together. Write programs that handle text streams, because that is a universal interface." Those ideas which add up to the tool approach, were there in some unformed way before pipes, but they really came together afterwards. Pipes became the catalyst for this UNIX philosophy. "The tool thing has turned out to be actually successful. With pipes, many programs could work together, and they could work together at a distance."
The next morning, "we had this orgy of `one liners.' Everybody had a one liner. Look at this, look at that. ...Everybody started putting forth the UNIX philosophy. Write programs that do one thing and do it well. Write programs to work together. Write programs that handle text streams, because that is a universal interface." Those ideas which add up to the tool approach, were there in some unformed way before pipes, but they really came together afterwards. Pipes became the catalyst for this UNIX philosophy. "The tool thing has turned out to be actually successful. With pipes, many programs could work together, and they could work together at a distance."
The next morning, "we had this orgy of `one liners.' Everybody had a one liner. Look at this, look at that. ...Everybody started putting forth the UNIX philosophy. Write programs that do one thing and do it well. Write programs to work together. Write programs that handle text streams, because that is a universal interface." Those ideas which add up to the tool approach, were there in some unformed way before pipes, but they really came together afterwards. Pipes became the catalyst for this UNIX philosophy. "The tool thing has turned out to be actually successful. With pipes, many programs could work together, and they could work together at a distance."
![Page 48: Eduards Sizovs - Micro Service Architecture](https://reader034.fdocuments.net/reader034/viewer/2022052619/5552a2e9b4c905e8128b539e/html5/thumbnails/48.jpg)
THANK YOU!