SlideShare a Scribd company logo
1 of 91
Download to read offline
Decomposing applications for
          deployability and scalability
Chris Richardson,
Author of POJOs in Action, Founder of the original CloudFoundry.com
  @crichardson chris.richardson@springsource.com http://plainoldobjects.com/
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


 Signup at http://cloudfoundry.com

                                     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 with a
   monolithic architecture



                                12
Users expect a rich, dynamic
and interactive experience
                                                                          h
                                                                       oug
                                                                     en
                            HTTP Request                        od
                                                           ’t go
     Browser                                            isn       Java Web Application
                                                   re
                                                ctu
                            HTML/Javascript
                                              e
                                       rc hit
                               I   a
                       ty le U
                   s
               Old


               Real-time web ≅ NodeJS
                                                                                         13
Intimidates developers




                         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
                                                           15
Overloads your IDE and container




     Slows down development    16
Obstacle to scaling development


       Accounting team
                         E-commerce
         Engineering
                          application



        Shipping team




                                        17
Obstacle to scaling development

                         WAR


           UI team              StoreFrontUI


       Accounting team           Accounting


       Inventory team          InventoryService


        Shipping team              Shipping




                                                  18
Obstacle to scaling development
                                 But the
           I want to update
                              backend is not
                the UI
                               working yet!




 Lots of coordination and communication
                 required                      19
Requires long-term
 commitment to a
 technology stack




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




                                           21
22
The scale cube


   Y axis -
   functional
   decomposition




                                                                        ila ng
   Scale by




                                                                     i m ni
                                                                  g s itio

                                                                           r
   splitting




                                                               tin rt
                                                            lit pa
   different things




                                                          sp a
                                                     gs y dat
                                                 th ale is -
                                                    Sc ax
                                                   in b
                      X axis                     Z
                      - horizontal duplication                                   23
Y-axis scaling - application level

                  WAR



                         StoreFrontUI


                          Accounting
                           Service


                        InventoryService



                            Shipping
                            Service




                                           24
Y-axis scaling - application level
                                                          accounting web application

                                                                       Accounting
                                                                        Service




   Store front web application                              inventory web application



                StoreFrontUI                                        InventoryService




                                                          shipping web application


                                                                         Shipping
                                                                         Service




     Apply X axis cloning and/or Z axis partitioning to each service                    25
Partitioning strategies
§Partition by verb, e.g. shipping service
§Partition by noun, e.g. inventory service
§Single Responsibility Principle
§Unix utilities - do one focussed thing well




       Something of an art

                                                26
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


                                                                       27
There are drawbacks



                      28
Complexity


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

                                             29
Multiple databases
            =
Transaction management
       challenges


                         30
When to use it?
  In the beginning:
 •You don’t need it
 •It will slow you down




                           Later on:
                          •You need it
                          •Refactoring is painful
                                                    31
But there are many benefits
§Scales development: develop, deploy and scale each service
  independently
§Update UI independently
§Improves fault isolation
§Eliminates long-term commitment to a single technology stack




       Modular, polyglot, multi-framework
                  applications
                                                                 32
Two levels of architecture
                                         System-level

Services
Inter-service glue: interfaces and communication mechanisms
Slow changing


                                         Service-level

Internal architecture of each service
Each service could use a different technology stack
Pick the best tool for the job
Rapidly evolving


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




                                                                34
The human body as a system




                             35
50 to 70 billion of your cells die each day




                                              36
Yet you (the system) remain you




                                  37
Can we build software systems with
      these characteristics?

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




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




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




                                           39
Inter-service communication options
§Synchronous HTTP        asynchronous AMQP

§Formats: JSON, XML, Protocol Buffers, Thrift, ...
§Even via the database


    Asynchronous is preferred

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


                                                Accounting
                                                 Service




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



                                    wgrus-shipping.war



                                             ShippingService




                                                                       41
Benefits
§Decouples caller from server
§Caller unaware of server’s coordinates (URL)
§Message broker buffers message when server is down/slow
§Supports a variety of communication patterns, e.g. point-to-point,
 pub-sub, ...




                                                                       42
Drawbacks
§Additional complexity of message broker
§Request/reply-style communication is more complex




                                                      43
Writing code that calls services



                               44
The need for parallelism
                                     Service B
                  b = serviceB()


                                                 Call in parallel
                    c = serviceC()
 Service A                           Service C




             d = serviceD(b, c)
                                     Service D


                                                                    45
Java Futures are a great
      concurrency abstraction


http://en.wikipedia.org/wiki/Futures_and_promises

                                                    46
Using Java Futures
public class Client {

    private ExecutorService executorService;
    private RemoteServiceProxy remoteServiceProxy;

    public void doSomething() throws ... {                     Eventually contains result
        Future<Integer> result =
          executorService.submit(new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                return remoteServiceProxy.invokeRemoteService();
            }
        });

        /// Do other things
                                                                          When needed wait for result
        int r = result.get(500, TimeUnit.MILLISECONDS);

        System.out.println(r);

                                                                                                        47
    }
}
Akka’s composable futures are
         even better



                                48
Composable Futures
val f1 = Future {                           ... ; 1 }
val f2 = Future {                           ... ; 2 }
                                                               Transforms Future
val f4 = f2.map(_ * 2)
assertEquals(4, Await.result(f4, 1 second))
                                                                Combines two futures
val fzip = f1 zip f2
assertEquals((1, 2), Await.result(fzip, 1 second))




       http://doc.akka.io/docs/akka/2.0.1/scala/futures.html                           49
Using Akka futures
 def callB() : Future[...] = ...
 def callC() : Future[...] = ...
 def callD() : Future[...] = ...                            Two calls execute in parallel


 val future = for {
   (b, c) <- callB() zip callC();
   d <- callD(b, c)
  } yield d                                                        And then invokes D



 val result = Await.result(future, 1 second)


    http://doc.akka.io/docs/akka/2.0.1/scala/futures.html             Get the result of D
                                                                                            50
Spring Integration
§Provides the building blocks for a pipes and
  filters architecture
§Enables development of application
  components that are
  •loosely coupled
  •insulated from messaging infrastructure
§Messaging defined declaratively




                                                 51
Handling failure


     Service A                            Service B




                     Errors happen
                 in distributed systems




                                                      52
About Netflix
               > 1B API calls/day
      1 API call average 6 service calls
          Fault tolerance is essential




             http://techblog.netflix.com/2012/02/fault-tolerance-in-high-volume.html




                                                                                      53
How to run out of threads


HTTP Request
                        X
                  Thread 1



                        X
                  Thread 2


                  ...
                        X
                        X
                  Thread N




                Execute thread
                                     Service A


                                                          XService B




                pool
                                 Eventually all threads   If service B is down
                                                           then thread will be
               Tomcat               will be blocked              blocked



                                                                                 54
Use timeouts and retries

             Never wait forever

       Errors can be transient                              retry




                         http://techblog.netflix.com/2012/02/fault-tolerance-in-high-volume.html
                                                                                                  55
Use per-dependency bounded thread pool
Service A

    Runnable 1                 Task 1

     Runnable 2                Task 2
                                                                                           Service B
     Runnable ...              Task ...


    bounded queue           bounded thread pool



         Fails fast if       Limits number of
  service is slow or down   outstanding requests




                                                   http://techblog.netflix.com/2012/02/fault-tolerance-in-high-volume.html   56
Use a circuit breaker
     High error rate   stop calling temporarily

        Down     wait for it to come back up

       Slow     gives it a chance to recover




                              http://techblog.netflix.com/2012/02/fault-tolerance-in-high-volume.html   57
On failure
              Return cached data
    Avoid
    Failing
              Return default data

                   Fail fast




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




                                           59
Modular application




Choice of presentation layer technology

                                          60
NodeJS is the fashionable technology




                                       61
Why NodeJS?
§Familiar Javascript
§High-performance, scalable event-driven, non-blocking I/O model
§Compact runtime
§Over 17,000 modules developed by the community
§Many JavaScript client frameworks have a NodeJS counterpart, e.g.
 socket.io and SockJS




                                                                      62
Why not NodeJS?




                  a.k.a. callback hell


                                         63
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

                                                           ...




                                                                    64
NodeJS - using RESTful WS and AMQP
                       REST
                               Service
REST
Requests



            Node JS


 Events
           socket.io
                       AMQP              AMQP
                              RabbitMQ          Service




                                                          65
Socket.io server-side
  var express = require('express')
    , http = require('http')
    , amqp = require(‘amqp’)
    ....;

  server.listen(8081);                                        Handle socket.io
  ...                                                           connection
  var amqpCon = amqp.createConnection(...);

  io.sockets.on('connection', function (socket) {
                                                                       Republish as
    function amqpMessageHandler(message, headers, deliveryInfo) {      socket.io event
        var m = JSON.parse(message.data.toString());
        socket.emit(‘tick’, m);
     };
     amqpCon.queue(“”, {},
         function(queue) {                                       Subscribe to AMQP
           queue.bind(“myExchange”, “”);
           queue.subscribe(amqpMessageHandler);
                                                                       queue
     });
  });
                                                                                         66
Socket.io - client side
<html>
<body>

The event is <span data-bind="text: ticker"></span>

<script src="/socket.io/socket.io.js"></script>
<script src="/knockout-2.0.0.js"></script>
<script src="/clock.js"></script>

</body>                            Bind to model        Connect to
</html>
                                                      socket.io server
              clock.js
var socket = io.connect(location.hostname);

function ClockModel() {
  self.ticker = ko.observable(1);                      Subscribe to tick
  socket.on('tick', function (data) {                       event
   self.ticker(data);
 });
};
                                                         Update model
ko.applyBindings(new ClockModel());                                        67
Agenda
§The (sometimes evil) monolith
§Decomposing applications into services
§How do services communicate?
§Presentation layer design
§How Cloud Foundry helps




                                           68
Original architecture
                        WAR



                               StoreFrontUI


                                Accounting
                                 Service

                                                 MySQL
Browser   Apache
                              InventoryService   Database


                                  Shipping
                                  Service



                   Tomcat


                                                            69
Modern architecture




                                                           p,
                                                        lo
                Desktop Browser                         Native Mobile application             HTML5 mobile application




                                                     ve
                          StoreUI                                       StoreUI                            StoreUI




                                             st de


                                                   ?
                                                 is
                                                        NodeJS
Asynchronous, scalable                                   NodeJS                                                          Javascript
   communication                                                          StoreUI




                                              th
                                           te e
                                             w
                                                                      RabbitMQ


                                           oy
                          do


   Spring/Scala web
                                         pl
      application                          Inventory Service                               Shipping Service
                                                                                                                                           Standalone
                                             Inventory Service                               Shipping Service                          “headless” Spring/
      ow




                                                                                                                                        Java applications
                                      de
     H




                                                   MySQL Customer                   Redis Inventory                      Mongo Order
                                           d



                         Billing Service
                                                      Database                        Database                            Database
                                  an




                                                                                                                                                       70
Traditional tools: monolithic applications




                                         71
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...

                                             72
Easy polyglot application deployment and service
provisioning
                                                                                                OSS community




    vFabric
   Postgres
                                Ap
                                   p
                                 lica




                                                                                              Private	
  
                                   'o




                Data Services                                                                 Clouds	
  
                                       n	
  S
                                         erv
                                            ice
                                               	
  In
                                                 ter
                                                    fac




         vFabric
                                                       e




         RabbitMQTM                                                                  Public
                                                                                     Clouds
                                       Msg Services




                                                                            Micro
                                                                            Clouds
                                                           Other 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
                                                             75
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

                                                                        76
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
                                                             vmc push:
 Processing resources: OK                                    •Reads the manifest file
 Packing application: OK
 Uploading (12K): OK
                                                             •Creates the required platform services
Push Status: OK                                              •Deploys all the applications
Staging Application 'inventory': OK
Starting Application 'inventory': OK
Pushing application 'store'...
Creating Application: OK
Binding Service [si-mongo]: OK
Binding Service [si-rabbit]: OK
Uploading Application:
 Checking for available resources: OK
 Processing resources: OK
 Packing application: OK                                                                               77
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

                                                                                       78
Using Caldecott to tunnel into your services




                                               79
Caldecott = TCP over HTTP

                 native
                protocol                                                     native
                                                  HTTP
   Service                                                    Caldecott     protocol
                                  Caldecott gem                                        Service
    client                 Port                               application
                           NNN




Your computer                                            Cloud Foundry




                                                                                                 80
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




                                                         83
Summary



          84
Monolithic applications are
 simple to develop and deploy

BUT have significant drawbacks

                                 85
Apply the scale cube

                                                                          §Modular, polyglot, and scalable
                                                                            applications
   Y axis -
   functional
   decomposition
                                                                          §Services developed, deployed
                                                                            and scaled independently
                                                                    ngi
                                                                   on
                                                                  iti
                                                               rt
                                                             pa
                                                              a
                                                           at
                                                         -d
                                                       is
                                                     ax
                                                     Z




                   X axis - horizontal duplication




                                                                                                              86
Cloud Foundry helps
                          Ap
                                                                                     .js
                             p
                            lic
                               a'
                                 on




                                                                                                             Private	
  
                                   	
  Se




    Data Services                                                                                            Clouds	
  
                                         rv
                                           ice
                                              	
  In
                                               te
                                                 rfa
                                                       ce




                                                                                                    Public
                                                                                                    Clouds




                                                                                     ce
                                                                               rfa
                    Msg Services




                                                                             te
                                                                            	
  In
                                                                          er
                                                                      vid
                                                                   ro
                                                             d	
  P
                                                            ou

                                                                                           Micro
                                                            Cl



                                                                                           Clouds

                                       Other Services
@crichardson chris.richardson@springsource.com
      http://plainoldobjects.com/presentations/




                   Questions?
www.cloudfoundry.com @cloudfoundry
Cloud Foundry 启动营
在www.cloudfoundry.com注册账号并成功上传应用程序,
即可于12月8日中午后凭账号ID和应用URL到签到处换取Cloud Foundry主题卫衣一件。




89
iPhone5 等你拿
第二天大会结束前,请不要提前离      ,将填写完整的意见反馈表投到签到处的抽奖箱内,
即可参与“iPhone5”抽奖活动。




90
Birds of a Feather 专家面对面
所有讲师都会在课程结束后,到紫兰厅与来宾讨论课程上的问题




91

More Related Content

What's hot

Angrybirds Magento Cloud Deployment
Angrybirds Magento Cloud DeploymentAngrybirds Magento Cloud Deployment
Angrybirds Magento Cloud DeploymentAOE
 
Windows Sql Azure Cloud Computing Platform
Windows Sql Azure Cloud Computing PlatformWindows Sql Azure Cloud Computing Platform
Windows Sql Azure Cloud Computing PlatformEduardo Castro
 
Interop Cloud Keynote with Terremark, VMWare, and Citrix
Interop Cloud Keynote with Terremark, VMWare, and CitrixInterop Cloud Keynote with Terremark, VMWare, and Citrix
Interop Cloud Keynote with Terremark, VMWare, and CitrixAlistair Croll
 
Web Standards Infographics
Web Standards InfographicsWeb Standards Infographics
Web Standards Infographicsdynamis
 
SQL Data Service Overview
SQL Data Service OverviewSQL Data Service Overview
SQL Data Service OverviewEric Nelson
 
[AzurePT] Desenvolvimento para o Windows Azure: Diferença para o developer
[AzurePT] Desenvolvimento para o Windows Azure: Diferença para o developer[AzurePT] Desenvolvimento para o Windows Azure: Diferença para o developer
[AzurePT] Desenvolvimento para o Windows Azure: Diferença para o developerVitor Tomaz
 
Obtenga más de Microsoft SQL Server 2012 en el entorno de nube privada
Obtenga más de Microsoft SQL Server  2012 en el entorno de nube privadaObtenga más de Microsoft SQL Server  2012 en el entorno de nube privada
Obtenga más de Microsoft SQL Server 2012 en el entorno de nube privadaEduardo Castro
 
Moving Global Content Exchange to the Cloud
Moving Global Content Exchange to the CloudMoving Global Content Exchange to the Cloud
Moving Global Content Exchange to the CloudSigniantMarketing
 
NoSQL "Tools in Action" talk at Devoxx
NoSQL "Tools in Action" talk at DevoxxNoSQL "Tools in Action" talk at Devoxx
NoSQL "Tools in Action" talk at DevoxxNGDATA
 
Rails, ExtJs, and Netzke
Rails, ExtJs, and NetzkeRails, ExtJs, and Netzke
Rails, ExtJs, and Netzkenetzke
 
Arquitectura dos Serviços da plataforma Windows Azure
Arquitectura dos Serviços da plataforma Windows AzureArquitectura dos Serviços da plataforma Windows Azure
Arquitectura dos Serviços da plataforma Windows AzureComunidade NetPonto
 
[NetPonto] Arquitectura dos Serviços da plataforma Windows Azure
[NetPonto] Arquitectura dos Serviços da plataforma Windows Azure[NetPonto] Arquitectura dos Serviços da plataforma Windows Azure
[NetPonto] Arquitectura dos Serviços da plataforma Windows AzureVitor Tomaz
 
WebXpress WMS Solution
WebXpress WMS SolutionWebXpress WMS Solution
WebXpress WMS SolutionWebXpress
 
14h00 aws deck-summit2012_sap_on_aws_s_jones_final
14h00   aws deck-summit2012_sap_on_aws_s_jones_final14h00   aws deck-summit2012_sap_on_aws_s_jones_final
14h00 aws deck-summit2012_sap_on_aws_s_jones_finalLuiz Gustavo Santos
 
Le cloud microsoft - Présentation "fourre-tout" - Base
Le cloud microsoft - Présentation "fourre-tout" - BaseLe cloud microsoft - Présentation "fourre-tout" - Base
Le cloud microsoft - Présentation "fourre-tout" - BaseNicolas Georgeault
 
Introduction to Enterprise Cloud Economics
Introduction to Enterprise Cloud EconomicsIntroduction to Enterprise Cloud Economics
Introduction to Enterprise Cloud EconomicsEverest Group
 
Cloud Computing for Developers and Architects - QCon 2008 Tutorial
Cloud Computing for Developers and Architects - QCon 2008 TutorialCloud Computing for Developers and Architects - QCon 2008 Tutorial
Cloud Computing for Developers and Architects - QCon 2008 TutorialStuart Charlton
 
WebXpress Introduction
WebXpress Introduction WebXpress Introduction
WebXpress Introduction Sagar Untawale
 
Brief about Windows Azure Platform
Brief about Windows Azure Platform Brief about Windows Azure Platform
Brief about Windows Azure Platform K.Mohamed Faizal
 

What's hot (19)

Angrybirds Magento Cloud Deployment
Angrybirds Magento Cloud DeploymentAngrybirds Magento Cloud Deployment
Angrybirds Magento Cloud Deployment
 
Windows Sql Azure Cloud Computing Platform
Windows Sql Azure Cloud Computing PlatformWindows Sql Azure Cloud Computing Platform
Windows Sql Azure Cloud Computing Platform
 
Interop Cloud Keynote with Terremark, VMWare, and Citrix
Interop Cloud Keynote with Terremark, VMWare, and CitrixInterop Cloud Keynote with Terremark, VMWare, and Citrix
Interop Cloud Keynote with Terremark, VMWare, and Citrix
 
Web Standards Infographics
Web Standards InfographicsWeb Standards Infographics
Web Standards Infographics
 
SQL Data Service Overview
SQL Data Service OverviewSQL Data Service Overview
SQL Data Service Overview
 
[AzurePT] Desenvolvimento para o Windows Azure: Diferença para o developer
[AzurePT] Desenvolvimento para o Windows Azure: Diferença para o developer[AzurePT] Desenvolvimento para o Windows Azure: Diferença para o developer
[AzurePT] Desenvolvimento para o Windows Azure: Diferença para o developer
 
Obtenga más de Microsoft SQL Server 2012 en el entorno de nube privada
Obtenga más de Microsoft SQL Server  2012 en el entorno de nube privadaObtenga más de Microsoft SQL Server  2012 en el entorno de nube privada
Obtenga más de Microsoft SQL Server 2012 en el entorno de nube privada
 
Moving Global Content Exchange to the Cloud
Moving Global Content Exchange to the CloudMoving Global Content Exchange to the Cloud
Moving Global Content Exchange to the Cloud
 
NoSQL "Tools in Action" talk at Devoxx
NoSQL "Tools in Action" talk at DevoxxNoSQL "Tools in Action" talk at Devoxx
NoSQL "Tools in Action" talk at Devoxx
 
Rails, ExtJs, and Netzke
Rails, ExtJs, and NetzkeRails, ExtJs, and Netzke
Rails, ExtJs, and Netzke
 
Arquitectura dos Serviços da plataforma Windows Azure
Arquitectura dos Serviços da plataforma Windows AzureArquitectura dos Serviços da plataforma Windows Azure
Arquitectura dos Serviços da plataforma Windows Azure
 
[NetPonto] Arquitectura dos Serviços da plataforma Windows Azure
[NetPonto] Arquitectura dos Serviços da plataforma Windows Azure[NetPonto] Arquitectura dos Serviços da plataforma Windows Azure
[NetPonto] Arquitectura dos Serviços da plataforma Windows Azure
 
WebXpress WMS Solution
WebXpress WMS SolutionWebXpress WMS Solution
WebXpress WMS Solution
 
14h00 aws deck-summit2012_sap_on_aws_s_jones_final
14h00   aws deck-summit2012_sap_on_aws_s_jones_final14h00   aws deck-summit2012_sap_on_aws_s_jones_final
14h00 aws deck-summit2012_sap_on_aws_s_jones_final
 
Le cloud microsoft - Présentation "fourre-tout" - Base
Le cloud microsoft - Présentation "fourre-tout" - BaseLe cloud microsoft - Présentation "fourre-tout" - Base
Le cloud microsoft - Présentation "fourre-tout" - Base
 
Introduction to Enterprise Cloud Economics
Introduction to Enterprise Cloud EconomicsIntroduction to Enterprise Cloud Economics
Introduction to Enterprise Cloud Economics
 
Cloud Computing for Developers and Architects - QCon 2008 Tutorial
Cloud Computing for Developers and Architects - QCon 2008 TutorialCloud Computing for Developers and Architects - QCon 2008 Tutorial
Cloud Computing for Developers and Architects - QCon 2008 Tutorial
 
WebXpress Introduction
WebXpress Introduction WebXpress Introduction
WebXpress Introduction
 
Brief about Windows Azure Platform
Brief about Windows Azure Platform Brief about Windows Azure Platform
Brief about Windows Azure Platform
 

Viewers also liked

Polygot persistence for Java Developers - August 2011 / @Oakjug
Polygot persistence for Java Developers - August 2011 / @OakjugPolygot persistence for Java Developers - August 2011 / @Oakjug
Polygot persistence for Java Developers - August 2011 / @OakjugChris Richardson
 
Developing applications with Cloud Services (Devnexus 2013)
Developing applications with Cloud Services (Devnexus 2013)Developing applications with Cloud Services (Devnexus 2013)
Developing applications with Cloud Services (Devnexus 2013)Chris Richardson
 
Developing polyglot persistence applications (devnexus 2013)
Developing polyglot persistence applications (devnexus 2013)Developing polyglot persistence applications (devnexus 2013)
Developing polyglot persistence applications (devnexus 2013)Chris Richardson
 
Developing applications with Cloud Services #javaone 2012
Developing applications with Cloud Services  #javaone 2012Developing applications with Cloud Services  #javaone 2012
Developing applications with Cloud Services #javaone 2012Chris Richardson
 
Developing polyglot applications on Cloud Foundry (#oredev 2012)
Developing polyglot applications on Cloud Foundry (#oredev 2012)Developing polyglot applications on Cloud Foundry (#oredev 2012)
Developing polyglot applications on Cloud Foundry (#oredev 2012)Chris Richardson
 
Developing polyglot persistence applications #javaone 2012
Developing polyglot persistence applications  #javaone 2012Developing polyglot persistence applications  #javaone 2012
Developing polyglot persistence applications #javaone 2012Chris Richardson
 
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
 
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
 
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
 

Viewers also liked (15)

Polygot persistence for Java Developers - August 2011 / @Oakjug
Polygot persistence for Java Developers - August 2011 / @OakjugPolygot persistence for Java Developers - August 2011 / @Oakjug
Polygot persistence for Java Developers - August 2011 / @Oakjug
 
Developing applications with Cloud Services (Devnexus 2013)
Developing applications with Cloud Services (Devnexus 2013)Developing applications with Cloud Services (Devnexus 2013)
Developing applications with Cloud Services (Devnexus 2013)
 
Developing polyglot persistence applications (devnexus 2013)
Developing polyglot persistence applications (devnexus 2013)Developing polyglot persistence applications (devnexus 2013)
Developing polyglot persistence applications (devnexus 2013)
 
Developing applications with Cloud Services #javaone 2012
Developing applications with Cloud Services  #javaone 2012Developing applications with Cloud Services  #javaone 2012
Developing applications with Cloud Services #javaone 2012
 
Developing polyglot applications on Cloud Foundry (#oredev 2012)
Developing polyglot applications on Cloud Foundry (#oredev 2012)Developing polyglot applications on Cloud Foundry (#oredev 2012)
Developing polyglot applications on Cloud Foundry (#oredev 2012)
 
Developing polyglot persistence applications #javaone 2012
Developing polyglot persistence applications  #javaone 2012Developing polyglot persistence applications  #javaone 2012
Developing polyglot persistence applications #javaone 2012
 
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)
 
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)
 
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,...
 

Similar to Decomposing applications for deployability and scalability (SpringOne China 2012)

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
 
Spring into the Cloud - JDC2012 Cairo, Egypt
Spring into the Cloud - JDC2012 Cairo, EgyptSpring into the Cloud - JDC2012 Cairo, Egypt
Spring into the Cloud - JDC2012 Cairo, EgyptChris Richardson
 
Cloud Foundry Bootcamp
Cloud Foundry BootcampCloud Foundry Bootcamp
Cloud Foundry BootcampJoshua Long
 
Decomposing Applications for Scalability and Deployability (April 2012)
Decomposing Applications for Scalability and Deployability (April 2012)Decomposing Applications for Scalability and Deployability (April 2012)
Decomposing Applications for Scalability and Deployability (April 2012)Chris Richardson
 
10 things ever architect should know about the Windows Azure Platform - ericnel
10 things ever architect should know about the Windows Azure Platform -  ericnel10 things ever architect should know about the Windows Azure Platform -  ericnel
10 things ever architect should know about the Windows Azure Platform - ericnelEric Nelson
 
(How) Does VA Smalltalk fit into today's IT landscapes?
(How) Does VA Smalltalk fit into today's IT landscapes?(How) Does VA Smalltalk fit into today's IT landscapes?
(How) Does VA Smalltalk fit into today's IT landscapes?Joachim Tuchel
 
Cloud-Native Modernization or Death? A false dichotomy. | DevNation Tech Talk
Cloud-Native Modernization or Death? A false dichotomy. | DevNation Tech TalkCloud-Native Modernization or Death? A false dichotomy. | DevNation Tech Talk
Cloud-Native Modernization or Death? A false dichotomy. | DevNation Tech TalkRed Hat Developers
 
Guy Nirpaz Next Gen App Servers
Guy Nirpaz Next Gen App ServersGuy Nirpaz Next Gen App Servers
Guy Nirpaz Next Gen App Serversdeimos
 
Flex For Java Developers - SDForum Java SIG
Flex For Java Developers - SDForum Java SIGFlex For Java Developers - SDForum Java SIG
Flex For Java Developers - SDForum Java SIGChris Richardson
 
Enterprise Mashups With Soa
Enterprise Mashups With SoaEnterprise Mashups With Soa
Enterprise Mashups With Soaumityalcinalp
 
Evolving Mobile Architectures
Evolving Mobile ArchitecturesEvolving Mobile Architectures
Evolving Mobile Architecturessgleadow
 
Evolving big microservice architectures
Evolving big microservice architecturesEvolving big microservice architectures
Evolving big microservice architecturesNikolay Stoitsev
 
Service Oriented Architecture (SOA) [1/5] : Introduction to SOA
Service Oriented Architecture (SOA) [1/5] : Introduction to SOAService Oriented Architecture (SOA) [1/5] : Introduction to SOA
Service Oriented Architecture (SOA) [1/5] : Introduction to SOAIMC Institute
 
Path to Event Sourcing/CQRS - Derya SEZEN
Path to Event Sourcing/CQRS - Derya SEZENPath to Event Sourcing/CQRS - Derya SEZEN
Path to Event Sourcing/CQRS - Derya SEZENkloia
 
Angular vs React vs Vue – The Right Framework For You.pdf
Angular vs React vs Vue – The Right Framework For You.pdfAngular vs React vs Vue – The Right Framework For You.pdf
Angular vs React vs Vue – The Right Framework For You.pdfWPWeb Infotech
 
Sink Or Swim: Transitioning Your Software Business To SaaS
Sink Or Swim: Transitioning Your Software Business To SaaSSink Or Swim: Transitioning Your Software Business To SaaS
Sink Or Swim: Transitioning Your Software Business To SaaSApprenda
 
Sink Or Swim Transitioning Your Software Business To Saa S Scio And Apprenda
Sink Or Swim Transitioning Your Software Business To Saa S Scio And ApprendaSink Or Swim Transitioning Your Software Business To Saa S Scio And Apprenda
Sink Or Swim Transitioning Your Software Business To Saa S Scio And ApprendaScioSales
 
[Infosecworld 08 Orlando] New Defenses for .NET Web Apps: IHttpModule in Prac...
[Infosecworld 08 Orlando] New Defenses for .NET Web Apps: IHttpModule in Prac...[Infosecworld 08 Orlando] New Defenses for .NET Web Apps: IHttpModule in Prac...
[Infosecworld 08 Orlando] New Defenses for .NET Web Apps: IHttpModule in Prac...Shreeraj Shah
 

Similar to Decomposing applications for deployability and scalability (SpringOne China 2012) (20)

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
 
Spring into the Cloud - JDC2012 Cairo, Egypt
Spring into the Cloud - JDC2012 Cairo, EgyptSpring into the Cloud - JDC2012 Cairo, Egypt
Spring into the Cloud - JDC2012 Cairo, Egypt
 
Cloud Foundry Bootcamp
Cloud Foundry BootcampCloud Foundry Bootcamp
Cloud Foundry Bootcamp
 
Decomposing Applications for Scalability and Deployability (April 2012)
Decomposing Applications for Scalability and Deployability (April 2012)Decomposing Applications for Scalability and Deployability (April 2012)
Decomposing Applications for Scalability and Deployability (April 2012)
 
Spring Into the Cloud
Spring Into the CloudSpring Into the Cloud
Spring Into the Cloud
 
10 things ever architect should know about the Windows Azure Platform - ericnel
10 things ever architect should know about the Windows Azure Platform -  ericnel10 things ever architect should know about the Windows Azure Platform -  ericnel
10 things ever architect should know about the Windows Azure Platform - ericnel
 
(How) Does VA Smalltalk fit into today's IT landscapes?
(How) Does VA Smalltalk fit into today's IT landscapes?(How) Does VA Smalltalk fit into today's IT landscapes?
(How) Does VA Smalltalk fit into today's IT landscapes?
 
Cloud-Native Modernization or Death? A false dichotomy. | DevNation Tech Talk
Cloud-Native Modernization or Death? A false dichotomy. | DevNation Tech TalkCloud-Native Modernization or Death? A false dichotomy. | DevNation Tech Talk
Cloud-Native Modernization or Death? A false dichotomy. | DevNation Tech Talk
 
Final_Presentation
Final_PresentationFinal_Presentation
Final_Presentation
 
Guy Nirpaz Next Gen App Servers
Guy Nirpaz Next Gen App ServersGuy Nirpaz Next Gen App Servers
Guy Nirpaz Next Gen App Servers
 
Flex For Java Developers - SDForum Java SIG
Flex For Java Developers - SDForum Java SIGFlex For Java Developers - SDForum Java SIG
Flex For Java Developers - SDForum Java SIG
 
Enterprise Mashups With Soa
Enterprise Mashups With SoaEnterprise Mashups With Soa
Enterprise Mashups With Soa
 
Evolving Mobile Architectures
Evolving Mobile ArchitecturesEvolving Mobile Architectures
Evolving Mobile Architectures
 
Evolving big microservice architectures
Evolving big microservice architecturesEvolving big microservice architectures
Evolving big microservice architectures
 
Service Oriented Architecture (SOA) [1/5] : Introduction to SOA
Service Oriented Architecture (SOA) [1/5] : Introduction to SOAService Oriented Architecture (SOA) [1/5] : Introduction to SOA
Service Oriented Architecture (SOA) [1/5] : Introduction to SOA
 
Path to Event Sourcing/CQRS - Derya SEZEN
Path to Event Sourcing/CQRS - Derya SEZENPath to Event Sourcing/CQRS - Derya SEZEN
Path to Event Sourcing/CQRS - Derya SEZEN
 
Angular vs React vs Vue – The Right Framework For You.pdf
Angular vs React vs Vue – The Right Framework For You.pdfAngular vs React vs Vue – The Right Framework For You.pdf
Angular vs React vs Vue – The Right Framework For You.pdf
 
Sink Or Swim: Transitioning Your Software Business To SaaS
Sink Or Swim: Transitioning Your Software Business To SaaSSink Or Swim: Transitioning Your Software Business To SaaS
Sink Or Swim: Transitioning Your Software Business To SaaS
 
Sink Or Swim Transitioning Your Software Business To Saa S Scio And Apprenda
Sink Or Swim Transitioning Your Software Business To Saa S Scio And ApprendaSink Or Swim Transitioning Your Software Business To Saa S Scio And Apprenda
Sink Or Swim Transitioning Your Software Business To Saa S Scio And Apprenda
 
[Infosecworld 08 Orlando] New Defenses for .NET Web Apps: IHttpModule in Prac...
[Infosecworld 08 Orlando] New Defenses for .NET Web Apps: IHttpModule in Prac...[Infosecworld 08 Orlando] New Defenses for .NET Web Apps: IHttpModule in Prac...
[Infosecworld 08 Orlando] New Defenses for .NET Web Apps: IHttpModule in Prac...
 

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

Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 

Recently uploaded (20)

Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 

Decomposing applications for deployability and scalability (SpringOne China 2012)

  • 1. Decomposing applications for deployability and scalability Chris Richardson, Author of POJOs in Action, Founder of the original CloudFoundry.com @crichardson chris.richardson@springsource.com http://plainoldobjects.com/
  • 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 Signup at http://cloudfoundry.com 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 with a monolithic architecture 12
  • 13. Users expect a rich, dynamic and interactive experience h oug en HTTP Request od ’t go Browser isn Java Web Application re ctu HTML/Javascript e rc hit I a ty le U s Old Real-time web ≅ NodeJS 13
  • 15. 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 15
  • 16. Overloads your IDE and container Slows down development 16
  • 17. Obstacle to scaling development Accounting team E-commerce Engineering application Shipping team 17
  • 18. Obstacle to scaling development WAR UI team StoreFrontUI Accounting team Accounting Inventory team InventoryService Shipping team Shipping 18
  • 19. Obstacle to scaling development But the I want to update backend is not the UI working yet! Lots of coordination and communication required 19
  • 20. Requires long-term commitment to a technology stack 20
  • 21. Agenda §The (sometimes evil) monolith §Decomposing applications into services §How do services communicate? §Presentation layer design §How Cloud Foundry helps 21
  • 22. 22
  • 23. The scale cube Y axis - functional decomposition ila ng Scale by i m ni g s itio r splitting tin rt lit pa different things sp a gs y dat th ale is - Sc ax in b X axis Z - horizontal duplication 23
  • 24. Y-axis scaling - application level WAR StoreFrontUI Accounting Service InventoryService Shipping Service 24
  • 25. Y-axis scaling - application level accounting web application Accounting Service Store front web application inventory web application StoreFrontUI InventoryService shipping web application Shipping Service Apply X axis cloning and/or Z axis partitioning to each service 25
  • 26. Partitioning strategies §Partition by verb, e.g. shipping service §Partition by noun, e.g. inventory service §Single Responsibility Principle §Unix utilities - do one focussed thing well Something of an art 26
  • 27. 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 27
  • 29. Complexity See Steve Yegge’s Google Platforms Rant re Amazon.com 29
  • 30. Multiple databases = Transaction management challenges 30
  • 31. When to use it? In the beginning: •You don’t need it •It will slow you down Later on: •You need it •Refactoring is painful 31
  • 32. But there are many benefits §Scales development: develop, deploy and scale each service independently §Update UI independently §Improves fault isolation §Eliminates long-term commitment to a single technology stack Modular, polyglot, multi-framework applications 32
  • 33. Two levels of architecture System-level Services Inter-service glue: interfaces and communication mechanisms Slow changing Service-level Internal architecture of each service Each service could use a different technology stack Pick the best tool for the job Rapidly evolving 33
  • 34. If services are small... §Regularly rewrite using a better technology stack §Adapt system to changing requirements and better technology without a total rewrite §Pick the best developers rather than best <pick a language> developers polyglot culture 34
  • 35. The human body as a system 35
  • 36. 50 to 70 billion of your cells die each day 36
  • 37. Yet you (the system) remain you 37
  • 38. Can we build software systems with these characteristics? http://dreamsongs.com/Files/ DesignBeyondHumanAbilitiesSimp.pdf http://dreamsongs.com/Files/WhitherSoftware.pdf 38
  • 39. Agenda §The (sometimes evil) monolith §Decomposing applications into services §How do services communicate? §Presentation layer design §How Cloud Foundry helps 39
  • 40. Inter-service communication options §Synchronous HTTP asynchronous AMQP §Formats: JSON, XML, Protocol Buffers, Thrift, ... §Even via the database Asynchronous is preferred JSON is fashionable but binary format is more efficient 40
  • 41. Asynchronous message-based communication wgrus-billing.war Accounting Service wgrus-store.war wgrus-inventory.war RabbitMQ StoreFrontUI (Message InventoryService MySQL Broker) wgrus-shipping.war ShippingService 41
  • 42. Benefits §Decouples caller from server §Caller unaware of server’s coordinates (URL) §Message broker buffers message when server is down/slow §Supports a variety of communication patterns, e.g. point-to-point, pub-sub, ... 42
  • 43. Drawbacks §Additional complexity of message broker §Request/reply-style communication is more complex 43
  • 44. Writing code that calls services 44
  • 45. The need for parallelism Service B b = serviceB() Call in parallel c = serviceC() Service A Service C d = serviceD(b, c) Service D 45
  • 46. Java Futures are a great concurrency abstraction http://en.wikipedia.org/wiki/Futures_and_promises 46
  • 47. Using Java Futures public class Client { private ExecutorService executorService; private RemoteServiceProxy remoteServiceProxy; public void doSomething() throws ... { Eventually contains result Future<Integer> result = executorService.submit(new Callable<Integer>() { @Override public Integer call() throws Exception { return remoteServiceProxy.invokeRemoteService(); } }); /// Do other things When needed wait for result int r = result.get(500, TimeUnit.MILLISECONDS); System.out.println(r); 47 } }
  • 48. Akka’s composable futures are even better 48
  • 49. Composable Futures val f1 = Future { ... ; 1 } val f2 = Future { ... ; 2 } Transforms Future val f4 = f2.map(_ * 2) assertEquals(4, Await.result(f4, 1 second)) Combines two futures val fzip = f1 zip f2 assertEquals((1, 2), Await.result(fzip, 1 second)) http://doc.akka.io/docs/akka/2.0.1/scala/futures.html 49
  • 50. Using Akka futures def callB() : Future[...] = ... def callC() : Future[...] = ... def callD() : Future[...] = ... Two calls execute in parallel val future = for { (b, c) <- callB() zip callC(); d <- callD(b, c) } yield d And then invokes D val result = Await.result(future, 1 second) http://doc.akka.io/docs/akka/2.0.1/scala/futures.html Get the result of D 50
  • 51. Spring Integration §Provides the building blocks for a pipes and filters architecture §Enables development of application components that are •loosely coupled •insulated from messaging infrastructure §Messaging defined declaratively 51
  • 52. Handling failure Service A Service B Errors happen in distributed systems 52
  • 53. About Netflix > 1B API calls/day 1 API call average 6 service calls Fault tolerance is essential http://techblog.netflix.com/2012/02/fault-tolerance-in-high-volume.html 53
  • 54. How to run out of threads HTTP Request X Thread 1 X Thread 2 ... X X Thread N Execute thread Service A XService B pool Eventually all threads If service B is down then thread will be Tomcat will be blocked blocked 54
  • 55. Use timeouts and retries Never wait forever Errors can be transient retry http://techblog.netflix.com/2012/02/fault-tolerance-in-high-volume.html 55
  • 56. Use per-dependency bounded thread pool Service A Runnable 1 Task 1 Runnable 2 Task 2 Service B Runnable ... Task ... bounded queue bounded thread pool Fails fast if Limits number of service is slow or down outstanding requests http://techblog.netflix.com/2012/02/fault-tolerance-in-high-volume.html 56
  • 57. Use a circuit breaker High error rate stop calling temporarily Down wait for it to come back up Slow gives it a chance to recover http://techblog.netflix.com/2012/02/fault-tolerance-in-high-volume.html 57
  • 58. On failure Return cached data Avoid Failing Return default data Fail fast http://techblog.netflix.com/2012/02/fault-tolerance-in-high-volume.html 58
  • 59. Agenda §The (sometimes evil) monolith §Decomposing applications into services §How do services communicate? §Presentation layer design §How Cloud Foundry helps 59
  • 60. Modular application Choice of presentation layer technology 60
  • 61. NodeJS is the fashionable technology 61
  • 62. Why NodeJS? §Familiar Javascript §High-performance, scalable event-driven, non-blocking I/O model §Compact runtime §Over 17,000 modules developed by the community §Many JavaScript client frameworks have a NodeJS counterpart, e.g. socket.io and SockJS 62
  • 63. Why not NodeJS? a.k.a. callback hell 63
  • 64. 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 ... 64
  • 65. NodeJS - using RESTful WS and AMQP REST Service REST Requests Node JS Events socket.io AMQP AMQP RabbitMQ Service 65
  • 66. Socket.io server-side var express = require('express') , http = require('http') , amqp = require(‘amqp’) ....; server.listen(8081); Handle socket.io ... connection var amqpCon = amqp.createConnection(...); io.sockets.on('connection', function (socket) { Republish as function amqpMessageHandler(message, headers, deliveryInfo) { socket.io event var m = JSON.parse(message.data.toString()); socket.emit(‘tick’, m); }; amqpCon.queue(“”, {}, function(queue) { Subscribe to AMQP queue.bind(“myExchange”, “”); queue.subscribe(amqpMessageHandler); queue }); }); 66
  • 67. Socket.io - client side <html> <body> The event is <span data-bind="text: ticker"></span> <script src="/socket.io/socket.io.js"></script> <script src="/knockout-2.0.0.js"></script> <script src="/clock.js"></script> </body> Bind to model Connect to </html> socket.io server clock.js var socket = io.connect(location.hostname); function ClockModel() { self.ticker = ko.observable(1); Subscribe to tick socket.on('tick', function (data) { event self.ticker(data); }); }; Update model ko.applyBindings(new ClockModel()); 67
  • 68. Agenda §The (sometimes evil) monolith §Decomposing applications into services §How do services communicate? §Presentation layer design §How Cloud Foundry helps 68
  • 69. Original architecture WAR StoreFrontUI Accounting Service MySQL Browser Apache InventoryService Database Shipping Service Tomcat 69
  • 70. Modern architecture p, lo Desktop Browser Native Mobile application HTML5 mobile application ve StoreUI StoreUI StoreUI st de ? is NodeJS Asynchronous, scalable NodeJS Javascript communication StoreUI th te e w RabbitMQ oy do Spring/Scala web pl application Inventory Service Shipping Service Standalone Inventory Service Shipping Service “headless” Spring/ ow Java applications de H MySQL Customer Redis Inventory Mongo Order d Billing Service Database Database Database an 70
  • 71. Traditional tools: monolithic applications 71
  • 72. 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... 72
  • 73. Easy polyglot application deployment and service provisioning OSS community vFabric Postgres Ap p lica Private   'o Data Services Clouds   n  S erv ice  In ter fac vFabric e RabbitMQTM Public Clouds Msg Services Micro Clouds Other Services Additional partners services …
  • 74. Creating a platform service instance $ vmc create-service mysql --name mysql1 Creating Service: OK $ vmc services ...... =========== Provisioned Services ============ +-------------+---------+ | Name | Service | +-------------+---------+ | mysql1 | mysql | +-------------+---------+
  • 75. 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 75
  • 76. 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 76
  • 77. 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 vmc push: Processing resources: OK •Reads the manifest file Packing application: OK Uploading (12K): OK •Creates the required platform services Push Status: OK •Deploys all the applications Staging Application 'inventory': OK Starting Application 'inventory': OK Pushing application 'store'... Creating Application: OK Binding Service [si-mongo]: OK Binding Service [si-rabbit]: OK Uploading Application: Checking for available resources: OK Processing resources: OK Packing application: OK 77
  • 78. 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 78
  • 79. Using Caldecott to tunnel into your services 79
  • 80. Caldecott = TCP over HTTP native protocol native HTTP Service Caldecott protocol Caldecott gem Service client Port application NNN Your computer Cloud Foundry 80
  • 81. 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
  • 82. …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>
  • 83. Running JUnit test with Caldecott Configure your test code to use port + connection info 83
  • 84. Summary 84
  • 85. Monolithic applications are simple to develop and deploy BUT have significant drawbacks 85
  • 86. Apply the scale cube §Modular, polyglot, and scalable applications Y axis - functional decomposition §Services developed, deployed and scaled independently ngi on iti rt pa a at -d is ax Z X axis - horizontal duplication 86
  • 87. Cloud Foundry helps Ap .js p lic a' on Private    Se Data Services Clouds   rv ice  In te rfa ce Public Clouds ce rfa Msg Services te  In er vid ro d  P ou Micro Cl Clouds Other Services
  • 88. @crichardson chris.richardson@springsource.com http://plainoldobjects.com/presentations/ Questions? www.cloudfoundry.com @cloudfoundry
  • 90. iPhone5 等你拿 第二天大会结束前,请不要提前离 ,将填写完整的意见反馈表投到签到处的抽奖箱内, 即可参与“iPhone5”抽奖活动。 90
  • 91. Birds of a Feather 专家面对面 所有讲师都会在课程结束后,到紫兰厅与来宾讨论课程上的问题 91