<?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>Сад камней Bitworks</title>
	<atom:link href="http://www.bitworks-software.com/blog/ru/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bitworks-software.com/blog</link>
	<description>Наш корпоративный блог обо всем</description>
	<lastBuildDate>Sat, 15 Jan 2011 11:01:15 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Наши поздравления команде ТВ2</title>
		<link>http://www.bitworks-software.com/blog/ru/business/2011/01/our-congratulations-to-tv2-team/</link>
		<comments>http://www.bitworks-software.com/blog/ru/business/2011/01/our-congratulations-to-tv2-team/#comments</comments>
		<pubDate>Fri, 14 Jan 2011 10:31:24 +0000</pubDate>
		<dc:creator>Ivan Kudryavtsev</dc:creator>
				<category><![CDATA[Бизнес]]></category>
		<category><![CDATA[Технологии]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[история успеха]]></category>

		<guid isPermaLink="false">http://www.bitworks-software.com/blog/ru/business/2011/01/our-congratulations-to-tv2-team/</guid>
		<description><![CDATA[Сегодня, новостной портал ТВ2 занял первое место в ежегодном конкурсе &#171;Акулы пера &#8211; 2010&#8243; в номинации &#171;Лучший интернет-проект года&#187;. Мы поздравляем творческий коллектив портала с большим достижением и желаем процветания. Портал ТВ2 разработан командой Bitworks с использованием CMS Drupal и свободного П.О. (Linux, Apache, MySQL, PHP). Для управления видео используется ПО FFmpeg и специализированные службы [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня, новостной портал ТВ2 занял первое место в ежегодном конкурсе &laquo;Акулы пера &#8211; 2010&#8243; в номинации &laquo;Лучший интернет-проект года&raquo;. Мы поздравляем творческий коллектив портала с большим достижением и желаем процветания.</p>
<p>Портал ТВ2 разработан командой Bitworks с использованием CMS Drupal и свободного П.О. (Linux, Apache, MySQL, PHP). Для управления видео используется ПО FFmpeg и специализированные службы на языке Perl. В процессе разработки мы создали более 200 набросков дизайна, более 30 схем расположения контента, с целью обеспечить удобство и привлекательность этого проекта.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bitworks-software.com/blog/ru/business/2011/01/our-congratulations-to-tv2-team/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Регулярные выражения на стероидах</title>
		<link>http://www.bitworks-software.com/blog/ru/technology/2011/01/regular-expressions-on-steroids/</link>
		<comments>http://www.bitworks-software.com/blog/ru/technology/2011/01/regular-expressions-on-steroids/#comments</comments>
		<pubDate>Fri, 14 Jan 2011 07:31:54 +0000</pubDate>
		<dc:creator>Ivan Kudryavtsev</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[Технологии]]></category>
		<category><![CDATA[C-ICAP]]></category>
		<category><![CDATA[DFA]]></category>
		<category><![CDATA[NFA]]></category>
		<category><![CDATA[parental control]]></category>
		<category><![CDATA[RE2]]></category>
		<category><![CDATA[regular expressions]]></category>
		<category><![CDATA[Squid]]></category>
		<category><![CDATA[производительность]]></category>

		<guid isPermaLink="false">http://www.bitworks-software.com/blog/ru/?p=367</guid>
		<description><![CDATA[Насколько быстр ваш код? Разработчики зачастую не уделяют большое внимание тому насколько хорош их код, особенно это справедливо для разработчиков веб-приложений. В таком подходе есть определенная доля здравого смысла: существует множество более дешевых способов повышения производительности в системах, которые реализуются с использованием технологий веб. Зачастую, значительно проще масштабировать систему горизонтально, разнеся веб-сервер и сервер базы [...]]]></description>
			<content:encoded><![CDATA[<p>Насколько быстр ваш код? Разработчики зачастую не уделяют большое внимание тому насколько хорош их код, особенно это справедливо для разработчиков веб-приложений. В таком подходе есть определенная доля здравого смысла: существует множество более дешевых способов повышения производительности в системах, которые реализуются с использованием технологий веб. Зачастую, значительно проще масштабировать систему горизонтально, разнеся веб-сервер и сервер базы данных, добавить еще один веб-сервер, добавить кэширование статического контента, некоторый предпроцессинг и забыть об оптимизации кода.<span id="more-367"></span></p>
<p>Однако, бывают задачи, в рамках которых такая &laquo;дешевая&raquo; оптимизация не работает и все таки приходится заниматься оптимизацией кода. Об одной такой задаче и пойдет речь далее.</p>
<p>В прошлом месяце мы создавали систему родительского контроля для нашего интернет провайдера Zing. Принцип системы заключается в том, что HTTP анализируется на лету и фильтруется в зависимости от установленных настроек пользователя. Технически, система реализована с использованием БД MySQL, прокси-сервера SQUID 3, сервера C-ICAP и расширения к нему. В MySQL мы храним данные о пользовательских настройках системы, в том числе черные и белые списки доменов, URL и т.п. Выбранное хранилище обеспечивает высокоскоростные проверки и доступ к данным, а так же позволяет изменять и дополнять их с использованием традиционных моделей разработки web-приложений. Первоначально, мы рассматривали BerkeleyDB чтобы добиться максимальной производительности, но отсутствие удобных и простых средств для обновления базы заставило нас отказаться от использования этого решения, хотя с точки производительности BerkeleyDB идеально подходила для нашей задачи.</p>
<p>Для проверки контента на лету мы реализовали модуль расширения для сервера C-ICAP. ICAP &#8211; специализированный протокол, позволяющий перехватывать сторонним приложениям трафик, который проходит через прокси-сервер. Модуль, как и сам C-ICAP был реализован с использованием языков программирования C и C++ в рамках инструментария GCC.</p>
<p>Реализованный модуль проверяет контент в несколько этапов, на каждом из которых может произойти запрет доступа к ресурсу:</p>
<ol>
<li>проверка заголовков и служебной информации</li>
<li>проверка полностью полученного контента</li>
<li>замена контента (если необходимо)</li>
</ol>
<p>Этап 2 подразумевает проверку контента на предмет содержания запрещенных слов, выражений. Мы решили выполнить эту проверку с использованием регулярных выражений. Поскольку инструментарий PCRE хорошо нам знаком, то мы интегрировали в модуль C-ICAP проверку с помощью библиотеки PCRE (стоит заметить, что библиотека PCRE не содержит функций для замены текста, поэтому их приходится реализовывать вручную (интересующихся отправляю к дереву кодов PHP)).</p>
<p>После реализации мы столкнулись с проблемой производительности. В реальных условиях PCRE работают очень медленно. Мы получали время проверки текста размером 1МБ порядка 0.2 секунды на нашем сервере Xeon 3.2 ГГц (стоит заметить, что regex-ы у нас были размером под 10-20 КБ). В общем, поглядев на это, мы поняли что такая производительность нас не устраивает и мы не сможем обслужить даже 100 параллельных запросов.</p>
<p>В то же время, мы провели аналогичные тесты с использованием утилиты UNIX grep и получили время обработки порядка 0.001-0.005, что заставило нас задуматься о высоком и вернуться к азам, так сказать. Теория конечных автоматов говорит нам что есть два вида (в общем случае) конечных автоматов &#8211; DFA (детерминированный) и NFA (недетерминированный), соответственно движки регулярных выражений (в зависимости от функционала) реализуются либо с использованием DFA, либо c NFA. Первые &#8211; быстрые, вторые &#8211; медленные. На наше горе &#8211; PCRE использует NFA, на наше счастье &#8211; нам эти функции в рамках задачи не нужны. Отталкиваясь от этого открытия, мы немного поискали библиотеки DFA регулярных выражений и нашли RE2, разработанную в Google.</p>
<p>Вообще, у нас было 2 опции. Первая, взять код Grep и интегрировать его в наш модуль. Эту возможность мы откинули после того, как посмотрели на код Grep. В силу назначения, в коде используются глобальные переменные и код, вообще, не потоко безопасный, а переделывать чужой код нам не хотелось. В то же время, библиотека RE2 обладает как поддержкой юникода (что нам было очень нужно), так и поточной безопасностью. Кроме того, она как раз и разрабатывалась для встраивания в приложения. К слову, RE2 появилась именно в силу тех же причин, которые возникли в нашей задаче.</p>
<p>В итоге, мы встроили RE2 в наш модуль и получили производительность кода даже несколько выше ожидаемой. В решенной задаче, простые методы оптимизации горизонтальным масштабированием не дают необходимого эффекта и в целом бесполезны (в силу того, что отставание фактического модуля составляло более чем порядок, по сравнению с рассчетными показателями), а оптимизация кода дала как раз те необходимые показатели, на которые мы рассчитывали.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bitworks-software.com/blog/ru/technology/2011/01/regular-expressions-on-steroids/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Сайт и Веб-приложение. В чем различия?</title>
		<link>http://www.bitworks-software.com/blog/ru/company/2011/01/website-vs-web-application-the-difference/</link>
		<comments>http://www.bitworks-software.com/blog/ru/company/2011/01/website-vs-web-application-the-difference/#comments</comments>
		<pubDate>Thu, 13 Jan 2011 15:17:11 +0000</pubDate>
		<dc:creator>Ivan Kudryavtsev</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[Бизнес]]></category>
		<category><![CDATA[Компания]]></category>
		<category><![CDATA[Технологии]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[content project]]></category>
		<category><![CDATA[web applications]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.bitworks-software.com/blog/ru/company/2011/01/website-vs-web-application-the-difference/</guid>
		<description><![CDATA[Данная страница доступна только на языке English.]]></description>
			<content:encoded><![CDATA[<p>Данная страница доступна только на языке <a href="/blog/feed/">English</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bitworks-software.com/blog/ru/company/2011/01/website-vs-web-application-the-difference/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Вакансия: Senior Java разработчик</title>
		<link>http://www.bitworks-software.com/blog/ru/uncategorized/2011/01/spare-position-senior-java-developer/</link>
		<comments>http://www.bitworks-software.com/blog/ru/uncategorized/2011/01/spare-position-senior-java-developer/#comments</comments>
		<pubDate>Thu, 13 Jan 2011 13:14:48 +0000</pubDate>
		<dc:creator>Ivan Kudryavtsev</dc:creator>
				<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[вакансия]]></category>
		<category><![CDATA[работа]]></category>
		<category><![CDATA[разработка]]></category>
		<category><![CDATA[разработчик]]></category>

		<guid isPermaLink="false">http://www.bitworks-software.com/blog/ru/uncategorized/2011/01/spare-position-senior-java-developer/</guid>
		<description><![CDATA[Друзья, в нашей команде появилось вакантное место для старшего Java разработчика. Вакансия достаточно эксклюзивная, и человека мы тоже ищем исключительного, понимающего глубинные процессы высоконагруженных систем, понимающего разницу между синхронными и асинхронными, блокирующими и неблокирующими операциями и структурами данных, обладающего большим опытом в создании высокопроизводительных многопоточных приложений. Безусловно, нам бы хотелось чтобы Вы понимали не только [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-357" title="java" src="http://www.bitworks-software.com/blog/wp-content/uploads/2011/01/java.jpg" alt="" width="200" height="240" />Друзья, в нашей команде появилось вакантное место для старшего Java разработчика. Вакансия достаточно эксклюзивная, и человека мы тоже ищем исключительного, понимающего глубинные процессы высоконагруженных систем, понимающего разницу между синхронными и асинхронными, блокирующими и неблокирующими операциями и структурами данных, обладающего большим опытом в создании высокопроизводительных многопоточных приложений.</p>
<p>Безусловно, нам бы хотелось чтобы Вы понимали не только свою область (скажем Java), но и смежные области, ведь сетевые приложения глубоко интегрируются не только с технологией программирования, но и с возможностями и особенностями операционных систем, а мы используем Linux. В том числе и для повседневной работы.<span id="more-356"></span></p>
<p>Работая в нашей команде вы не будете делать апплеты и пользовательские интерфейсы, вашей задачей будет писать код бэкэнда высокопроизводительного приложения, которое обслуживает миллионы транзакций, оперирует огромным объемом аналитической информации в режиме реального времени. Вы будете использовать передовые распределенные технологии, применяемые в eBay и подобных &laquo;больших&raquo; системах.</p>
<p>Если Вы тот самый человек. Ждем вас в нашей команде!</p>
<p>Подробнее о вакансии: <a href="http://www.bitworks-software.com/ru/article/3/#vac5">http://www.bitworks-software.com/ru/article/3/#vac5</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bitworks-software.com/blog/ru/uncategorized/2011/01/spare-position-senior-java-developer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vyatta &#8211; специализированный дистрибутив linux для маршрутизаторов и МСЭ</title>
		<link>http://www.bitworks-software.com/blog/ru/technology/2011/01/vyatta-customized-linux-software-bundle-for-routers-and-firewalls/</link>
		<comments>http://www.bitworks-software.com/blog/ru/technology/2011/01/vyatta-customized-linux-software-bundle-for-routers-and-firewalls/#comments</comments>
		<pubDate>Wed, 12 Jan 2011 06:13:33 +0000</pubDate>
		<dc:creator>Ivan Kudryavtsev</dc:creator>
				<category><![CDATA[Технологии]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[router]]></category>
		<category><![CDATA[routing]]></category>
		<category><![CDATA[system administration]]></category>
		<category><![CDATA[vyatta]]></category>

		<guid isPermaLink="false">http://www.bitworks-software.com/blog/ru/uncategorized/2011/01/vyatta-customized-linux-software-bundle-for-routers-and-firewalls/</guid>
		<description><![CDATA[В сегменте небольших и средних компаний решения на основе операционной системы Linux прочно заняли свое место. Эти решения используются в качестве ПО для маршрутизаторов, межсетевых экранов (МСЭ), серверов VPN, контроллеров домена, веб-серверов. Программное обеспечение GNU/Linux, на основе которого создаются разнообразные информационные среды, решающие конкретные задачи из вышеперечисленных, чрезвычайно гибко, что позволяет системным администраторам решать одну [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-353" title="vyatta_logo" src="http://www.bitworks-software.com/blog/wp-content/uploads/2011/01/vyatta_logo.gif" alt="" width="254" height="71" />В сегменте небольших и средних компаний решения на основе операционной системы Linux прочно заняли свое место. Эти решения используются в качестве ПО для маршрутизаторов, межсетевых экранов (МСЭ), серверов VPN, контроллеров домена, веб-серверов.<span id="more-346"></span></p>
<p>Программное обеспечение GNU/Linux, на основе которого создаются разнообразные информационные среды, решающие конкретные задачи из вышеперечисленных, чрезвычайно гибко, что позволяет системным администраторам решать одну и ту же задачу несколькими различными способами, причем выбор способа зависит от квалификации и предпочтений системного администратора.</p>
<p>В некоторых случаях, такая гибкость не является положительным качеством. Например, в случае организации маршрутизаторов и МСЭ. Производители телекоммуникационного оборудования уже давно осознали тот факт, что телекоммуникационное оборудование должно настраиваться единообразно, даже если это делают несколько человек, сменяя друг друга, более того человек, обладающий опытом настройки оборудования некоторого семейства должен быть способен настроить любое устройство из этого семейства.</p>
<p>К сожалению, в случае с маршрутизаторами на основе популярных дистрибутивов ОС GNU/Linux не существует единообразного способа конфигурирования сетевой подсистемы, учитывающего тонкие моменты настройки и объединяющего в единой консоли управление всеми телекоммуникационными службами маршрутизатора. К счастью, существует несколько специализированных дистрибутивов, предназначенных специально для маршрутизаторов и МСЭ. Один из них &#8211; Vyatta, специализированный дистрибутив на основе Debian, особенностями которого является:</p>
<ol>
<li>нацеленность на маршрутизаторы (периметр, BRAS, шейпинг/полисинг);</li>
<li>единая ios-like консоль управления с поддержкой дополнения команд;</li>
<li>поддержка статической и динамической маршрутизации (BGP, OSPF, RIP и т.п.);</li>
<li>поддержка экспорта статистики NetFlow;</li>
<li>L3 VPN (IP-IP, PPtP, OpenVPN);</li>
<li>поддержка Debian APT</li>
<li>полноценная поддержка iptables, linux ip/tc;</li>
</ol>
<p>Основное преимущество Vyatta &#8211; единообразие настроек. Это означает, что любой системный администратор настраивая некоторую функцию, сделает это только одним способом, причем другой системный администратор потом сможет понять как настроена система и внести изменения. Отдельным плюсом идет настройка по принципу транзакций, то есть настройки не применяются до выполнения команды подтверждения и могут быть откачены при необходимости. Кроме командной строки администратору доступен web-интерфейс управления.</p>
<p>Стоит отметить, что Vyatta распространяется бесплатно, а ее продолжительный жизненный цикл позволяет говорить о стабильности системы.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bitworks-software.com/blog/ru/technology/2011/01/vyatta-customized-linux-software-bundle-for-routers-and-firewalls/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

