SlideShare a Scribd company logo
1 of 57
Download to read offline
Decomposing applications for
deployability and scalability
 Chris Richardson

 Author of POJOs in Action
 Founder of the original CloudFoundry.com

   @crichardson
 crichardson@vmware.com




                                            1
Presentation goal

     How decomposing
   applications improves
 deployability and scalability
             and
 How Cloud Foundry helps

                            2
About Chris




              3
(About Chris)




                4
About Chris()




                5
About Chris




              6
About Chris




   http://www.theregister.co.uk/2009/08/19/springsource_cloud_foundry/




                                                                         7
vmc push About-Chris

     Developer Advocate for
       CloudFoundry.com


Signup at http://cloudfoundry.com

    Promo code: Gluecon12
                                    8
Agenda
 The (sometimes evil) monolith
 Decomposing applications into services
 How do services communicate?
 Presentation layer design
 How Cloud Foundry helps




                                           9
Let’s imagine you are building an e-
       commerce application




                                       10
Traditional web application architecture
                         WAR


                                StoreFrontUI


                                 Accounting
                                  Service

                                                  MySQL
 Browser     Apache
                               InventoryService   Database


                                   Shipping
                                   Service


Simple to             Tomcat
   develop
   test
   deploy
   scale                                                 11
But there are problems




                         12
Users expect a rich, dynamic and
interactive experience on mobile
devices and desktop
                                                                   h
                                                                oug
                                                          d   en
                                                        oo
                                                    ’t g
                          HTTP Request
                                               e isn
                                           r
                                       ctu
                                                       Java Web
      Browser
                                     e
                                 hit
                           HTML/Javascript            Application
                               c
                          I ar
                ty le U
          s
      Old



      Real-time web ≅ NodeJS
                                                                       13
Obstacle to frequent deployments
 Need to redeploy everything to change one component
 Interrupts long running background (e.g. Quartz) jobs
 Increases risk of failure




                      Fear of change



 Updates will happen less often
 e.g. Makes A/B testing UI really difficult              14
Large application




             Slow IDE
Slow start times for web container

                                     15
Scaling development
      WAR


             StoreFrontUI


              Accounting
                                  Scalable
                               !=
            InventoryService      development
                Shipping




 Forces teams to synchronize development efforts
 Teams need to coordinate updates

                                                    16
Long-term commitment to a single technology stack
 Let’s suppose you go with the JVM
  • Some polyglot support
  • Many (but not all) JVM languages interoperate easily
  • e.g. Scala, Groovy modules within a Java application
  • But you can’t use non-JVM languages
 Application depends on a particular:
  • Framework - e.g. Spring or Java EE
  • Container - e.g. Tomcat
 Switching technology stack touches entire application
  • Painful
  • Rarely done




                                                           17
Agenda
 The (sometimes evil) monolith
 Decomposing applications into services
 How do services communicate?
 Presentation layer design
 How Cloud Foundry helps




                                           18
3 dimensions to scaling




Y axis -
functional
decomposition

Scale by




                                                                                      s
                                                                                    ng
splitting




                                                                            ila g
                                                                                  n

                                                                                 hi
                                                                      g s oni

                                                                               rt
different things




                                                                             iti
                                                                          rt

                                                                         im
                                                                        pa
                                                            ta

                                                                   in
                                                          da

                                                               ittl
                                                         s-

                                                               sp
                                                        i
                                                     ax

                                                              by
                                                     Z
                                                         ale
                   X axis - horizontal duplication
                                                         Sc



                   Scale by cloning
                                                                                          19
Y axis scaling - functional partitioning
 Splits monolithic application into a set of services
 Each service implements a set of related functionality
 Partitioning schemes:
  • Partition functionality by noun or by verb
  • Single Responsibility Principle
  • Unix utilities - do one focussed thing well




                                                           20
Y axis scaling - application level
                                         billing web application

                                                 Accounting
                                                  Service



       Store front web application      inventory web application


               Store Front                   InventoryService




                                       shipping web application

                                             ShippingService




Apply X axis cloning and/or Z axis partitioning to each service
                                                                    21
Real world examples


                 http://techblog.netflix.com/




                 Between 100-150 services are accessed to
                 build a page.
                 http://highscalability.com/amazon-architecture




                 http://www.addsimplicity.com/downloads/
                 eBaySDForum2006-11-29.pdf

                 http://queue.acm.org/detail.cfm?id=1394128

                                                                  22
There are drawbacks
 Complexity:
  • Architectural
  • Development
  • Deployment
  • Application management
 Deciding when to use it
  • In the beginning: you don’t need it and it will slow you down
  • When you do need it: refactoring existing code is painful

        See Steve Yegge’s Google
 Platforms Rant re Amazon.com


                                                                    23
But there are many benefits
 Scales development: focussed two pizza devops teams
 Deploy services independently
 Scale services independently
 Improves fault isolation
 Enforces well defined interfaces between components
 Eliminates long-term commitment to a single technology
 stack




 Modular, polyglot applications

                                                           24
Two levels of architecture
 System level
  • Defines the inter-service glue: interfaces and
   communication mechanisms
 • Slow changing


                          Versus

 Service level
  • Defines the internal architecture of each service
  • Far fewer constraints on technology
  • Each service could use a different technology stack
  • Rapid evolving


                                                          25
If services are small...
 Regularly rewrite using a better technology stack
 Pick the best developers rather than best <pick a
  language> developers polyglot culture
 Adapt system to changing requirements and better
  technology without a total rewrite




     Fred George
     “Developer Anarchy”

                                                      26
Moreover: you are not the same you ...
 Cell lifetimes:                             Can we build software
  • hours - some white blood cells             systems with these
                                                 characteristics?
  • days - stomach lining cells
  • years - bone cells                      Too much technical debt
  • lifetime - brain cells                       component death?
 50 to 70 billion of your cells die each day
 Yet you (the system) remains intact
                               http://dreamsongs.com/Files/
                               DesignBeyondHumanAbilitiesSimp.pdf




                               http://dreamsongs.com/Files/WhitherSoftware.pdf




                                                                           27
Agenda
 The (sometimes evil) monolith
 Decomposing applications into services
 How do services communicate?
 Presentation layer design
 How Cloud Foundry helps




                                           28
Inter-service communication options
 Multiple collaborating services   need a communication
  mechanism
 Many choices:
  • Synchronous asynchronous
  • Transports: HTTP, AMQP, ...
  • Formats: JSON, XML, Protocol Buffers, Thrift, ...
  • Even via the database
 Distributed application error handling strategies

    Asynchronous is preferred
    JSON is fashionable but binary
    format is more efficient
                                                           29
Asynchronous message-based communication
                                wgrus-billing.war

                                       Accounting
                                        Service



wgrus-store.war
                   RabbitMQ   wgrus-inventory.war
    StoreFrontUI   (Message
                                                       MySQL
                    Broker)              Widget
                                    InventoryService


                              wgrus-inventory.war


                                    InventoryService




                                                               30
Benefits and drawbacks
 Benefits
  • Decouples caller from server
  • Caller unaware of server’s coordinates (URL)
  • Message broker buffers message when server is down/slow
 Drawbacks
  • Additional complexity of message broker
  • RPC using messaging is more complex




                                                          31
Writing code that calls services




                                   32
Composable futures
 Problem:
  • Service A needs to call services B and C and then D
  • Makes sense to call B and C parallel
  • Yet most concurrency APIs are low-level, error-prone etc
 Solution:
  • Use Akka composable futures = really nice abstraction

    val futureB = callB()                                        Two calls execute in parallel
    val futureC = callC()

    val futureD = for {
      b <- futureB.mapTo[SomeType]
      c <- futureC.mapTo[SomeType]
      d <- callD(b, c)                                        And then invokes D
     } yield d

    val result = Await.result(futureD, 1 second).
                    asInstanceOf[SomeOtherType]

                                                                                   Get the result of D
      http://doc.akka.io/docs/akka/2.0.1/scala/futures.html
      http://en.wikipedia.org/wiki/Futures_and_promises
                                                                                                         33
Spring Integration

 Builds on Spring framework
 Implements EAI patterns = high-level of abstraction for
  building message based applications
 Provides the building blocks for a pipes and filters
  architecture
  • Pipes = message channels
  • Filters = endpoints that filter, transform, route messages and
    integrate with external messaging infrastructure

 Enables development of components that are
  • loosely coupled
  • insulated from underlying messaging infrastructure




                                                                     34
Handling failure
 Errors happen (especially in distributed systems)
 Use timeouts and retries
  • Never wait forever
  • Some errors are transient so retry
 Use per-dependency bounded thread pool with bounded queue
  • Limits number of outstanding requests
  • Fails fast if service is slow or down
 Use circuit breaker
  • High rate of errors       stop calling temporarily
  • Avoids calling service that has issues
 On failure
  • Returned cached or default data
  • Invoke custom error handler

                                http://techblog.netflix.com/2012/02/fault-tolerance-in-high-volume.html
                                                                                                 35
Agenda
 The (sometimes evil) monolith
 Decomposing applications into services
 How do services communicate?
 Presentation layer design
 How Cloud Foundry helps




                                           36
Modular application




Choice of presentation layer technology
                   +
 Redeploy UI frequently/independently


                                          37
NodeJS is the fashionable technology




Many JavaScript client frameworks have a NodeJS counterpart
e.g. socket.io

                                                              38
NodeJS isn’t the only game in town




    JVM-based          http://vertx.io/

                                          39
A modern web application


                                                   Service 1
                 RESTful WS       Node JS
Browser

    HTML 5                    Server Application
   Application                                     Service 2
                  Events
   Socket.io                      Socket.io
     client                        server

                                                      ...




                                                               40
NodeJS - using RESTful WS and AMQP

                       REST
                               Service
REST
Requests



            Node JS

 Events
           socket.io
                       AMQP              AMQP
                              RabbitMQ          Service




                                                          41
Updating the UI is easy
 Update the UI independently of rest of system
 Easily run A/B tests
 Enables fast iteration of the UI




           http://theleanstartup.com/principles
                                                  42
But coordination with backend changes required
 Let’s imagine that you are deploying an advanced search
  feature:
  • Enhancements to search service
  • Enhancements to UI
 Before
  • Deploy new war
 Now:
  • Some coordination required
  • Deploy updated backend service
  • Deploy updated NodeJS and browser code
  • Enable feature using feature switch




                                                            43
Agenda
 The (sometimes evil) monolith
 Decomposing applications into services
 How do services communicate?
 Presentation layer design
 How Cloud Foundry helps




                                           44
Traditional tools: monolithic applications




                                         45
Developing modular apps is more difficult
 Many more moving parts to manage
  • Platform services: SQL, NoSQL, RabbitMQ
  • Application services: your code
 Who is going to setup the environments:
  • the developer sandbox?
  • ...
  • QA environments?



     But Cloud Foundry
           helps...
                                              46
Easy polyglot application deployment
 and service provisioning
                                                                                   OSS community




 vFabric
Postgres
                               Ap
                                  p lica




               Data                                                              Private	
  
                                        'o




              Services                                                           Clouds	
  
                                       n	
  S
                                         erv
                                            ice
                                               	
  In




      vFabric
                                                     ter
                                                        fac




      RabbitMQTM           Msg                                          Public
                                                           e




                         Services                                       Clouds




                                                               Micro
                                         Other                 Clouds
                                        Services

             Additional partners
             services …
Creating a platform service instance
$ vmc create-service mysql --name mysql1
Creating Service: OK

$ vmc services
......

=========== Provisioned Services ============

+-------------+---------+
| Name        | Service |
+-------------+---------+
| mysql1      | mysql   |
+-------------+---------+
Multi-application manifest - part 1
 ---
 applications:
   inventory/target:            Path to application
     name: inventory
     url: cer-inventory.chrisr.cloudfoundry.me
     framework:
      name: spring
      info:
       mem: 512M
       description: Java SpringSource Spring Application
       exec:
     mem: 512M
     instances: 1
     services:
                                     Required platform services
      si-rabbit:
       type: :rabbitmq
      si-mongo:
       type: :mongodb
      si-redis:
       type: :redis
                                                                  49
Multi-application manifest - part 2
 store/target:                   Path to application
  name: store
  url: cer-store.chrisr.cloudfoundry.me
  framework:
   name: spring
   info:
    mem: 512M
    description: Java SpringSource Spring Application
    exec:
  mem: 512M
  instances: 1
  services:              Required platform services
   si-mongo:
    type: :mongodb
   si-rabbit:
    type: :rabbitmq
                                                        50
One command to create platform services and deploy
application
 $ vmc push
 Would you like to deploy from the current directory? [Yn]:
 Pushing application 'inventory'...
 Creating Application: OK
 Creating Service [si-rabbit]: OK
 Binding Service [si-rabbit]: OK
 Creating Service [si-mongo]: OK
 Binding Service [si-mongo]: OK
 Creating Service [si-redis]: OK
 Binding Service [si-redis]: OK
 Uploading Application:
  Checking for available resources: OK
  Processing resources: OK
  Packing application: OK                    vmc push:
  Uploading (12K): OK
 Push Status: OK                             •Reads the manifest file
 Staging Application 'inventory': OK
 Starting Application 'inventory': OK        •Creates the required platform services
 Pushing application 'store'...
 Creating Application: OK
                                             •Deploys all the applications
 Binding Service [si-mongo]: OK
 Binding Service [si-rabbit]: OK
 Uploading Application:
  Checking for available resources: OK
  Processing resources: OK
  Packing application: OK
  Uploading (5K): OK
 Push Status: OK
 Staging Application 'store': OK
                                                                                       51
 Starting Application 'store': ...
Micro Cloud Foundry: new developer sandbox


     App Instances                                Services




      Open source Platform as a Service project




                                                  10.04



     A PaaS packaged as a VMware Virtual Machine

                             Use as a developer sandbox
                            • Use the services from Junit integration tests
                            • Deploy your application for functional testing
                            • Remote debugging from STS
                                                                               52
Using Caldecott…
$ vmc tunnel
1: mysql-135e0
2: mysql1
Which service to tunnel to?: 2
Password: ********
Stopping Application: OK
Redeploying tunnel application 'caldecott'.
Uploading Application:
  Checking for available resources: OK
  Packing application: OK
  Uploading (1K): OK
Push Status: OK
Binding Service [mysql1]: OK
Staging Application: OK
Starting Application: OK
Getting tunnel connection info: OK

Service connection info:
  username : uMe6Apgw00AhS
  password : pKcD76PcZR7GZ
  name     : d7cb8afb52f084f3d9bdc269e7d99ab50

Starting tunnel to mysql1 on port 10000.
1: none
2: mysql
Which client would you like to start?: 2
…Using Caldecott
Launching 'mysql --protocol=TCP --host=localhost --port=10000 --
    user=uMe6Apgw00AhS --password=pKcD76PcZR7GZ
    d7cb8afb52f084f3d9bdc269e7d99ab50'

Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 10944342
Server version: 5.1.54-rel12.5 Percona Server with XtraDB (GPL),
    Release 12.5, Revision 188

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights
    reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or 'h' for help. Type 'c' to clear the current input
    statement.

mysql>
Running JUnit test with Caldecott


   Configure your test code to use port + connection info




                                                           55
Summary
 Monolithic applications are simple to develop and deploy

                 BUT applying the scale cube

 Decomposes your application into services
 Enables scaling for transactions and data volumes
 Tackles application complexity
 Enables scaling for development
 Enables frequent, independent deployments
 Make it easy to leverage other technologies

                             AND

 Cloud Foundry simplifies the development and deployment of
 modular, service-based applications
                                                             56
@crichardson crichardson@vmware.com




             Questions?
www.cloudfoundry.com promo code Gluecon12

More Related Content

Viewers also liked

Developing polyglot persistence applications (SpringOne India 2012)
Developing polyglot persistence applications (SpringOne India 2012)Developing polyglot persistence applications (SpringOne India 2012)
Developing polyglot persistence applications (SpringOne India 2012)Chris Richardson
 
Using Spring with NoSQL databases (SpringOne China 2012)
Using Spring with NoSQL databases (SpringOne China 2012)Using Spring with NoSQL databases (SpringOne China 2012)
Using Spring with NoSQL databases (SpringOne China 2012)Chris Richardson
 
Decomposing applications for scalability and deployability (devnexus 2013)
Decomposing applications for scalability and deployability (devnexus 2013)Decomposing applications for scalability and deployability (devnexus 2013)
Decomposing applications for scalability and deployability (devnexus 2013)Chris Richardson
 
Improving application design with a rich domain model (springone 2007)
Improving application design with a rich domain model (springone 2007)Improving application design with a rich domain model (springone 2007)
Improving application design with a rich domain model (springone 2007)Chris Richardson
 
Developing polyglot persistence applications (SpringOne China 2012)
Developing polyglot persistence applications (SpringOne China 2012)Developing polyglot persistence applications (SpringOne China 2012)
Developing polyglot persistence applications (SpringOne China 2012)Chris Richardson
 
Developing polyglot persistence applications (gluecon 2013)
Developing polyglot persistence applications (gluecon 2013)Developing polyglot persistence applications (gluecon 2013)
Developing polyglot persistence applications (gluecon 2013)Chris Richardson
 
NodeJS: the good parts? A skeptic’s view (jax jax2013)
NodeJS: the good parts? A skeptic’s view (jax jax2013)NodeJS: the good parts? A skeptic’s view (jax jax2013)
NodeJS: the good parts? A skeptic’s view (jax jax2013)Chris Richardson
 
Developing modular, polyglot applications with Spring (SpringOne India 2012)
Developing modular, polyglot applications with Spring (SpringOne India 2012)Developing modular, polyglot applications with Spring (SpringOne India 2012)
Developing modular, polyglot applications with Spring (SpringOne India 2012)Chris Richardson
 
Microservices pattern language (microxchg microxchg2016)
Microservices pattern language (microxchg microxchg2016)Microservices pattern language (microxchg microxchg2016)
Microservices pattern language (microxchg microxchg2016)Chris Richardson
 
Map, Flatmap and Reduce are Your New Best Friends: Simpler Collections, Concu...
Map, Flatmap and Reduce are Your New Best Friends: Simpler Collections, Concu...Map, Flatmap and Reduce are Your New Best Friends: Simpler Collections, Concu...
Map, Flatmap and Reduce are Your New Best Friends: Simpler Collections, Concu...Chris Richardson
 
Map(), flatmap() and reduce() are your new best friends: simpler collections,...
Map(), flatmap() and reduce() are your new best friends: simpler collections,...Map(), flatmap() and reduce() are your new best friends: simpler collections,...
Map(), flatmap() and reduce() are your new best friends: simpler collections,...Chris Richardson
 
#JaxLondon keynote: Developing applications with a microservice architecture
#JaxLondon keynote: Developing applications with a microservice architecture#JaxLondon keynote: Developing applications with a microservice architecture
#JaxLondon keynote: Developing applications with a microservice architectureChris Richardson
 
Decomposing applications for deployability and scalability #springone2gx #s12gx
Decomposing applications for deployability and scalability #springone2gx #s12gxDecomposing applications for deployability and scalability #springone2gx #s12gx
Decomposing applications for deployability and scalability #springone2gx #s12gxChris Richardson
 

Viewers also liked (13)

Developing polyglot persistence applications (SpringOne India 2012)
Developing polyglot persistence applications (SpringOne India 2012)Developing polyglot persistence applications (SpringOne India 2012)
Developing polyglot persistence applications (SpringOne India 2012)
 
Using Spring with NoSQL databases (SpringOne China 2012)
Using Spring with NoSQL databases (SpringOne China 2012)Using Spring with NoSQL databases (SpringOne China 2012)
Using Spring with NoSQL databases (SpringOne China 2012)
 
Decomposing applications for scalability and deployability (devnexus 2013)
Decomposing applications for scalability and deployability (devnexus 2013)Decomposing applications for scalability and deployability (devnexus 2013)
Decomposing applications for scalability and deployability (devnexus 2013)
 
Improving application design with a rich domain model (springone 2007)
Improving application design with a rich domain model (springone 2007)Improving application design with a rich domain model (springone 2007)
Improving application design with a rich domain model (springone 2007)
 
Developing polyglot persistence applications (SpringOne China 2012)
Developing polyglot persistence applications (SpringOne China 2012)Developing polyglot persistence applications (SpringOne China 2012)
Developing polyglot persistence applications (SpringOne China 2012)
 
Developing polyglot persistence applications (gluecon 2013)
Developing polyglot persistence applications (gluecon 2013)Developing polyglot persistence applications (gluecon 2013)
Developing polyglot persistence applications (gluecon 2013)
 
NodeJS: the good parts? A skeptic’s view (jax jax2013)
NodeJS: the good parts? A skeptic’s view (jax jax2013)NodeJS: the good parts? A skeptic’s view (jax jax2013)
NodeJS: the good parts? A skeptic’s view (jax jax2013)
 
Developing modular, polyglot applications with Spring (SpringOne India 2012)
Developing modular, polyglot applications with Spring (SpringOne India 2012)Developing modular, polyglot applications with Spring (SpringOne India 2012)
Developing modular, polyglot applications with Spring (SpringOne India 2012)
 
Microservices pattern language (microxchg microxchg2016)
Microservices pattern language (microxchg microxchg2016)Microservices pattern language (microxchg microxchg2016)
Microservices pattern language (microxchg microxchg2016)
 
Map, Flatmap and Reduce are Your New Best Friends: Simpler Collections, Concu...
Map, Flatmap and Reduce are Your New Best Friends: Simpler Collections, Concu...Map, Flatmap and Reduce are Your New Best Friends: Simpler Collections, Concu...
Map, Flatmap and Reduce are Your New Best Friends: Simpler Collections, Concu...
 
Map(), flatmap() and reduce() are your new best friends: simpler collections,...
Map(), flatmap() and reduce() are your new best friends: simpler collections,...Map(), flatmap() and reduce() are your new best friends: simpler collections,...
Map(), flatmap() and reduce() are your new best friends: simpler collections,...
 
#JaxLondon keynote: Developing applications with a microservice architecture
#JaxLondon keynote: Developing applications with a microservice architecture#JaxLondon keynote: Developing applications with a microservice architecture
#JaxLondon keynote: Developing applications with a microservice architecture
 
Decomposing applications for deployability and scalability #springone2gx #s12gx
Decomposing applications for deployability and scalability #springone2gx #s12gxDecomposing applications for deployability and scalability #springone2gx #s12gx
Decomposing applications for deployability and scalability #springone2gx #s12gx
 

More from Chris Richardson

The microservice architecture: what, why, when and how?
The microservice architecture: what, why, when and how?The microservice architecture: what, why, when and how?
The microservice architecture: what, why, when and how?Chris Richardson
 
More the merrier: a microservices anti-pattern
More the merrier: a microservices anti-patternMore the merrier: a microservices anti-pattern
More the merrier: a microservices anti-patternChris Richardson
 
YOW London - Considering Migrating a Monolith to Microservices? A Dark Energy...
YOW London - Considering Migrating a Monolith to Microservices? A Dark Energy...YOW London - Considering Migrating a Monolith to Microservices? A Dark Energy...
YOW London - Considering Migrating a Monolith to Microservices? A Dark Energy...Chris Richardson
 
Dark Energy, Dark Matter and the Microservices Patterns?!
Dark Energy, Dark Matter and the Microservices Patterns?!Dark Energy, Dark Matter and the Microservices Patterns?!
Dark Energy, Dark Matter and the Microservices Patterns?!Chris Richardson
 
Dark energy, dark matter and microservice architecture collaboration patterns
Dark energy, dark matter and microservice architecture collaboration patternsDark energy, dark matter and microservice architecture collaboration patterns
Dark energy, dark matter and microservice architecture collaboration patternsChris Richardson
 
Scenarios_and_Architecture_SkillsMatter_April_2022.pdf
Scenarios_and_Architecture_SkillsMatter_April_2022.pdfScenarios_and_Architecture_SkillsMatter_April_2022.pdf
Scenarios_and_Architecture_SkillsMatter_April_2022.pdfChris Richardson
 
Using patterns and pattern languages to make better architectural decisions
Using patterns and pattern languages to make better architectural decisions Using patterns and pattern languages to make better architectural decisions
Using patterns and pattern languages to make better architectural decisions Chris Richardson
 
iSAQB gathering 2021 keynote - Architectural patterns for rapid, reliable, fr...
iSAQB gathering 2021 keynote - Architectural patterns for rapid, reliable, fr...iSAQB gathering 2021 keynote - Architectural patterns for rapid, reliable, fr...
iSAQB gathering 2021 keynote - Architectural patterns for rapid, reliable, fr...Chris Richardson
 
Events to the rescue: solving distributed data problems in a microservice arc...
Events to the rescue: solving distributed data problems in a microservice arc...Events to the rescue: solving distributed data problems in a microservice arc...
Events to the rescue: solving distributed data problems in a microservice arc...Chris Richardson
 
A pattern language for microservices - June 2021
A pattern language for microservices - June 2021 A pattern language for microservices - June 2021
A pattern language for microservices - June 2021 Chris Richardson
 
QConPlus 2021: Minimizing Design Time Coupling in a Microservice Architecture
QConPlus 2021: Minimizing Design Time Coupling in a Microservice ArchitectureQConPlus 2021: Minimizing Design Time Coupling in a Microservice Architecture
QConPlus 2021: Minimizing Design Time Coupling in a Microservice ArchitectureChris Richardson
 
Mucon 2021 - Dark energy, dark matter: imperfect metaphors for designing micr...
Mucon 2021 - Dark energy, dark matter: imperfect metaphors for designing micr...Mucon 2021 - Dark energy, dark matter: imperfect metaphors for designing micr...
Mucon 2021 - Dark energy, dark matter: imperfect metaphors for designing micr...Chris Richardson
 
Designing loosely coupled services
Designing loosely coupled servicesDesigning loosely coupled services
Designing loosely coupled servicesChris Richardson
 
Microservices - an architecture that enables DevOps (T Systems DevOps day)
Microservices - an architecture that enables DevOps (T Systems DevOps day)Microservices - an architecture that enables DevOps (T Systems DevOps day)
Microservices - an architecture that enables DevOps (T Systems DevOps day)Chris Richardson
 
DDD SoCal: Decompose your monolith: Ten principles for refactoring a monolith...
DDD SoCal: Decompose your monolith: Ten principles for refactoring a monolith...DDD SoCal: Decompose your monolith: Ten principles for refactoring a monolith...
DDD SoCal: Decompose your monolith: Ten principles for refactoring a monolith...Chris Richardson
 
Decompose your monolith: Six principles for refactoring a monolith to microse...
Decompose your monolith: Six principles for refactoring a monolith to microse...Decompose your monolith: Six principles for refactoring a monolith to microse...
Decompose your monolith: Six principles for refactoring a monolith to microse...Chris Richardson
 
TDC2020 - The microservice architecture: enabling rapid, reliable, frequent a...
TDC2020 - The microservice architecture: enabling rapid, reliable, frequent a...TDC2020 - The microservice architecture: enabling rapid, reliable, frequent a...
TDC2020 - The microservice architecture: enabling rapid, reliable, frequent a...Chris Richardson
 
Overview of the Eventuate Tram Customers and Orders application
Overview of the Eventuate Tram Customers and Orders applicationOverview of the Eventuate Tram Customers and Orders application
Overview of the Eventuate Tram Customers and Orders applicationChris Richardson
 
An overview of the Eventuate Platform
An overview of the Eventuate PlatformAn overview of the Eventuate Platform
An overview of the Eventuate PlatformChris Richardson
 
#DevNexus202 Decompose your monolith
#DevNexus202 Decompose your monolith#DevNexus202 Decompose your monolith
#DevNexus202 Decompose your monolithChris Richardson
 

More from Chris Richardson (20)

The microservice architecture: what, why, when and how?
The microservice architecture: what, why, when and how?The microservice architecture: what, why, when and how?
The microservice architecture: what, why, when and how?
 
More the merrier: a microservices anti-pattern
More the merrier: a microservices anti-patternMore the merrier: a microservices anti-pattern
More the merrier: a microservices anti-pattern
 
YOW London - Considering Migrating a Monolith to Microservices? A Dark Energy...
YOW London - Considering Migrating a Monolith to Microservices? A Dark Energy...YOW London - Considering Migrating a Monolith to Microservices? A Dark Energy...
YOW London - Considering Migrating a Monolith to Microservices? A Dark Energy...
 
Dark Energy, Dark Matter and the Microservices Patterns?!
Dark Energy, Dark Matter and the Microservices Patterns?!Dark Energy, Dark Matter and the Microservices Patterns?!
Dark Energy, Dark Matter and the Microservices Patterns?!
 
Dark energy, dark matter and microservice architecture collaboration patterns
Dark energy, dark matter and microservice architecture collaboration patternsDark energy, dark matter and microservice architecture collaboration patterns
Dark energy, dark matter and microservice architecture collaboration patterns
 
Scenarios_and_Architecture_SkillsMatter_April_2022.pdf
Scenarios_and_Architecture_SkillsMatter_April_2022.pdfScenarios_and_Architecture_SkillsMatter_April_2022.pdf
Scenarios_and_Architecture_SkillsMatter_April_2022.pdf
 
Using patterns and pattern languages to make better architectural decisions
Using patterns and pattern languages to make better architectural decisions Using patterns and pattern languages to make better architectural decisions
Using patterns and pattern languages to make better architectural decisions
 
iSAQB gathering 2021 keynote - Architectural patterns for rapid, reliable, fr...
iSAQB gathering 2021 keynote - Architectural patterns for rapid, reliable, fr...iSAQB gathering 2021 keynote - Architectural patterns for rapid, reliable, fr...
iSAQB gathering 2021 keynote - Architectural patterns for rapid, reliable, fr...
 
Events to the rescue: solving distributed data problems in a microservice arc...
Events to the rescue: solving distributed data problems in a microservice arc...Events to the rescue: solving distributed data problems in a microservice arc...
Events to the rescue: solving distributed data problems in a microservice arc...
 
A pattern language for microservices - June 2021
A pattern language for microservices - June 2021 A pattern language for microservices - June 2021
A pattern language for microservices - June 2021
 
QConPlus 2021: Minimizing Design Time Coupling in a Microservice Architecture
QConPlus 2021: Minimizing Design Time Coupling in a Microservice ArchitectureQConPlus 2021: Minimizing Design Time Coupling in a Microservice Architecture
QConPlus 2021: Minimizing Design Time Coupling in a Microservice Architecture
 
Mucon 2021 - Dark energy, dark matter: imperfect metaphors for designing micr...
Mucon 2021 - Dark energy, dark matter: imperfect metaphors for designing micr...Mucon 2021 - Dark energy, dark matter: imperfect metaphors for designing micr...
Mucon 2021 - Dark energy, dark matter: imperfect metaphors for designing micr...
 
Designing loosely coupled services
Designing loosely coupled servicesDesigning loosely coupled services
Designing loosely coupled services
 
Microservices - an architecture that enables DevOps (T Systems DevOps day)
Microservices - an architecture that enables DevOps (T Systems DevOps day)Microservices - an architecture that enables DevOps (T Systems DevOps day)
Microservices - an architecture that enables DevOps (T Systems DevOps day)
 
DDD SoCal: Decompose your monolith: Ten principles for refactoring a monolith...
DDD SoCal: Decompose your monolith: Ten principles for refactoring a monolith...DDD SoCal: Decompose your monolith: Ten principles for refactoring a monolith...
DDD SoCal: Decompose your monolith: Ten principles for refactoring a monolith...
 
Decompose your monolith: Six principles for refactoring a monolith to microse...
Decompose your monolith: Six principles for refactoring a monolith to microse...Decompose your monolith: Six principles for refactoring a monolith to microse...
Decompose your monolith: Six principles for refactoring a monolith to microse...
 
TDC2020 - The microservice architecture: enabling rapid, reliable, frequent a...
TDC2020 - The microservice architecture: enabling rapid, reliable, frequent a...TDC2020 - The microservice architecture: enabling rapid, reliable, frequent a...
TDC2020 - The microservice architecture: enabling rapid, reliable, frequent a...
 
Overview of the Eventuate Tram Customers and Orders application
Overview of the Eventuate Tram Customers and Orders applicationOverview of the Eventuate Tram Customers and Orders application
Overview of the Eventuate Tram Customers and Orders application
 
An overview of the Eventuate Platform
An overview of the Eventuate PlatformAn overview of the Eventuate Platform
An overview of the Eventuate Platform
 
#DevNexus202 Decompose your monolith
#DevNexus202 Decompose your monolith#DevNexus202 Decompose your monolith
#DevNexus202 Decompose your monolith
 

Recently uploaded

How to release an Open Source Dataweave Library
How to release an Open Source Dataweave LibraryHow to release an Open Source Dataweave Library
How to release an Open Source Dataweave Libraryshyamraj55
 
UiPath Studio Web workshop series - Day 1
UiPath Studio Web workshop series  - Day 1UiPath Studio Web workshop series  - Day 1
UiPath Studio Web workshop series - Day 1DianaGray10
 
TrustArc Webinar - How to Live in a Post Third-Party Cookie World
TrustArc Webinar - How to Live in a Post Third-Party Cookie WorldTrustArc Webinar - How to Live in a Post Third-Party Cookie World
TrustArc Webinar - How to Live in a Post Third-Party Cookie WorldTrustArc
 
CyberSecurity - Computers In Libraries 2024
CyberSecurity - Computers In Libraries 2024CyberSecurity - Computers In Libraries 2024
CyberSecurity - Computers In Libraries 2024Brian Pichman
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfCheryl Hung
 
20140402 - Smart house demo kit
20140402 - Smart house demo kit20140402 - Smart house demo kit
20140402 - Smart house demo kitJamie (Taka) Wang
 
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedInOutage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedInThousandEyes
 
LF Energy Webinar - Unveiling OpenEEMeter 4.0
LF Energy Webinar - Unveiling OpenEEMeter 4.0LF Energy Webinar - Unveiling OpenEEMeter 4.0
LF Energy Webinar - Unveiling OpenEEMeter 4.0DanBrown980551
 
The New Cloud World Order Is FinOps (Slideshow)
The New Cloud World Order Is FinOps (Slideshow)The New Cloud World Order Is FinOps (Slideshow)
The New Cloud World Order Is FinOps (Slideshow)codyslingerland1
 
My key hands-on projects in Quantum, and QAI
My key hands-on projects in Quantum, and QAIMy key hands-on projects in Quantum, and QAI
My key hands-on projects in Quantum, and QAIVijayananda Mohire
 
IT Service Management (ITSM) Best Practices for Advanced Computing
IT Service Management (ITSM) Best Practices for Advanced ComputingIT Service Management (ITSM) Best Practices for Advanced Computing
IT Service Management (ITSM) Best Practices for Advanced ComputingMAGNIntelligence
 
Technical SEO for Improved Accessibility WTS FEST
Technical SEO for Improved Accessibility  WTS FESTTechnical SEO for Improved Accessibility  WTS FEST
Technical SEO for Improved Accessibility WTS FESTBillieHyde
 
Patch notes explaining DISARM Version 1.4 update
Patch notes explaining DISARM Version 1.4 updatePatch notes explaining DISARM Version 1.4 update
Patch notes explaining DISARM Version 1.4 updateadam112203
 
Keep Your Finger on the Pulse of Your Building's Performance with IES Live
Keep Your Finger on the Pulse of Your Building's Performance with IES LiveKeep Your Finger on the Pulse of Your Building's Performance with IES Live
Keep Your Finger on the Pulse of Your Building's Performance with IES LiveIES VE
 
Novo Nordisk's journey in developing an open-source application on Neo4j
Novo Nordisk's journey in developing an open-source application on Neo4jNovo Nordisk's journey in developing an open-source application on Neo4j
Novo Nordisk's journey in developing an open-source application on Neo4jNeo4j
 
Scenario Library et REX Discover industry- and role- based scenarios
Scenario Library et REX Discover industry- and role- based scenariosScenario Library et REX Discover industry- and role- based scenarios
Scenario Library et REX Discover industry- and role- based scenariosErol GIRAUDY
 
Flow Control | Block Size | ST Min | First Frame
Flow Control | Block Size | ST Min | First FrameFlow Control | Block Size | ST Min | First Frame
Flow Control | Block Size | ST Min | First FrameKapil Thakar
 
From the origin to the future of Open Source model and business
From the origin to the future of  Open Source model and businessFrom the origin to the future of  Open Source model and business
From the origin to the future of Open Source model and businessFrancesco Corti
 
SIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENT
SIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENTSIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENT
SIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENTxtailishbaloch
 

Recently uploaded (20)

How to release an Open Source Dataweave Library
How to release an Open Source Dataweave LibraryHow to release an Open Source Dataweave Library
How to release an Open Source Dataweave Library
 
UiPath Studio Web workshop series - Day 1
UiPath Studio Web workshop series  - Day 1UiPath Studio Web workshop series  - Day 1
UiPath Studio Web workshop series - Day 1
 
TrustArc Webinar - How to Live in a Post Third-Party Cookie World
TrustArc Webinar - How to Live in a Post Third-Party Cookie WorldTrustArc Webinar - How to Live in a Post Third-Party Cookie World
TrustArc Webinar - How to Live in a Post Third-Party Cookie World
 
CyberSecurity - Computers In Libraries 2024
CyberSecurity - Computers In Libraries 2024CyberSecurity - Computers In Libraries 2024
CyberSecurity - Computers In Libraries 2024
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
SheDev 2024
SheDev 2024SheDev 2024
SheDev 2024
 
20140402 - Smart house demo kit
20140402 - Smart house demo kit20140402 - Smart house demo kit
20140402 - Smart house demo kit
 
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedInOutage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
 
LF Energy Webinar - Unveiling OpenEEMeter 4.0
LF Energy Webinar - Unveiling OpenEEMeter 4.0LF Energy Webinar - Unveiling OpenEEMeter 4.0
LF Energy Webinar - Unveiling OpenEEMeter 4.0
 
The New Cloud World Order Is FinOps (Slideshow)
The New Cloud World Order Is FinOps (Slideshow)The New Cloud World Order Is FinOps (Slideshow)
The New Cloud World Order Is FinOps (Slideshow)
 
My key hands-on projects in Quantum, and QAI
My key hands-on projects in Quantum, and QAIMy key hands-on projects in Quantum, and QAI
My key hands-on projects in Quantum, and QAI
 
IT Service Management (ITSM) Best Practices for Advanced Computing
IT Service Management (ITSM) Best Practices for Advanced ComputingIT Service Management (ITSM) Best Practices for Advanced Computing
IT Service Management (ITSM) Best Practices for Advanced Computing
 
Technical SEO for Improved Accessibility WTS FEST
Technical SEO for Improved Accessibility  WTS FESTTechnical SEO for Improved Accessibility  WTS FEST
Technical SEO for Improved Accessibility WTS FEST
 
Patch notes explaining DISARM Version 1.4 update
Patch notes explaining DISARM Version 1.4 updatePatch notes explaining DISARM Version 1.4 update
Patch notes explaining DISARM Version 1.4 update
 
Keep Your Finger on the Pulse of Your Building's Performance with IES Live
Keep Your Finger on the Pulse of Your Building's Performance with IES LiveKeep Your Finger on the Pulse of Your Building's Performance with IES Live
Keep Your Finger on the Pulse of Your Building's Performance with IES Live
 
Novo Nordisk's journey in developing an open-source application on Neo4j
Novo Nordisk's journey in developing an open-source application on Neo4jNovo Nordisk's journey in developing an open-source application on Neo4j
Novo Nordisk's journey in developing an open-source application on Neo4j
 
Scenario Library et REX Discover industry- and role- based scenarios
Scenario Library et REX Discover industry- and role- based scenariosScenario Library et REX Discover industry- and role- based scenarios
Scenario Library et REX Discover industry- and role- based scenarios
 
Flow Control | Block Size | ST Min | First Frame
Flow Control | Block Size | ST Min | First FrameFlow Control | Block Size | ST Min | First Frame
Flow Control | Block Size | ST Min | First Frame
 
From the origin to the future of Open Source model and business
From the origin to the future of  Open Source model and businessFrom the origin to the future of  Open Source model and business
From the origin to the future of Open Source model and business
 
SIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENT
SIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENTSIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENT
SIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENT
 

Decomposing applications for deployability and scalability #gluecon

  • 1. Decomposing applications for deployability and scalability Chris Richardson Author of POJOs in Action Founder of the original CloudFoundry.com @crichardson crichardson@vmware.com 1
  • 2. Presentation goal How decomposing applications improves deployability and scalability and How Cloud Foundry helps 2
  • 7. About Chris http://www.theregister.co.uk/2009/08/19/springsource_cloud_foundry/ 7
  • 8. vmc push About-Chris Developer Advocate for CloudFoundry.com Signup at http://cloudfoundry.com Promo code: Gluecon12 8
  • 9. Agenda  The (sometimes evil) monolith  Decomposing applications into services  How do services communicate?  Presentation layer design  How Cloud Foundry helps 9
  • 10. Let’s imagine you are building an e- commerce application 10
  • 11. Traditional web application architecture WAR StoreFrontUI Accounting Service MySQL Browser Apache InventoryService Database Shipping Service Simple to Tomcat develop test deploy scale 11
  • 12. But there are problems 12
  • 13. Users expect a rich, dynamic and interactive experience on mobile devices and desktop h oug d en oo ’t g HTTP Request e isn r ctu Java Web Browser e hit HTML/Javascript Application c I ar ty le U s Old Real-time web ≅ NodeJS 13
  • 14. Obstacle to frequent deployments  Need to redeploy everything to change one component  Interrupts long running background (e.g. Quartz) jobs  Increases risk of failure Fear of change  Updates will happen less often  e.g. Makes A/B testing UI really difficult 14
  • 15. Large application Slow IDE Slow start times for web container 15
  • 16. Scaling development WAR StoreFrontUI Accounting Scalable != InventoryService development Shipping  Forces teams to synchronize development efforts  Teams need to coordinate updates 16
  • 17. Long-term commitment to a single technology stack  Let’s suppose you go with the JVM • Some polyglot support • Many (but not all) JVM languages interoperate easily • e.g. Scala, Groovy modules within a Java application • But you can’t use non-JVM languages  Application depends on a particular: • Framework - e.g. Spring or Java EE • Container - e.g. Tomcat  Switching technology stack touches entire application • Painful • Rarely done 17
  • 18. Agenda  The (sometimes evil) monolith  Decomposing applications into services  How do services communicate?  Presentation layer design  How Cloud Foundry helps 18
  • 19. 3 dimensions to scaling Y axis - functional decomposition Scale by s ng splitting ila g n hi g s oni rt different things iti rt im pa ta in da ittl s- sp i ax by Z ale X axis - horizontal duplication Sc Scale by cloning 19
  • 20. Y axis scaling - functional partitioning  Splits monolithic application into a set of services  Each service implements a set of related functionality  Partitioning schemes: • Partition functionality by noun or by verb • Single Responsibility Principle • Unix utilities - do one focussed thing well 20
  • 21. Y axis scaling - application level billing web application Accounting Service Store front web application inventory web application Store Front InventoryService shipping web application ShippingService Apply X axis cloning and/or Z axis partitioning to each service 21
  • 22. Real world examples http://techblog.netflix.com/ Between 100-150 services are accessed to build a page. http://highscalability.com/amazon-architecture http://www.addsimplicity.com/downloads/ eBaySDForum2006-11-29.pdf http://queue.acm.org/detail.cfm?id=1394128 22
  • 23. There are drawbacks  Complexity: • Architectural • Development • Deployment • Application management  Deciding when to use it • In the beginning: you don’t need it and it will slow you down • When you do need it: refactoring existing code is painful See Steve Yegge’s Google Platforms Rant re Amazon.com 23
  • 24. But there are many benefits  Scales development: focussed two pizza devops teams  Deploy services independently  Scale services independently  Improves fault isolation  Enforces well defined interfaces between components  Eliminates long-term commitment to a single technology stack Modular, polyglot applications 24
  • 25. Two levels of architecture  System level • Defines the inter-service glue: interfaces and communication mechanisms • Slow changing Versus  Service level • Defines the internal architecture of each service • Far fewer constraints on technology • Each service could use a different technology stack • Rapid evolving 25
  • 26. If services are small...  Regularly rewrite using a better technology stack  Pick the best developers rather than best <pick a language> developers polyglot culture  Adapt system to changing requirements and better technology without a total rewrite Fred George “Developer Anarchy” 26
  • 27. Moreover: you are not the same you ...  Cell lifetimes: Can we build software • hours - some white blood cells systems with these characteristics? • days - stomach lining cells • years - bone cells Too much technical debt • lifetime - brain cells component death?  50 to 70 billion of your cells die each day  Yet you (the system) remains intact http://dreamsongs.com/Files/ DesignBeyondHumanAbilitiesSimp.pdf http://dreamsongs.com/Files/WhitherSoftware.pdf 27
  • 28. Agenda  The (sometimes evil) monolith  Decomposing applications into services  How do services communicate?  Presentation layer design  How Cloud Foundry helps 28
  • 29. Inter-service communication options  Multiple collaborating services need a communication mechanism  Many choices: • Synchronous asynchronous • Transports: HTTP, AMQP, ... • Formats: JSON, XML, Protocol Buffers, Thrift, ... • Even via the database  Distributed application error handling strategies Asynchronous is preferred JSON is fashionable but binary format is more efficient 29
  • 30. Asynchronous message-based communication wgrus-billing.war Accounting Service wgrus-store.war RabbitMQ wgrus-inventory.war StoreFrontUI (Message MySQL Broker) Widget InventoryService wgrus-inventory.war InventoryService 30
  • 31. Benefits and drawbacks  Benefits • Decouples caller from server • Caller unaware of server’s coordinates (URL) • Message broker buffers message when server is down/slow  Drawbacks • Additional complexity of message broker • RPC using messaging is more complex 31
  • 32. Writing code that calls services 32
  • 33. Composable futures  Problem: • Service A needs to call services B and C and then D • Makes sense to call B and C parallel • Yet most concurrency APIs are low-level, error-prone etc  Solution: • Use Akka composable futures = really nice abstraction val futureB = callB() Two calls execute in parallel val futureC = callC() val futureD = for { b <- futureB.mapTo[SomeType] c <- futureC.mapTo[SomeType] d <- callD(b, c) And then invokes D } yield d val result = Await.result(futureD, 1 second). asInstanceOf[SomeOtherType] Get the result of D http://doc.akka.io/docs/akka/2.0.1/scala/futures.html http://en.wikipedia.org/wiki/Futures_and_promises 33
  • 34. Spring Integration  Builds on Spring framework  Implements EAI patterns = high-level of abstraction for building message based applications  Provides the building blocks for a pipes and filters architecture • Pipes = message channels • Filters = endpoints that filter, transform, route messages and integrate with external messaging infrastructure  Enables development of components that are • loosely coupled • insulated from underlying messaging infrastructure 34
  • 35. Handling failure  Errors happen (especially in distributed systems)  Use timeouts and retries • Never wait forever • Some errors are transient so retry  Use per-dependency bounded thread pool with bounded queue • Limits number of outstanding requests • Fails fast if service is slow or down  Use circuit breaker • High rate of errors stop calling temporarily • Avoids calling service that has issues  On failure • Returned cached or default data • Invoke custom error handler http://techblog.netflix.com/2012/02/fault-tolerance-in-high-volume.html 35
  • 36. Agenda  The (sometimes evil) monolith  Decomposing applications into services  How do services communicate?  Presentation layer design  How Cloud Foundry helps 36
  • 37. Modular application Choice of presentation layer technology + Redeploy UI frequently/independently 37
  • 38. NodeJS is the fashionable technology Many JavaScript client frameworks have a NodeJS counterpart e.g. socket.io 38
  • 39. NodeJS isn’t the only game in town JVM-based http://vertx.io/ 39
  • 40. A modern web application Service 1 RESTful WS Node JS Browser HTML 5 Server Application Application Service 2 Events Socket.io Socket.io client server ... 40
  • 41. NodeJS - using RESTful WS and AMQP REST Service REST Requests Node JS Events socket.io AMQP AMQP RabbitMQ Service 41
  • 42. Updating the UI is easy  Update the UI independently of rest of system  Easily run A/B tests  Enables fast iteration of the UI http://theleanstartup.com/principles 42
  • 43. But coordination with backend changes required  Let’s imagine that you are deploying an advanced search feature: • Enhancements to search service • Enhancements to UI  Before • Deploy new war  Now: • Some coordination required • Deploy updated backend service • Deploy updated NodeJS and browser code • Enable feature using feature switch 43
  • 44. Agenda  The (sometimes evil) monolith  Decomposing applications into services  How do services communicate?  Presentation layer design  How Cloud Foundry helps 44
  • 45. Traditional tools: monolithic applications 45
  • 46. Developing modular apps is more difficult  Many more moving parts to manage • Platform services: SQL, NoSQL, RabbitMQ • Application services: your code  Who is going to setup the environments: • the developer sandbox? • ... • QA environments? But Cloud Foundry helps... 46
  • 47. Easy polyglot application deployment and service provisioning OSS community vFabric Postgres Ap p lica Data Private   'o Services Clouds   n  S erv ice  In vFabric ter fac RabbitMQTM Msg Public e Services Clouds Micro Other Clouds Services Additional partners services …
  • 48. Creating a platform service instance $ vmc create-service mysql --name mysql1 Creating Service: OK $ vmc services ...... =========== Provisioned Services ============ +-------------+---------+ | Name | Service | +-------------+---------+ | mysql1 | mysql | +-------------+---------+
  • 49. Multi-application manifest - part 1 --- applications: inventory/target: Path to application name: inventory url: cer-inventory.chrisr.cloudfoundry.me framework: name: spring info: mem: 512M description: Java SpringSource Spring Application exec: mem: 512M instances: 1 services: Required platform services si-rabbit: type: :rabbitmq si-mongo: type: :mongodb si-redis: type: :redis 49
  • 50. Multi-application manifest - part 2 store/target: Path to application name: store url: cer-store.chrisr.cloudfoundry.me framework: name: spring info: mem: 512M description: Java SpringSource Spring Application exec: mem: 512M instances: 1 services: Required platform services si-mongo: type: :mongodb si-rabbit: type: :rabbitmq 50
  • 51. One command to create platform services and deploy application $ vmc push Would you like to deploy from the current directory? [Yn]: Pushing application 'inventory'... Creating Application: OK Creating Service [si-rabbit]: OK Binding Service [si-rabbit]: OK Creating Service [si-mongo]: OK Binding Service [si-mongo]: OK Creating Service [si-redis]: OK Binding Service [si-redis]: OK Uploading Application: Checking for available resources: OK Processing resources: OK Packing application: OK vmc push: Uploading (12K): OK Push Status: OK •Reads the manifest file Staging Application 'inventory': OK Starting Application 'inventory': OK •Creates the required platform services Pushing application 'store'... Creating Application: OK •Deploys all the applications Binding Service [si-mongo]: OK Binding Service [si-rabbit]: OK Uploading Application: Checking for available resources: OK Processing resources: OK Packing application: OK Uploading (5K): OK Push Status: OK Staging Application 'store': OK 51 Starting Application 'store': ...
  • 52. Micro Cloud Foundry: new developer sandbox App Instances Services Open source Platform as a Service project 10.04 A PaaS packaged as a VMware Virtual Machine Use as a developer sandbox • Use the services from Junit integration tests • Deploy your application for functional testing • Remote debugging from STS 52
  • 53. Using Caldecott… $ vmc tunnel 1: mysql-135e0 2: mysql1 Which service to tunnel to?: 2 Password: ******** Stopping Application: OK Redeploying tunnel application 'caldecott'. Uploading Application: Checking for available resources: OK Packing application: OK Uploading (1K): OK Push Status: OK Binding Service [mysql1]: OK Staging Application: OK Starting Application: OK Getting tunnel connection info: OK Service connection info: username : uMe6Apgw00AhS password : pKcD76PcZR7GZ name : d7cb8afb52f084f3d9bdc269e7d99ab50 Starting tunnel to mysql1 on port 10000. 1: none 2: mysql Which client would you like to start?: 2
  • 54. …Using Caldecott Launching 'mysql --protocol=TCP --host=localhost --port=10000 -- user=uMe6Apgw00AhS --password=pKcD76PcZR7GZ d7cb8afb52f084f3d9bdc269e7d99ab50' Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 10944342 Server version: 5.1.54-rel12.5 Percona Server with XtraDB (GPL), Release 12.5, Revision 188 Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql>
  • 55. Running JUnit test with Caldecott Configure your test code to use port + connection info 55
  • 56. Summary  Monolithic applications are simple to develop and deploy BUT applying the scale cube  Decomposes your application into services  Enables scaling for transactions and data volumes  Tackles application complexity  Enables scaling for development  Enables frequent, independent deployments  Make it easy to leverage other technologies AND  Cloud Foundry simplifies the development and deployment of modular, service-based applications 56
  • 57. @crichardson crichardson@vmware.com Questions? www.cloudfoundry.com promo code Gluecon12