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
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
● 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
7. “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
9. WHAT IS A VERTICLE?
● 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
16. 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
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.”
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
● 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
28. KAFKA MODULE IN MODULE 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
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
31. 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