Post on 27-Aug-2014
description
transcript
PRODUCTION READY VERT.XBerlin | 07.04.2023
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
Berlin | 2014 | zanox | JUG BB
3Berlin | 2014 | zanox | JUG BB
INTRODUCTION ZANOX
Europe‘s leading performance advertising network
4
THE BEGINNING
Berlin | 2014 | zanox | JUG BB
Java Magazin 04.14: Vert.x im UnternehmenseinsatzEntwicklung und Betrieb von asynchronen Applikationen mit Vert.x in der Praxis
5Berlin | 2014 | zanox | JUG BB
THE BEGINNING
●New request processing-system for Zanox
●Requirements are pretty high (not negotiable):●Low latency●High throughput●Scalable●Resilient●Responsive●Event-Driven●Fast
6Berlin | 2014 | zanox | JUG BB
THE BEGINNING
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?
Berlin | 2014 | zanox | JUG BB
8Berlin | 2014 | zanox | JUG BB
WHAT IS VERT.X?
Polyglot
9Berlin | 2014 | zanox | JUG BB
WHAT IS A VERTICLE?
●Classes with an own Classloader
●operates Single Threaded
●executed by an Event Loop
10Berlin | 2014 | zanox | JUG BB
Event Loop Pool
Event Bus
V V V W W W
TAKE A LOOK INSIDE
11Berlin | 2014 | zanox | JUG BB
WHAT‘S DEEP INSIDE?
●Build on top of Netty 4
●Uses Hazelcast for node discovery
●Jackson for JSON
●Java7+
12Berlin | 2014 | zanox | JUG BB
HOW TO START?
●Prerequisite: JDK 7
●download and unzip file from vertx.io
●put /bin directory to PATH variable
13Berlin | 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
14Berlin | 2014 | zanox | JUG BB
HOW TO START?
15Berlin | 2014 | zanox | JUG BB
BEST PRACTICES
16Berlin | 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)
17Berlin | 2014 | zanox | JUG BB
INFRASTRUCTURE AS CODE
18
INFRASTRUCTURE AS CODE
Berlin | 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.”
19Berlin | 2014 | zanox | JUG BB
INFRASTRUCTURE AS CODE
20Berlin | 2014 | zanox | JUG BB
INFRASTRUCTURE AS CODE
Chef Cookbook
21Berlin | 2014 | zanox | JUG BB
INFRASTRUCTURE AS CODE
22Berlin | 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
23Berlin | 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.
24Berlin | 2014 | zanox | JUG BB
VERT.X MODULE REGISTRY
●Just fill in the form and wait for approval:
25Berlin | 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
KAFKA MESSAGING SYSTEM
26Berlin | 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.
MAIN TERMINOLOGY:
27Berlin | 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
28Berlin | 2014 | zanox | JUG BB
KAFKA MODULE IN MODULE REGISTRY
Open sourced Kafka module in Vert.x’s module registry - http://modulereg.vertx.io/
29Berlin | 2014 | zanox | JUG BB
USING VERT.X MODULE
First, deploy the module into your application:
container.deployModule("com.zanox.vertx~mod-kafka~1.0.2", config);
30Berlin | 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");
CONFIGURATION IS A JSON OBJECT:
31Berlin | 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
32Berlin | 2014 | zanox | JUG BB
Q & A