SlideShare uma empresa Scribd logo
1 de 93
Baixar para ler offline
Decomposing applications for
          deployability and scalability
Chris Richardson,
Author of POJOs in Action, Founder of the original CloudFoundry.com
  @crichardson
crichardson@vmware.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
  UI team                        Accounting team




            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

      Fred George
      “Developer Anarchy”

                                                               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




                                                           42
Drawbacks
Additional complexity of message broker
RPC using messaging 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
Aspects + Actors
                        Dependency
          Caller          Invoker
                          Aspect        Implements circuit
                                          breaker state
                                             machine

                       CircuitBreaker
Equivalent of thread       Actor
        pool


                          Worker             Dependency
                           Worker
                          Actor                 Stub
                            Actor


                                                             59
@DependencyProxy annotation
trait RestaurantService {

    def findNearbyRestaurants(location: Location) :
                              Future[FindNearbyRestaurantResponse]
}




        @Service
        @DependencyProxy(circuitBreaker = "factualCircuitBreaker",
                         timeoutInMilliseconds=750)
        class FactualRestaurantService extends RestaurantService {
          ...
        }




                                                                     60
Aspect-based Async Execution

@Aspect
class DependencyInvokingAspect {

    @Pointcut("execution(* (@DependencyProxy *).*(..))")
    def dependencyProxyMethods {}

    @Around("dependencyProxyMethods()")
    def invoke(jp: ProceedingJoinPoint) = {
      val a = AnnotationUtils.findAnnotation(jp.getTarget.getClass, classOf[DependencyProxy])
      val actor = findActor(a)
       val timeout = Timeout(a.timeoutInMilliseconds milliseconds)
       actor.ask(InvokeDependency( () => jp.proceed())) (timeout)
    }

}




                  Ask actor to invoke jp.proceed() and return Future




                                                                                                61
See
https://github.com/cer/votemeeteat


  for the Actor code

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




                                          63
Modular application




Choice of presentation layer technology

                                          64
NodeJS is the fashionable technology




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




                                                                     66
NodeJS example
                                               Handle HTTP     Handle file read
var http = require('http');
                                                 request
var fs = require("fs");

http.createServer(function (req, res) {
	       fs.readFile('somefile.txt', function (err, data) {
	        if (err) throw err;
	        res.writeHead(200, {'Content-Type': 'text/plain'});
	        res.end(data);
	       });
}).listen(1337, '127.0.0.1');

console.log('Server running at http://127.0.0.1:1337/');



                                                                                 67
Socket.io - server-side
var express = require('express')
  , http = require('http')
  , app = express()                                 Serve static content from public dir
  , server = http.createServer(app)
  , io = require('socket.io').listen(server)
  ;

app.configure(function(){                                     Listen on port 8081
  app.use(express.static(__dirname + '/public'));
});

server.listen(8081);
                                                                   Create a timer for
                                                                    socket.io client
io.sockets.on('connection', function (socket) {
	        var counter = 0;
	        function tick() {
	        	        counter = counter + 1;                              Publish event
	        	        socket.emit('tick', counter);
	        };
	        setInterval(tick, 1000);
});

                                                                                           68
Socket.io - client-side
<html>
<body>

The time 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());                                       69
NodeJS isn’t the only game in town




   JVM-based         http://vertx.io/


                                        70
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

                                                           ...




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



            Node JS


 Events
           socket.io
                       AMQP              AMQP
                              RabbitMQ          Service




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




                                          73
Original architecture
                        WAR



                               StoreFrontUI


                                Accounting
                                 Service

                                                 MySQL
Browser   Apache
                              InventoryService   Database


                                  Shipping
                                  Service



                   Tomcat


                                                            74
Modern architecture
                Desktop Browser                         Native Mobile application             HTML5 mobile application


                          StoreUI                                       StoreUI                            StoreUI



                                                        NodeJS
Asynchronous, scalable                                   NodeJS                                                          Javascript
   communication                                                          StoreUI


                                                                      RabbitMQ


   Spring/Scala web
      application                          Inventory Service                               Shipping Service
                                                                                                                                           Standalone
                                             Inventory Service                               Shipping Service                          “headless” Spring/
                                                                                                                                        Java applications



                                                   MySQL Customer                   Redis Inventory                      Mongo Order
                         Billing Service
                                                      Database                        Database                            Database


                                                                                                                                                       75
Traditional tools: monolithic applications




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

                                            77
Easy polyglot application deployment and service
provisioning
                                                                                                   OSS community




    vFabric
   Postgres
                                Ap
                                   p
                                 lica




                                                                                                 Private	
  
                                   'o




                Data Services                                                                    Clouds	
  
                                       n	
  S
                                         erv
                                            i
                                            ce
                                              	
  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
                                                             80
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

                                                                        81
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                                                                               82
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

                                                                                       83
Using Caldecott to tunnel into your services




                                               84
Caldecott = TCP over HTTP

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




Your computer                                            Cloud Foundry




                                                                                                 85
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




                                                         88
Summary



          89
Monolithic applications are
 simple to develop and deploy

BUT have significant drawbacks

                                 90
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




                                                                                                             91
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 crichardson@vmware.com
      http://slideshare.net/chris.e.richardson/




                  Questions?
www.cloudfoundry.com @cloudfoundry

Mais conteúdo relacionado

Mais procurados

Decompose your monolith: strategies for migrating to microservices (Tide)
Decompose your monolith: strategies for migrating to microservices (Tide)Decompose your monolith: strategies for migrating to microservices (Tide)
Decompose your monolith: strategies for migrating to microservices (Tide)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
 
JFokus: Cubes, Hexagons, Triangles, and More: Understanding Microservices
JFokus: Cubes, Hexagons, Triangles, and More: Understanding MicroservicesJFokus: Cubes, Hexagons, Triangles, and More: Understanding Microservices
JFokus: Cubes, Hexagons, Triangles, and More: Understanding MicroservicesChris Richardson
 
YOW! Perth: Cubes, Hexagons, Triangles, and More: Understanding the Microserv...
YOW! Perth: Cubes, Hexagons, Triangles, and More: Understanding the Microserv...YOW! Perth: Cubes, Hexagons, Triangles, and More: Understanding the Microserv...
YOW! Perth: Cubes, Hexagons, Triangles, and More: Understanding the Microserv...Chris Richardson
 
Oracle CodeOne 2019: Descending the Testing Pyramid: Effective Testing Strate...
Oracle CodeOne 2019: Descending the Testing Pyramid: Effective Testing Strate...Oracle CodeOne 2019: Descending the Testing Pyramid: Effective Testing Strate...
Oracle CodeOne 2019: Descending the Testing Pyramid: Effective Testing Strate...Chris 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
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecturetyrantbrian
 
Developing applications with a microservice architecture (SVforum, microservi...
Developing applications with a microservice architecture (SVforum, microservi...Developing applications with a microservice architecture (SVforum, microservi...
Developing applications with a microservice architecture (SVforum, microservi...Chris 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
 
SVCC Microservices: Decomposing Applications for Testability and Deployability
SVCC Microservices: Decomposing Applications for Testability and Deployability SVCC Microservices: Decomposing Applications for Testability and Deployability
SVCC Microservices: Decomposing Applications for Testability and Deployability Chris Richardson
 
Mucon: Not Just Events: Developing Asynchronous Microservices
Mucon: Not Just Events: Developing Asynchronous MicroservicesMucon: Not Just Events: Developing Asynchronous Microservices
Mucon: Not Just Events: Developing Asynchronous MicroservicesChris Richardson
 
#DevNexus202 Decompose your monolith
#DevNexus202 Decompose your monolith#DevNexus202 Decompose your monolith
#DevNexus202 Decompose your monolithChris Richardson
 
Building a Bank out of Microservices (NDC Sydney, August 2016)
Building a Bank out of Microservices (NDC Sydney, August 2016)Building a Bank out of Microservices (NDC Sydney, August 2016)
Building a Bank out of Microservices (NDC Sydney, August 2016)Graham Lea
 
Developing event-driven microservices with event sourcing and CQRS (Shanghai)
Developing event-driven microservices with event sourcing and CQRS (Shanghai)Developing event-driven microservices with event sourcing and CQRS (Shanghai)
Developing event-driven microservices with event sourcing and CQRS (Shanghai)Chris Richardson
 
YOW2018 - Events and Commands: Developing Asynchronous Microservices
YOW2018 - Events and Commands: Developing Asynchronous MicroservicesYOW2018 - Events and Commands: Developing Asynchronous Microservices
YOW2018 - Events and Commands: Developing Asynchronous MicroservicesChris Richardson
 
Solving distributed data management problems in a microservice architecture (...
Solving distributed data management problems in a microservice architecture (...Solving distributed data management problems in a microservice architecture (...
Solving distributed data management problems in a microservice architecture (...Chris Richardson
 
Designing loosely coupled services
Designing loosely coupled servicesDesigning loosely coupled services
Designing loosely coupled servicesChris Richardson
 

Mais procurados (20)

Decompose your monolith: strategies for migrating to microservices (Tide)
Decompose your monolith: strategies for migrating to microservices (Tide)Decompose your monolith: strategies for migrating to microservices (Tide)
Decompose your monolith: strategies for migrating to microservices (Tide)
 
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
 
JFokus: Cubes, Hexagons, Triangles, and More: Understanding Microservices
JFokus: Cubes, Hexagons, Triangles, and More: Understanding MicroservicesJFokus: Cubes, Hexagons, Triangles, and More: Understanding Microservices
JFokus: Cubes, Hexagons, Triangles, and More: Understanding Microservices
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
YOW! Perth: Cubes, Hexagons, Triangles, and More: Understanding the Microserv...
YOW! Perth: Cubes, Hexagons, Triangles, and More: Understanding the Microserv...YOW! Perth: Cubes, Hexagons, Triangles, and More: Understanding the Microserv...
YOW! Perth: Cubes, Hexagons, Triangles, and More: Understanding the Microserv...
 
Oracle CodeOne 2019: Descending the Testing Pyramid: Effective Testing Strate...
Oracle CodeOne 2019: Descending the Testing Pyramid: Effective Testing Strate...Oracle CodeOne 2019: Descending the Testing Pyramid: Effective Testing Strate...
Oracle CodeOne 2019: Descending the Testing Pyramid: Effective Testing Strate...
 
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
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecture
 
Developing applications with a microservice architecture (SVforum, microservi...
Developing applications with a microservice architecture (SVforum, microservi...Developing applications with a microservice architecture (SVforum, microservi...
Developing applications with a microservice architecture (SVforum, microservi...
 
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...
 
SVCC Microservices: Decomposing Applications for Testability and Deployability
SVCC Microservices: Decomposing Applications for Testability and Deployability SVCC Microservices: Decomposing Applications for Testability and Deployability
SVCC Microservices: Decomposing Applications for Testability and Deployability
 
Mucon: Not Just Events: Developing Asynchronous Microservices
Mucon: Not Just Events: Developing Asynchronous MicroservicesMucon: Not Just Events: Developing Asynchronous Microservices
Mucon: Not Just Events: Developing Asynchronous Microservices
 
#DevNexus202 Decompose your monolith
#DevNexus202 Decompose your monolith#DevNexus202 Decompose your monolith
#DevNexus202 Decompose your monolith
 
Building a Bank out of Microservices (NDC Sydney, August 2016)
Building a Bank out of Microservices (NDC Sydney, August 2016)Building a Bank out of Microservices (NDC Sydney, August 2016)
Building a Bank out of Microservices (NDC Sydney, August 2016)
 
Developing event-driven microservices with event sourcing and CQRS (Shanghai)
Developing event-driven microservices with event sourcing and CQRS (Shanghai)Developing event-driven microservices with event sourcing and CQRS (Shanghai)
Developing event-driven microservices with event sourcing and CQRS (Shanghai)
 
Introduction to microservices
Introduction to microservicesIntroduction to microservices
Introduction to microservices
 
YOW2018 - Events and Commands: Developing Asynchronous Microservices
YOW2018 - Events and Commands: Developing Asynchronous MicroservicesYOW2018 - Events and Commands: Developing Asynchronous Microservices
YOW2018 - Events and Commands: Developing Asynchronous Microservices
 
Solving distributed data management problems in a microservice architecture (...
Solving distributed data management problems in a microservice architecture (...Solving distributed data management problems in a microservice architecture (...
Solving distributed data management problems in a microservice architecture (...
 
Architecture: Microservices
Architecture: MicroservicesArchitecture: Microservices
Architecture: Microservices
 
Designing loosely coupled services
Designing loosely coupled servicesDesigning loosely coupled services
Designing loosely coupled services
 

Semelhante a Decomposing applications for deployability and scalability #springone2gx #s12gx

Decomposing applications for deployability and scalability (SpringOne China 2...
Decomposing applications for deployability and scalability (SpringOne China 2...Decomposing applications for deployability and scalability (SpringOne China 2...
Decomposing applications for deployability and scalability (SpringOne China 2...Chris Richardson
 
Decomposing applications for scalability and deployability - svcc sv_code_ca...
Decomposing applications for scalability and deployability  - svcc sv_code_ca...Decomposing applications for scalability and deployability  - svcc sv_code_ca...
Decomposing applications for scalability and deployability - svcc sv_code_ca...Chris Richardson
 
Decomposing applications for deployability and scalability (cfopentour india)
Decomposing applications for deployability and scalability (cfopentour india)Decomposing applications for deployability and scalability (cfopentour india)
Decomposing applications for deployability and scalability (cfopentour india)Chris 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
 
Developing modular, polyglot applications with Spring (SpringOne India 2012)
Developing modular, polyglot applications with Spring (SpringOne India 2012)Developing modular, polyglot applications with Spring (SpringOne India 2012)
Developing modular, polyglot applications with Spring (SpringOne India 2012)Chris Richardson
 
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
 
Cloud Foundry Bootcamp
Cloud Foundry BootcampCloud Foundry Bootcamp
Cloud Foundry BootcampJoshua Long
 
Decomposing applications for scalability and deployability (devnexus 2013)
Decomposing applications for scalability and deployability (devnexus 2013)Decomposing applications for scalability and deployability (devnexus 2013)
Decomposing applications for scalability and deployability (devnexus 2013)Chris Richardson
 
Decomposing applications for deployability and scalability (CF India July/Aug...
Decomposing applications for deployability and scalability (CF India July/Aug...Decomposing applications for deployability and scalability (CF India July/Aug...
Decomposing applications for deployability and scalability (CF India July/Aug...Chris Richardson
 
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
 
[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
 
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
 
Evolving big microservice architectures
Evolving big microservice architecturesEvolving big microservice architectures
Evolving big microservice architecturesNikolay Stoitsev
 
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
 
CCA09 Cloud Computing Standards and OCCI
CCA09 Cloud Computing Standards and OCCICCA09 Cloud Computing Standards and OCCI
CCA09 Cloud Computing Standards and OCCIbefreax
 
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
 
[2011-17-C-4] Heroku & database.com
[2011-17-C-4] Heroku & database.com[2011-17-C-4] Heroku & database.com
[2011-17-C-4] Heroku & database.comMitch Okamoto
 

Semelhante a Decomposing applications for deployability and scalability #springone2gx #s12gx (20)

Decomposing applications for deployability and scalability (SpringOne China 2...
Decomposing applications for deployability and scalability (SpringOne China 2...Decomposing applications for deployability and scalability (SpringOne China 2...
Decomposing applications for deployability and scalability (SpringOne China 2...
 
Decomposing applications for scalability and deployability - svcc sv_code_ca...
Decomposing applications for scalability and deployability  - svcc sv_code_ca...Decomposing applications for scalability and deployability  - svcc sv_code_ca...
Decomposing applications for scalability and deployability - svcc sv_code_ca...
 
Decomposing applications for deployability and scalability (cfopentour india)
Decomposing applications for deployability and scalability (cfopentour india)Decomposing applications for deployability and scalability (cfopentour india)
Decomposing applications for deployability and scalability (cfopentour india)
 
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
 
Developing modular, polyglot applications with Spring (SpringOne India 2012)
Developing modular, polyglot applications with Spring (SpringOne India 2012)Developing modular, polyglot applications with Spring (SpringOne India 2012)
Developing modular, polyglot applications with Spring (SpringOne India 2012)
 
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)
 
Cloud Foundry Bootcamp
Cloud Foundry BootcampCloud Foundry Bootcamp
Cloud Foundry Bootcamp
 
Decomposing applications for scalability and deployability (devnexus 2013)
Decomposing applications for scalability and deployability (devnexus 2013)Decomposing applications for scalability and deployability (devnexus 2013)
Decomposing applications for scalability and deployability (devnexus 2013)
 
Decomposing applications for deployability and scalability (CF India July/Aug...
Decomposing applications for deployability and scalability (CF India July/Aug...Decomposing applications for deployability and scalability (CF India July/Aug...
Decomposing applications for deployability and scalability (CF India July/Aug...
 
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
 
[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...
 
Final_Presentation
Final_PresentationFinal_Presentation
Final_Presentation
 
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
 
Evolving big microservice architectures
Evolving big microservice architecturesEvolving big microservice architectures
Evolving big microservice architectures
 
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
 
CCA09 Cloud Computing Standards and OCCI
CCA09 Cloud Computing Standards and OCCICCA09 Cloud Computing Standards and OCCI
CCA09 Cloud Computing Standards and OCCI
 
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?
 
[2011-17-C-4] Heroku & database.com
[2011-17-C-4] Heroku & database.com[2011-17-C-4] Heroku & database.com
[2011-17-C-4] Heroku & database.com
 

Mais de 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
 
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
 
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
 
An overview of the Eventuate Platform
An overview of the Eventuate PlatformAn overview of the Eventuate Platform
An overview of the Eventuate PlatformChris Richardson
 
MicroCPH - Managing data consistency in a microservice architecture using Sagas
MicroCPH - Managing data consistency in a microservice architecture using SagasMicroCPH - Managing data consistency in a microservice architecture using Sagas
MicroCPH - Managing data consistency in a microservice architecture using SagasChris Richardson
 
Melbourne Jan 2019 - Microservices adoption anti-patterns: Obstacles to decom...
Melbourne Jan 2019 - Microservices adoption anti-patterns: Obstacles to decom...Melbourne Jan 2019 - Microservices adoption anti-patterns: Obstacles to decom...
Melbourne Jan 2019 - Microservices adoption anti-patterns: Obstacles to decom...Chris Richardson
 

Mais de Chris Richardson (17)

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
 
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
 
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...
 
An overview of the Eventuate Platform
An overview of the Eventuate PlatformAn overview of the Eventuate Platform
An overview of the Eventuate Platform
 
MicroCPH - Managing data consistency in a microservice architecture using Sagas
MicroCPH - Managing data consistency in a microservice architecture using SagasMicroCPH - Managing data consistency in a microservice architecture using Sagas
MicroCPH - Managing data consistency in a microservice architecture using Sagas
 
Melbourne Jan 2019 - Microservices adoption anti-patterns: Obstacles to decom...
Melbourne Jan 2019 - Microservices adoption anti-patterns: Obstacles to decom...Melbourne Jan 2019 - Microservices adoption anti-patterns: Obstacles to decom...
Melbourne Jan 2019 - Microservices adoption anti-patterns: Obstacles to decom...
 

Último

The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdfChristopherTHyatt
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 

Último (20)

The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 

Decomposing applications for deployability and scalability #springone2gx #s12gx

  • 1. Decomposing applications for deployability and scalability Chris Richardson, Author of POJOs in Action, Founder of the original CloudFoundry.com @crichardson crichardson@vmware.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 UI team Accounting team 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 Fred George “Developer Anarchy” 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 42
  • 43. Drawbacks Additional complexity of message broker RPC using messaging 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. Aspects + Actors Dependency Caller Invoker Aspect Implements circuit breaker state machine CircuitBreaker Equivalent of thread Actor pool Worker Dependency Worker Actor Stub Actor 59
  • 60. @DependencyProxy annotation trait RestaurantService { def findNearbyRestaurants(location: Location) : Future[FindNearbyRestaurantResponse] } @Service @DependencyProxy(circuitBreaker = "factualCircuitBreaker", timeoutInMilliseconds=750) class FactualRestaurantService extends RestaurantService { ... } 60
  • 61. Aspect-based Async Execution @Aspect class DependencyInvokingAspect { @Pointcut("execution(* (@DependencyProxy *).*(..))") def dependencyProxyMethods {} @Around("dependencyProxyMethods()") def invoke(jp: ProceedingJoinPoint) = { val a = AnnotationUtils.findAnnotation(jp.getTarget.getClass, classOf[DependencyProxy]) val actor = findActor(a) val timeout = Timeout(a.timeoutInMilliseconds milliseconds) actor.ask(InvokeDependency( () => jp.proceed())) (timeout) } } Ask actor to invoke jp.proceed() and return Future 61
  • 63. Agenda The (sometimes evil) monolith Decomposing applications into services How do services communicate? Presentation layer design How Cloud Foundry helps 63
  • 64. Modular application Choice of presentation layer technology 64
  • 65. NodeJS is the fashionable technology 65
  • 66. Why NodeJS? Familiar Javascript High-performance, scalable event-driven, non-blocking I/O model Over 13,000 modules developed by the community Many JavaScript client frameworks have a NodeJS counterpart, e.g. socket.io 66
  • 67. NodeJS example Handle HTTP Handle file read var http = require('http'); request var fs = require("fs"); http.createServer(function (req, res) { fs.readFile('somefile.txt', function (err, data) { if (err) throw err; res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(data); }); }).listen(1337, '127.0.0.1'); console.log('Server running at http://127.0.0.1:1337/'); 67
  • 68. Socket.io - server-side var express = require('express') , http = require('http') , app = express() Serve static content from public dir , server = http.createServer(app) , io = require('socket.io').listen(server) ; app.configure(function(){ Listen on port 8081 app.use(express.static(__dirname + '/public')); }); server.listen(8081); Create a timer for socket.io client io.sockets.on('connection', function (socket) { var counter = 0; function tick() { counter = counter + 1; Publish event socket.emit('tick', counter); }; setInterval(tick, 1000); }); 68
  • 69. Socket.io - client-side <html> <body> The time 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()); 69
  • 70. NodeJS isn’t the only game in town JVM-based http://vertx.io/ 70
  • 71. 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 ... 71
  • 72. NodeJS - using RESTful WS and AMQP REST Service REST Requests Node JS Events socket.io AMQP AMQP RabbitMQ Service 72
  • 73. Agenda The (sometimes evil) monolith Decomposing applications into services How do services communicate? Presentation layer design How Cloud Foundry helps 73
  • 74. Original architecture WAR StoreFrontUI Accounting Service MySQL Browser Apache InventoryService Database Shipping Service Tomcat 74
  • 75. Modern architecture Desktop Browser Native Mobile application HTML5 mobile application StoreUI StoreUI StoreUI NodeJS Asynchronous, scalable NodeJS Javascript communication StoreUI RabbitMQ Spring/Scala web application Inventory Service Shipping Service Standalone Inventory Service Shipping Service “headless” Spring/ Java applications MySQL Customer Redis Inventory Mongo Order Billing Service Database Database Database 75
  • 76. Traditional tools: monolithic applications 76
  • 77. 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... 77
  • 78. Easy polyglot application deployment and service provisioning OSS community vFabric Postgres Ap p lica Private   'o Data Services Clouds   n  S erv i ce  In ter fac vFabric e RabbitMQTM Public Clouds Msg Services Micro Clouds Other Services Additional partners services …
  • 79. Creating a platform service instance $ vmc create-service mysql --name mysql1 Creating Service: OK $ vmc services ...... =========== Provisioned Services ============ +-------------+---------+ | Name | Service | +-------------+---------+ | mysql1 | mysql | +-------------+---------+
  • 80. 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 80
  • 81. 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 81
  • 82. 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 82
  • 83. 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 83
  • 84. Using Caldecott to tunnel into your services 84
  • 85. Caldecott = TCP over HTTP native protocol native HTTP Service Caldecott protocol Caldecott gem Service client Port application NNN Your computer Cloud Foundry 85
  • 86. 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
  • 87. …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>
  • 88. Running JUnit test with Caldecott Configure your test code to use port + connection info 88
  • 89. Summary 89
  • 90. Monolithic applications are simple to develop and deploy BUT have significant drawbacks 90
  • 91. 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 91
  • 92. 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
  • 93. @crichardson crichardson@vmware.com http://slideshare.net/chris.e.richardson/ Questions? www.cloudfoundry.com @cloudfoundry