SlideShare a Scribd company logo
From concept to cloud:
A look at modern software
       development
   From concept to cloud:
                  Chris Richardson

  A look Author original CloudFoundry.com
             atthe of POJOs in Action
      Founder of
                   modern software
            development
              crichardson@vmware.com
                  @crichardson
               plainoldobjects.com
                Chris Richardson
           Author of POJOs in Action,
    Founder of the original CloudFoundry.com
     crichardson@vmware.com, @crichardson
               plainoldobjects.com
About Chris
(About Chris)
About Chris()
About Chris
About Chris




http://www.theregister.co.uk/2009/08/19/springsource_cloud_foundry/
vmc push About-Chris

     Developer Advocate for



Signup at http://cloudfoundry.com

     Promo code: sgce2012
Dreams of my childhood


             Published in 1968
The vision
                  HAL 9000

        .... is an artificial intelligence

          became operational on

             12 January 1992.....

So how are we doing?
The reality



         Floor cleaning
             robot
The reality




http://en.wikipedia.org/wiki/IBM_Watson
                                           cluster of ninety IBM Power 750 servers
                                           with a total of 2880 POWER7 processor
                                               cores and 16 Terabytes of RAM.
We still have a long way
 to go before we can
       build HAL

  But despite that....
Today, a small team of
        people can easily build
         an application that’s
          used by millions of
         people world-wide
http://highscalability.com/blog/2012/5/7/startups-are-creating-a-new-
                     system-of-the-world-for-it.html
Endpoints everywhere
The web
Cloud Computing




http://en.wikipedia.org/wiki/Cloud_computing
How did we get here?
Many of the
    fundamentals of
    computing were
invented before many of
     us were born
Computer hardware
1948 - First computer
2010
                                                  30 tons
2000
                                                   167 m2
1990                                              150 KW
1980
                                                40 divs/second
1970


1960


1950       http://en.wikipedia.org/wiki/ENIAC

1940
1956 - Hard drive
                                                       3.7 Mbit

                                             Weighed over a ton

                                                 Designed to fit
                                                 through a door


http://boingboing.net/2010/06/24/ibm-hard-disk-drive.html
1971 - microprocessor
                                                      4 bit

                                                 108-740 kHz

                                                2,300 transistors


  http://en.wikipedia.org/wiki/Microprocessor
The power of Moore’s law




http://www.gotw.ca/publications/concurrency-ddj.htm
Hard disk capacity
In my career
               1982
               RM 380Z
               4 Mhz 8-bit Z80
               32K RAM
               100K floppy


2012
MacBookPro
2.5 Ghz Quad core 64 bit Intel i7
256K/core + 8M cache,16G RAM
512G SSD drive
Machrone’s law

    “...the price of the
computer you want to buy
 will always be $5000*...”


                 * Today it’s $3000
Wirth’s law

“Software is getting slower more
 rapidly than hardware becomes
              faster.”
Programming languages
1958 - Lisp
2010

       (defun factorial (n)                garbage collection
2000
         (if (<= n 1)                        dynamic typing
1990         1                           self-hosting compiler
1980         (* n (factorial (- n 1))))) tree data structures
1970


1960


1950           http://en.wikipedia.org/wiki/
              Lisp_(programming_language)
1940
1960 - Algol 60
       procedure Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k);
2010     value n, m;                                                        Many
         array a; integer n, m, i, k; real y;
2000   begin integer p, q;                                                languages
         y := 0; i := k := 1;
         for p:=1 step 1 until n do
                                                                       including Java
1990
         for q:=1 step 1 until m do                                     are derived
            if abs(a[p, q]) > y then
1980
                begin y := abs(a[p, q]);                                 from Algol
                i := p; k := q
1970            end
       end Absmax
1960

                     http://en.wikipedia.org/wiki/Algol_60
1950


1940
1967 - Simula
2010


2000                                         class-based object-
1990                                               oriented
                                                programming
1980


1970


1960

       http://en.wikipedia.org/wiki/Simula
1950


1940
So what have programming
 language designers been
     doing since then?
1995 - Java
                                Not innovative BUT
2010


2000


1990
                 Brought garbage collection, object-
                  oriented programming, exception
1980
                  handling, safety ... to mainstream
1970
                             developers
1960


1950
       Gosling “Java is a blue collar
                                        google “Gosling the feel of Java”
                language”
1940
Tools and techniques
1980s - Cool IDEs for Lisp
         and Smalltalk
2010
       Editor
2000

                              Class
1990
                              List
1980
        Repl
1970


1960                         Class
                           hierarchy
1950
       Debugger
1940
1990s
2010
       • CVS - Lockless version management
2000
       • DVCS - distributed version control
1990   • Refactoring
1980   • Agile/XP starts to become popular
1970
       • Mosaic web browser
1960
       • Web crawlers
1950


1940                                 http://www2.jpl.nasa.gov/sl9/
2000s - online developer
             community
        • Explosion of open-source
2010




        • Binary artifact repositories - 41K maven.org
2000


1990


1980    • Github.com social coding - 1M projects!
1970


1960


1950


1940
2000s - DevOps, NoOps,
   Continuous Deployment, etc
2010
       • Developers responsible for testing,
2000
         operations, ...
1990

       • Continuous deployment: update production
1980
         many times a day
       • Chaos monkeys - constantly verify that the
1970


1960
         system can tolerate failure
1950
         http://highscalability.com/blog/2012/5/7/startups-are-creating-a-new-system-of-the-world-for-it.html


1940
William Gibson

  “The future is already here –
it's just not evenly distributed.”
   Ideas take a long time to
  diffuse through the software
           community
Where is here?
Polyglot applications
 NoSQL databases
 Cloud Computing
Until ~2004 Java was
the one language to
    rule them all
Some developers
became frustrated with
    the perceived
  complexity of Java
Ruby on Rails became popular

• Web application framework for Ruby
• Significantly more productive
• Simplicity of Convention over Configuration
• Motivated the Java community to improve:
 • e.g. Spring became even easier to use
                    But...
…Highlighted problems with Java

    • Tedious collection processing
    • Painful object construction code
    • Tedious XML processing
    • Types: verboseness and complexity of
      generics
    • Limited support for DSLs
Reopened the debate about programming
              languages
Alternative languages

• Ruby
• Groovy
• Clojure
• Scala
• JavaScript/NodeJS
Closures
scala> val numbers = Array(1,2,3,4,5)
numbers: Array[Int] = Array(1, 2, 3, 4, 5)

scala> val oddNumbers = numbers.filter((x => x % 2 == 1))
oddNumbers: Array[Int] = Array(1, 3, 5)




scala> val doubled = numbers.map(_ * 2)
doubled: Array[Int] = Array(2, 4, 6, 8, 10)
XML processing

scala> val xml = <foo><bar>baz</bar></foo>
xml: scala.xml.Elem = <foo><bar>baz</bar></foo>

scala> (xml  "bar").text
res9: String = “baz”
Meta-programming
Computer programs that modify
         themselves
Grails persistence methods
class Customer {
   String name
}
                Customer c = new Customer("John Doe")
                 
                if (!c.save())
                   fail "validation failed: ${c.errors}"
                 
                Customer c2 = Customer.get(c.id)
                 

      def customers = Customer.findAllByName(“Fred”)
Sinatra DSL example
            require 'sinatra'

            get '/hi' do
             "Hello World!"
            end


A Ruby-based Domain Specific Language for web
               programming
So what should we do
with these languages?
Traditional web application architecture
                            WAR


                        StoreFrontUI


                           Billing
                          Service

                         Customer      MySQL
Browser        Apache   Management     Database

                          Inventory
                           Service


Simple to                 Shipping
                          Service

     develop             Tomcat
       test
     deploy
      scale
But there are problems
• Inadequate for modern, real-time web applications
  (need NodeJS)
• Obstacle to frequent deployments
• Slows down IDE and dev/test cycle
• Obstacle to scaling development
• Requires long term commitment to technology
  stack
Modular, polyglot application architecture
                        Desktop Browser               Native Mobile application         HTML5 mobile application

                           StoreUI                           StoreUI                           StoreUI



           Asynchronous,                                      NodeJS
                                                                                                        Javascript
              scalable                                        StoreUI
           communication

                                                            RabbitMQ


                     Spring/
   Rails                                  Inventory
                   Scala web                                                      Shipping Service
                                           Service
                   application



    Customer                                          Inventory                       Order
                        Billing Service
   Management                                         Database                       Database
                                                                                                             Standalone
                                                                                                              “headless”
                Customer                                                                                      Spring/Java
                Database                                                                                     applications
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
There are drawbacks
• Complexity: Architectural, development,
  deployment
• Deciding when to use it
 • In the beginning: you don’t need it and it will
    slow you down
  • When you do need it: refactoring existing code
    is painful
But there are many benefits
•   Scales development: focused two pizza devops teams
    •   Deploy services independently
    •   Scale services independently
•   Improves fault isolation
•   Enforces well defined interfaces between components
•   Eliminates long-term commitment to a single technology stack




Modular, polyglot applications
If services are small...

• Regularly rewrite using a better technology stack
• Pick the best developers rather than best <pick a
  language> developers     polyglot culture

• Adapt system to changing requirements and
  better technology without a total rewrite
Moreover: you are not the same you ...
•   50 to 70 billion of your cells die each day
                                                             Can we build software
•   Cell lifetimes:
                                                              systems with these
    •    hours - some white blood cells
                                                                characteristics?
    •    days - stomach lining cells
    •    years - bone cells                                Too much technical debt
    •    lifetime - brain cells                                component death?
•   Yet you (the system) remains intact




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

                                             http://dreamsongs.com/Files/WhitherSoftware.pdf
Polyglot applications
 NoSQL databases
 Cloud Computing
Relational databases
have been the place to
   store your data
Limitations of relational
           databases
•   Scaling
    •   Despite Moore’s law vertical scaling is limited/expensive
    •   Horizontal scaling is limited
•   Distribution
•   Updating schema
•   O/R impedance mismatch
•   Handling semi-structured data
Solution: Use NoSQL
  Benefits                Drawbacks

• Higher performance   • Limited transactions
• Higher scalability   • Relaxed consistency
• Richer data-model    • Unconstrained data
• Schema-less
NoSQL databases
Data Model                                     Examples

Key-value                                      Redis,Voldemort

Document                                       MongoDB, CouchDb

Extensible columns/Column-                     Cassandra, Hbase, SimpleDB,
oriented                                       DynamoDB
Graph                                          Neo4j


     http://nosql-database.org/ lists 122+ NoSQL databases
Redis

• Advanced key-value store   K1   V1



• Very fast                  K2   V2




• Optional persistence
                             K3   V2
MongoDB: fast, scalable, document oriented
                                    Server
                      Database: Food To Go
                    Collection: Restaurants
   {
       "_id" : ObjectId("4bddc2f49d1505567c6220a0")
       "name": "Ajanta",
       "serviceArea": ["94619", "99999"],             BSON = binary
       "openingHours": [
            {
                                                      JSON
                "dayOfWeek": 1,
               "open": 1130,
               "close": 1430 },
                                                      Sequence of
            {                                         bytes on disk
                 "dayOfWeek": 2,
                 "open": 1130,
                                                      è fast i/o
                 "close": 1430
             }, …
        ]
   }
Cassandra: very scalable
             Application                          Application


Cassandra cluster                   Cassandra cluster


                Node 1                              Node 1



   Node 4                  Node 2      Node 4                   Node 2



                Node 3                              Node 3



            Datacenter 1                         Datacenter 2
The future is polyglot persistence




                                                                        e.g. Netflix
                                                                        • RDBMS
                                                                        • SimpleDB
                                                                        • Cassandra
                                                                        • Hadoop/Hbase




IEEE Software Sept/October 2010 - Debasish Ghosh / Twitter @debasishg
Polyglot applications
 NoSQL databases
 Cloud Computing
Let’s imagine that you
   want to deploy an app...
• Do you know how much hardware to buy?
• Can you afford it?
• How long does it take to approve, buy and install?
• Who is going to set it up?
• What happens if the traffic increases 10x?
• Can we afford a test lab?
Cloud computing
 empowers us to deal
with these challenges...
Cloud computing defined

 IT delivered as a service
 Over the internet
 Self-service
 Pay per use
The three layers of cloud
        computing

SaaS



 PaaS




  IaaS
Wednesday October 18,
      2006....

AWS evangelist




            .... spoke at the Oakland JUG
Sign up and deploy your
application a few minutes later

                   • Login using your
                     existing Amazon
                     account
                   • Select the web
Benefits of IaaS
   • Agility
   • Pay per use
   • Elasticity
   • Focus on deploying your application
But you need to configure and maintain the
 operating systems, the app servers and the
               databases etc.
Need to move up the stack
      SaaS



       PaaS




       IaaS
PaaS
         =
Application deployment
  and management
         +
Service provisioning
The Open
           Platform as a Service



 Deploy and scale applications in seconds,
without locking yourself into a single cloud

                                      Flex ible,
                                pen,
                           le, O lable
                       Simp Sca
Easy polyglot application deployment and
                 service provisioning
                                                                          OSS community




 vFabric
Postgres
                                                                       Private	
  
                                    Ap




                                                                       Clouds	
  
                                       p




           Data Services
                                      lica
                                         'o
                                           n	
  S




        vFabric
                                                                   Public
                                             erv




      RabbitMQTM
                                                ice




                     Msg Services
                                                                   Clouds
                                                   	
  In
                                                     ter
                                                        fac




                                                               Micro
                                                           e




                                    Other Services
                                                               Clouds
           Additional partners services …
CloudFoundry.COM - Multi-tenant
    PaaS operated by VMware
                     CloudFoundry.COM (beta)
   Services
  Runtimes & Frameworks




                          vCenter / vSphere

  Infrastructure
Micro Cloud Foundry – Industry first     TM




        downloadable PaaS
                          Micro Cloud Foundry
 Services
 Runtimes & Frameworks




                              Your Laptop/PC




   Single VM instance of
       Cloud Foundry
 that runs on a developer’s
        MAC or PC
CloudFoundry.ORG - Community open-source project
                                              Apache2 license
                    CloudFoundry.ORG




                     Your Infrastructure

     Download      Setup                          Deploy Behind
      Code      Environment                BOSH     Firewall
Sinatra + Redis
require 'sinatra'
require 'redis'           Connect to Redis

configure do
	 $r = Redis.new(:host => '127.0.0.1', :port => '6379') if !$r
end

get '/' do
 "Hello World! " + $r.incr("hitcounter").to_s
end
                                                Increment hit
                                                   counter

http://sgce2012.cloudfoundry.com/
From concept to cloud a look at modern software development
Consuming 3rd party
  cloud services
Thousands of 3rd party
      services
   http://www.programmableweb.com/apis/directory




 Number of APIs increasing exponentially
Cloud service trends

• Predominantly REST
• Predominantly JSON
• > billion API calls/day: Twitter, Google, Facebook,
  Netflix, Accuweather, ...
• Increasing number of API-only companies
     http://www.slideshare.net/jmusser/j-musser-apishotnotgluecon2012
Diverse

  Paypal      SendGrid                     Face.com     Google

Cybersource    Twilio      GeoNames        Aviary.com   Yahoo

AlchemyAPI     Tropo      WorldAddresses                Amazon

                                                        Mashery
Amazon Simple Storage Service (S3)
•   Bucket
    •   has a globally unique name, e.g. cloudtools.org.photos
    •   contains objects
•   Objects - 1 byte – 5 Tbytes
•   Pay per use: storage + bandwidth
•   Accessed via RESTful API
    •   PUT – create bucket or object
    •   GET – retrieve object
                                                 1T objects
    •   DELETE – delete an object
                                                 June 2012
face.com - face detection and recognition



http://api.face.com/faces
  /detect.json
?api_key=
&api_secret=
&urls=<url>
&detector=Aggressive
&attributes=all
Twilio - Telephony and SMS
         as a service
 •   REST API
     •   Allocate phone numbers
     •   Make and receive phone calls
     •   Send and receive SMS messages
 •   Pay per use:
     •   Phone number – per month
     •   Phone calls - per-minute
     •   SMS – per SMS sent or received
 •   Example: Salesforce – SMS-based voting for 19,000
     conference attendees
Expose your APIs
        and
build an ecosystem
Where are we going?
Going beyond today’s pop
        culture
   But love is blind and lovers cannot see
   The pretty follies that themselves commit;
   For if they could, Cupid himself would blush
   To see me thus transformed to a boy.

   William Shakespeare, The Mechant of Venice
Gartner hype curve




http://www.gartner.com/technology/research/methodologies/hype-cycle.jsp#
Concurrency
Clock speeds have plateaued




http://www.gotw.ca/publications/concurrency-ddj.htm
Multi core is the future

• Dual core A5 for iPhone 4S
• Quad core Intel i7 for laptops
• 10 core Intel Xeon Processor
• 3072 core NVidia Tesla Kepler
Sometimes we can use request-
  level parallelism and let the
    container worry about it
        BUT not always...
But concurrent
programming is difficult
The problem
            =
   Mutable state that’s
shared between multiple
  threads (using locks)
Not thread safe
public class InventoryTracker {

    private int inStock;
    private int sold = 0;

    public InventoryTracker(int initialInventory) {
      this.inStock = initialInventory;
    }

    public int getInStock() { return inStock; }

    public int sell(int units) {
      inStock -= units;
      sold += units;
      return inStock;
    }
}
Thread safe
public class InventoryTracker {

    private int inStock;
    private int sold = 0;

    public InventoryTracker(int initialInventory) {
      this.inStock = initialInventory;
    }

    public synchronized int getInStock() { return inStock; }

    public synchronized int sell(int units) {
      inStock -= units;
      sold += units;
      return inStock;
    }
}
NodeJS - Event driven
•   Single threaded runtime         no concurrency

•   Runs an event loop that waits for i/o events
•   i/o event      callback function

    •   Updates state
    •   Publishes events      triggers more callbacks)

    •   Initiates i/o, registering callbacks
                                               Mutable state that’s
    •   Returns                                 shared between
                                                multiple threads
NodeJS example
var http = require('http');
var fs = require('fs');                            HTTP request handler
var url = require('url');

var inStock = 100;
var sold = 0;

http.createServer(function (req, res) {
	

    var quantity = parseInt(url.parse(req.url, true).query.quantity);
	

    inStock -= quantity;
	

    sold += quantity;
	

    var message = "inStock=" + inStock + ", sold=" + sold;
	

    res.end(message);
}).listen(1337, "127.0.0.1");

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


                                         http://127.0.0.1:1337?quantity=1
Scala Actors
• Actor = object that asynchronously exchanges
  immutable messages with other actors
• Actor processes one message at a time
  • Sends messages
  • Updates its private mutable state
  • Creates new actors
• No shared state                    Mutable state that’s
                                         shared between
                                         multiple threads
Scala example
case class Sell(quantity: Int)                                   Message types
case class Sale(inStock : Int, sold : Int)

class InventoryTracker(initialInventory : Int) extends Actor {
  var inStock = initialInventory
  var sold = 0

 def receive = {
   case Sell(quantity) =>                      Update state
     inStock -= quantity
     sold += quantity
     sender ! Sale(inStock, sold)

}
 }
                                                  Send reply
           case class Order(quantity: Int)

           class StoreFront(inventoryTracker: ActorRef) extends Actor {
            var numberOfOrders = 0

            def receive = {
              case Order(quantity) =>                               Send message
                numberOfOrders += 1
                inventoryTracker ! Sell(quantity)
              case Sale(inStock, sold) =>
                 println("numberOfOrders=" + numberOfOrders + ",inStock=" +
                         inStock + ", sold=" + sold)                             Handle reply
            }
           }
Pure functional
            programming
• Eliminates mutable state
                         BUT
• I/O and state management require Monads
• Monads are extremely difficult to learn
                                  Mutable state that’s
                                   shared between
                                   multiple threads
Clojure - a modern LISP
•   Practical functional programming language
•   Runs on the JVM
•   Core data structures are immutable
                                BUT
•   Ref = object that holds a mutable reference to a value
•   Refs can only be updated within a transaction
     •   Software Transaction Memory
     •   Atomic, Consistent, Isolated
                                               Mutable state that’s
     •   No explicit locks                   shared between multiple
                                                     threads
Clojure STM example
                                                                  Create refs
(defrecord InventoryTracker [in-stock sold])

(defn make-inventory-tracker [initial-inventory]
	

 (InventoryTracker. (ref initial-inventory) (ref 0)))
                                                                     Update refs
(defn sale [tracker quantity]
	

 (dosync
	

   (let [new-in-stock (alter (:in-stock tracker) - quantity)
	

          new-sold (alter (:sold tracker) + quantity)
	

          ]
	

      [new-in-stock new-sold]
	

      )))

                                                                         dosync
(def it (make-inventory-tracker 100))                                       =
                                                                      a transaction
(sale it 25)
Final thoughts
Software development is an old
... yet immature profession
Multi-core programming is a challenge
                       BUT
The cloud enables anyone with a good idea to
create an application that touches the lives of
millions of people
Thank you!
              Chris Richardson

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

          crichardson@vmware.com
                @crichardson
             plainoldobjects.com

Signup @ cloudfoundry.com Promo code: sgce2012

More Related Content

ODP
Como triunfar con tu proyecto en un hackatón
PDF
From concept to cloud (cf opentour india)
PDF
Introduction to VLSI Design
PDF
Is the Browser a Transitional Technology?
ODP
Node js - layout
PDF
Web application development - The past, the present, the future
PDF
.NET, OSS & Mono
Como triunfar con tu proyecto en un hackatón
From concept to cloud (cf opentour india)
Introduction to VLSI Design
Is the Browser a Transitional Technology?
Node js - layout
Web application development - The past, the present, the future
.NET, OSS & Mono

Similar to From concept to cloud a look at modern software development (20)

KEY
Using Smalltalk for controlling robotics systems
PDF
History of ICT @ DDVE
PPTX
Commoditization
PPTX
introduction.pptxFafafaffaffffffffffffffffffff
PDF
You Call that Micro, Mr. Docker? How OSv and Unikernels Help Micro-services S...
PDF
My personal journey through the World of Open Source! How What Was Old Beco...
PDF
Dirty - How simple is your database?
PDF
Build Programming Language Runtime with LLVM
PPT
Teknologi Aplikasi Web I : Internet
ODP
Docker AWS TechCONNECT Boston, 28-July-2015
PDF
3dfx, nvidia, Moore's Law and more...
PPTX
(java2days) Is the Future of Java Cloudy?
PPTX
PDF
languages.map(&:latest).reduce(&:future).sort.first - Rupy Campinas 2015
PDF
Docker in development (Story)
PDF
Apt get no more let Vagrant, Puppet and Docker take the stage
PDF
DockerCon EU 2015: Day 1 General Session
PDF
RISC-V software state of the union
PDF
Scalable Networking
PDF
Varnish, The Good, The Awesome, and the Downright Crazy.
Using Smalltalk for controlling robotics systems
History of ICT @ DDVE
Commoditization
introduction.pptxFafafaffaffffffffffffffffffff
You Call that Micro, Mr. Docker? How OSv and Unikernels Help Micro-services S...
My personal journey through the World of Open Source! How What Was Old Beco...
Dirty - How simple is your database?
Build Programming Language Runtime with LLVM
Teknologi Aplikasi Web I : Internet
Docker AWS TechCONNECT Boston, 28-July-2015
3dfx, nvidia, Moore's Law and more...
(java2days) Is the Future of Java Cloudy?
languages.map(&:latest).reduce(&:future).sort.first - Rupy Campinas 2015
Docker in development (Story)
Apt get no more let Vagrant, Puppet and Docker take the stage
DockerCon EU 2015: Day 1 General Session
RISC-V software state of the union
Scalable Networking
Varnish, The Good, The Awesome, and the Downright Crazy.
Ad

More from Software Guru (20)

PDF
Hola Mundo del Internet de las Cosas
PDF
Estructuras de datos avanzadas: Casos de uso reales
PPTX
Building bias-aware environments
PDF
El secreto para ser un desarrollador Senior
PDF
Cómo encontrar el trabajo remoto ideal
PDF
Automatizando ideas con Apache Airflow
PPTX
How thick data can improve big data analysis for business:
PDF
Introducción al machine learning
PDF
Democratizando el uso de CoDi
PDF
Gestionando la felicidad de los equipos con Management 3.0
PDF
Taller: Creación de Componentes Web re-usables con StencilJS
PPTX
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
PDF
¿Qué significa ser un programador en Bitso?
PDF
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
PDF
Pruebas de integración con Docker en Azure DevOps
PDF
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
PDF
Así publicamos las apps de Spotify sin stress
PPTX
Achieving Your Goals: 5 Tips to successfully achieve your goals
PDF
Acciones de comunidades tech en tiempos del Covid19
PDF
De lo operativo a lo estratégico: un modelo de management de diseño
Hola Mundo del Internet de las Cosas
Estructuras de datos avanzadas: Casos de uso reales
Building bias-aware environments
El secreto para ser un desarrollador Senior
Cómo encontrar el trabajo remoto ideal
Automatizando ideas con Apache Airflow
How thick data can improve big data analysis for business:
Introducción al machine learning
Democratizando el uso de CoDi
Gestionando la felicidad de los equipos con Management 3.0
Taller: Creación de Componentes Web re-usables con StencilJS
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
¿Qué significa ser un programador en Bitso?
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Pruebas de integración con Docker en Azure DevOps
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
Así publicamos las apps de Spotify sin stress
Achieving Your Goals: 5 Tips to successfully achieve your goals
Acciones de comunidades tech en tiempos del Covid19
De lo operativo a lo estratégico: un modelo de management de diseño
Ad

Recently uploaded (20)

PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Approach and Philosophy of On baking technology
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
KodekX | Application Modernization Development
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Electronic commerce courselecture one. Pdf
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Network Security Unit 5.pdf for BCA BBA.
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PPT
Teaching material agriculture food technology
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Chapter 3 Spatial Domain Image Processing.pdf
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Dropbox Q2 2025 Financial Results & Investor Presentation
Approach and Philosophy of On baking technology
20250228 LYD VKU AI Blended-Learning.pptx
Advanced methodologies resolving dimensionality complications for autism neur...
Unlocking AI with Model Context Protocol (MCP)
CIFDAQ's Market Insight: SEC Turns Pro Crypto
KodekX | Application Modernization Development
Per capita expenditure prediction using model stacking based on satellite ima...
Electronic commerce courselecture one. Pdf
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Understanding_Digital_Forensics_Presentation.pptx
Network Security Unit 5.pdf for BCA BBA.
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Teaching material agriculture food technology
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows

From concept to cloud a look at modern software development

  • 1. From concept to cloud: A look at modern software development From concept to cloud: Chris Richardson A look Author original CloudFoundry.com atthe of POJOs in Action Founder of modern software development crichardson@vmware.com @crichardson plainoldobjects.com Chris Richardson Author of POJOs in Action, Founder of the original CloudFoundry.com crichardson@vmware.com, @crichardson plainoldobjects.com
  • 7. vmc push About-Chris Developer Advocate for Signup at http://cloudfoundry.com Promo code: sgce2012
  • 8. Dreams of my childhood Published in 1968
  • 9. The vision HAL 9000 .... is an artificial intelligence became operational on 12 January 1992..... So how are we doing?
  • 10. The reality Floor cleaning robot
  • 11. The reality http://en.wikipedia.org/wiki/IBM_Watson cluster of ninety IBM Power 750 servers with a total of 2880 POWER7 processor cores and 16 Terabytes of RAM.
  • 12. We still have a long way to go before we can build HAL But despite that....
  • 13. Today, a small team of people can easily build an application that’s used by millions of people world-wide http://highscalability.com/blog/2012/5/7/startups-are-creating-a-new- system-of-the-world-for-it.html
  • 17. How did we get here?
  • 18. Many of the fundamentals of computing were invented before many of us were born
  • 20. 1948 - First computer 2010 30 tons 2000 167 m2 1990 150 KW 1980 40 divs/second 1970 1960 1950 http://en.wikipedia.org/wiki/ENIAC 1940
  • 21. 1956 - Hard drive 3.7 Mbit Weighed over a ton Designed to fit through a door http://boingboing.net/2010/06/24/ibm-hard-disk-drive.html
  • 22. 1971 - microprocessor 4 bit 108-740 kHz 2,300 transistors http://en.wikipedia.org/wiki/Microprocessor
  • 23. The power of Moore’s law http://www.gotw.ca/publications/concurrency-ddj.htm
  • 25. In my career 1982 RM 380Z 4 Mhz 8-bit Z80 32K RAM 100K floppy 2012 MacBookPro 2.5 Ghz Quad core 64 bit Intel i7 256K/core + 8M cache,16G RAM 512G SSD drive
  • 26. Machrone’s law “...the price of the computer you want to buy will always be $5000*...” * Today it’s $3000
  • 27. Wirth’s law “Software is getting slower more rapidly than hardware becomes faster.”
  • 29. 1958 - Lisp 2010 (defun factorial (n) garbage collection 2000 (if (<= n 1) dynamic typing 1990 1 self-hosting compiler 1980 (* n (factorial (- n 1))))) tree data structures 1970 1960 1950 http://en.wikipedia.org/wiki/ Lisp_(programming_language) 1940
  • 30. 1960 - Algol 60 procedure Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k); 2010 value n, m; Many array a; integer n, m, i, k; real y; 2000 begin integer p, q; languages y := 0; i := k := 1; for p:=1 step 1 until n do including Java 1990 for q:=1 step 1 until m do are derived if abs(a[p, q]) > y then 1980 begin y := abs(a[p, q]); from Algol i := p; k := q 1970 end end Absmax 1960 http://en.wikipedia.org/wiki/Algol_60 1950 1940
  • 31. 1967 - Simula 2010 2000 class-based object- 1990 oriented programming 1980 1970 1960 http://en.wikipedia.org/wiki/Simula 1950 1940
  • 32. So what have programming language designers been doing since then?
  • 33. 1995 - Java Not innovative BUT 2010 2000 1990 Brought garbage collection, object- oriented programming, exception 1980 handling, safety ... to mainstream 1970 developers 1960 1950 Gosling “Java is a blue collar google “Gosling the feel of Java” language” 1940
  • 35. 1980s - Cool IDEs for Lisp and Smalltalk 2010 Editor 2000 Class 1990 List 1980 Repl 1970 1960 Class hierarchy 1950 Debugger 1940
  • 36. 1990s 2010 • CVS - Lockless version management 2000 • DVCS - distributed version control 1990 • Refactoring 1980 • Agile/XP starts to become popular 1970 • Mosaic web browser 1960 • Web crawlers 1950 1940 http://www2.jpl.nasa.gov/sl9/
  • 37. 2000s - online developer community • Explosion of open-source 2010 • Binary artifact repositories - 41K maven.org 2000 1990 1980 • Github.com social coding - 1M projects! 1970 1960 1950 1940
  • 38. 2000s - DevOps, NoOps, Continuous Deployment, etc 2010 • Developers responsible for testing, 2000 operations, ... 1990 • Continuous deployment: update production 1980 many times a day • Chaos monkeys - constantly verify that the 1970 1960 system can tolerate failure 1950 http://highscalability.com/blog/2012/5/7/startups-are-creating-a-new-system-of-the-world-for-it.html 1940
  • 39. William Gibson “The future is already here – it's just not evenly distributed.” Ideas take a long time to diffuse through the software community
  • 41. Polyglot applications NoSQL databases Cloud Computing
  • 42. Until ~2004 Java was the one language to rule them all
  • 43. Some developers became frustrated with the perceived complexity of Java
  • 44. Ruby on Rails became popular • Web application framework for Ruby • Significantly more productive • Simplicity of Convention over Configuration • Motivated the Java community to improve: • e.g. Spring became even easier to use But...
  • 45. …Highlighted problems with Java • Tedious collection processing • Painful object construction code • Tedious XML processing • Types: verboseness and complexity of generics • Limited support for DSLs Reopened the debate about programming languages
  • 46. Alternative languages • Ruby • Groovy • Clojure • Scala • JavaScript/NodeJS
  • 47. Closures scala> val numbers = Array(1,2,3,4,5) numbers: Array[Int] = Array(1, 2, 3, 4, 5) scala> val oddNumbers = numbers.filter((x => x % 2 == 1)) oddNumbers: Array[Int] = Array(1, 3, 5) scala> val doubled = numbers.map(_ * 2) doubled: Array[Int] = Array(2, 4, 6, 8, 10)
  • 48. XML processing scala> val xml = <foo><bar>baz</bar></foo> xml: scala.xml.Elem = <foo><bar>baz</bar></foo> scala> (xml "bar").text res9: String = “baz”
  • 50. Grails persistence methods class Customer { String name } Customer c = new Customer("John Doe")   if (!c.save()) fail "validation failed: ${c.errors}"   Customer c2 = Customer.get(c.id)   def customers = Customer.findAllByName(“Fred”)
  • 51. Sinatra DSL example require 'sinatra' get '/hi' do "Hello World!" end A Ruby-based Domain Specific Language for web programming
  • 52. So what should we do with these languages?
  • 53. Traditional web application architecture WAR StoreFrontUI Billing Service Customer MySQL Browser Apache Management Database Inventory Service Simple to Shipping Service develop Tomcat test deploy scale
  • 54. But there are problems • Inadequate for modern, real-time web applications (need NodeJS) • Obstacle to frequent deployments • Slows down IDE and dev/test cycle • Obstacle to scaling development • Requires long term commitment to technology stack
  • 55. Modular, polyglot application architecture Desktop Browser Native Mobile application HTML5 mobile application StoreUI StoreUI StoreUI Asynchronous, NodeJS Javascript scalable StoreUI communication RabbitMQ Spring/ Rails Inventory Scala web Shipping Service Service application Customer Inventory Order Billing Service Management Database Database Standalone “headless” Customer Spring/Java Database applications
  • 56. 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
  • 57. There are drawbacks • Complexity: Architectural, development, deployment • Deciding when to use it • In the beginning: you don’t need it and it will slow you down • When you do need it: refactoring existing code is painful
  • 58. But there are many benefits • Scales development: focused two pizza devops teams • Deploy services independently • Scale services independently • Improves fault isolation • Enforces well defined interfaces between components • Eliminates long-term commitment to a single technology stack Modular, polyglot applications
  • 59. If services are small... • Regularly rewrite using a better technology stack • Pick the best developers rather than best <pick a language> developers polyglot culture • Adapt system to changing requirements and better technology without a total rewrite
  • 60. Moreover: you are not the same you ... • 50 to 70 billion of your cells die each day Can we build software • Cell lifetimes: systems with these • hours - some white blood cells characteristics? • days - stomach lining cells • years - bone cells Too much technical debt • lifetime - brain cells component death? • Yet you (the system) remains intact http://dreamsongs.com/Files/ DesignBeyondHumanAbilitiesSimp.pdf http://dreamsongs.com/Files/WhitherSoftware.pdf
  • 61. Polyglot applications NoSQL databases Cloud Computing
  • 62. Relational databases have been the place to store your data
  • 63. Limitations of relational databases • Scaling • Despite Moore’s law vertical scaling is limited/expensive • Horizontal scaling is limited • Distribution • Updating schema • O/R impedance mismatch • Handling semi-structured data
  • 64. Solution: Use NoSQL Benefits Drawbacks • Higher performance • Limited transactions • Higher scalability • Relaxed consistency • Richer data-model • Unconstrained data • Schema-less
  • 65. NoSQL databases Data Model Examples Key-value Redis,Voldemort Document MongoDB, CouchDb Extensible columns/Column- Cassandra, Hbase, SimpleDB, oriented DynamoDB Graph Neo4j http://nosql-database.org/ lists 122+ NoSQL databases
  • 66. Redis • Advanced key-value store K1 V1 • Very fast K2 V2 • Optional persistence K3 V2
  • 67. MongoDB: fast, scalable, document oriented Server Database: Food To Go Collection: Restaurants { "_id" : ObjectId("4bddc2f49d1505567c6220a0") "name": "Ajanta", "serviceArea": ["94619", "99999"], BSON = binary "openingHours": [ { JSON "dayOfWeek": 1, "open": 1130, "close": 1430 }, Sequence of { bytes on disk "dayOfWeek": 2, "open": 1130, è fast i/o "close": 1430 }, … ] }
  • 68. Cassandra: very scalable Application Application Cassandra cluster Cassandra cluster Node 1 Node 1 Node 4 Node 2 Node 4 Node 2 Node 3 Node 3 Datacenter 1 Datacenter 2
  • 69. The future is polyglot persistence e.g. Netflix • RDBMS • SimpleDB • Cassandra • Hadoop/Hbase IEEE Software Sept/October 2010 - Debasish Ghosh / Twitter @debasishg
  • 70. Polyglot applications NoSQL databases Cloud Computing
  • 71. Let’s imagine that you want to deploy an app... • Do you know how much hardware to buy? • Can you afford it? • How long does it take to approve, buy and install? • Who is going to set it up? • What happens if the traffic increases 10x? • Can we afford a test lab?
  • 72. Cloud computing empowers us to deal with these challenges...
  • 73. Cloud computing defined IT delivered as a service Over the internet Self-service Pay per use
  • 74. The three layers of cloud computing SaaS PaaS IaaS
  • 75. Wednesday October 18, 2006.... AWS evangelist .... spoke at the Oakland JUG
  • 76. Sign up and deploy your application a few minutes later • Login using your existing Amazon account • Select the web
  • 77. Benefits of IaaS • Agility • Pay per use • Elasticity • Focus on deploying your application But you need to configure and maintain the operating systems, the app servers and the databases etc.
  • 78. Need to move up the stack SaaS PaaS IaaS
  • 79. PaaS = Application deployment and management + Service provisioning
  • 80. The Open Platform as a Service Deploy and scale applications in seconds, without locking yourself into a single cloud Flex ible, pen, le, O lable Simp Sca
  • 81. Easy polyglot application deployment and service provisioning OSS community vFabric Postgres Private   Ap Clouds   p Data Services lica 'o n  S vFabric Public erv RabbitMQTM ice Msg Services Clouds  In ter fac Micro e Other Services Clouds Additional partners services …
  • 82. CloudFoundry.COM - Multi-tenant PaaS operated by VMware CloudFoundry.COM (beta) Services Runtimes & Frameworks vCenter / vSphere Infrastructure
  • 83. Micro Cloud Foundry – Industry first TM downloadable PaaS Micro Cloud Foundry Services Runtimes & Frameworks Your Laptop/PC Single VM instance of Cloud Foundry that runs on a developer’s MAC or PC
  • 84. CloudFoundry.ORG - Community open-source project Apache2 license CloudFoundry.ORG Your Infrastructure Download Setup Deploy Behind Code Environment BOSH Firewall
  • 85. Sinatra + Redis require 'sinatra' require 'redis' Connect to Redis configure do $r = Redis.new(:host => '127.0.0.1', :port => '6379') if !$r end get '/' do "Hello World! " + $r.incr("hitcounter").to_s end Increment hit counter http://sgce2012.cloudfoundry.com/
  • 87. Consuming 3rd party cloud services
  • 88. Thousands of 3rd party services http://www.programmableweb.com/apis/directory Number of APIs increasing exponentially
  • 89. Cloud service trends • Predominantly REST • Predominantly JSON • > billion API calls/day: Twitter, Google, Facebook, Netflix, Accuweather, ... • Increasing number of API-only companies http://www.slideshare.net/jmusser/j-musser-apishotnotgluecon2012
  • 90. Diverse Paypal SendGrid Face.com Google Cybersource Twilio GeoNames Aviary.com Yahoo AlchemyAPI Tropo WorldAddresses Amazon Mashery
  • 91. Amazon Simple Storage Service (S3) • Bucket • has a globally unique name, e.g. cloudtools.org.photos • contains objects • Objects - 1 byte – 5 Tbytes • Pay per use: storage + bandwidth • Accessed via RESTful API • PUT – create bucket or object • GET – retrieve object 1T objects • DELETE – delete an object June 2012
  • 92. face.com - face detection and recognition http://api.face.com/faces /detect.json ?api_key= &api_secret= &urls=<url> &detector=Aggressive &attributes=all
  • 93. Twilio - Telephony and SMS as a service • REST API • Allocate phone numbers • Make and receive phone calls • Send and receive SMS messages • Pay per use: • Phone number – per month • Phone calls - per-minute • SMS – per SMS sent or received • Example: Salesforce – SMS-based voting for 19,000 conference attendees
  • 94. Expose your APIs and build an ecosystem
  • 95. Where are we going?
  • 96. Going beyond today’s pop culture But love is blind and lovers cannot see The pretty follies that themselves commit; For if they could, Cupid himself would blush To see me thus transformed to a boy. William Shakespeare, The Mechant of Venice
  • 99. Clock speeds have plateaued http://www.gotw.ca/publications/concurrency-ddj.htm
  • 100. Multi core is the future • Dual core A5 for iPhone 4S • Quad core Intel i7 for laptops • 10 core Intel Xeon Processor • 3072 core NVidia Tesla Kepler
  • 101. Sometimes we can use request- level parallelism and let the container worry about it BUT not always...
  • 103. The problem = Mutable state that’s shared between multiple threads (using locks)
  • 104. Not thread safe public class InventoryTracker { private int inStock; private int sold = 0; public InventoryTracker(int initialInventory) { this.inStock = initialInventory; } public int getInStock() { return inStock; } public int sell(int units) { inStock -= units; sold += units; return inStock; } }
  • 105. Thread safe public class InventoryTracker { private int inStock; private int sold = 0; public InventoryTracker(int initialInventory) { this.inStock = initialInventory; } public synchronized int getInStock() { return inStock; } public synchronized int sell(int units) { inStock -= units; sold += units; return inStock; } }
  • 106. NodeJS - Event driven • Single threaded runtime no concurrency • Runs an event loop that waits for i/o events • i/o event callback function • Updates state • Publishes events triggers more callbacks) • Initiates i/o, registering callbacks Mutable state that’s • Returns shared between multiple threads
  • 107. NodeJS example var http = require('http'); var fs = require('fs'); HTTP request handler var url = require('url'); var inStock = 100; var sold = 0; http.createServer(function (req, res) { var quantity = parseInt(url.parse(req.url, true).query.quantity); inStock -= quantity; sold += quantity; var message = "inStock=" + inStock + ", sold=" + sold; res.end(message); }).listen(1337, "127.0.0.1"); console.log('Server running at http://127.0.0.1:1337/'); http://127.0.0.1:1337?quantity=1
  • 108. Scala Actors • Actor = object that asynchronously exchanges immutable messages with other actors • Actor processes one message at a time • Sends messages • Updates its private mutable state • Creates new actors • No shared state Mutable state that’s shared between multiple threads
  • 109. Scala example case class Sell(quantity: Int) Message types case class Sale(inStock : Int, sold : Int) class InventoryTracker(initialInventory : Int) extends Actor { var inStock = initialInventory var sold = 0 def receive = { case Sell(quantity) => Update state inStock -= quantity sold += quantity sender ! Sale(inStock, sold) } } Send reply case class Order(quantity: Int) class StoreFront(inventoryTracker: ActorRef) extends Actor { var numberOfOrders = 0 def receive = { case Order(quantity) => Send message numberOfOrders += 1 inventoryTracker ! Sell(quantity) case Sale(inStock, sold) => println("numberOfOrders=" + numberOfOrders + ",inStock=" + inStock + ", sold=" + sold) Handle reply } }
  • 110. Pure functional programming • Eliminates mutable state BUT • I/O and state management require Monads • Monads are extremely difficult to learn Mutable state that’s shared between multiple threads
  • 111. Clojure - a modern LISP • Practical functional programming language • Runs on the JVM • Core data structures are immutable BUT • Ref = object that holds a mutable reference to a value • Refs can only be updated within a transaction • Software Transaction Memory • Atomic, Consistent, Isolated Mutable state that’s • No explicit locks shared between multiple threads
  • 112. Clojure STM example Create refs (defrecord InventoryTracker [in-stock sold]) (defn make-inventory-tracker [initial-inventory] (InventoryTracker. (ref initial-inventory) (ref 0))) Update refs (defn sale [tracker quantity] (dosync (let [new-in-stock (alter (:in-stock tracker) - quantity) new-sold (alter (:sold tracker) + quantity) ] [new-in-stock new-sold] ))) dosync (def it (make-inventory-tracker 100)) = a transaction (sale it 25)
  • 113. Final thoughts Software development is an old ... yet immature profession Multi-core programming is a challenge BUT The cloud enables anyone with a good idea to create an application that touches the lives of millions of people
  • 114. Thank you! Chris Richardson Author of POJOs in Action Founder of the original CloudFoundry.com crichardson@vmware.com @crichardson plainoldobjects.com Signup @ cloudfoundry.com Promo code: sgce2012