PRODUCTION READY VERT.X
Berlin | 30.04.2014
TABLE OF CONTENTS
1. Introduction
2. The Beginning
3. What is Vert.x?
4. How to start?
5. Infrastructure as code
6. Vert.x module system
7. Integration with messaging system
8. Kafka module
2Berlin | 2014 | zanox | JUG BB
INTRODUCTION ZANOX
Europe‘s leading performance advertising network
3Berlin | 2014 | zanox | JUG BB
THE BEGINNING
4Berlin | 2014 | zanox | JUG BB
Java Magazin 04.14:
Vert.x im Unternehmenseinsatz
Entwicklung und Betrieb von
asynchronen Applikationen mit Vert.x in
der Praxis
THE BEGINNING
● New request processing-system for Zanox
● Requirements are pretty high (not negotiable):
● Low latency
● High throughput
● Scalable
● Resilient
● Responsive
● Event-Driven
● Fast
5Berlin | 2014 | zanox | JUG BB
THE BEGINNING
6Berlin | 2014 | zanox | JUG BB
“Vert.x is a lightweight, high performance application
platform for the JVM that's designed for modern
mobile, web, and enterprise applications.”
Vert.x
WHAT IS VERT.X?
7Berlin | 2014 | zanox | JUG BB
WHAT IS VERT.X?
8Berlin | 2014 | zanox | JUG BB
Polyglot
WHAT IS A VERTICLE?
● Classes with an own Classloader
● operates Single Threaded
● executed by an Event Loop
9Berlin | 2014 | zanox | JUG BB
10Berlin | 2014 | zanox | JUG BB
Event Loop Pool
Event Bus
V V V W W W
TAKE A LOOK INSIDE
WHAT‘S DEEP INSIDE?
● Build on top of Netty 4
● Uses Hazelcast for node discovery
● Jackson for JSON
● Java7+
11Berlin | 2014 | zanox | JUG BB
HOW TO START?
● Prerequisite: JDK 7
● download and unzip file from vertx.io
● put /bin directory to PATH variable
12Berlin | 2014 | zanox | JUG BB
HOW TO START?
● mvn archetype:generate -Dfilter=io.vertx:
(do not forget the colon!)
● generates structure for all languages (JS, Ruby,
Groovy, Python)
● maven pom is already set with relevant data
13Berlin | 2014 | zanox | JUG BB
HOW TO START?
14Berlin | 2014 | zanox | JUG BB
BEST PRACTICES
15Berlin | 2014 | zanox | JUG BB
BEST PRACTICES
● do not block the loop
● put blocking code or extensive computation into
worker verticles
● keep the application responsive
● stress test as often as possible
● encapsulate common code in modules (more on this
later)
16Berlin | 2014 | zanox | JUG BB
INFRASTRUCTURE AS CODE
17Berlin | 2014 | zanox | JUG BB
INFRASTRUCTURE AS CODE
18Berlin | 2014 | zanox | JUG BB
"CHEF IS LIKE A LITTLE SYSTEM
ADMIN ROBOT ... YOU TELL IT
HOW YOU WANT YOUR SYSTEM
CONFIGURED, AND IT WILL DO ALL
THE DIRTY WORK.”
INFRASTRUCTURE AS CODE
19Berlin | 2014 | zanox | JUG BB
INFRASTRUCTURE AS CODE
20Berlin | 2014 | zanox | JUG BB
Chef Cookbook
INFRASTRUCTURE AS CODE
21Berlin | 2014 | zanox | JUG BB
VERT.X MODULE SYSTEM
● Vert.x has a powerful module system.
● Package your Vert.x components into modules for
encapsulation and reuse.
● The module is a zip file
● It can be just plugged in into your application
22Berlin | 2014 | zanox | JUG BB
VERT.X MODULE SYSTEM
● Share your modules with the community by putting
them in Maven Central, any other Maven repository, or
in Bintray.
● Advertise your module in the module registry.
23Berlin | 2014 | zanox | JUG BB
VERT.X MODULE REGISTRY
● Just fill in the form and wait for approval:
24Berlin | 2014 | zanox | JUG BB
INTEGRATION WITH MESSAGING
SYSTEM
● Apache Kafka is a publish-subscribe messaging
implemented as a distributed commit log.
● Fast
● Scalable
● Durable
● Distributed
25
KAFKA MESSAGING SYSTEM
Berlin | 2014 | zanox | JUG BB
INTEGRATION WITH MESSAGING
SYSTEM
● Topic - categories for feeds of messages
● Producer - publishes messages to topics
● Consumer - subscribes to topics and process the feed
of published messages consumers
● Broker - Kafka is run as a cluster comprised of one or
more servers each of which is called a broker.
26
MAIN TERMINOLOGY:
Berlin | 2014 | zanox | JUG BB
KAFKA MODULE
● Application sends messages to Kafka module using
Vert.x event bus
● Kafka module acts as a producer
● Available on Maven Central and Vert.x module registry
27Berlin | 2014 | zanox | JUG BB
KAFKA MODULE IN MODULE REGISTRY
Open sourced Kafka module in Vert.x’s module registry -
http://modulereg.vertx.io/
28Berlin | 2014 | zanox | JUG BB
USING VERT.X MODULE
First, deploy the module into your application:
container.deployModule("com.zanox.vertx~mo
d-kafka~1.0.2", config);
29Berlin | 2014 | zanox | JUG BB
USING KAFKA MODULE
JsonObject config = new JsonObject();
config.putString("kafka-topic", „kafka_topic“);
config.putString("metadata.broker.list",
“localhost:9092”);
config.putString("request.required.acks", "1");
30
CONFIGURATION IS A JSON OBJECT:
Berlin | 2014 | zanox | JUG BB
METRICS OF VERT.X PROJECT
● On 4 Cores virtual machine we had the following
results:
● ~28 K requests per second without Kafka, with
lookup from Redis
● ~18 K requests per second with Kafka and lookup
from Redis
31Berlin | 2014 | zanox | JUG BB
32Berlin | 2014 | zanox | JUG BB

Vertx in production

  • 1.
  • 2.
    TABLE OF CONTENTS 1.Introduction 2. The Beginning 3. What is Vert.x? 4. How to start? 5. Infrastructure as code 6. Vert.x module system 7. Integration with messaging system 8. Kafka module 2Berlin | 2014 | zanox | JUG BB
  • 3.
    INTRODUCTION ZANOX Europe‘s leadingperformance advertising network 3Berlin | 2014 | zanox | JUG BB
  • 4.
    THE BEGINNING 4Berlin |2014 | zanox | JUG BB Java Magazin 04.14: Vert.x im Unternehmenseinsatz Entwicklung und Betrieb von asynchronen Applikationen mit Vert.x in der Praxis
  • 5.
    THE BEGINNING ● Newrequest processing-system for Zanox ● Requirements are pretty high (not negotiable): ● Low latency ● High throughput ● Scalable ● Resilient ● Responsive ● Event-Driven ● Fast 5Berlin | 2014 | zanox | JUG BB
  • 6.
    THE BEGINNING 6Berlin |2014 | zanox | JUG BB
  • 7.
    “Vert.x is alightweight, high performance application platform for the JVM that's designed for modern mobile, web, and enterprise applications.” Vert.x WHAT IS VERT.X? 7Berlin | 2014 | zanox | JUG BB
  • 8.
    WHAT IS VERT.X? 8Berlin| 2014 | zanox | JUG BB Polyglot
  • 9.
    WHAT IS AVERTICLE? ● Classes with an own Classloader ● operates Single Threaded ● executed by an Event Loop 9Berlin | 2014 | zanox | JUG BB
  • 10.
    10Berlin | 2014| zanox | JUG BB Event Loop Pool Event Bus V V V W W W TAKE A LOOK INSIDE
  • 11.
    WHAT‘S DEEP INSIDE? ●Build on top of Netty 4 ● Uses Hazelcast for node discovery ● Jackson for JSON ● Java7+ 11Berlin | 2014 | zanox | JUG BB
  • 12.
    HOW TO START? ●Prerequisite: JDK 7 ● download and unzip file from vertx.io ● put /bin directory to PATH variable 12Berlin | 2014 | zanox | JUG BB
  • 13.
    HOW TO START? ●mvn archetype:generate -Dfilter=io.vertx: (do not forget the colon!) ● generates structure for all languages (JS, Ruby, Groovy, Python) ● maven pom is already set with relevant data 13Berlin | 2014 | zanox | JUG BB
  • 14.
    HOW TO START? 14Berlin| 2014 | zanox | JUG BB
  • 15.
    BEST PRACTICES 15Berlin |2014 | zanox | JUG BB
  • 16.
    BEST PRACTICES ● donot block the loop ● put blocking code or extensive computation into worker verticles ● keep the application responsive ● stress test as often as possible ● encapsulate common code in modules (more on this later) 16Berlin | 2014 | zanox | JUG BB
  • 17.
    INFRASTRUCTURE AS CODE 17Berlin| 2014 | zanox | JUG BB
  • 18.
    INFRASTRUCTURE AS CODE 18Berlin| 2014 | zanox | JUG BB "CHEF IS LIKE A LITTLE SYSTEM ADMIN ROBOT ... YOU TELL IT HOW YOU WANT YOUR SYSTEM CONFIGURED, AND IT WILL DO ALL THE DIRTY WORK.”
  • 19.
    INFRASTRUCTURE AS CODE 19Berlin| 2014 | zanox | JUG BB
  • 20.
    INFRASTRUCTURE AS CODE 20Berlin| 2014 | zanox | JUG BB Chef Cookbook
  • 21.
    INFRASTRUCTURE AS CODE 21Berlin| 2014 | zanox | JUG BB
  • 22.
    VERT.X MODULE SYSTEM ●Vert.x has a powerful module system. ● Package your Vert.x components into modules for encapsulation and reuse. ● The module is a zip file ● It can be just plugged in into your application 22Berlin | 2014 | zanox | JUG BB
  • 23.
    VERT.X MODULE SYSTEM ●Share your modules with the community by putting them in Maven Central, any other Maven repository, or in Bintray. ● Advertise your module in the module registry. 23Berlin | 2014 | zanox | JUG BB
  • 24.
    VERT.X MODULE REGISTRY ●Just fill in the form and wait for approval: 24Berlin | 2014 | zanox | JUG BB
  • 25.
    INTEGRATION WITH MESSAGING SYSTEM ●Apache Kafka is a publish-subscribe messaging implemented as a distributed commit log. ● Fast ● Scalable ● Durable ● Distributed 25 KAFKA MESSAGING SYSTEM Berlin | 2014 | zanox | JUG BB
  • 26.
    INTEGRATION WITH MESSAGING SYSTEM ●Topic - categories for feeds of messages ● Producer - publishes messages to topics ● Consumer - subscribes to topics and process the feed of published messages consumers ● Broker - Kafka is run as a cluster comprised of one or more servers each of which is called a broker. 26 MAIN TERMINOLOGY: Berlin | 2014 | zanox | JUG BB
  • 27.
    KAFKA MODULE ● Applicationsends messages to Kafka module using Vert.x event bus ● Kafka module acts as a producer ● Available on Maven Central and Vert.x module registry 27Berlin | 2014 | zanox | JUG BB
  • 28.
    KAFKA MODULE INMODULE REGISTRY Open sourced Kafka module in Vert.x’s module registry - http://modulereg.vertx.io/ 28Berlin | 2014 | zanox | JUG BB
  • 29.
    USING VERT.X MODULE First,deploy the module into your application: container.deployModule("com.zanox.vertx~mo d-kafka~1.0.2", config); 29Berlin | 2014 | zanox | JUG BB
  • 30.
    USING KAFKA MODULE JsonObjectconfig = new JsonObject(); config.putString("kafka-topic", „kafka_topic“); config.putString("metadata.broker.list", “localhost:9092”); config.putString("request.required.acks", "1"); 30 CONFIGURATION IS A JSON OBJECT: Berlin | 2014 | zanox | JUG BB
  • 31.
    METRICS OF VERT.XPROJECT ● On 4 Cores virtual machine we had the following results: ● ~28 K requests per second without Kafka, with lookup from Redis ● ~18 K requests per second with Kafka and lookup from Redis 31Berlin | 2014 | zanox | JUG BB
  • 32.
    32Berlin | 2014| zanox | JUG BB

Editor's Notes

  • #5 Continuous Deployment:- should be one of the first steps if you really want to use it (not just vert.x though) -> start early- more on this from my colleague Sascha ...
  • #6 started as a prototype in order to try out new technologieswas fun & easy to usecan we use it in production?approval needs to meet these requirements
  • #7 just another hipster framework?No! Far from it
  • #8 - started by Tim Fox- completed move to Eclipse Foundation
  • #11 Powered by n EventLoops (usually one per Core)Each Verticle bound to one EventLoop (single-threaded)No concurrency issues WorkerVerticle can be bound to an non EventLoop threadWorkerVerticles are useful for blocking calls (like legacy frameworks, e.g. JDBC)communication via Event Bus
  • #14 - check if everything went well with a “mvn package”- do a “vertxrunzippackagenamestuffi”
  • #15 to get a feeling of how easy this stuff can be: try out a simple webserver- extend it with a REST style path matching- diverse matcher
  • #16 - these are our learnings- advises to avoid pitfalls we have encounteredstarter verticle which calls all verticles- easy to manage especially if you have a big number of verticles- you can define the number of verticles
  • #23 Vert.x has a powerful module system.Vert.x allows you to package your applications or other re-usable functionality into modules which can then be deployed or used by other Vert.x code.What It gives:- your dependencies are encapsulated in a single artifact (the module zip file)- Vert.x can automatically download and install modules from any repository given just the module identifier.It is highly recommended that you always assemble your applications as modules and you don't use raw verticles.
  • #24 - your module can be pushed to any Maven repository or Bintray.Bintray is a social platform for developers to publish, download, store, promote, and share open source software packages.- Your module can be registered in the Vert.x module registry so others can discover and use it.
  • #26 Uses Zero Copy, that’s why it’s very fast, and is also lightweight.Fast also because of partitioning. Other advantage is that consumers keep the index of read data, not kafka itself.Fast - A single Kafka broker can handle hundreds of megabytes of reads and writes per second from thousands of clients.Scalable - It can be elastically and transparently expanded without downtime. Durable - Messages are persisted on disk and replicated within the cluster to prevent data loss.Distributed by Design - Kafka has a modern cluster-centric design based on multiple brokers and partitions
  • #30 To plug the module into your application, you need one line to specify which module should be deployed.Instances of the module can be deployed and run at the command line using vertxrunmod or programmatically using container.deployModule(...).Here is, how we run the kafka module:container.deployModule("com.zanox.vertx~mod-kafka~1.0.2", config);
  • #31 Configuration for a module should be specified using a JSON configuration file when deploying from the command line using vertxrunmodOR passed in when deploying a module programmatically.
  • #32 - 4 Cores, 16 GB, 12 GB Heap