Production ready Vert.x

Post on 27-Aug-2014

2.560 views 1 download

Tags:

description

How to make your Vert.x setup ready for production

Transcript of Production ready Vert.x

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