<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Varien &#187; Возможности</title>
	<atom:link href="http://varien.com.ua/blog/category/magento/features/feed/" rel="self" type="application/rss+xml" />
	<link>http://varien.com.ua</link>
	<description>Varien/Magento blog</description>
	<lastBuildDate>Fri, 25 Jun 2010 13:02:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Установка nginx + php-fpm + apc для работы с magento</title>
		<link>http://varien.com.ua/blog/ustanovka-magento-dlya-raboty-s-nginx-php-fpm-apc/</link>
		<comments>http://varien.com.ua/blog/ustanovka-magento-dlya-raboty-s-nginx-php-fpm-apc/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 10:51:08 +0000</pubDate>
		<dc:creator>Алексей Саморуков</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[Возможности]]></category>
		<category><![CDATA[Настройка]]></category>
		<category><![CDATA[benchmarks]]></category>
		<category><![CDATA[производительность]]></category>

		<guid isPermaLink="false">http://varien.com.ua/?p=663</guid>
		<description><![CDATA[В этой заметке описано, как установить magento для работы с веб сервером nginx и php-fpm. Зачем это нужно? magento предоставляет все возможности для создания функциональных и мощных систем электронной коммерции. Предоставляя максимум возможностей этот продукт достаточно требователен к ресурсам сервера. Заметка расчитана на тех, кто хочет выжать максимум производительности для своей конфигурации. Также она будет [...]]]></description>
			<content:encoded><![CDATA[<p>В этой заметке описано, как установить magento для работы с веб сервером <a href="http://nginx.net">nginx</a> и <a href="http://php-fpm.org">php-fpm</a>. Зачем это нужно? magento предоставляет все возможности для создания функциональных и мощных систем электронной коммерции. Предоставляя максимум возможностей этот продукт достаточно требователен к ресурсам сервера. Заметка расчитана на тех, кто хочет выжать максимум производительности для своей конфигурации. Также она будет полезна и владельцам VPS, ограниченные ресурсы которых делают традиционную связку apache + php еще менее пригодной к использованию. Описываемая в статье конфигурация построена на <a href="http://www.centos.org/">CentOS 5.4</a>, но может быть выполнена и на других Linux ОС или FreeBSD, с некоторыми отличиями. Также она может быть использована для построения массового magentо хостинга, так как в данном случае требования к расходу памяти становятся еще более критичными. Замена APACHE + mod_php на nginx + php-fpm позволяет существенно снизить потребление памяти, значительно повысить быстродействие при запросах статики (графика, стили и так далее) и сделать более масштабируемое решение.<br />
<span id="more-663"></span><br />
<strong>Подготовка.</strong><br />
В качестве операционной системы для большинства наших серверов мы используем CentOS 5. С одной стороны, эта система имеет длительный срок поддержки, а с другой &#8211; достаточно консервативна, так что шансы получить проблемы при обновлениях невелики. Если у вас сервер с 4 и более гигабайтами памяти я рекомендую использовать архитектуру x86_64. CentOS 5.4 можно скачать с <a href="http://mirror.centos.org/centos/5/isos/">одного из зеркал проекта</a>. </p>
<p><strong>Установка и конфигурирование</strong><br />
Во время установки я рекомендую отключить все дополнительные опции и пакеты. Все, что нужно для magento мы поставим позже. Также желательно отключить firewall и selinux, как минимум до завершения установки. </p>
<p>Несколько слов об используемом ПО. <a href="http://nginx.net">nginx</a> &#8211; это быстрый и крайне нетребовательный к ресурсам HTTP (и не только) сервер, который используется для раздачи статики (картинки, стили, javascript), а также позволяет работать с динамическим контентом используя FastCGI API. <a href="http://php-fpm.org">PHP-FPM</a> &#8211; это улучшенная реализация интерфейса FastCGI для PHP, распространяемая в виде патча к исходникам PHP. Сервер FastCGI позволяет работать по TCP или используя локальный socket. <a href="http://php.net/manual/en/book.apc.php">APC</a> &#8211; &#8220;оптимизатор&#8221; PHP, реализующий опкод кеширование для скриптов и, помимо этого, предоставляющий интерфейс для хранения данных скрипта в shared памяти. Его применение имеет смысл только в FastCGI или Apache SAPI режимах. </p>
<p>Репозиторий centos не содержит php-fpm. Конечно, можно самостоятельно скомпилировать PHP 5.2.11 + php-fpm, но намного более &#8220;правильный&#8221; с точки зрения удобства обновления и поддержки способ &#8211; использование репозитория. Для использования php5.2.x + fpm на наших серверах мы создали репозиторий (<a href="http://rpms.varien.com">rpms.varien.com</a>). В настоящий  момент поддерживается CentOS/RHEL 5, архитектуры i386 и x86_64. Также нам потребуется подключить репозиторий EPEL, содержащий многие программы и библиотеки, отсутствующие в системных репозиториях CentOS/RHEL. </p>
<p>Подключение репозиториев:
<pre>
  # rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
  # wget http://rpms.varien.com/varien-release-1-1.centos.varien.noarch.rpm
  # rpm -Uvh varien-release-1-1.centos.varien.noarch.rpm</pre>
<p>Устанавливем нужное нам ПО:</p>
<pre>  # yum install nginx
  # yum install php-fpm php-mysql php-gd php-mcrypt php-dom
  # yum install php-pecl-apc
  # yum install mysql-server
</pre>
<p>Включаем автостарт необходимых сервисов:</p>
<pre>  # /sbin/chkconfig nginx on
  # /sbin/chkconfig mysqld on
  # /sbin/chkconfig php-fpm on</pre>
<p>Конфигурируем nginx (файл <tt>/etc/nginx.conf</tt>). В данном примере магазин расположен по пути <tt>/magento/</tt> в папке <tt>/var/www/html/magento</tt>. Поддерживается URL Rewrite (аналог конфигурации для apache mod_rewrite), для php используется PHP-FPM подключенный через unix socket. </p>
<pre>
user              nginx;
worker_processes  1;
error_log         /var/log/nginx/error.log;
pid               /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] $request '
                      '"$status" $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    keepalive_timeout  65;

    # fastcgi nodes
    upstream  backend  {
        server unix:/tmp/fcgi.sock;
    }

    server {
        listen       80;
        server_name  example.local;
        root   /var/www/html;
        autoindex off;

        gzip on; # use gzip compression
        gzip_proxied any; # enable proxy for the fcgi requests
        gzip_types text/plain text/html text/css text/javascript;

        # protection (we have no .htaccess)
        location ~ (^/magento/(app/|includes/|lib/|/pkginfo/|var/|report/config.xml)|/\.svn/|/.hta.+) {
            deny all;
        }

        # handle all .php files, /downloader and /report
        location ~ (\.php|/downloader/?|/report/?)$ {
            if ($request_uri ~ /(downloader|report)$){ # no trailing /, redirecting
                rewrite  ^(.*)$ $1/ permanent;
            }
            fastcgi_index index.php;
            include /etc/nginx/fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            if (-e $request_filename) { # check if requested path exists
                fastcgi_pass backend;
            }

        }

        # handle magento
        location /magento/
        {
            # set expire headers
            if ($request_uri ~* "\.(ico|css|js|gif|jpe?g|png)$") {
                expires max;
            }
            # set fastcgi settings, not allowed in the "if" block
            include /etc/nginx/fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root/magento/index.php;
            fastcgi_param SCRIPT_NAME /magento/index.php;
            # rewrite - if file not found, pass it to the backend
            if (!-f $request_filename) {
                fastcgi_pass backend;
                break;
            }
        }
    }
}
</pre>
<p>Конфигурация PHP-FPM (файл /etc/php-fpm.conf). Используется локальный socket. Наиболее важный параметр тут &#8211; max_children, его значение должно быть подобрано с учетом конфигурации (память, CPU) в процессе  тестов нагрузки. </p>
<pre>&lt;configuration&gt;
        &lt;section name="global_options"&gt;
                &lt;value name="pid_file"&gt;/var/run/php-fpm.pid&lt;/value&gt;
                &lt;value name="error_log"&gt;/var/log/php-fpm.log&lt;/value&gt;
                &lt;value name="log_level"&gt;notice&lt;/value&gt;
                &lt;value name="emergency_restart_threshold"&gt;10&lt;/value&gt;
                &lt;value name="emergency_restart_interval"&gt;1m&lt;/value&gt;
                &lt;value name="process_control_timeout"&gt;5s&lt;/value&gt;
                &lt;value name="daemonize"&gt;yes&lt;/value&gt;
        &lt;/section&gt;
        &lt;workers&gt;
                &lt;section name="pool"&gt;
                        &lt;value name="name"&gt;default&lt;/value&gt;
                        &lt;value name="listen_address"&gt;/tmp/fcgi.sock&lt;/value&gt;
                        &lt;value name="listen_options"&gt;
                                &lt;value name="owner"&gt;&lt;/value&gt;
                                &lt;value name="group"&gt;&lt;/value&gt;
                                &lt;value name="mode"&gt;0666&lt;/value&gt;
                        &lt;/value&gt;
                        &lt;value name="php_defines"&gt;
                        &lt;/value&gt;
                        &lt;value name="user"&gt;nginx&lt;/value&gt;
                        &lt;value name="group"&gt;nginx&lt;/value&gt;
                        &lt;value name="pm"&gt;
                                &lt;value name="style"&gt;static&lt;/value&gt;
                                &lt;value name="max_children"&gt;10&lt;/value&gt;
                                &lt;value name="apache_like"&gt;
                                        &lt;value name="StartServers"&gt;20&lt;/value&gt;
                                        &lt;value name="MinSpareServers"&gt;5&lt;/value&gt;
                                        &lt;value name="MaxSpareServers"&gt;35&lt;/value&gt;
                                &lt;/value&gt;
                        &lt;/value&gt;
                        &lt;value name="request_terminate_timeout"&gt;0s&lt;/value&gt;
                        &lt;value name="request_slowlog_timeout"&gt;0s&lt;/value&gt;
                        &lt;value name="slowlog"&gt;logs/slow.log&lt;/value&gt;
                        &lt;value name="rlimit_files"&gt;1024&lt;/value&gt;
                        &lt;value name="rlimit_core"&gt;0&lt;/value&gt;
                        &lt;value name="chroot"&gt;&lt;/value&gt;
                        &lt;value name="chdir"&gt;&lt;/value&gt;
                        &lt;value name="catch_workers_output"&gt;yes&lt;/value&gt;
                        &lt;value name="max_requests"&gt;500&lt;/value&gt;
                        &lt;value name="allowed_clients"&gt;127.0.0.1&lt;/value&gt;
                        &lt;value name="environment"&gt;
                                &lt;value name="HOSTNAME"&gt;$HOSTNAME&lt;/value&gt;
                                &lt;value name="PATH"&gt;/usr/local/bin:/usr/bin:/bin&lt;/value&gt;
                                &lt;value name="TMP"&gt;/tmp&lt;/value&gt;
                                &lt;value name="TMPDIR"&gt;/tmp&lt;/value&gt;
                                &lt;value name="TEMP"&gt;/tmp&lt;/value&gt;
                                &lt;value name="OSTYPE"&gt;$OSTYPE&lt;/value&gt;
                                &lt;value name="MACHTYPE"&gt;$MACHTYPE&lt;/value&gt;
                                &lt;value name="MALLOC_CHECK_"&gt;2&lt;/value&gt;
                        &lt;/value&gt;
                &lt;/section&gt;
        &lt;/workers&gt;
&lt;/configuration&gt;</pre>
<p>Запускаем nginx и php-fpm:
<pre>  # /etc/init.d/php-fpm start
  # /etc/init.d/nginx start</pre>
<p>Запускаем mysqld, и назначаем пароль для mysql рута
<pre>  # /etc/init.d/mysqld start
  # /usr/bin/mysql_secure_installation</pre>
<p>Теперь добавляем пользователя и базу данных magento:
<pre>  # mysql --user=root -p
  mysql>  CREATE USER 'magento'@'localhost' IDENTIFIED BY 'my_password';
  mysql>  CREATE DATABASE magento;
  mysql>  GRANT ALL PRIVILEGES ON `magento`.* TO 'magento'@'%' WITH GRANT OPTION;</pre>
<p>На этом этапе все готово для установки magento.</p>
<p><strong>Установка magento</strong><br />
Для установки magent в консоли я использовал wiki-статью <a href="http://www.magentocommerce.com/wiki/groups/227/installing_magento_via_shell_ssh">installing magento via ssh</a>.</p>
<ol>
<li>Скачиваем magento:<br /><tt># cd /var/www/html<br /><nobr># wget http://www.magentocommerce.com/downloads/assets/1.3.2.4/magento-1.3.2.4.tar.gz</nobr><br />
# tar -xvzf magento-1.3.2.4.tar.gz</tt></li>
<li>Если нам нужна тестовая база данных (sample db) &#8211; скачиваем и распаковываем ее, если нет &#8211; пропускаем этот шаг.<br /><tt><nobr># wget http://www.magentocommerce.com/downloads/assets/1.2.0/magento-sample-data-1.2.0.tar.gz<br />
# tar -xvzf  magento-sample-data-1.2.0.tar.gz<br />
# mv magento-sample-data-1.2.0/media/* magento/media/<br />
# mysql --user=root magento -p &lt; magento-sample-data-1.2.0/magento_sample_data_for_1.2.0.sql</nobr></tt></li>
<li>Назначаем корректного владельца всем файлам: <tt><br />
# chown -R nginx:nginx magento</tt>
</ol>
<p>Теперь переходим к этапу настройки magento, указав в браузере адрес нашей установки, например http://example.local/magento/. Должен заработать magento installation wizard. В настройках базы данных указываем пользователя magento (и назначенный вами пароль), адрес хоста &#8211; localhost. Также следует отметить флаг &#8220;Skip Base URL validation before next step&#8221;. Дальнейшая конфигурация и использование ничем не отличается от обычных установок magento.</p>
<p><strong>Дополнительная оптимизация</strong><br />
Прежде всего следует перенести magento cache в APC, так как файловое хранилище достаточно неєффективно, особенно при параллельных запросах. Для этого в секцию globals файла magento/app/etc/local.xml добавляем секцию cache:</p>
<pre>    &lt;cache&gt;
         &lt;backend&gt;apc&lt;/backend&gt;
         &lt;prefix&gt;MY_MAGENTO_&lt;/prefix&gt;
    &lt;/cache&gt;</pre>
<p>Также рекомендуется оптимизация mysql, ip стека linux, подбор параметров APC, конфигурирование firewall, но все это уже выходит за рамки данной заметки. </p>
]]></content:encoded>
			<wfw:commentRss>http://varien.com.ua/blog/ustanovka-magento-dlya-raboty-s-nginx-php-fpm-apc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Знакомство с Magento (video)</title>
		<link>http://varien.com.ua/blog/znakomstvo-s-magento-video/</link>
		<comments>http://varien.com.ua/blog/znakomstvo-s-magento-video/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 09:00:22 +0000</pubDate>
		<dc:creator>Виктор</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[Возможности]]></category>
		<category><![CDATA[screencast]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://varien.com.ua/?p=549</guid>
		<description><![CDATA[Здравствуйте.
Для того чтобы наши читатели узнали больше о том, что мы производим – мы решили создать серию видеопрезентаций о нашем продукте.
Сегодня мы представляем вашему вниманию первую из них. Эта презентация (или скринкаст) является вводной и поверхностно рассказывает о том, что «умеет» Magento. В дальнейшем мы планируем рассмотреть интересующую вас функциональность более детально.
Если у вас есть [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">Здравствуйте.</p>
<p>Для того чтобы наши читатели узнали больше о том, что мы производим – мы решили создать серию видеопрезентаций о нашем продукте.</p>
<p>Сегодня мы представляем вашему вниманию первую из них. Эта презентация (или скринкаст) является вводной и поверхностно рассказывает о том, что «умеет» Magento. В дальнейшем мы планируем рассмотреть интересующую вас функциональность более детально.<br />
Если у вас есть пожелания или замечания – сообщите нам.</p>
<p>PS: Хочу добавить, что несмотря на то, что все представленные в скринкасте страницы Magento содержат текст на английском языке, Magento поддерживает локализацию, и её интерфейс очень просто можно преобразовать с англоязычного в русскоязычный.</p>
<p><center><object width="640" height="505"><param name="movie" value="http://www.youtube.com/v/BVaX2ASvxks&#038;hl=en&#038;fs=1&#038;color1=0x3a3a3a&#038;color2=0x999999&#038;hd=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/BVaX2ASvxks&#038;hl=en&#038;fs=1&#038;color1=0x3a3a3a&#038;color2=0x999999&#038;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="505"></embed></object></center></p>
<p align="justify">Скачать файл презентации в более высоком качестве можно, пройдя по ссылке: <a href="http://upload.com.ua/get/900996228/" target="upload"><b>Знакомство с Magento</b></a>.</p>
<pre>Параметры видео:
General
Format                           : MPEG-4
File size                        : 9.01 MiB
Duration                         : 7mn 40s

Video
Format/Info                      : Advanced Video Codec
Format profile                   : High@L4.1
Width                            : 1 024 pixels
Height                           : 768 pixels

Audio
Format/Info                      : Advanced Audio Codec
Format profile                   : LC
Format settings, SBR             : Yes
Format settings, PS              : Yes</pre>
]]></content:encoded>
			<wfw:commentRss>http://varien.com.ua/blog/znakomstvo-s-magento-video/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Magento и Zend Server</title>
		<link>http://varien.com.ua/blog/magento-zend-server/</link>
		<comments>http://varien.com.ua/blog/magento-zend-server/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 09:00:00 +0000</pubDate>
		<dc:creator>Евгений</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[Возможности]]></category>
		<category><![CDATA[benchmarks]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[zend server]]></category>

		<guid isPermaLink="false">http://varien.com.ua/aboutus/205/</guid>
		<description><![CDATA[Недавно компания Zend выпустила специализированный продукт - <a href="http://www.zend.com/en/products/server/">Zend Server</a>, который увеличивает скорость работы веб-приложений, реализуя кэширование страниц, реорганизует и ускоряет скорость выполнения байт-кода. René Amirkhanian, Adrien Urban и Philippe Humeau, сотрудники хостинг-партнёра Magento, компании NBS System, постарались оценить прирост производительности, достигаемый с помощью данного решения [...]]]></description>
			<content:encoded><![CDATA[<p><em>Эта статья была написана <a href="mailto:rene.amirkhanian@nbs-system.com">René Amirkhanian</a>, <a href="mailto:adrien.urban@nbs-system.com">Adrien Urban</a> и <a href="mailto:philippe.humeau@nbs-system.com">Philippe Humeau</a> из компании <a title="NBS System" href="http://www.nbs-system.com/">NBS System</a>, <a title="хостинг-партнера Magento" href="http://www.magentocommerce.com/partners/view/122/nbs-system">хостинг-партнера Magento</a>, и опубликована</a> на французском <a title="WikiGento Blog" href="http://www.wikigento.com/?p=938#more-938">WikiGento Blog</a>.</em></p>
<p>Magento &#8211; это приложение PHP/Zend, интенсивно использующее ресурсы центрального процессора. С момента выхода версии 1.1.6, каждая новая версия включала в себя некоторые механизмы, призванные улучшать производительность платформы. Основной целью является уменьшение потребления ресурсов для данного e-магазина (попросту говоря &#8211; меньше процессорного времени), для того чтобы обслуживать большее количество пользователей на том же самом аппаратном обеспечении.</p>
<p>Одним из путей достижения лучшей производительности является оптимизация скорости генерации страниц PHP. На широко распространенных &#8220;<a href="http://ru.wikipedia.org/wiki/LAMP">LAMP</a>&#8221; серверах обычно используется Apache с модулем mod_php, или, иногда, с модулем fast_cgi.</p>
<p>Zend (компания, поддерживающая PHP), выпустила специализированный продукт &#8211; <a href="http://www.zend.com/en/products/server/">Zend Server</a>, который включает в себя стэк веб-приложений, и, помимо некоторых других возможностей, увеличивает скорость работы путем кэширования страниц, и реорганизации и ускорения байт-кода.</p>
<p>Apache в связке Zend Server являются альтернативой обычному Apache с mod-php для запуска Magento. Целью этого исследования является исследование и оценка улучшений производительности за счет использования данного ПО.</p>
<p>Большое спасибо Yoav Kutner (CTO компании Varien) за предоставленные заполненные тестовые каталоги для версий Magento 1.2 и 1.3. Также спасибо лаборатории Zend за помощь в конфигурации и тонкой настройке Zend Server, а также за полное объяснение механизма работы данного решения.</p>
<h3>Используемые методы и инструменты</h3>
<p>Бенчмарки делались с помощью утилиты <a href="http://www.joedog.org/index/siege-home">siege</a> (версия 2.66-2), с различным количеством одновременных потоков (5, 10, 20 and 40). Каждый поток открывал соединение с веб-сервером, запрашивал страницу и начинал все сначала после того, как страница была считана.</p>
<p>Тесты запускались по 5 минут каждый, и расчитывалось среднее количество полученных страниц для этого бенчмарка.</p>
<p>Проводились два типа тестов: первый &#8211; простой, мы просто загружали главную страницу в цикле, как можно быстрее.</p>
<p>Второй тест базировался на логах загрузки всех элементов броузером при посещении страницы (включая css, js, картинки). Так как загрузка одной страницы обычно вызывает загрузку нескольких элементов, отображаемое число будет значительно больше, чем количество страниц, реально видимых пользователю. На 18 страниц, просмотренных пользователем, приходится 91 скачанный элемент, среднее соотношение примерно 1 к 5.</p>
<p>Все результаты были получены на одном и том же &#8220;железе&#8221; и операционной системе, для целей тестирования. Обратное проксирование не использовалось. Во время запуска тестово был активен <a href="http://www.php.net/apc/">АРС кеш байт-кода</a>. Это было стандартное окружение по умолчанию, без применения тонких настроек.</p>
<p><strong>Железо:</strong></p>
<p>2 процессора: Quad-Core AMD Opteron&trade; Processor 2376 (2.3GHz), 8GB RAM</p>
<p><strong>Софт:</strong></p>
<p>ОС: Linux (2.6.27.10-grsec) Debian (Lenny)<br />
Веб-сервер: Apache2 (2.2.9-10+lenny2)<br />
PHP (mod-php): mod-php5 (5.2.6.dfsg.1-1+lenny3) / php-apc (3.0.19-2)<br />
PHP (Zend Server): zend-pe (1.0.0-1+b47) / mod-php5-zend-pe (5.2.9+b75)</p>
<p><strong>Репозитории:</strong></p>
<p>deb http://ftp.fr.debian.org/debian/ lenny main<br />
deb http://security.debian.org/ lenny/updates main<br />
deb http://volatile.debian.org/debian-volatile lenny/volatile main<br />
deb http://repos.zend.com/deb/pe pe non-free</p>
<h3>Тестирование разных версий Magento</h3>
<p>Эти тесты были выполнены в каталоге с более чем 80 000 (далее &#8211; 80k) продуктов.</p>
<p>Графики показывают среднее количество запросов в секунду, успешно обработанных сервером во время пятиминутного теста.</p>
<p><strong>Загрузка главной страницы</strong></p>
<p><img class="size-medium aligncenter" title="График 1 - Сравнение версий 1.2, 1.3 и 1.3 + flat каталог" src="http://varien.com.ua/wp-content/uploads/zend-server/graph1-500x286.jpg" alt="График 1 - Сравнение версий 1.2, 1.3 и 1.3 + flat каталог" width="500" height="286" /></p>
<p>Magento 1.3 собирает главную страницу гораздо быстрее, чем версия 1.2. Включенный Flat-каталог не сильно помогает в отображении главной страницы, и даже, похоже, замедляет процесс ее сборки при большой нагрузке. Производительность версии 1.3 в два раза выше чем 1.2 при небольших нагрузках, и на 33% больше при больших нагрузках.</p>
<p>При &#8220;стандартной&#8221; загрузке мы можем отметить 40%-ный прирост производительности в версии 1.3 по отношению к версии 1.2, по крайней мере для домашней страницы.</p>
<p><strong>Полный цикл посещения</strong></p>
<p><img class="aligncenter size-medium" title="График 2 - Полное посещение, сравнение версий 1.2, 1.3 и 1.3 + flat каталог (FC)" src="http://varien.com.ua/wp-content/uploads/zend-server/graph2-500x286.jpg" alt="" width="500" height="286" /></p>
<p>График показывает небольшое увеличение в версии 1.3 по сравнению с 1.2, механизм flat-каталога дает общее улучшение, которое существенно увеличивает производительность.</p>
<p>Резюмируя, можем привести такие значения:</p>
<p>Версия 1.2 -&gt; 1.3 : +66%<br />
Версия 1.3 -&gt; 1.3+FС : +20%</p>
<h3>Apache + mod-php по сравнению с Apache + Zend Server</h3>
<p>Zend Server (далее ZS) предлагает несколько встроенных технологий для увеличения производительности приложений:</p>
<ul class="disc">
<li>Zend Optimizer+ выполняет оптимизацию и кэширование байт-кода. Это увеличивает скорость PHP-приложений путем исключения процесса чтения скриптов с диска и их компилирования. Zend Optimizer+ запускается автоматически, и установка вашего приложения поверх Zend Server (ZS) &#8211; это всё, что вам нужно сделать чтобы насладиться его преимуществами. Во время тестов с ZS, кэш APC был деактивирован, так как Zend optimizer+ делает ту же работу.</li>
<li>Zend Page Cache позволяет кэшировать PHP страницы целиком. Кэширование страниц значительно увеличивает производительность веб-приложений, в то же время поддерживая динамические возможности с помощью системы правил кэширования, построенной на параметрах запросов и данных сессий пользователей. Кэширование страниц также имеет преимущество в том, что не требует никаких изменений в коде, и может быть настроено через интерфейс Zend Server. Только &#8220;pro&#8221;-версия включает в себя эту часть ПО, которая однозначно изменяет производительность к лучшему, в чем мы и убедимся через минуту.</li>
<li>Zend Data Cache это набор функций API, позволяющих разработчику сохранять и управлять данными (PHP строки, массивы и другие данные) и даже выдавать элементы либо из кэша диска, либо из кэша разделяемой памяти. Zend Data Cache позволяет настроить тонкое кэширование там, где полное кэширование страниц невозможно. Предлагаемый API легок в использовании в существующем коде, и во многих случаях разработчик может пропускать существующие участки кода, просто оборачивая их API кэширования. Эта возможность может быть использован путем незначительной доработки исходного кода ПО Varien.</li>
</ul>
<blockquote><p><strong>Примечание</strong>: Zend Optimizer+ и Zend Data Cache доступны в бесплатной версии Zend Server, в то время как Zend Page Cache требует покупки лицензии Zend Server (полное сравнение Zend Server и Zend Server Community Edition доступно на <a href="http://www.zend.com/en/products/server/editions">http://www.zend.com/en/products/server/editions</a>).</p></blockquote>
<h3>Настройка Zend Server для Magento</h3>
<p>В бенчмарке были определены 2 правила кэширования:</p>
<p>Первое правило кэширует файлы JavaScript, которые динамически подключаются к каждому запросу Magento. Это простое правило привело к значительному улучшению времени отклика.</p>
<p><img class="aligncenter size-medium" title="ZS - экран конфигурации стр.1" src="http://varien.com.ua/wp-content/uploads/zend-server/sc11-500x327.jpg" alt="ZS - экран конфигурации стр.1" width="500" height="327" /></p>
<p>Второе правило кэширует все веб-страницы, посещенные пользователями, у которых нет товаров в корзине и нет истории посещений (когда корзина не пустая, либо сохранена история пользователя &#8211; нет смысла в кэшировании страницы). Как вы видите на картинке внизу, это было сделано с помощью проверки переменных $_SESSION и разделению по $_SERVER['REQUEST_URI'] в дополнение к QUERY_STRING.</p>
<p><img class="aligncenter size-medium" title="ZS - экран конфигурации стр.2" src="http://varien.com.ua/wp-content/uploads/zend-server/sc2-499x427.jpg" alt="ZS - экран конфигурации стр.2" width="499" height="427" /></p>
<p>Наконец, Zend Optimizer+ был включен для оптимизации и кэширования PHP байт-кода.</p>
<p>Как видите, Zend Page Cache оказался очень мощной функцией. Он требует тонкой и тщательной настройки, но взгляните результаты:</p>
<p><strong>Главная страница / каталог из 80 000 продуктов</strong></p>
<p><img class="size-medium aligncenter" title="График 3 :сравнение между 1.3, 1.3 + FC, 1.3+ZS, 1.3+FC+ZS" src="http://varien.com.ua/wp-content/uploads/zend-server/graph3-499x254.jpg" alt="График 3 :сравнение между 1.3, 1.3 + FC, 1.3+ZS, 1.3+FC+ZS" width="499" height="254" /></p>
<p>Загрузка на главной странице не сильно повлияла на результаты, хотя при большой нагрузке на сервер (40 параллельных заросов), Zend Server (с или без page cage) немного лучше чем mod_php, но практически никакого реального влияния на тест. Выигрыш в 5% и даже меньше не является серьезным фактором и лежит в пределах статистической ошибки тестов.</p>
<p><strong>Полное посещение / 80k продуктов</strong></p>
<p><img class="size-medium aligncenter" title="График 4 : Полное посещение, диаграмма сравнения 80K продуктов" src="http://varien.com.ua/wp-content/uploads/zend-server/graph4-499x254.jpg" alt="График 4 : Полное посещение, диаграмма сравнения 80K продуктов" width="499" height="254" /></p>
<p>График говорит сам за себя, при любой нагрузке Zend Server с Page Cache и включенным flat каталогом в Magento действительно улучшают производительность.</p>
<p>Сравнивая 1.3 + flat каталог с такой же конфигурацией, но с установленной бесплатной версией ZS вместо APC, наш сервер получил  до 15% больше производительности.</p>
<p>Если же использовать полный Zend Server (с лицензией, в который включено кэширование страниц) на версии 1.3 с flat каталогом, сервер получил до 30% прироста производительности!</p>
<p>Mod PHP + APC -&gt; ZS: +15%<br />
Mod PHP + APC -&gt; ZS с лицензией: +30%</p>
<h3>Время отклика</h3>
<p><strong>Главная страница / 80k продуктов</strong></p>
<p><img class="aligncenter size-medium" title="График 5 : время загрузки" src="http://varien.com.ua/wp-content/uploads/zend-server/graph5-500x244.jpg" alt="График 5 : время загрузки" width="500" height="244" /></p>
<p>Этот график показывает время отклика на домашней странице во время загрузки. При значительной нагрузке, ZS дал до 35% сокращения времени отклика во время загрузки.</p>
<p><strong>Полное посещение / 80k продуктов</strong></p>
<p><img class="size-medium aligncenter" title="График 6 : диаграмма сравнения времени загрузки при полном посещении" src="http://varien.com.ua/wp-content/uploads/zend-server/graph61-500x244.jpg" alt="График 6 : диаграмма сравнения времени загрузки при полном посещении" width="500" height="244" /></p>
<p>Кэширование страниц сокращает время отклика во время полного посещения сайта даже под очень тяжелой нагрузкой. Выгоды от использования кэширования страниц в любом случае существенны, даже при стандартной загрузке. Можем засчитать 35%-ный выигрыш при серьезной загрузке в случае использования любой (бесплатной или лицензированной) версии ZS.</p>
<p>При средней и легкой загрузке, кэширование страниц дает гораздо больший эффект чем может дать бесплатная версия ZS. Этот неожиданный результат, вероятно, является следствием того, что механизм кэширования показал себя неэффективным при большой нагрузке, так как система использует свои ресурсы по-другому.<br />
У нас не было времени проверить, что именно является причиной &#8211; процессор, Линукс или сам ZS, однако тесты были проделаны несколько раз с одинаковыми результатами.</p>
<p>Таким образом, запомните, что выгоды механизма кэширования страниц в ZS будут становиться все менее эффективными по мере роста загрузки сервера. При обычной нагрузке, алгоритм Page Cache дал уменьшение времени загрузки до примерно 40%.</p>
<h3>Дополнительный технические детали тестов</h3>
<p><strong>Тестовые данные</strong></p>
<p>Все тесты были проведены с готовыми тестовыми данными (предоставленными компанией Varien)</p>
<p><img style="border: 0;" src="http://varien.com.ua/wp-content/uploads/zend-server/zend-magento-test-6.jpg" alt="image" width="488" height="72" /></p>
<p><strong>Описание тестов</strong></p>
<p><em>Тест главной страницы</em></p>
<p>Каждый поток загружает главную страницу без сохранения cookies, чтобы сымитировать одновременных пользователей.</p>
<p><em>Тест полного посещения</em></p>
<p>У нас есть список запросов, основанный на посещении сайта с помощью реального браузера. Каждый одновременный поток загружает каждый элемент один за другим так быстро как только сможет, и перегружается после удаления его cookies.</p>
<p>Список запрашиваемых страниц для базы данных из 80k продуктов (с информацией POST где возможно) <a title="здесь" href="http://www.wikigento.com/?p=938#more-938">здесь</a>.</p>
<h3>Планируемые тесты</h3>
<p><strong>Mage компилятор</strong></p>
<p>Во время подготовки этих тестов, вышла версия 1.3.1.1, включающая модуль <a href="http://www.magentocommerce.com/extension/1359/magento-compiler">Mage_Compiler</a>, и сразу за ней готовилась к выпуску версия 1.3.1.2, так что мы просто не успели включить некоторые тесты в этот обзор. Просто предположим, что весь механизм предназначен для уменьшения работы по вводу-выводу, с помощью включения большинства классов в несколько сборных файлов. Если ваши сервера использовали для работы в основном RAM, вы не ощутите значительного прогресса в производительности. Однако, если в серверах мало RAM, либо они в основном используют диски, вы убедитесь в выгодах использования данных возможностей!</p>
<p><strong>Nginx</strong></p>
<p>У нас не было достаточно времени для оценки результатов тестов с Nginx + PHP. Это решение давало результаты, промежуточные между Magento 1.3 + FC и Magento 1.3 + Zend Server (без Page cache). Так что эта комбинация достигала средних значений производительности, в отличие от Magento 1.3 + Zend Server или еще более продвинутых вариантов.</p>
<h3>Выводы</h3>
<p>Во-первых, позвольте заявить, что никакие электроны не были заряжены и не пострадали во время этих тестов. Возможно один или два СТО были вынуждены пострадать от кофейных вливаний, но чего только не сделаешь ради лучшего будущего E-commerce!</p>
<p>Если хотите более профессионального заключения, то можем сказать, что использование бесплатной версии ZS сказывается только положительно и действительно может заменить APC.</p>
<p>При использовании лицензированной версии ZS, механизм Page Cache очень эффективен, и может сократить используемые ресурсы железа на 25% для поддержания тех же возможностей хостинга. В некоторых случаях это может обернуться прямым сокращением расходов на сервера.</p>
<p>О Zend Server : это ПО имеет множество других полезных функций, но в этом отчете мы коснулись только тех, что так или иначе связаны с производительностью. Обо всем остальном несложно узнать, посетив веб-сайт Zend для гораздо более детального <a href="http://www.zend.com/en/products/server/">описания возможностей Zend Server</a>.</p>
<p>И последнее &#8211; настраивая сервер со всеми оптимизациями и используя приведенные рекомендации, на базе dual AMD 2376 с 8 Gb RAM, использующий ZS и кэширование страниц, вы сможете достичь уровня до 40 000 уникальных посетителей в день, что соответствует 2 500 одновременных сессий Magento при максимальной загрузке (при вынесении базы данных на отдельный сервер, и использовании обратного прокси типа <a href="http://www.squid-cache.org/">Squid</a> или <a href="http://varnish.projects.linpro.no/">Varnish</a> перед веб-сервером).</p>
<p>Эта оценка сильно зависит от сложности веб-сайта и типичного поведения ваших пользователей, но для стандартного сайта и обычного использования вы можете ожидать загрузки главной страницы в пределах 2 секунд.</p>
<p>И напоследок примерное суммарное сравнение производительности упомянутых конфигураций:</p>
<p><img class="aligncenter size-full" title="graph71" src="http://varien.com.ua/wp-content/uploads/zend-server/graph71.jpg" alt="graph71" width="259" height="100" /></p>
<p><em>Эта статья доступна также на <a href="http://www.magentocommerce.com/blog/comments/magento-zend-server-benchmarks/">английском</a> и <a href="http://www.wikigento.com/?p=938#more-938">французском</a> языке.</em></p>
<p><img style="border: 0; padding: 5px 10px 20px 0; " src="http://varien.com.ua/wp-content/uploads/license/cc-by-nc-sa.png" alt="Creative Commons Attribution-Noncommercial-Share Alike 3.0 License" align="left" /> <em><strong>Права:</strong> Оригинал этой статьи опубликован под лицензией Creative Commons &#8220;Attribution-Noncommercial-Share Alike 3.0&#8243; License. Только три компании (NBS System, Zend и Varien) могут использовать её в коммерческих целях.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://varien.com.ua/blog/magento-zend-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GWS: Сайты, группы, сторы</title>
		<link>http://varien.com.ua/blog/gws-websites-groups-store-views/</link>
		<comments>http://varien.com.ua/blog/gws-websites-groups-store-views/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 09:00:00 +0000</pubDate>
		<dc:creator>Михаил Бессолов</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[Возможности]]></category>
		<category><![CDATA[GWS]]></category>
		<category><![CDATA[mall]]></category>
		<category><![CDATA[multi-store]]></category>

		<guid isPermaLink="false">http://varien.com.ua/?p=148</guid>
		<description><![CDATA[Поддержка нескольких магазинов уже давно стала стандартом в мире ecommerce-приложений. Чтобы дать владельцу магазина настоящую гибкость по управлению магазиными, мы изначально заложили в Magento поддержку иерархической структуры сайтов и магазинов. Данная статья открывает серию, посвященную этой иерархии, пронизывающей все уровни приложения.]]></description>
			<content:encoded><![CDATA[<p>Поддержка нескольких магазинов уже давно стала стандартом в мире ecommerce-приложений. Но во многих платформах эта реализация является элементарной и, в худшем случае, позволяет лишь локализовать витрины на разных языках. Чтобы дать владельцу магазина настоящую гибкость по управлению магазинами, без необходимости устанавливать приложение несколько раз, мы изначально заложили в Magento поддержку иерархической структуры сайтов и магазинов.</p>
<p>Данная статья открывает серию, посвященную этой иерархии, пронизывающей все уровни приложения. Сегодня мы рассмотрим лишь базовые уровни структуры магазинов и постараемся определиться с терминологией, используемой в панели управления и коде Magento.</p>
<p>Для начала давайте взглянем на абстрактную диаграмму сайтов, магазинов и групп магазинов:</p>
<p><img class="aligncenter size-full" title="Websites, Store Groups and Store Views Hierarchy #1" src="http://varien.com.ua/wp-content/uploads/multistores/Websites-Store-Groups-and-Store-Views-Hierarchy-1.png" alt="Websites, Store Groups and Store Views Hierarchy #1" width="409" height="322" /></p>
<p>Как видно на рисунке, структура магазинов имеет 4 уровня иерархии:</p>
<ul>
<li>Глобальный (global или default)</li>
<li>Уровень вебсайтов (website)</li>
<li>Уровень групп магазинов (store или store group)</li>
<li>Уровень магазинов (store views)</li>
</ul>
<p><strong>Глобальный уровень (global, default)</strong> представляет собой одну инсталляцию кода и одну базу данных, с которыми работает Magento.</p>
<blockquote><p>В действительности, Magento поддерживает работу с несколькими базами данных. Например, для улучшения производительности можно использовать несколько серверов БД, построив master-slave репликацию, и сконфигурировать Magento для чтения данных со slave БД, и записи данных в master БД. Также Magento может использоваться в кластере, когда на каждом веб-узле кластера есть собственная копия кода Magento, и веб-узлы работают с одним, с двумя (master-slave), или с несколькими (один master для записи и по одному slave для чтения на каждый веб-узел) серверами БД. Но об этом мы еще расскажем, пока же, для простоты изложения, условимся считать, что одна инсталляция Magento работает с одной базой данных.</p></blockquote>
<blockquote><p>Теоретически, с незначительными изменениями кода (добавив, помимо уже существующей поддержки префиксов имён таблиц, также использование этих же префиксов для имён ключей и индексов), можно было бы устанавливать несколько экземпляров Magento в одну базу данных. Но вы сейчас увидите, почему в этом никогда не было необходимости</p></blockquote>
<p><strong>Уровень вебсайтов (website)</strong> позволяет:</p>
<ul>
<li>различные базовые валюты для разных вебсайтов</li>
<li>назначать различные начальные цены для продуктов на разных вебсайтов</li>
<li>назначить разные статус одного и того же продукта на разных вебсайтах</li>
<li>разделить клиентские базы</li>
</ul>
<p><strong>Уровень групп магазинов (store или store group)</strong> позволяет:</p>
<ul>
<li>сгруппировать магазины для удобства управления</li>
<li>назначить группам разные корневые категории каталога</li>
</ul>
<p><em>Стандартные темы Magento также предоставляют блок для выбора группы сайтов на фронтенде.</em></p>
<p><strong>Уровень магазинов (store view)</strong> позволяет:</p>
<ul>
<li>задавать различные значение большинства атрибутов продуктов и категорий каталога</li>
<li>иметь различную видимость продуктов в разных магазинах</li>
</ul>
<p><em>Стандартные темы Magento также предоставляют блок для переключения между магазинами на фронтенде.</em></p>
<p><strong>Любые уровни иерархии</strong> позволяют задавать различные значения для подавляющего большинства конфигурационных параметров Magento, включая доменное имя и ссылки. Это позволяет как собрать воедино, так и разделить видимые клиентам магазины, например, разнеся их по различным доменам.</p>
<p>Всеми магазинами можно управлять из <strong>единой панели управления</strong>, что позволяет упростить процесс переноса информации между магазинами, или ее консолидации по всем магазинам для построения отчетности с динамически настраиваемыми фильтрами.</p>
<p>Давайте рассмотрим несколько практических примеров много-сайтовых инсталляций Magento.</p>
<p><strong>Пример 1. Продавец поздравительных открыток с надписями на разных языках:</strong></p>
<p><img class="aligncenter size-full" title="Websites, Store Groups and Store Views Hierarchy #2 - multi-language" src="http://varien.com.ua/wp-content/uploads/multistores/Websites-Store-Groups-and-Store-Views-Hierarchy-2-multi-language.png" alt="Websites, Store Groups and Store Views Hierarchy #2 - multi-language" width="502" height="290" /></p>
<ul>
<li>Единый каталог продукции</li>
<li>Одна учетная валюта</li>
<li>Только электронные способы оплаты (напр. Paypal) и всемирная служба доставки (напр. DHL)</li>
<li>Несколько языковых версий</li>
</ul>
<p><strong>Пример 2. Мультинациональный бренд ювелирных украшений:</strong></p>
<p><img class="aligncenter size-full" title="Websites, Store Groups and Store Views Hierarchy #3 - international brand" src="http://varien.com.ua/wp-content/uploads/multistores/Websites-Store-Groups-and-Store-Views-Hierarchy-3-international-brand.png" alt="Websites, Store Groups and Store Views Hierarchy #3 - international brand" width="502" height="239" /></p>
<ul>
<li>Единый каталог</li>
<li>Несколько региональных подразделений</li>
<li>Клиентская база сегментирована по регионам</li>
<li>Различные валюты учета в разных странах</li>
<li>Поддержка национальных платежных систем и служб доставки</li>
<li>Различные языки в странах присутствия</li>
</ul>
<p><strong>Пример 3. Интернет-магазин с широким ассортиментов продукции:</strong></p>
<p><img class="aligncenter size-full" title="Websites, Store Groups and Store Views Hierarchy #4 - mall" src="http://varien.com.ua/wp-content/uploads/multistores/Websites-Store-Groups-and-Store-Views-Hierarchy-4-mall.png" alt="Websites, Store Groups and Store Views Hierarchy #4 - mall" width="502" height="239" /></p>
<ul>
<li>Единая базовая валюта</li>
<li>Общая клиентская база</li>
<li>Различные типы продукции (мебель, электроника, одежда)</li>
</ul>
<p>Демо-инсталляция такого магазина доступна по адресу <a href="http://www.magento-mall.com/">www.magento-mall.com</a></p>
<p>Также рекомендую ознакомиться со обзором на английском языке:<br />
<a href="http://www.magentocommerce.com/knowledge-base/entry/overview-how-multiple-websites-stores-work">Overview: How Multiple Websites &amp; Stores Work</a></p>
]]></content:encoded>
			<wfw:commentRss>http://varien.com.ua/blog/gws-websites-groups-store-views/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
