(Light web framework with minimal memory usage)
Привет!
Начну с описания возникшей у меня проблемы.
У меня есть виртуальны сервер на https://www.digitalocean.com/pricing/ за 10$ в месяц с такими характеристиками: 1Gb RAM, 1 Core CPU, 30 Gb SSD. На нем крутится несколько сайтов написанных на разных инструментах, но в основном это https://playframework.com/. Данный фреймворк хорош для написания серьезных веб приложений Энтерпрайз уровня без JavaEE. Я его использовал для написания простеньких сайтов из-за того, что не нашел лучшего средства на Java.
Прямо говоря сайт-визитка на данном фреймворке в холостую использует 130-150Mb оперативной памяти, а у меня их несколько и соответственно память сервера загружена под завязку и я не могу там разместить еще приложения. Написав еще один сайт мне пришлось докупить сервер, но это все влетает мне в копеечку и я призадумался. Мне финансово стало необходимо заменить существующий фреймворк на другой с меньшим потреблением ресурсов. Тут я начал гуглить, и моя история началась!
Прямо говоря сайт-визитка на данном фреймворке в холостую использует 130-150Mb оперативной памяти, а у меня их несколько и соответственно память сервера загружена под завязку и я не могу там разместить еще приложения. Написав еще один сайт мне пришлось докупить сервер, но это все влетает мне в копеечку и я призадумался. Мне финансово стало необходимо заменить существующий фреймворк на другой с меньшим потреблением ресурсов. Тут я начал гуглить, и моя история началась!
Первое на что я набрел - это Легкий web-фреймворк с малым потреблением памяти (специфическое железо), что и послужило названием данной статьи. Из данного ресурса вытекало, что веб-фреймворк с минимальным потреблением написан на python, но с ним мне работать не хотелось и поэтому я обратил внимание на один из комментариев в котором упомянули nodejs, что для меня послужило призывом к действию(javascript я знаю достаточно хорошо). Но Nodejs не является веб-фреймворком сам по себе и я начал гуглить дальше и набрел на http://nodeframework.com/ и https://github.com/showcases/web-application-frameworks из чего я вдруг решил, что Meteor это именно то, что нужно.
Я начал переносить сайт на метеоровскую платформу, не совсем осознавая, что я переписываю все. Метеор все-таки отличается от обычного MVC web-фреймворка и он скорее подходит для написания одностраничных приложений со специфичным разделением клиентского и серверного кода. Т. е. если вы хотите написать одностраничник или несложное приложение под iOS и Android при этом используя один JavaScript, то это то, что нужно.
Однако у меня было четкое разделение сервера и UI, причем UI делится на пользовательскую и административную части, что в метеоре потребовало бы гораздо больше времени на разделение, так как к примеру все стили компилились в один файл и возникли еще кое-какие трудности. Но это полбеды, так как я больше гнался за минимальным использованием ресурсов, я обнаружил, что у Nodejs с этим не все в порядке и легко можно получить утечку памяти(Understanding Node.js Memory Leaks), что могло бы вообще парализовать мой сервер, но я к этому не был готов.
Вот одна из статей про использование памяти Nodejs https://strongloop.com/strongblog/node-js-performance-heap-profiling-tip/, т. е. там она достаточно сложно устроена, а мне бы с JVM разобраться получше. В общем, я отказался от этой затеи с Nodejs и соответственно Meteor пока отложил в сторонку.
Я начал переносить сайт на метеоровскую платформу, не совсем осознавая, что я переписываю все. Метеор все-таки отличается от обычного MVC web-фреймворка и он скорее подходит для написания одностраничных приложений со специфичным разделением клиентского и серверного кода. Т. е. если вы хотите написать одностраничник или несложное приложение под iOS и Android при этом используя один JavaScript, то это то, что нужно.
Однако у меня было четкое разделение сервера и UI, причем UI делится на пользовательскую и административную части, что в метеоре потребовало бы гораздо больше времени на разделение, так как к примеру все стили компилились в один файл и возникли еще кое-какие трудности. Но это полбеды, так как я больше гнался за минимальным использованием ресурсов, я обнаружил, что у Nodejs с этим не все в порядке и легко можно получить утечку памяти(Understanding Node.js Memory Leaks), что могло бы вообще парализовать мой сервер, но я к этому не был готов.
Вот одна из статей про использование памяти Nodejs https://strongloop.com/strongblog/node-js-performance-heap-profiling-tip/, т. е. там она достаточно сложно устроена, а мне бы с JVM разобраться получше. В общем, я отказался от этой затеи с Nodejs и соответственно Meteor пока отложил в сторонку.
Здесь я опять вернулся к первоначальной мысли, что веб-фреймворк с минимальным потреблением написан на python и решил, что делать нечего и как бы я не сопротивлялся нужно решать проблему! Здесь я загуглил https://wiki.python.org/moin/WebFrameworks/, Немного тестов производительности сетевых фреймворков, Benchmark of Python WSGI Servers, Comparison of Web Servers for Python Based Web Applications. Из всех моих поисков я выявил, что самый минималистичный не до веб-фреймворк это http://www.gevent.org/, который мало кто использует вообще. Из того, что используют можно сравнить Django c Flask как описано здесь Что выбрать или Django vs Flask? и здесь Python web framework.
Опять-таки Django - это настоящий, полноценный веб-фреймворк со всем необходимым для написания сайтов разного уровня, но когда встанет вопрос производительности, то видимо придется в добавок использовать Flask, и да Django потребует памяти в разы больше чем Flask, точно не меньше, так что решать вам. С точки зрения поиска работы, то знание Django просто обязательно (я бы сравнил это как JavaScript программисту обязательно знание jQuery).
Опять-таки Django - это настоящий, полноценный веб-фреймворк со всем необходимым для написания сайтов разного уровня, но когда встанет вопрос производительности, то видимо придется в добавок использовать Flask, и да Django потребует памяти в разы больше чем Flask, точно не меньше, так что решать вам. С точки зрения поиска работы, то знание Django просто обязательно (я бы сравнил это как JavaScript программисту обязательно знание jQuery).
Для себя же я решил поискать, а нет ли java web-micro-фреймворка для создания простеньких приложений с минимальным функционалом. И да я все-таки кое-что накопал Java Micro Frameworks: The New Trend You Can't Ignore из которого был выбран для ознакомления http://sparkjava.com/. К сожалению, информации по минимальному потреблению памяти данным фреймворком я не нашел поэтому, когда проверю его в бою напишу сам!
Всем спасибо, надеюсь, статья была полезной!