Vert.x — асинхронный, event-driven фреймворк, созданный под влиянием node.js. Часть 1

Всем привет!
На данный момент очень трендово использовать node.js. Однако не всем он нравится. В данном обзоре, я бы хотел рассказать немного о конкуренте, который был написан под влиянием node.js
Vert.x это асинхронный, event-driven фреймворк, цели которого пересекаются с популярным node.js. Высокая производительность, простая асинхронность и конфигурирование — это все по vert.x.
Первая версия фрейворка, была выпущена в 2012 году, в то время как node.js был выпущен в 2009. Однако, уже поддерживается VMware и может запускаться на CloudFoundry.
Основные характеристики продукта под катом:

  • Мульти-язычный. Вы можете использовать JavaScript, Ruby, Groovy, Java,Python. Практически готова поддержка Scala and Closure
  • opensource. лицензия ASL 2.0
  • настоящий параллелизм, и высокая производительность
  • написан на java, и использует все прелести JVM, масштабируясь легко между ядрами, без необходимости заботиться об межпроцессорном взаимодействии
  • Использует Hazelcast — In-Memory Data Grid систему. Прозрачно для пользователя, естественно
  • Использует Netty
  • Супер простая модель параллелизма. Никаких synchronized or volatile, или явных блокировок
  • Никакой лапши xml конфигов. Все предельно просто
  • Модульная система, с общедоступным репозиторием
  • Распределенная шина сообщений, которая охватывает и сервер и клиент.
  • Доступна встраиваемая версия
  • По различным тестам, едва ли не самый производительный фреймворк, в своем классе
  • Требует JDK 1.7
  • WebSockets,SockJS поддержка

Интересно? Пример rest helloworld на scala:

class SampleResticle extends Resticle
{
override def handles =
{ GET("/hello")      :>  OK( _ => "world ") }
}


или же более простой пример сервера, обслуживающий webroot директорию. Пример на Groovy:
vertx.createHttpServer().requestHandler { req ->
    def file = req.uri == "/" ? "index.html" : req.uri
    req.response.sendFile "webroot/$file"
}.listen(8080)

Для того что бы запустить к примеру последний хеловорлд, вам необходимо выполнить:
vertx run Server.groovy -instances 32

Как видите все предельно просто и ясно.

Посмотрев примеры кода, и почитав принципы, я естественно решил проверить заявление авторов о супер производительности.Искал сравнения с node.js.
Первый график показывает результаты теста когда отдается только 200/ОК респонс

Второй тест отдает 72-байтную html страницу:

тесты взяты отсюда. Данные тесты проводились относительно давно. У меня готовы материалы более детального тестирования. Расскажу о нем в третьей части.
К сожалению данные тесты не содержат scala-тесты. Как известно, scala во многих случаях, оказывается быстрее java.
Пожалуй, для пятничного поста, этого достаточно. В следующей части расскажу об основных принципах и патернах используемых в vert.x.
Cайт проекта. По ссылке отличная документация.
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 25

    –5
    Это JVM на стероидах? Это все компилируется в Java bytecode? Или как?
      0
      Не совсем понятен вопрос. JVM исполняет байткод.
        0
        Не понял сути вопроса, да, написано с использованием netty, Hazelcast. Если вы стероиды применили по причине того что в тестах node.js проигрывает, так io фрейворки, особенно в седьмой JVM, были быстрее. Только написание было сложнее, это все завернули в простой вид, сделали поддержку множества языков, и добавили IMDG для лучшего перфоманса и масштабирования. Результаты получились великолепные.
          –4
          Я не понял, что такое netty
            +1
            Человек и пароход.
              0
              Человек и пароход — Нетте. А netty это «asynchronous event-driven network application framework
              for rapid development of maintainable high performance protocol servers & clients.»
                +1
                Юмор даже без смайликов понимать надо.
                  0
                  не вижу юмора в том что каверкают имя моего любимого фреймворка и извращают смысл его транскрипции, уж простите
        +1
        А можно код тестов?
          +1
          Тесты публичные, основной холивар в кешировании. Что тесты не совсем корректны. Я провел свои тесты. Выложу их в след. части. Поправил статью. теперь есть ссылка на тесты которые прикреплены к статье. Спешил к пятнице, не успел оформить свое тестирование. Прошу прощения. В любом случае оба фреймворка не стояли на месте, поэтому думаю вам будет интересно посмотреть на более свежие данные.
          +11
          Давно уже обсуждалось, бенчмарки сделаны криво и неправильно. Node.js не сильно отличается по скорости от vert.x
            +3
            о чем свидетельствует этот бенчмарк
              0
              Какой именно? В половине ноджс в 2 раза хуже показывает результаты.
            +3
            Сам такой!
              0
              Вот здесь есть пузомерка со всевозможными фреймворками в том числе и vertx (как и lift, scalatra, play, spray и еще куча всего).

                0
                > написан на java
                Ах, вот в чем подвох. Список поддерживаемых языков получается Rhino, JRuby, Jython. Так?
                  0
                  Совершенно верно, только Rhino хотят убрать.
                    0
                    Надеюсь они этого не сделают — только Rhino может конкурировать с V8 на Server Side
                    +2
                    Это не языки, а реализации языков
                    +1
                    А при чем тут Node.JS то?
                      0
                      Авторы в открытую заявляли что были вдохновлены успехом node.js. Они сделали нечто похожее, но, по их заявлениям немного лучше.
                        0
                        и называлось оно в начале node.x что намекает как на node-подобную механику так и на полиглотство
                        0
                        Вопрос топикстартеру: вы что-нибудь конкретное с помощью vert.x делали/делаете?

                        Если да, может дадите более развернутый коментарий, для чего имеет смысл его использовать? По моему личному впечатлению он не очень хорошо подходит для разработки более менее большого веб-приложения. Очень много нужно придумывать/писать инфраструктурного кода, чтобы симулировать что-то наподобие managed beans, session management, трансакции, как таковой не существует template engine… Ок, можно вроде каким-то хаком подключить Spring, но вроде тоже как-то не совсем понятно.

                        Я пытаюсь на базе Yoke Framework (http://pmlopes.github.io/yoke/) сделать небольшое веб приложение, и к сожалению, прихидтся изощрятся, чтобы тривиальные вещи работали (к примеру templating с локализацией).
                          0
                          Я писал немного — vert.x хорош тем что там нету callback системы — а многопоточность достигается за счет пулов и нитей от JVM
                          0
                          Такой вопрос. vert.x может быть и хороший, но во всю набирает популярность node.js, уже есть хостинги с ним, все клиентские фреймворки берут его в качестве примера серверной части, появился Метеор, сорвав большой финансовый куш. В общем, всё сейчас про ноду. В этом плане vert.x может пойти судьбой раби и рельс, где всё очень хорошо, но всё равно большинство на ПХП. Что думаете по этому поводу? Стоит ли надеяться, что он когда-нибудь обгонит ноду по популярности?

                          Only users with full accounts can post comments. Log in, please.