SlideShare une entreprise Scribd logo
1  sur  74
Télécharger pour lire hors ligne
Vert.x:
                   This ain’t your Dad’s Node!




                                           Matt Stine
   Tim Fox
                   Enterprise Java/Cloud Consultant
Father of Vert.x
                               matt.stine@gmail.com
                                http://mattstine.com
                                     Twitter: @mstine
The

C10K
 Problem
SERVER
 PUSH
Ryan Dahl
Father of Node.js




  How?!?!
2008:

Thread Per Request/Response
http://www.xtranormal.com/watch/6995033/mongo-db-is-web-scale
Non-blocking UNIX sockets
But Node
has some
shortcomings...

 1. JavaScript!

 2. Vertical Scaling

 3. Interprocess
 Communication

 4. Event Loop
http://vertx.io
Problem #1:

                       JavaScript


   Brendan Eich
Father of JavaScript
WAT
https://www.destroyallsoftware.com/talks/wat
Solution #1:

                                   Polyglot
                                 Programming
           Neal Ford
Father of Polyglot Programming


    http://memeagora.blogspot.com/2006/12/polyglot-programming.html
Hello World
in every Vert.x language!
Java
Ruby
Python
JavaScript
FUTURE



Theoretically, any JVM language or language that compiles
to a supported language (e.g. ClojureScript ➔ JavaScript)
Problem #2:

    Vertical
    Scaling

Lars Bak
Father of V8
http://nodejs.org/about/
Node: Up and Running
Example 3-11: Using cluster to distribute work
Solution #2:

                 The
                 JVM
James Gosling
Father of Java
The Verticle


               - Unit of Deployment
Verticle

               - Script/Java Class
Vert.x Instance
  How it works it works it works it works
          How      How      How

                             Event loop Event loop Event loop Event loop
Event Loops
    App registers App registers App registers App registers trigger Events trigger Events trigger Events trigg
                                                     Events
      handlers      handlers      handlers      handlershandlers      handlers       handlers       handlers



  • Handlers executed synchronously executed synchronously
              • Handlers executed synchronously executed synchronously
                          • Handlers • Handlers
    – on a single threada single threada single threada single thread
                    – on           – on           – on
  • Use handlersUse handlersUse handlersUse handlers to pass messages
                 • to pass messages messages messages
                                • to pass • to pass
  • Inter/intra application comms
                 • Inter/intra application comms
                                • Inter/intra application comms
                                               • Inter/intra application comms
    – EventBus with EventBus with EventBus with EventBus with messages
                  – messages – messages – messages
    – Safe shared data structuresdata structuresdata structuresdata structures
                  – Safe shared – Safe shared – Safe shared
                             Verticle                                   9         9             9




Runtime.availableProcessors() == 4
Vert.x Instance
              How it works it works it works it works
                      How      How      How

                                         Event loop Event loop Event loop Event loop
         Event Loops
                App registers App registers App registers App registers trigger Events trigger Events trigger Events trigg
                                                                 Events
                  handlers      handlers      handlers      handlershandlers      handlers       handlers       handlers



              • Handlers executed synchronously executed synchronously
                          • Handlers executed synchronously executed synchronously
                                      • Handlers • Handlers
                – on a single threada single threada single threada single thread
                                – on           – on           – on
              • Use handlersUse handlersUse handlersUse handlers to pass messages
                             • to pass messages messages messages
                                            • to pass • to pass
 vertx run    • Inter/intra application comms
                             • Inter/intra application comms
                                            • Inter/intra application comms
                                                           • Inter/intra application comms
 HelloWorld with EventBus with EventBus with EventBus with messages
       – EventBus – messages – messages – messages
       – Safe shared data structuresdata structuresdata structuresdata structures
                     – Safe shared – Safe shared – Safe shared
-instances 4                    Verticle Verticle Verticle Verticle                 9         9             9




       Runtime.availableProcessors() == 4
Concurrency
• Verticle instance assigned thread/event loop.
• Verticle instance ALWAYS executes on
  assigned thread.

• Verticles have isolated classloaders and
  cannot share global state (static members,
  global variables, etc.)

• Can write all code assuming single
  threading.
Tony Hoare
        Father of CSP
        (http://dl.acm.org/citation.cfm?
        doid=359576.359585)




              Problem #3:

  Interprocess
Communication
Node.js Communication Options
• TCP/UDP/UNIX Sockets
• Redis Pub/Sub (http://redis.io/)
• ZeroMQ (http://www.zeromq.org/)
• Process Signaling/Cluster Module
• Eventing Frameworks: Hook.io (dead), JS-
  Signals, Bean, etc.

• Memcached
• Etc...
Solution #3.1:

                       The
                      Event
                       Bus
    Alan Kay
Father of Smalltalk
How it works it works it works it works
        How      How      How

                           Event loop Event loop Event loop Event loop

  App registers App registers App registers App registers trigger Events trigger Events trigger Events trigger
                                                   Events
    handlers      handlers      handlers      handlershandlers      handlers       handlers       handlers



• Handlers executed synchronously executed synchronously
            • Handlers executed synchronously executed synchronously
                        • Handlers • Handlers
  – on a single threada single threada single threada single thread
                  – on           – on           – on
• Use handlersUse handlersUse handlersUse handlers to pass messages
               • to pass messages messages messages
                              • to pass • to pass
• Inter/intra application comms
               • Inter/intra application comms
                              • Inter/intra application comms
                                             • Inter/intra application comms
  – EventBus with EventBus with EventBus with EventBus with messages
                – messages – messages – messages
  – Safe shared data structuresdata structuresdata structuresdata structures
                – Safe shared – Safe shared – Safe shared
                            Verticle       Verticle Verticle Verticle 9         9             9              9




                                           Event Bus
Addressing


• Simply a String
• Dot-style namespacing recommended
• e.g. “messages.inbound.A”
Handler Registration
                     Handler X




messages.inbound.A   Handler Y




                     Handler Z
Handler Registration
Pub/Sub
                              Handler X




Sender   messages.inbound.A   Handler Y




                              Handler Z
Pub/Sub
P2P
                              Handler X




Sender   messages.inbound.A   Handler Y




                              Handler Z
P2P
Sender:




Receiver:
Message Types

• String
• Primitives (int, long, short, float, double, ...)
• Boxed Primitives
• boolean/Boolean
• org.vertx.java.core.json.JsonObject
• org.vertx.java.core.buffer.Buffer
Distributed Vert.x
 orks it works it works it works
 How       How     How                                             How it works it works it works it works
                                                                           How       How     How                                                 How it works it works it works it works
                                                                                                                                                          How     How       How

               Event loop Event loop Event loop Event loop                                   Event loop Event loop Event loop Event loop                                   Event loop Event loop Event loop Event loop

rs App registers App registers App registers trigger Events trigger Events trigger Events trigger registers App registers trigger Events trigger Events trigger Events trigger registers App registers trigger Events trigger Events trigger
                                       Events                    App registers App registers App                    Events                   App registers App registers App                    Events
     handlers      handlers      handlershandlers      handlers handlers
                                                                      handlers handlers
                                                                                     handlers handlers        handlershandlers      handlers handlers
                                                                                                                                                   handlers handlers
                                                                                                                                                                  handlers handlers        handlershandlers      handlers       handlers



executed synchronously executed synchronously
 • Handlers executed synchronously executed synchronously
             • Handlers • Handlers                  • Handlers executed synchronously executed synchronously
                                                                • Handlers executed synchronously executed synchronously
                                                                            • Handlers • Handlers                  • Handlers executed synchronously executed synchronously
                                                                                                                               • Handlers executed synchronously executed synchronously
                                                                                                                                           • Handlers • Handlers
le threada single threada single threada single thread
     – on           – on           – on                             – on a single threada single threada single threada single thread
                                                                                    – on           – on           – on                            – on a single threada single threada single threada single thread
                                                                                                                                                                  – on           – on           – on
ersUsepass messages messages messages messages handlersUsepass messages messages messages messages handlersUse handlersUsepass messages messages messages
 • to handlersUse handlersUsepass
                • to pass • to handlers to pass               • Use          • to handlersUse handlersUsepass
                                                                                            • to pass • to handlers to pass              • Use          • to pass messages
                                                                                                                                                                       • to handlersUse handlers to pass
                                                                                                                                                                                      • to pass
application comms
 • Inter/intra application comms
                • Inter/intra application comms
                               • Inter/intra application comms• Inter/intra application comms
                                                                             • Inter/intra application comms
                                                                                            • Inter/intra application comms
                                                                                                           • Inter/intra application comms Inter/intra application comms
                                                                                                                                         •              • Inter/intra application comms
                                                                                                                                                                       • Inter/intra application comms
                                                                                                                                                                                      • Inter/intra application comms
s with EventBus with EventBus with EventBus with messages
     – messages – messages – messages                               – EventBus with EventBus with EventBus with EventBus with messages
                                                                                  – messages – messages – messages                                – EventBus with EventBus with EventBus with EventBus with messages
                                                                                                                                                                – messages – messages – messages
red data structuresdata structuresdata structuresdata structures
     – Safe shared – Safe shared – Safe shared                      – Safe shared data structuresdata structuresdata structuresdata structures
                                                                                  – Safe shared – Safe shared – Safe shared                       – Safe shared data structuresdata structuresdata structuresdata structures
                                                                                                                                                                – Safe shared – Safe shared – Safe shared
                Verticle       Verticle      Verticle    9
                                                             Verticle9              9
                                                                                              Verticle
                                                                                                   9
                                                                                                             Verticle       Verticle    9
                                                                                                                                            Verticle
                                                                                                                                                   9              9
                                                                                                                                                                            Verticle
                                                                                                                                                                                 9
                                                                                                                                                                                           Verticle       Verticle    9
                                                                                                                                                                                                                          Verticle
                                                                                                                                                                                                                                 9         9




                                                                                                       Event Bus
Into the Browser!
 orks it works it works it works
 How       How     How                                             How it works it works it works it works
                                                                           How       How     How

               Event loop Event loop Event loop Event loop                                   Event loop Event loop Event loop Event loop

rs App registers App registers App registers trigger Events trigger Events trigger Events trigger registers App registers trigger Events trigger Events trigger Events trigger
                                       Events                    App registers App registers App                    Events
     handlers      handlers      handlershandlers      handlers handlers
                                                                      handlers handlers
                                                                                     handlers handlers        handlershandlers      handlers       handlers       handlers



executed synchronously executed synchronously
 • Handlers executed synchronously executed synchronously
             • Handlers • Handlers                  • Handlers executed synchronously executed synchronously
                                                                • Handlers executed synchronously executed synchronously
                                                                            • Handlers • Handlers
le threada single threada single threada single thread
     – on           – on           – on                             – on a single threada single threada single threada single thread
                                                                                    – on           – on           – on
ersUsepass messages messages messages messages handlersUsepass messages messages messages messages
 • to handlersUse handlersUsepass
                • to pass • to handlers to pass               • Use          • to handlersUse handlersUsepass
                                                                                            • to pass • to handlers to pass
application comms
 • Inter/intra application comms
                • Inter/intra application comms
                               • Inter/intra application comms• Inter/intra application comms
                                                                             • Inter/intra application comms
                                                                                            • Inter/intra application comms
                                                                                                           • Inter/intra application comms
s with EventBus with EventBus with EventBus with messages
     – messages – messages – messages                               – EventBus with EventBus with EventBus with EventBus with messages
                                                                                  – messages – messages – messages
red data structuresdata structuresdata structuresdata structures
     – Safe shared – Safe shared – Safe shared                      – Safe shared data structuresdata structuresdata structuresdata structures
                                                                                  – Safe shared – Safe shared – Safe shared
                Verticle       Verticle      Verticle    9
                                                             Verticle9              9
                                                                                              Verticle
                                                                                                   9
                                                                                                             Verticle       Verticle    9
                                                                                                                                            Verticle
                                                                                                                                                   9          9              9




                                                                                                                                                                             SockJS Bridge

                                                                                                       Event Bus
The Server
The Client
Demo
Solution #3.2:

                      Shared
                    Immutable
                       State
  Rich Hickey
Father of Clojure
e.g. In-memory Web
        Cache
MessageAI L
        Passing?
      F
Shared state only
dangerous if it is
   MUTABLE!
Vert.x Shared State
• SharedData Object (vertx.sharedData())
 • collection of
    java.util.concurrent.ConcurrentMap<K,V>

 • collection of java.util.Set<E> (backed by
    ConcurrentMap)

• Elements MUST be immutable values (well,
  sort of...)

• Currently only available within a Vertx.
  instance, not across a cluster.
Allowed Values
• Strings
• Boxed Primitives
•byte[]
                              R !
•org.vertx.java.core.buffer.Buffer
• Implementors of
                        G   E
 Shareable
                      AN
 org.vertx.java.core.shareddata.


                    D
Shared Map
Shared Set
Problem #4:

                                 The
                                Event
                                Loop
     Douglas Schmidt
Father of the Reactor Pattern
Reactor
w it works           Pattern Review

                     Event loop
   Application                     ...events
pp registers
   registers                          Events t
                                      trigger
 handlers                                 handl
   handlers...                    handlers.

                     Event Loop
andlers executed synchronously
on a single thread
se handlers to pass messages
Reactor Pattern Review


• Single thread / single event loop
• EVERYTHING runs on it
• You MUST NOT block the event loop
Reactor Pattern Problems

• Some work is naturally blocking:
 • Intensive data crunching
 • 3rd-party blocking API’s (e.g. JDBC)
• Pure reactor (e.g. Node.js) is not a good fit
  for this kind of work!
Solution #4:

                             Worker
                            Verticles
       Carl Hewitt
Father of the Actor Model
Worker Verticles
• Not assigned a Vert.x event loop thread
• Executes on background thread pool
• Never executed concurrently by more than
  one thread

• Not allowed to use TCP or HTTP clients/
  servers

• Communicate using the event bus
• Should be kept to a minimum
The “Multi-reactor”
How it works it works it works it works
        How       How     How

                           Event loop Event loop Event loop Event loop

                                                                                       BG            BG
  App registers App registers App registers App registers trigger Events trigger Events trigger Events trigger
                                                    Events
    handlers      handlers      handlers      handlershandlers      handlers
                                                                                      Pool
                                                                                   handlers
                                                                                                    Pool
                                                                                                  handlers



• Handlers executed synchronously executed synchronously
            • Handlers executed synchronously executed synchronously
                        • Handlers • Handlers
  – on a single threada single threada single threada single thread
                  – on           – on           – on
• Use handlersUse handlersUse handlersUse handlers to pass messages
               • to pass messages messages messages
                              • to pass • to pass
• Inter/intra application comms
               • Inter/intra application comms
                              • Inter/intra application comms
                                             • Inter/intra application comms
  – EventBus with EventBus with EventBus with EventBus with messages
                – messages – messages – messages
  – Safe shared data structuresdata structuresdata structuresdata structures
                – Safe shared – Safe shared – Safe shared
                                                                                     Worker        Worker
                            Verticle       Verticle       Verticle        Verticle
                                                                                     Verticle      Verticle
                                                                      9          9            9              9




                                                     Event Bus
Problem/Solution Summary


• Node.js compels the use of JavaScript
• Vert.x is Polyglot
• Node.js is inherently single-threaded
• Vert.x leverages the multi-threaded JVM
Problem/Solution Summary
• Node.js doesn’t help much w/ interprocess
  communication

• Vert.x features a distributed event bus which
  reaches all the way into the browser

• Node.js requires all code to run on the event
  loop

• Vert.x features background workers that
  allow blocking work to be done off of the
  event loops
Other Goodies
• Growing Module        • TCP/SSL servers/clients
  Repository            • HTTP/HTTPS servers/
                          clients
 •  web server

 • persistors (Mongo,   • WebSockets support
    JDBC, ...)          • SockJS support
 • work queue           • Timers
 • authentication       • Buffers
    manager
                        • Streams and Pumps
 • session manager      • Routing
 • Socket.IO            • Asynchronous File I/O
Case Study




https://github.com/mstine/twitx
Get Involved!
• Google Group: http://groups.google.com/
  group/vertx

• GitHub: https://github.com/vert-x/vert.x
• IRC: irc://freenode.net/vertx
• Needs:
 • language implementations
 • modules (esp. persistence, security, ...)
 • examples/blogs/documentation help
Vert.x:
                                     This ain’t your Dad’s Node!




                                                             Matt Stine
                                     Enterprise Java/Cloud Consultant
   Please fill out an evaluation:
                                                 matt.stine@gmail.com
                                                  http://mattstine.com
http://speakerrate.com/talks/16821
                                                       Twitter: @mstine
Image Credits
•   Tim Fox: https://twitter.com/timfox

•   BSOD Phone: http://www.flickr.com/photos/markhillary/3413357033

•   V8: http://www.flickr.com/photos/gorbould/3479298062

•   Ryan Dahl: http://www.flickr.com/photos/franksvalli/5163205409

•   Shortcomings: http://www.flickr.com/photos/hendricksphotos/3340896056

•   Brendan Eich: http://www.flickr.com/photos/equanimity/4055148344

•   Neal Ford: http://nealford.com/images/Neal-2012-headshot.jpg

•   Lars Bak: http://www.flickr.com/photos/niallkennedy/2822229099

•   James Gosling: http://www.flickr.com/photos/skrb/2499736195

•   Tony Hoare: http://www.flickr.com/photos/adewale_oshineye/3687557065

•   Alan Kay: http://www.flickr.com/photos/mwichary/3010026816

•   Rich Hickey: http://www.flickr.com/photos/hlship/3603090614

•   Douglas Schmidt: http://www.cs.wustl.edu/~schmidt/gifs/SchmidtD.jpg

•   Carl Hewitt: http://www.flickr.com/photos/jeanbaptisteparis/3098594954

Contenu connexe

Tendances

대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐
대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐
대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐Terry Cho
 
Microservices Part 3 Service Mesh and Kafka
Microservices Part 3 Service Mesh and KafkaMicroservices Part 3 Service Mesh and Kafka
Microservices Part 3 Service Mesh and KafkaAraf Karsh Hamid
 
Distributed Tracing with Jaeger
Distributed Tracing with JaegerDistributed Tracing with Jaeger
Distributed Tracing with JaegerInho Kang
 
Building a scalable microservice architecture with envoy, kubernetes and istio
Building a scalable microservice architecture with envoy, kubernetes and istioBuilding a scalable microservice architecture with envoy, kubernetes and istio
Building a scalable microservice architecture with envoy, kubernetes and istioSAMIR BEHARA
 
Apache Flink, AWS Kinesis, Analytics
Apache Flink, AWS Kinesis, Analytics Apache Flink, AWS Kinesis, Analytics
Apache Flink, AWS Kinesis, Analytics Araf Karsh Hamid
 
Centralized log-management-with-elastic-stack
Centralized log-management-with-elastic-stackCentralized log-management-with-elastic-stack
Centralized log-management-with-elastic-stackRich Lee
 
NGINX: Basics and Best Practices
NGINX: Basics and Best PracticesNGINX: Basics and Best Practices
NGINX: Basics and Best PracticesNGINX, Inc.
 
Combining logs, metrics, and traces for unified observability
Combining logs, metrics, and traces for unified observabilityCombining logs, metrics, and traces for unified observability
Combining logs, metrics, and traces for unified observabilityElasticsearch
 
Autoscaling Flink with Reactive Mode
Autoscaling Flink with Reactive ModeAutoscaling Flink with Reactive Mode
Autoscaling Flink with Reactive ModeFlink Forward
 
eBPF - Observability In Deep
eBPF - Observability In DeepeBPF - Observability In Deep
eBPF - Observability In DeepMydbops
 
Flexible and Real-Time Stream Processing with Apache Flink
Flexible and Real-Time Stream Processing with Apache FlinkFlexible and Real-Time Stream Processing with Apache Flink
Flexible and Real-Time Stream Processing with Apache FlinkDataWorks Summit
 
When Kafka Meets the Scaling and Reliability needs of World's Largest Retaile...
When Kafka Meets the Scaling and Reliability needs of World's Largest Retaile...When Kafka Meets the Scaling and Reliability needs of World's Largest Retaile...
When Kafka Meets the Scaling and Reliability needs of World's Largest Retaile...confluent
 
Graylog Engineering - Design Your Architecture
Graylog Engineering - Design Your ArchitectureGraylog Engineering - Design Your Architecture
Graylog Engineering - Design Your ArchitectureGraylog
 
Learn nginx in 90mins
Learn nginx in 90minsLearn nginx in 90mins
Learn nginx in 90minsLarry Cai
 
New Features in Apache Pinot
New Features in Apache PinotNew Features in Apache Pinot
New Features in Apache PinotSiddharth Teotia
 
Logging using ELK Stack for Microservices
Logging using ELK Stack for MicroservicesLogging using ELK Stack for Microservices
Logging using ELK Stack for MicroservicesVineet Sabharwal
 
Event Sourcing & CQRS, Kafka, Rabbit MQ
Event Sourcing & CQRS, Kafka, Rabbit MQEvent Sourcing & CQRS, Kafka, Rabbit MQ
Event Sourcing & CQRS, Kafka, Rabbit MQAraf Karsh Hamid
 
Microservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and SagaMicroservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and SagaAraf Karsh Hamid
 
Centralized Logging System Using ELK Stack
Centralized Logging System Using ELK StackCentralized Logging System Using ELK Stack
Centralized Logging System Using ELK StackRohit Sharma
 

Tendances (20)

Kafka 101
Kafka 101Kafka 101
Kafka 101
 
대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐
대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐
대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐
 
Microservices Part 3 Service Mesh and Kafka
Microservices Part 3 Service Mesh and KafkaMicroservices Part 3 Service Mesh and Kafka
Microservices Part 3 Service Mesh and Kafka
 
Distributed Tracing with Jaeger
Distributed Tracing with JaegerDistributed Tracing with Jaeger
Distributed Tracing with Jaeger
 
Building a scalable microservice architecture with envoy, kubernetes and istio
Building a scalable microservice architecture with envoy, kubernetes and istioBuilding a scalable microservice architecture with envoy, kubernetes and istio
Building a scalable microservice architecture with envoy, kubernetes and istio
 
Apache Flink, AWS Kinesis, Analytics
Apache Flink, AWS Kinesis, Analytics Apache Flink, AWS Kinesis, Analytics
Apache Flink, AWS Kinesis, Analytics
 
Centralized log-management-with-elastic-stack
Centralized log-management-with-elastic-stackCentralized log-management-with-elastic-stack
Centralized log-management-with-elastic-stack
 
NGINX: Basics and Best Practices
NGINX: Basics and Best PracticesNGINX: Basics and Best Practices
NGINX: Basics and Best Practices
 
Combining logs, metrics, and traces for unified observability
Combining logs, metrics, and traces for unified observabilityCombining logs, metrics, and traces for unified observability
Combining logs, metrics, and traces for unified observability
 
Autoscaling Flink with Reactive Mode
Autoscaling Flink with Reactive ModeAutoscaling Flink with Reactive Mode
Autoscaling Flink with Reactive Mode
 
eBPF - Observability In Deep
eBPF - Observability In DeepeBPF - Observability In Deep
eBPF - Observability In Deep
 
Flexible and Real-Time Stream Processing with Apache Flink
Flexible and Real-Time Stream Processing with Apache FlinkFlexible and Real-Time Stream Processing with Apache Flink
Flexible and Real-Time Stream Processing with Apache Flink
 
When Kafka Meets the Scaling and Reliability needs of World's Largest Retaile...
When Kafka Meets the Scaling and Reliability needs of World's Largest Retaile...When Kafka Meets the Scaling and Reliability needs of World's Largest Retaile...
When Kafka Meets the Scaling and Reliability needs of World's Largest Retaile...
 
Graylog Engineering - Design Your Architecture
Graylog Engineering - Design Your ArchitectureGraylog Engineering - Design Your Architecture
Graylog Engineering - Design Your Architecture
 
Learn nginx in 90mins
Learn nginx in 90minsLearn nginx in 90mins
Learn nginx in 90mins
 
New Features in Apache Pinot
New Features in Apache PinotNew Features in Apache Pinot
New Features in Apache Pinot
 
Logging using ELK Stack for Microservices
Logging using ELK Stack for MicroservicesLogging using ELK Stack for Microservices
Logging using ELK Stack for Microservices
 
Event Sourcing & CQRS, Kafka, Rabbit MQ
Event Sourcing & CQRS, Kafka, Rabbit MQEvent Sourcing & CQRS, Kafka, Rabbit MQ
Event Sourcing & CQRS, Kafka, Rabbit MQ
 
Microservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and SagaMicroservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and Saga
 
Centralized Logging System Using ELK Stack
Centralized Logging System Using ELK StackCentralized Logging System Using ELK Stack
Centralized Logging System Using ELK Stack
 

En vedette

Vert.x introduction
Vert.x introductionVert.x introduction
Vert.x introductionGR8Conf
 
Vert.x – The problem of real-time data binding
Vert.x – The problem of real-time data bindingVert.x – The problem of real-time data binding
Vert.x – The problem of real-time data bindingAlex Derkach
 
Vert.x v3 - high performance polyglot application toolkit
Vert.x v3 - high performance  polyglot application toolkitVert.x v3 - high performance  polyglot application toolkit
Vert.x v3 - high performance polyglot application toolkitSages
 
Building microservices with vert.x 3.0
Building microservices with vert.x 3.0Building microservices with vert.x 3.0
Building microservices with vert.x 3.0Agraj Mangal
 
Vert.X: Microservices Were Never So Easy (Clement Escoffier)
Vert.X: Microservices Were Never So Easy (Clement Escoffier)Vert.X: Microservices Were Never So Easy (Clement Escoffier)
Vert.X: Microservices Were Never So Easy (Clement Escoffier)Red Hat Developers
 
Максим Сабарня и Иван Дрижирук “Vert.x – tool-kit for building reactive app...
 	Максим Сабарня и Иван Дрижирук “Vert.x – tool-kit for building reactive app... 	Максим Сабарня и Иван Дрижирук “Vert.x – tool-kit for building reactive app...
Максим Сабарня и Иван Дрижирук “Vert.x – tool-kit for building reactive app...Anna Shymchenko
 
Vert.x using Groovy - Simplifying non-blocking code
Vert.x using Groovy - Simplifying non-blocking codeVert.x using Groovy - Simplifying non-blocking code
Vert.x using Groovy - Simplifying non-blocking codesascha_klein
 
Java 7, 8 & 9 - Moving the language forward
Java 7, 8 & 9 - Moving the language forwardJava 7, 8 & 9 - Moving the language forward
Java 7, 8 & 9 - Moving the language forwardMario Fusco
 
No more loops with lambdaj
No more loops with lambdajNo more loops with lambdaj
No more loops with lambdajMario Fusco
 
SockJS Intro
SockJS IntroSockJS Intro
SockJS IntroNgoc Dao
 
High performance network programming on the jvm oscon 2012
High performance network programming on the jvm   oscon 2012 High performance network programming on the jvm   oscon 2012
High performance network programming on the jvm oscon 2012 Erik Onnen
 
Development with Vert.x: an event-driven application framework for the JVM
Development with Vert.x: an event-driven application framework for the JVMDevelopment with Vert.x: an event-driven application framework for the JVM
Development with Vert.x: an event-driven application framework for the JVMDavid Wu
 
2013 빅데이터 및 API 기술 현황과 전망- 윤석찬
2013 빅데이터 및 API 기술 현황과 전망- 윤석찬2013 빅데이터 및 API 기술 현황과 전망- 윤석찬
2013 빅데이터 및 API 기술 현황과 전망- 윤석찬Channy Yun
 
Introduction to Remote Procedure Call
Introduction to Remote Procedure CallIntroduction to Remote Procedure Call
Introduction to Remote Procedure CallAbdelrahman Al-Ogail
 
ZeroMQ Is The Answer
ZeroMQ Is The AnswerZeroMQ Is The Answer
ZeroMQ Is The AnswerIan Barber
 

En vedette (20)

Vert.x introduction
Vert.x introductionVert.x introduction
Vert.x introduction
 
Vert.x 3
Vert.x 3Vert.x 3
Vert.x 3
 
Vert.x devoxx london 2013
Vert.x devoxx london 2013Vert.x devoxx london 2013
Vert.x devoxx london 2013
 
Vert.x – The problem of real-time data binding
Vert.x – The problem of real-time data bindingVert.x – The problem of real-time data binding
Vert.x – The problem of real-time data binding
 
Vert.x v3 - high performance polyglot application toolkit
Vert.x v3 - high performance  polyglot application toolkitVert.x v3 - high performance  polyglot application toolkit
Vert.x v3 - high performance polyglot application toolkit
 
Building microservices with vert.x 3.0
Building microservices with vert.x 3.0Building microservices with vert.x 3.0
Building microservices with vert.x 3.0
 
Vert.X: Microservices Were Never So Easy (Clement Escoffier)
Vert.X: Microservices Were Never So Easy (Clement Escoffier)Vert.X: Microservices Were Never So Easy (Clement Escoffier)
Vert.X: Microservices Were Never So Easy (Clement Escoffier)
 
Максим Сабарня и Иван Дрижирук “Vert.x – tool-kit for building reactive app...
 	Максим Сабарня и Иван Дрижирук “Vert.x – tool-kit for building reactive app... 	Максим Сабарня и Иван Дрижирук “Vert.x – tool-kit for building reactive app...
Максим Сабарня и Иван Дрижирук “Vert.x – tool-kit for building reactive app...
 
Vert.x
Vert.xVert.x
Vert.x
 
Vert.x using Groovy - Simplifying non-blocking code
Vert.x using Groovy - Simplifying non-blocking codeVert.x using Groovy - Simplifying non-blocking code
Vert.x using Groovy - Simplifying non-blocking code
 
Java 7, 8 & 9 - Moving the language forward
Java 7, 8 & 9 - Moving the language forwardJava 7, 8 & 9 - Moving the language forward
Java 7, 8 & 9 - Moving the language forward
 
Production ready Vert.x
Production ready Vert.xProduction ready Vert.x
Production ready Vert.x
 
No more loops with lambdaj
No more loops with lambdajNo more loops with lambdaj
No more loops with lambdaj
 
SockJS Intro
SockJS IntroSockJS Intro
SockJS Intro
 
High performance network programming on the jvm oscon 2012
High performance network programming on the jvm   oscon 2012 High performance network programming on the jvm   oscon 2012
High performance network programming on the jvm oscon 2012
 
Pro Postgres 9
Pro Postgres 9Pro Postgres 9
Pro Postgres 9
 
Development with Vert.x: an event-driven application framework for the JVM
Development with Vert.x: an event-driven application framework for the JVMDevelopment with Vert.x: an event-driven application framework for the JVM
Development with Vert.x: an event-driven application framework for the JVM
 
2013 빅데이터 및 API 기술 현황과 전망- 윤석찬
2013 빅데이터 및 API 기술 현황과 전망- 윤석찬2013 빅데이터 및 API 기술 현황과 전망- 윤석찬
2013 빅데이터 및 API 기술 현황과 전망- 윤석찬
 
Introduction to Remote Procedure Call
Introduction to Remote Procedure CallIntroduction to Remote Procedure Call
Introduction to Remote Procedure Call
 
ZeroMQ Is The Answer
ZeroMQ Is The AnswerZeroMQ Is The Answer
ZeroMQ Is The Answer
 

Similaire à Vert.x

Alvaro Videla, Building a Distributed Data Ingestion System with RabbitMQ
Alvaro Videla, Building a Distributed Data Ingestion System with RabbitMQAlvaro Videla, Building a Distributed Data Ingestion System with RabbitMQ
Alvaro Videla, Building a Distributed Data Ingestion System with RabbitMQTanya Denisyuk
 
Open Cloud Interop Public
Open Cloud Interop PublicOpen Cloud Interop Public
Open Cloud Interop Publicrvanhoe
 
Rugged DevOps Will help you build ur cloudz
Rugged DevOps Will help you build ur cloudzRugged DevOps Will help you build ur cloudz
Rugged DevOps Will help you build ur cloudzJames Wickett
 
The influence of "Distributed platforms" on #devops
The influence of "Distributed platforms" on #devopsThe influence of "Distributed platforms" on #devops
The influence of "Distributed platforms" on #devopsKris Buytaert
 
Your Goat Anti-Fragiled My Snowflake! Demystifying DevOps Jargon (30 minute v...
Your Goat Anti-Fragiled My Snowflake! Demystifying DevOps Jargon (30 minute v...Your Goat Anti-Fragiled My Snowflake! Demystifying DevOps Jargon (30 minute v...
Your Goat Anti-Fragiled My Snowflake! Demystifying DevOps Jargon (30 minute v...Clinton Wolfe
 
Your Goat Anti-Fragiled My SnowFlake! Demystifying DevOps Jargon
Your Goat Anti-Fragiled My SnowFlake! Demystifying DevOps JargonYour Goat Anti-Fragiled My SnowFlake! Demystifying DevOps Jargon
Your Goat Anti-Fragiled My SnowFlake! Demystifying DevOps JargonClinton Wolfe
 
Go Reactive: Event-Driven, Scalable, Resilient & Responsive Systems
Go Reactive: Event-Driven, Scalable, Resilient & Responsive SystemsGo Reactive: Event-Driven, Scalable, Resilient & Responsive Systems
Go Reactive: Event-Driven, Scalable, Resilient & Responsive SystemsJonas Bonér
 
Test driven infrastructure development (2 - puppetconf 2013 edition)
Test driven infrastructure development (2 - puppetconf 2013 edition)Test driven infrastructure development (2 - puppetconf 2013 edition)
Test driven infrastructure development (2 - puppetconf 2013 edition)Tomas Doran
 
Metasploitation part-1 (murtuja)
Metasploitation part-1 (murtuja)Metasploitation part-1 (murtuja)
Metasploitation part-1 (murtuja)ClubHack
 
Spark Summit EU talk by Ruben Pulido and Behar Veliqi
Spark Summit EU talk by Ruben Pulido and Behar VeliqiSpark Summit EU talk by Ruben Pulido and Behar Veliqi
Spark Summit EU talk by Ruben Pulido and Behar VeliqiSpark Summit
 
Spark Summit - Watson Analytics for Social Media: From single tenant Hadoop t...
Spark Summit - Watson Analytics for Social Media: From single tenant Hadoop t...Spark Summit - Watson Analytics for Social Media: From single tenant Hadoop t...
Spark Summit - Watson Analytics for Social Media: From single tenant Hadoop t...Behar Veliqi
 
Reactive applications and Akka intro used in the Madrid Scala Meetup
Reactive applications and Akka intro used in the Madrid Scala MeetupReactive applications and Akka intro used in the Madrid Scala Meetup
Reactive applications and Akka intro used in the Madrid Scala MeetupMiguel Pastor
 
Spark Summit EU talk by Ruben Pulido Behar Veliqi
Spark Summit EU talk by Ruben Pulido Behar VeliqiSpark Summit EU talk by Ruben Pulido Behar Veliqi
Spark Summit EU talk by Ruben Pulido Behar VeliqiSpark Summit
 
Erjang - A journey into Erlang-land
Erjang - A journey into Erlang-landErjang - A journey into Erlang-land
Erjang - A journey into Erlang-landKresten Krab Thorup
 
Containing the world with Docker
Containing the world with DockerContaining the world with Docker
Containing the world with DockerGiuseppe Piccolo
 
Adventures in a Microservice world at REA Group
Adventures in a Microservice world at REA GroupAdventures in a Microservice world at REA Group
Adventures in a Microservice world at REA Groupevanbottcher
 
Next Generation Cloud: Rise of the Unikernel V3 (UPDATED)
Next Generation Cloud: Rise of the Unikernel V3 (UPDATED)Next Generation Cloud: Rise of the Unikernel V3 (UPDATED)
Next Generation Cloud: Rise of the Unikernel V3 (UPDATED)The Linux Foundation
 
Unikernel User Summit 2015: The Next Generation Cloud: Unleashing the Power o...
Unikernel User Summit 2015: The Next Generation Cloud: Unleashing the Power o...Unikernel User Summit 2015: The Next Generation Cloud: Unleashing the Power o...
Unikernel User Summit 2015: The Next Generation Cloud: Unleashing the Power o...The Linux Foundation
 

Similaire à Vert.x (20)

The bigrabbit
The bigrabbitThe bigrabbit
The bigrabbit
 
Alvaro Videla, Building a Distributed Data Ingestion System with RabbitMQ
Alvaro Videla, Building a Distributed Data Ingestion System with RabbitMQAlvaro Videla, Building a Distributed Data Ingestion System with RabbitMQ
Alvaro Videla, Building a Distributed Data Ingestion System with RabbitMQ
 
Open Cloud Interop Public
Open Cloud Interop PublicOpen Cloud Interop Public
Open Cloud Interop Public
 
Rugged DevOps Will help you build ur cloudz
Rugged DevOps Will help you build ur cloudzRugged DevOps Will help you build ur cloudz
Rugged DevOps Will help you build ur cloudz
 
The influence of "Distributed platforms" on #devops
The influence of "Distributed platforms" on #devopsThe influence of "Distributed platforms" on #devops
The influence of "Distributed platforms" on #devops
 
Your Goat Anti-Fragiled My Snowflake! Demystifying DevOps Jargon (30 minute v...
Your Goat Anti-Fragiled My Snowflake! Demystifying DevOps Jargon (30 minute v...Your Goat Anti-Fragiled My Snowflake! Demystifying DevOps Jargon (30 minute v...
Your Goat Anti-Fragiled My Snowflake! Demystifying DevOps Jargon (30 minute v...
 
Your Goat Anti-Fragiled My SnowFlake! Demystifying DevOps Jargon
Your Goat Anti-Fragiled My SnowFlake! Demystifying DevOps JargonYour Goat Anti-Fragiled My SnowFlake! Demystifying DevOps Jargon
Your Goat Anti-Fragiled My SnowFlake! Demystifying DevOps Jargon
 
Go Reactive: Event-Driven, Scalable, Resilient & Responsive Systems
Go Reactive: Event-Driven, Scalable, Resilient & Responsive SystemsGo Reactive: Event-Driven, Scalable, Resilient & Responsive Systems
Go Reactive: Event-Driven, Scalable, Resilient & Responsive Systems
 
Test driven infrastructure development (2 - puppetconf 2013 edition)
Test driven infrastructure development (2 - puppetconf 2013 edition)Test driven infrastructure development (2 - puppetconf 2013 edition)
Test driven infrastructure development (2 - puppetconf 2013 edition)
 
Metasploitation part-1 (murtuja)
Metasploitation part-1 (murtuja)Metasploitation part-1 (murtuja)
Metasploitation part-1 (murtuja)
 
Spark Summit EU talk by Ruben Pulido and Behar Veliqi
Spark Summit EU talk by Ruben Pulido and Behar VeliqiSpark Summit EU talk by Ruben Pulido and Behar Veliqi
Spark Summit EU talk by Ruben Pulido and Behar Veliqi
 
Spark Summit - Watson Analytics for Social Media: From single tenant Hadoop t...
Spark Summit - Watson Analytics for Social Media: From single tenant Hadoop t...Spark Summit - Watson Analytics for Social Media: From single tenant Hadoop t...
Spark Summit - Watson Analytics for Social Media: From single tenant Hadoop t...
 
Reactive applications and Akka intro used in the Madrid Scala Meetup
Reactive applications and Akka intro used in the Madrid Scala MeetupReactive applications and Akka intro used in the Madrid Scala Meetup
Reactive applications and Akka intro used in the Madrid Scala Meetup
 
Erlang at Nu Echo
Erlang at Nu EchoErlang at Nu Echo
Erlang at Nu Echo
 
Spark Summit EU talk by Ruben Pulido Behar Veliqi
Spark Summit EU talk by Ruben Pulido Behar VeliqiSpark Summit EU talk by Ruben Pulido Behar Veliqi
Spark Summit EU talk by Ruben Pulido Behar Veliqi
 
Erjang - A journey into Erlang-land
Erjang - A journey into Erlang-landErjang - A journey into Erlang-land
Erjang - A journey into Erlang-land
 
Containing the world with Docker
Containing the world with DockerContaining the world with Docker
Containing the world with Docker
 
Adventures in a Microservice world at REA Group
Adventures in a Microservice world at REA GroupAdventures in a Microservice world at REA Group
Adventures in a Microservice world at REA Group
 
Next Generation Cloud: Rise of the Unikernel V3 (UPDATED)
Next Generation Cloud: Rise of the Unikernel V3 (UPDATED)Next Generation Cloud: Rise of the Unikernel V3 (UPDATED)
Next Generation Cloud: Rise of the Unikernel V3 (UPDATED)
 
Unikernel User Summit 2015: The Next Generation Cloud: Unleashing the Power o...
Unikernel User Summit 2015: The Next Generation Cloud: Unleashing the Power o...Unikernel User Summit 2015: The Next Generation Cloud: Unleashing the Power o...
Unikernel User Summit 2015: The Next Generation Cloud: Unleashing the Power o...
 

Plus de Matt Stine

Architectures That Bend but Don't Break
Architectures That Bend but Don't BreakArchitectures That Bend but Don't Break
Architectures That Bend but Don't BreakMatt Stine
 
Cloud Native Architecture Patterns Tutorial
Cloud Native Architecture Patterns TutorialCloud Native Architecture Patterns Tutorial
Cloud Native Architecture Patterns TutorialMatt Stine
 
Resilient Architecture
Resilient ArchitectureResilient Architecture
Resilient ArchitectureMatt Stine
 
Cloud Foundry: The Best Place to Run Microservices
Cloud Foundry: The Best Place to Run MicroservicesCloud Foundry: The Best Place to Run Microservices
Cloud Foundry: The Best Place to Run MicroservicesMatt Stine
 
Reactive Fault Tolerant Programming with Hystrix and RxJava
Reactive Fault Tolerant Programming with Hystrix and RxJavaReactive Fault Tolerant Programming with Hystrix and RxJava
Reactive Fault Tolerant Programming with Hystrix and RxJavaMatt Stine
 
Lattice: A Cloud-Native Platform for Your Spring Applications
Lattice: A Cloud-Native Platform for Your Spring ApplicationsLattice: A Cloud-Native Platform for Your Spring Applications
Lattice: A Cloud-Native Platform for Your Spring ApplicationsMatt Stine
 
The Cloud Native Journey
The Cloud Native JourneyThe Cloud Native Journey
The Cloud Native JourneyMatt Stine
 
To Microservices and Beyond
To Microservices and BeyondTo Microservices and Beyond
To Microservices and BeyondMatt Stine
 
Deploying Microservices to Cloud Foundry
Deploying Microservices to Cloud FoundryDeploying Microservices to Cloud Foundry
Deploying Microservices to Cloud FoundryMatt Stine
 
Cloud Foundry Diego: Modular and Extensible Substructure for Microservices
Cloud Foundry Diego: Modular and Extensible Substructure for MicroservicesCloud Foundry Diego: Modular and Extensible Substructure for Microservices
Cloud Foundry Diego: Modular and Extensible Substructure for MicroservicesMatt Stine
 
Building Distributed Systems with Netflix OSS and Spring Cloud
Building Distributed Systems with Netflix OSS and Spring CloudBuilding Distributed Systems with Netflix OSS and Spring Cloud
Building Distributed Systems with Netflix OSS and Spring CloudMatt Stine
 
Pivotal Cloud Platform Roadshow: Sign Up for Pivotal Web Services
Pivotal Cloud Platform Roadshow: Sign Up for Pivotal Web ServicesPivotal Cloud Platform Roadshow: Sign Up for Pivotal Web Services
Pivotal Cloud Platform Roadshow: Sign Up for Pivotal Web ServicesMatt Stine
 
A Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to GoA Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to GoMatt Stine
 
Agile Development with OSGi
Agile Development with OSGiAgile Development with OSGi
Agile Development with OSGiMatt Stine
 
Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship
Cloud Foundry and Microservices: A Mutualistic Symbiotic RelationshipCloud Foundry and Microservices: A Mutualistic Symbiotic Relationship
Cloud Foundry and Microservices: A Mutualistic Symbiotic RelationshipMatt Stine
 
It's the End of the Cloud as We Know It
It's the End of the Cloud as We Know ItIt's the End of the Cloud as We Know It
It's the End of the Cloud as We Know ItMatt Stine
 
Functional solid
Functional solidFunctional solid
Functional solidMatt Stine
 
The Seven Wastes of Software Development
The Seven Wastes of Software DevelopmentThe Seven Wastes of Software Development
The Seven Wastes of Software DevelopmentMatt Stine
 
Information Sciences Solutions to Core Facility Problems at St. Jude Children...
Information Sciences Solutions to Core Facility Problems at St. Jude Children...Information Sciences Solutions to Core Facility Problems at St. Jude Children...
Information Sciences Solutions to Core Facility Problems at St. Jude Children...Matt Stine
 
Achieve Your Goals
Achieve Your GoalsAchieve Your Goals
Achieve Your GoalsMatt Stine
 

Plus de Matt Stine (20)

Architectures That Bend but Don't Break
Architectures That Bend but Don't BreakArchitectures That Bend but Don't Break
Architectures That Bend but Don't Break
 
Cloud Native Architecture Patterns Tutorial
Cloud Native Architecture Patterns TutorialCloud Native Architecture Patterns Tutorial
Cloud Native Architecture Patterns Tutorial
 
Resilient Architecture
Resilient ArchitectureResilient Architecture
Resilient Architecture
 
Cloud Foundry: The Best Place to Run Microservices
Cloud Foundry: The Best Place to Run MicroservicesCloud Foundry: The Best Place to Run Microservices
Cloud Foundry: The Best Place to Run Microservices
 
Reactive Fault Tolerant Programming with Hystrix and RxJava
Reactive Fault Tolerant Programming with Hystrix and RxJavaReactive Fault Tolerant Programming with Hystrix and RxJava
Reactive Fault Tolerant Programming with Hystrix and RxJava
 
Lattice: A Cloud-Native Platform for Your Spring Applications
Lattice: A Cloud-Native Platform for Your Spring ApplicationsLattice: A Cloud-Native Platform for Your Spring Applications
Lattice: A Cloud-Native Platform for Your Spring Applications
 
The Cloud Native Journey
The Cloud Native JourneyThe Cloud Native Journey
The Cloud Native Journey
 
To Microservices and Beyond
To Microservices and BeyondTo Microservices and Beyond
To Microservices and Beyond
 
Deploying Microservices to Cloud Foundry
Deploying Microservices to Cloud FoundryDeploying Microservices to Cloud Foundry
Deploying Microservices to Cloud Foundry
 
Cloud Foundry Diego: Modular and Extensible Substructure for Microservices
Cloud Foundry Diego: Modular and Extensible Substructure for MicroservicesCloud Foundry Diego: Modular and Extensible Substructure for Microservices
Cloud Foundry Diego: Modular and Extensible Substructure for Microservices
 
Building Distributed Systems with Netflix OSS and Spring Cloud
Building Distributed Systems with Netflix OSS and Spring CloudBuilding Distributed Systems with Netflix OSS and Spring Cloud
Building Distributed Systems with Netflix OSS and Spring Cloud
 
Pivotal Cloud Platform Roadshow: Sign Up for Pivotal Web Services
Pivotal Cloud Platform Roadshow: Sign Up for Pivotal Web ServicesPivotal Cloud Platform Roadshow: Sign Up for Pivotal Web Services
Pivotal Cloud Platform Roadshow: Sign Up for Pivotal Web Services
 
A Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to GoA Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to Go
 
Agile Development with OSGi
Agile Development with OSGiAgile Development with OSGi
Agile Development with OSGi
 
Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship
Cloud Foundry and Microservices: A Mutualistic Symbiotic RelationshipCloud Foundry and Microservices: A Mutualistic Symbiotic Relationship
Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship
 
It's the End of the Cloud as We Know It
It's the End of the Cloud as We Know ItIt's the End of the Cloud as We Know It
It's the End of the Cloud as We Know It
 
Functional solid
Functional solidFunctional solid
Functional solid
 
The Seven Wastes of Software Development
The Seven Wastes of Software DevelopmentThe Seven Wastes of Software Development
The Seven Wastes of Software Development
 
Information Sciences Solutions to Core Facility Problems at St. Jude Children...
Information Sciences Solutions to Core Facility Problems at St. Jude Children...Information Sciences Solutions to Core Facility Problems at St. Jude Children...
Information Sciences Solutions to Core Facility Problems at St. Jude Children...
 
Achieve Your Goals
Achieve Your GoalsAchieve Your Goals
Achieve Your Goals
 

Dernier

How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 

Dernier (20)

How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 

Vert.x

  • 1. Vert.x: This ain’t your Dad’s Node! Matt Stine Tim Fox Enterprise Java/Cloud Consultant Father of Vert.x matt.stine@gmail.com http://mattstine.com Twitter: @mstine
  • 3.
  • 5. Ryan Dahl Father of Node.js How?!?!
  • 9.
  • 10.
  • 11.
  • 12. But Node has some shortcomings... 1. JavaScript! 2. Vertical Scaling 3. Interprocess Communication 4. Event Loop
  • 14. Problem #1: JavaScript Brendan Eich Father of JavaScript
  • 16. Solution #1: Polyglot Programming Neal Ford Father of Polyglot Programming http://memeagora.blogspot.com/2006/12/polyglot-programming.html
  • 17. Hello World in every Vert.x language!
  • 18. Java
  • 19.
  • 20. Ruby
  • 23.
  • 24. FUTURE Theoretically, any JVM language or language that compiles to a supported language (e.g. ClojureScript ➔ JavaScript)
  • 25. Problem #2: Vertical Scaling Lars Bak Father of V8
  • 27. Node: Up and Running Example 3-11: Using cluster to distribute work
  • 28. Solution #2: The JVM James Gosling Father of Java
  • 29. The Verticle - Unit of Deployment Verticle - Script/Java Class
  • 30. Vert.x Instance How it works it works it works it works How How How Event loop Event loop Event loop Event loop Event Loops App registers App registers App registers App registers trigger Events trigger Events trigger Events trigg Events handlers handlers handlers handlershandlers handlers handlers handlers • Handlers executed synchronously executed synchronously • Handlers executed synchronously executed synchronously • Handlers • Handlers – on a single threada single threada single threada single thread – on – on – on • Use handlersUse handlersUse handlersUse handlers to pass messages • to pass messages messages messages • to pass • to pass • Inter/intra application comms • Inter/intra application comms • Inter/intra application comms • Inter/intra application comms – EventBus with EventBus with EventBus with EventBus with messages – messages – messages – messages – Safe shared data structuresdata structuresdata structuresdata structures – Safe shared – Safe shared – Safe shared Verticle 9 9 9 Runtime.availableProcessors() == 4
  • 31. Vert.x Instance How it works it works it works it works How How How Event loop Event loop Event loop Event loop Event Loops App registers App registers App registers App registers trigger Events trigger Events trigger Events trigg Events handlers handlers handlers handlershandlers handlers handlers handlers • Handlers executed synchronously executed synchronously • Handlers executed synchronously executed synchronously • Handlers • Handlers – on a single threada single threada single threada single thread – on – on – on • Use handlersUse handlersUse handlersUse handlers to pass messages • to pass messages messages messages • to pass • to pass vertx run • Inter/intra application comms • Inter/intra application comms • Inter/intra application comms • Inter/intra application comms HelloWorld with EventBus with EventBus with EventBus with messages – EventBus – messages – messages – messages – Safe shared data structuresdata structuresdata structuresdata structures – Safe shared – Safe shared – Safe shared -instances 4 Verticle Verticle Verticle Verticle 9 9 9 Runtime.availableProcessors() == 4
  • 32. Concurrency • Verticle instance assigned thread/event loop. • Verticle instance ALWAYS executes on assigned thread. • Verticles have isolated classloaders and cannot share global state (static members, global variables, etc.) • Can write all code assuming single threading.
  • 33. Tony Hoare Father of CSP (http://dl.acm.org/citation.cfm? doid=359576.359585) Problem #3: Interprocess Communication
  • 34. Node.js Communication Options • TCP/UDP/UNIX Sockets • Redis Pub/Sub (http://redis.io/) • ZeroMQ (http://www.zeromq.org/) • Process Signaling/Cluster Module • Eventing Frameworks: Hook.io (dead), JS- Signals, Bean, etc. • Memcached • Etc...
  • 35. Solution #3.1: The Event Bus Alan Kay Father of Smalltalk
  • 36. How it works it works it works it works How How How Event loop Event loop Event loop Event loop App registers App registers App registers App registers trigger Events trigger Events trigger Events trigger Events handlers handlers handlers handlershandlers handlers handlers handlers • Handlers executed synchronously executed synchronously • Handlers executed synchronously executed synchronously • Handlers • Handlers – on a single threada single threada single threada single thread – on – on – on • Use handlersUse handlersUse handlersUse handlers to pass messages • to pass messages messages messages • to pass • to pass • Inter/intra application comms • Inter/intra application comms • Inter/intra application comms • Inter/intra application comms – EventBus with EventBus with EventBus with EventBus with messages – messages – messages – messages – Safe shared data structuresdata structuresdata structuresdata structures – Safe shared – Safe shared – Safe shared Verticle Verticle Verticle Verticle 9 9 9 9 Event Bus
  • 37. Addressing • Simply a String • Dot-style namespacing recommended • e.g. “messages.inbound.A”
  • 38. Handler Registration Handler X messages.inbound.A Handler Y Handler Z
  • 40. Pub/Sub Handler X Sender messages.inbound.A Handler Y Handler Z
  • 42. P2P Handler X Sender messages.inbound.A Handler Y Handler Z
  • 43. P2P
  • 45. Message Types • String • Primitives (int, long, short, float, double, ...) • Boxed Primitives • boolean/Boolean • org.vertx.java.core.json.JsonObject • org.vertx.java.core.buffer.Buffer
  • 46. Distributed Vert.x orks it works it works it works How How How How it works it works it works it works How How How How it works it works it works it works How How How Event loop Event loop Event loop Event loop Event loop Event loop Event loop Event loop Event loop Event loop Event loop Event loop rs App registers App registers App registers trigger Events trigger Events trigger Events trigger registers App registers trigger Events trigger Events trigger Events trigger registers App registers trigger Events trigger Events trigger Events App registers App registers App Events App registers App registers App Events handlers handlers handlershandlers handlers handlers handlers handlers handlers handlers handlershandlers handlers handlers handlers handlers handlers handlers handlershandlers handlers handlers executed synchronously executed synchronously • Handlers executed synchronously executed synchronously • Handlers • Handlers • Handlers executed synchronously executed synchronously • Handlers executed synchronously executed synchronously • Handlers • Handlers • Handlers executed synchronously executed synchronously • Handlers executed synchronously executed synchronously • Handlers • Handlers le threada single threada single threada single thread – on – on – on – on a single threada single threada single threada single thread – on – on – on – on a single threada single threada single threada single thread – on – on – on ersUsepass messages messages messages messages handlersUsepass messages messages messages messages handlersUse handlersUsepass messages messages messages • to handlersUse handlersUsepass • to pass • to handlers to pass • Use • to handlersUse handlersUsepass • to pass • to handlers to pass • Use • to pass messages • to handlersUse handlers to pass • to pass application comms • Inter/intra application comms • Inter/intra application comms • Inter/intra application comms• Inter/intra application comms • Inter/intra application comms • Inter/intra application comms • Inter/intra application comms Inter/intra application comms • • Inter/intra application comms • Inter/intra application comms • Inter/intra application comms s with EventBus with EventBus with EventBus with messages – messages – messages – messages – EventBus with EventBus with EventBus with EventBus with messages – messages – messages – messages – EventBus with EventBus with EventBus with EventBus with messages – messages – messages – messages red data structuresdata structuresdata structuresdata structures – Safe shared – Safe shared – Safe shared – Safe shared data structuresdata structuresdata structuresdata structures – Safe shared – Safe shared – Safe shared – Safe shared data structuresdata structuresdata structuresdata structures – Safe shared – Safe shared – Safe shared Verticle Verticle Verticle 9 Verticle9 9 Verticle 9 Verticle Verticle 9 Verticle 9 9 Verticle 9 Verticle Verticle 9 Verticle 9 9 Event Bus
  • 47. Into the Browser! orks it works it works it works How How How How it works it works it works it works How How How Event loop Event loop Event loop Event loop Event loop Event loop Event loop Event loop rs App registers App registers App registers trigger Events trigger Events trigger Events trigger registers App registers trigger Events trigger Events trigger Events trigger Events App registers App registers App Events handlers handlers handlershandlers handlers handlers handlers handlers handlers handlers handlershandlers handlers handlers handlers executed synchronously executed synchronously • Handlers executed synchronously executed synchronously • Handlers • Handlers • Handlers executed synchronously executed synchronously • Handlers executed synchronously executed synchronously • Handlers • Handlers le threada single threada single threada single thread – on – on – on – on a single threada single threada single threada single thread – on – on – on ersUsepass messages messages messages messages handlersUsepass messages messages messages messages • to handlersUse handlersUsepass • to pass • to handlers to pass • Use • to handlersUse handlersUsepass • to pass • to handlers to pass application comms • Inter/intra application comms • Inter/intra application comms • Inter/intra application comms• Inter/intra application comms • Inter/intra application comms • Inter/intra application comms • Inter/intra application comms s with EventBus with EventBus with EventBus with messages – messages – messages – messages – EventBus with EventBus with EventBus with EventBus with messages – messages – messages – messages red data structuresdata structuresdata structuresdata structures – Safe shared – Safe shared – Safe shared – Safe shared data structuresdata structuresdata structuresdata structures – Safe shared – Safe shared – Safe shared Verticle Verticle Verticle 9 Verticle9 9 Verticle 9 Verticle Verticle 9 Verticle 9 9 9 SockJS Bridge Event Bus
  • 50. Demo
  • 51. Solution #3.2: Shared Immutable State Rich Hickey Father of Clojure
  • 53. MessageAI L Passing? F
  • 54. Shared state only dangerous if it is MUTABLE!
  • 55. Vert.x Shared State • SharedData Object (vertx.sharedData()) • collection of java.util.concurrent.ConcurrentMap<K,V> • collection of java.util.Set<E> (backed by ConcurrentMap) • Elements MUST be immutable values (well, sort of...) • Currently only available within a Vertx. instance, not across a cluster.
  • 56. Allowed Values • Strings • Boxed Primitives •byte[] R ! •org.vertx.java.core.buffer.Buffer • Implementors of G E Shareable AN org.vertx.java.core.shareddata. D
  • 59. Problem #4: The Event Loop Douglas Schmidt Father of the Reactor Pattern
  • 60. Reactor w it works Pattern Review Event loop Application ...events pp registers registers Events t trigger handlers handl handlers... handlers. Event Loop andlers executed synchronously on a single thread se handlers to pass messages
  • 61. Reactor Pattern Review • Single thread / single event loop • EVERYTHING runs on it • You MUST NOT block the event loop
  • 62. Reactor Pattern Problems • Some work is naturally blocking: • Intensive data crunching • 3rd-party blocking API’s (e.g. JDBC) • Pure reactor (e.g. Node.js) is not a good fit for this kind of work!
  • 63. Solution #4: Worker Verticles Carl Hewitt Father of the Actor Model
  • 64. Worker Verticles • Not assigned a Vert.x event loop thread • Executes on background thread pool • Never executed concurrently by more than one thread • Not allowed to use TCP or HTTP clients/ servers • Communicate using the event bus • Should be kept to a minimum
  • 65. The “Multi-reactor” How it works it works it works it works How How How Event loop Event loop Event loop Event loop BG BG App registers App registers App registers App registers trigger Events trigger Events trigger Events trigger Events handlers handlers handlers handlershandlers handlers Pool handlers Pool handlers • Handlers executed synchronously executed synchronously • Handlers executed synchronously executed synchronously • Handlers • Handlers – on a single threada single threada single threada single thread – on – on – on • Use handlersUse handlersUse handlersUse handlers to pass messages • to pass messages messages messages • to pass • to pass • Inter/intra application comms • Inter/intra application comms • Inter/intra application comms • Inter/intra application comms – EventBus with EventBus with EventBus with EventBus with messages – messages – messages – messages – Safe shared data structuresdata structuresdata structuresdata structures – Safe shared – Safe shared – Safe shared Worker Worker Verticle Verticle Verticle Verticle Verticle Verticle 9 9 9 9 Event Bus
  • 66.
  • 67.
  • 68. Problem/Solution Summary • Node.js compels the use of JavaScript • Vert.x is Polyglot • Node.js is inherently single-threaded • Vert.x leverages the multi-threaded JVM
  • 69. Problem/Solution Summary • Node.js doesn’t help much w/ interprocess communication • Vert.x features a distributed event bus which reaches all the way into the browser • Node.js requires all code to run on the event loop • Vert.x features background workers that allow blocking work to be done off of the event loops
  • 70. Other Goodies • Growing Module • TCP/SSL servers/clients Repository • HTTP/HTTPS servers/ clients • web server • persistors (Mongo, • WebSockets support JDBC, ...) • SockJS support • work queue • Timers • authentication • Buffers manager • Streams and Pumps • session manager • Routing • Socket.IO • Asynchronous File I/O
  • 72. Get Involved! • Google Group: http://groups.google.com/ group/vertx • GitHub: https://github.com/vert-x/vert.x • IRC: irc://freenode.net/vertx • Needs: • language implementations • modules (esp. persistence, security, ...) • examples/blogs/documentation help
  • 73. Vert.x: This ain’t your Dad’s Node! Matt Stine Enterprise Java/Cloud Consultant Please fill out an evaluation: matt.stine@gmail.com http://mattstine.com http://speakerrate.com/talks/16821 Twitter: @mstine
  • 74. Image Credits • Tim Fox: https://twitter.com/timfox • BSOD Phone: http://www.flickr.com/photos/markhillary/3413357033 • V8: http://www.flickr.com/photos/gorbould/3479298062 • Ryan Dahl: http://www.flickr.com/photos/franksvalli/5163205409 • Shortcomings: http://www.flickr.com/photos/hendricksphotos/3340896056 • Brendan Eich: http://www.flickr.com/photos/equanimity/4055148344 • Neal Ford: http://nealford.com/images/Neal-2012-headshot.jpg • Lars Bak: http://www.flickr.com/photos/niallkennedy/2822229099 • James Gosling: http://www.flickr.com/photos/skrb/2499736195 • Tony Hoare: http://www.flickr.com/photos/adewale_oshineye/3687557065 • Alan Kay: http://www.flickr.com/photos/mwichary/3010026816 • Rich Hickey: http://www.flickr.com/photos/hlship/3603090614 • Douglas Schmidt: http://www.cs.wustl.edu/~schmidt/gifs/SchmidtD.jpg • Carl Hewitt: http://www.flickr.com/photos/jeanbaptisteparis/3098594954