пятница, 16 марта 2012 г.

Почему сервер тормозит?

English text is here, as usual. :)

Супер.
Очень интересные ссылки обнаружил в блоге разработчиков DTrace -
1. The USE Method - http://dtrace.org/blogs/brendan/2012/02/29/the-use-method/
2. The USE Method: Solaris checklist - http://dtrace.org/blogs/brendan/2012/03/01/the-use-method-solaris-performance-checklist/
3. The USE Method: Linux checklist - http://dtrace.org/blogs/brendan/2012/03/07/the-use-method-linux-performance-checklist/
Вкратце - изложена очень простая, но эффективная методика определения проблем с производительностью сервера - USE (utilization, saturation, errors) метод. То есть для каждого ресурса сервера - CPU, память, диски, сеть и т.д. мы проверяем

  1. на сколько загружен ресурс от максимума (utlization)
  2. как часто ресурс не может обработать все запросы и ставит их в очередь (saturation)
  3. сколько ошибок генерируется при работе с данным ресурсом (errors).

Как правило сначала нужно проверить ошибки, потом утилизацию - а потом уже очереди - хотя и не всегда.
Это очень кратко - всем рекомендую ознакомиться со статьями. Во 2й и 3й части даются конкретные списки команд и рекомендации для проверки Солярки и Линукса по вышеописаному методу.
И кстати, метод волне юзабелен даже и без dtrace - тем более что под Линуксом его и нет, а имеющиеся реализации авторы блога терпеть не могут. :)

воскресенье, 4 марта 2012 г.

Пара ссылок

Нашел пару интересных ссылок -
1. http://www.windley.com/archives/2012/03/asynchronous_http_requests_in_perl_using_anyevent.shtml - небольшое введение в асинхронное программирование на Perl с помощью AnyEvent.
2.  Прикольное обьяснение алгоритма Диффи-Хельмана (про безопасный обмен ключами) - все интересно и понятно.

Perl теперь и на Heroku !

English post is here.

К своему удивлению недавно узнал что на облачном хостинге Heroku теперь можно пускать приложения на (почти) любой веб-платформе. Делается это с помощью технологии называемой buldpacks. По идее это сделано чтобы можно было "потюнить" платформу/окружение - использовать новую версию Node.js или Ruby или что нибудь в этом роде. Но народ быстро смекнул в чем дело и нашлепал билдпаков на любой вкус и цвет - для C/Erlang/PHP/Go/Scala/etc - ну и конечно для Perl, причем один из них сделал сам великий и ужасный :) Miyagawa - heroku-buildpack-perl. Им я и воспользовался чтобы перетащить свой Plusfeed.pl на Heroku со Stackato (где уже кончился триал). Теперь он живет на http://perlfeed-pl.herokuapp.com - заодно я пофиксил один неприятный баг из-за которого у сообщения менялся id при добавлении комментария или +1 - соответсвенно оно всплывало в ленте. :(
Вкратце я опишу как это делается.
1. Пишем стандартный Makefile.PL для своего приложения (можно использовать формат Build.PL) - вот мой -

use strict;
use warnings;
use ExtUtils::MakeMaker;
WriteMakefile(
    NAME      => 'plusfeed.pl',
    VERSION   => '0.05',
    AUTHOR    => 'Denis Zhdanov ',
    EXE_FILES => ['app.psgi'],
    PREREQ_PM => {
        'Google::Plus'             => '0.004',
        'XML::RSS'                 => '1.49',
        'XML::Atom::SimpleFeed'    => '0.86',
        'Plack::App::Path::Router' => '0',
        'Plack::App::File'         => '0',
        'Plack::Builder'           => '0',
        'Path::Router'             => '0.11',
        'CHI'                      => '0.5',
        'Starman'                  => '0.3',
    },
    test => {TESTS => 't/*.t'}
);


2. Добавляем свое приложение на сайт с помощью кастомного билдпака - 
git init
git add .
git commit -m "Initial version"

heroku create --stack cedar --buildpack \ http://github.com/miyagawa/heroku-buildpack-perl.git
git push heroku master

Вся магия содержится в строке с buildpack. После этого видим что то хохожее - 

-----> Heroku receiving push
-----> Fetching custom buildpack... done
-----> Perl/PSGI app detected
-----> Installing dependencies
-----> Installing Starman
       Starman is up to date. (0.3000)
-----> Discovering process types
       Procfile declares types     -> (none)
       Default types for Perl/PSGI -> web
-----> Compiled slug size is 6.8MB
-----> Launching... done, v7
       http://plusfeed-pl.herokuapp.com deployed to Heroku

(было много строк со сборкой cpanm и всех зависимостей,  но только в первый раз, при обновлении этого не требуется).
Все пользуемся приложением и радуемся.  :)