<?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>Igor Katkov &#187; Work</title>
	<atom:link href="http://www.katkovonline.com/category/work/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.katkovonline.com</link>
	<description>Life in the valley</description>
	<lastBuildDate>Thu, 12 Jan 2012 18:50:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Ботнет: «был твой — стал мой» или как ботнеты работают</title>
		<link>http://www.katkovonline.com/2009/11/botnets/</link>
		<comments>http://www.katkovonline.com/2009/11/botnets/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 16:16:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Work]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[botnet]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[phishing]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://107.21.233.63/?p=1648</guid>
		<description><![CDATA[Любопытная статья исследователей из университета &#8220;University of California Santa Barbara&#8221; PDF тут. Исследователи перехватили контроль над ботнетом Torpig и ковыряли его 10 дней, пока владелцы не накатили обновление и не вернули управление себе. За это время стало понятно какого вида информацию он собирает, как он это делает, как защищается от перехвата управления и на какое [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-thumbnail wp-image-1587 alignleft" style="margin: 5px 10px;" title="botnet" src="http://www.katkovonline.com/wp-content/uploads/2009/11/botnet-150x150.png" alt="" width="150" height="150" />Любопытная статья исследователей из университета &#8220;University of California Santa Barbara&#8221; <a href="http://www.cs.ucsb.edu/%7Eseclab/projects/torpig/torpig.pdf">PDF тут</a>.</p>
<p>Исследователи перехватили контроль над ботнетом Torpig и ковыряли его 10 дней, пока владелцы не накатили обновление и не вернули управление себе. За это время стало понятно какого вида информацию он собирает, как он это делает, как защищается от перехвата управления и на какое поведение юзеров он рассчитан.</p>
<p>Авторы утверждают что Torpig это одно из самых продвинутых crimeware на сегодняшний день. У него самая лучшая программная архитектура, самые остроумные способы воровства данных, самая лучшая топология управления. Также Torpig наносит самый большой финансовый ущерб.<br />
Оценка экономической эффективности $3-300 млн в год. Из упражнений спамеров, ботнеты похоже становятся серьёзным бизнесом.</p>
<p>Работает это всё следующим образом</p>
<p><span id="more-1648"></span></p>
<h4>Инсталяция</h4>
<p style="text-align: center;"><img class="size-full wp-image-1588 aligncenter" style="margin-top: 10px; margin-bottom: 10px;" title="botnet2" src="http://www.katkovonline.com/wp-content/uploads/2009/11/botnet2.png" alt="" width="500" height="176" /></p>
<p>Взламываются популярные сайты и вставляется ссылка на специальный JavaScript. Браузер скачивает и выполняет вредоносный JavaScript, код в котором пытается залинковать свою dll в проводник (explorer.exe) используя известные уязвимости самого браузера, его плагинов или ActiveX объектов. Уязвимости перебираются по кругу пока одна из них не сработает. Дальше все операции выполняются как будто бы самим explorer.exe &#8211; вполне себе уважаемым процессом. Теперь загружается драйвер ядра, который подменяет оригинальный disk.sys на себя и затирает Master Boot Record (MBR)<br />
Всё, шаг №1 выполнен &#8211; руткит Mebroot поставлен. Фокус тут в том, что после перезагрузки Mebroot выполняется самым первым, раньше чем загрузится OS и остается практически невидимым для антивирусного ПО.</p>
<p>Сам по себе Mebroot ничего плохого не делает, но это только платформа для других модулей которые и делают всяческие гадости. Итак, сразу после перезагрузки, каждые два часа Mebroot соединятеся с Mebroot C&amp;C server и качает модули, например Torpig. Все соединения шифруются. Теперь и шаг №2 выполнен &#8211; Torpig установлен.</p>
<p>Torpig вставляет линкует свою dll в Service Control Manager (services.exe), проводник и 29 другиз популярных программ, например браузеры &#8211; IE, Firefox, Opera, FTP клиенты &#8211; CuteFTP, LeechFTP, e-mail клиенты &#8211; Thunderbird, Outlook, Eudora, мессенжеры &#8211; Skype, ICQ и такое прочее. Теперь Torpig может просматривать все данные которые эти программы манипулируют, выделять интересные куски, например логины с паролями. Каждые 20 минут Torpig закачивает всё что он там насобирал на сервер.</p>
<h4>Топология управления</h4>
<p>Тут интересное архитектурное решение, если адрес этого C&amp;C сервера известен и более менее постоянен, то его легко можно отфильтровать тем самым нейтрализовав утечку данных.  Исторически ботнеты это делают следующим образом &#8211; имя домена статично и не меняется, но очень часто меняются IP серверов куда замаплена DNS запись &#8211; это делает блокировку по IP не эффективной. Недостаток тут очевиден &#8211; статическое доменное имя. Mebroor и Torpig вместо этого генерируют доменные имена по специальному алгоритму, если домен заблокирован, не отвечает на запросы по ботнетовскому протоколу или не существует &#8211; генерируется следующее имя и так до победного конца.<br />
Тут надо помнить, что регистрация домена стоит денег, но владельцам ботнета нет необходимости регистрировать все имена &#8211; достаточно удерживать контроль над хотя бы одним из доменов который сгенерируют боты. В этой силе кроется и слабость. Если алгоритм известен и предсказуем, нужно зарегистрировать следующий домен которому подчинится ботнет.</p>
<p>Именно так авторы статьи и перехватили управление. На 10 дней.</p>
<p>К чести оригинальных программистов ботнета следует заметить, что эти 10 дней не прошли даром. Они поменяли алгоритм генерации доменных имен, усложнили и внесли недетерменизм. Это сразу сделало перехват управления экономически не выгодным, например новая версия Conficker генерирует 50,000 доменных имен в день, если все их регистрировать это выливается в большие расходы &#8211; $91 &#8211; $182 млн.</p>
<h4>Остроумные способы воровства данных</h4>
<p><a href="http://www.katkovonline.com/wp-content/uploads/2009/11/botnet3.png"><img class="alignleft size-thumbnail wp-image-1590" style="margin: 5px;" title="botnet3" src="http://www.katkovonline.com/wp-content/uploads/2009/11/botnet3-150x150.png" alt="" width="150" height="150" /></a></p>
<p>Тут старый добрый фишинг поднятый на новый уровень. В своём конфигурационном файле Torpig читает имена банковских сайтов. Если юзер посещает такой сайт, Torpig вставляет HTML форму прямо в страницу сайта. Это происходит прямо в DOM-e браузера. Определить это очень трудно &#8211; URL сайта верный, стили и картинки соблюдены, и даже SSL тут не спасёт. Все сертификаты верны. Пользователя просят якобы подтвердить свою личность введя номер карты, налоговый номер и прочее.</p>
<p>За 10 дней, Torpig наворовал 300ооо логинов с паролями, 1600 номеров кредитных карт и 8300 логинов в онлайн банкинг. Всего в забеге участвовало 180ооо инфицированных хостов.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1648" width="1" height="1" style="display: none;" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.katkovonline.com%2F2009%2F11%2Fbotnets%2F&amp;title=%D0%91%D0%BE%D1%82%D0%BD%D0%B5%D1%82%3A%20%C2%AB%D0%B1%D1%8B%D0%BB%20%D1%82%D0%B2%D0%BE%D0%B9%20%E2%80%94%20%D1%81%D1%82%D0%B0%D0%BB%20%D0%BC%D0%BE%D0%B9%C2%BB%20%D0%B8%D0%BB%D0%B8%20%D0%BA%D0%B0%D0%BA%20%D0%B1%D0%BE%D1%82%D0%BD%D0%B5%D1%82%D1%8B%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%8E%D1%82" id="wpa2a_2"><img src="http://www.katkovonline.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/11/botnets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PuTTY: Как быстро изменить цветовую схему в существующих сессиях</title>
		<link>http://www.katkovonline.com/2009/11/putty/</link>
		<comments>http://www.katkovonline.com/2009/11/putty/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 16:15:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Work]]></category>
		<category><![CDATA[color schema]]></category>
		<category><![CDATA[colors]]></category>
		<category><![CDATA[putty]]></category>

		<guid isPermaLink="false">http://107.21.233.63/?p=1646</guid>
		<description><![CDATA[Как накатить цветовую схему на уже существующие сесии. Сделал для себя .reg файл. Его надо открыть в UTF-8 редакторе, изменить [HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\%session-name%] на имя вашей сесии и импортировать в реестр. Изменятся только цветовые настройки, всё остальное останется как есть. 30 секунд и весь мой десяток сессий блистает новыми цветами. Саму цетовую схему взял тут. Недостаток оригинального [...]]]></description>
			<content:encoded><![CDATA[<p>Как накатить цветовую схему на уже существующие сесии. Сделал для себя <a href="http://www.katkovonline.com/wp-content/uploads/2009/11/pytty-template.reg">.reg файл</a>. Его надо открыть в UTF-8 редакторе, изменить<br />
[HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\<strong>%session-name%</strong>] на имя вашей сесии и импортировать в реестр.<br />
Изменятся только цветовые настройки, всё остальное останется как есть.<br />
30 секунд и весь мой десяток сессий блистает новыми цветами.</p>
<p><img src="http://www.katkovonline.com/wp-content/uploads/2009/11/putty-terminals.png" alt="image" /></p>
<p>Саму цетовую схему взял <a href="http://www.igvita.com/2008/04/14/custom-putty-color-themes/">тут</a>. Недостаток оригинального файла &#8211; это полный export всего подряд, а нужно всего только цвета поменять.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1646" width="1" height="1" style="display: none;" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.katkovonline.com%2F2009%2F11%2Fputty%2F&amp;title=PuTTY%3A%20%D0%9A%D0%B0%D0%BA%20%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%BE%20%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C%20%D1%86%D0%B2%D0%B5%D1%82%D0%BE%D0%B2%D1%83%D1%8E%20%D1%81%D1%85%D0%B5%D0%BC%D1%83%20%D0%B2%20%D1%81%D1%83%D1%89%D0%B5%D1%81%D1%82%D0%B2%D1%83%D1%8E%D1%89%D0%B8%D1%85%20%D1%81%D0%B5%D1%81%D1%81%D0%B8%D1%8F%D1%85" id="wpa2a_4"><img src="http://www.katkovonline.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/11/putty/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.katkovonline.com/wp-content/uploads/2009/11/pytty-template.reg" length="4714" type="audio/mpeg" />
		</item>
		<item>
		<title>Latency &#8211; это наше всё</title>
		<link>http://www.katkovonline.com/2009/11/latency/</link>
		<comments>http://www.katkovonline.com/2009/11/latency/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 16:12:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Work]]></category>
		<category><![CDATA[high load]]></category>
		<category><![CDATA[latency]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[revenue]]></category>
		<category><![CDATA[Steve Souder]]></category>
		<category><![CDATA[Velocity 2009]]></category>

		<guid isPermaLink="false">http://107.21.233.63/?p=1644</guid>
		<description><![CDATA[Замечательная презентация &#8220;Высокие нагрузки: 14 правил для ускорения загрузки страниц&#8221; (англ.) Автор &#8211; Steve Souder, тот самый который написал &#8220;High Performance Web Sites&#8221; и &#8220;Even Faster Web Sites&#8221; Объясняет, как latency коррелирует с прибылью, почему сайты вообще медленно грузятся в браузере и рассказывает как это можно исправить. Утверждает он следующие интересные вещи: Влияние latency на [...]]]></description>
			<content:encoded><![CDATA[<p>Замечательная презентация &#8220;<a href="http://stevesouders.com/docs/velocity-20090622.ppt">Высокие нагрузки: 14 правил для ускорения загрузки страниц</a>&#8221; (англ.)<br />
Автор &#8211; <a href="http://stevesouders.com/" target="_blank">Steve Souder</a>, тот самый который написал &#8220;High Performance Web Sites&#8221; и &#8220;Even Faster Web Sites&#8221;</p>
<p><a href="http://www.amazon.com/gp/product/0596529309?ie=UTF8&amp;tag=stevsoud-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596529309" target="_blank"><img class="alignnone size-full wp-image-1565" title="high-performance-web-sites" src="http://www.katkovonline.com/wp-content/uploads/2009/11/high-performance-web-sites.jpg" alt="" width="95" height="125" /></a> <a href="http://www.amazon.com/gp/product/0596522304?ie=UTF8&amp;tag=stevsoud-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596522304" target="_blank"><img class="alignnone size-medium wp-image-1566" title="even-faster-web-sites" src="http://www.katkovonline.com/wp-content/uploads/2009/11/even-faster-web-sites.jpg" alt="" width="95" height="125" /></a></p>
<p>Объясняет, как latency коррелирует с прибылью, почему сайты вообще медленно грузятся в браузере и рассказывает как это можно исправить. Утверждает он следующие интересные вещи:</p>
<h4><span id="more-1644"></span>Влияние latency на доход</h4>
<p>Google: +500 ms  -20% traffic<br />
Yahoo: +400 ms  -5-9% full-page traffic<br />
Amazon: +100 ms  -1% sales</p>
<p>На конференции <a href="http://en.oreilly.com/velocity2009">Velocity 2009</a> докладчикам от  AOL, Google, Microsoft и Shopzilla <a href="http://radar.oreilly.com/2009/07/velocity-making-your-site-fast.html">задали вопрос </a>&#8220;почему это важно &#8211; уделять внимание производительности?&#8221;</p>
<ul>
<li>Microsof (Bing): увеличение времени отклика на 2 секунды это -1,8% запрос/пользователь и -4,3% дохода с пользователя</li>
<li>Google: увеличение времени отклика на 400 ms это -0,59% запрос/пользователь</li>
<li>AOL: 25% падение количества page hits при удвоении времени отклика</li>
<li>Shopzilla: Ускорение с 7секунд до 2х дало +25% page hits, +7-12%  дохода и 50% экономия на железе</li>
</ul>
<h4>Почему сайты медленно грузятся?</h4>
<p>Согласно Souder-а причины могут быть следующие:</p>
<ul>
<li> Тормозит back-end</li>
<li>Тормозит front-end</li>
<li>Тормозит интернет</li>
</ul>
<p>Steve говорит, что 80-90% всего времени тратится на front-end и соответсвенно оптимизировать надо как раз эту часть в первую очередь. И дешевле всего и эффект виднее.</p>
<h4>Как исправить</h4>
<p>Вот его 14 правил:</p>
<ol>
<li>Делать меньше HTTP запросов</li>
<li>Использовать <a href="http://ru.wikipedia.org/wiki/Content_Delivery_Network">CDN</a></li>
<li>Не забыть про <a href="http://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BA%D0%BE%D0%B2_HTTP">Expires</a></li>
<li>Использовать Gzip компрессию</li>
<li>Все стили на верх страницы</li>
<li>Все скрипты &#8211; вниз</li>
<li>Избегать CSS expressions</li>
<li>Выносить JS и CSS во внешние файлы</li>
<li>Уменьшать DNS lookups</li>
<li>Сжимать JS</li>
<li>Избегать redirect-ов</li>
<li>Выкинуть повторяющийся JS</li>
<li>Не забыть про <a href="http://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BA%D0%BE%D0%B2_HTTP">ETags</a></li>
<li>Сделать AJAX контент cacheable</li>
</ol>
<p>Сама презентация поясняет основные приёмы ускорения загрузки страниц:</p>
<ul>
<li>сначала грузим только то, что надо для отображения станицы, затем всё остальное</li>
<li>6 способов загрузить JS и чем они отличаются<br />
XHR Eval, XHR Injection, JS in Iframe, JS DOM Element, JS Defer, document.write Script Tag</li>
<li>как прятать от пользователя что мы ещё не все загрузили (индикатор загрузки в браузерах)</li>
<li>несколько неблокирующих способов грузить JS</li>
<li>способы вызова/инициализации JS со страницы, он называет это &#8220;coupling techniques&#8221;<br />
hardcoded callback, window onload, timer, degrading script tags, script onload</li>
<li>какие домены лишние, а какие наоборот надо добавить в round-robin DNS</li>
<li>почему для статики HTTP 1.0 лучше чем HTTP 1.1</li>
<li>фокусы с flush() на разных языках</li>
<li>эффективные и не эффективные CSS</li>
</ul>
 <img src="http://www.katkovonline.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1644" width="1" height="1" style="display: none;" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.katkovonline.com%2F2009%2F11%2Flatency%2F&amp;title=Latency%20%26%238211%3B%20%D1%8D%D1%82%D0%BE%20%D0%BD%D0%B0%D1%88%D0%B5%20%D0%B2%D1%81%D1%91" id="wpa2a_6"><img src="http://www.katkovonline.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/11/latency/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ПО которое исправляет ошибки в себе самом</title>
		<link>http://www.katkovonline.com/2009/11/software-that-fixes-itself/</link>
		<comments>http://www.katkovonline.com/2009/11/software-that-fixes-itself/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 16:11:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Work]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[MIT software]]></category>
		<category><![CDATA[ошибки]]></category>
		<category><![CDATA[уязвимости]]></category>

		<guid isPermaLink="false">http://107.21.233.63/?p=1642</guid>
		<description><![CDATA[Группа исследователей из MIT представили программное обеспечение, которое способно динамически исправлять ошибки и уязвимости. Исправлять способно в любом коде, не обязательно в себе самом. Исходники не нужны. Только под Windows. Оригинальный PDF c публикацией &#8220;Automatically Patching Errors in Deployed Software&#8221; &#8220;Automatically Patching Errors in Deployed Software&#8221; вот здесь. Область практической применимости очевидна и огромна. &#8220;Deployed [...]]]></description>
			<content:encoded><![CDATA[<p>Группа исследователей из MIT представили программное обеспечение, которое способно динамически исправлять ошибки и уязвимости. Исправлять способно в любом коде, не обязательно в себе самом. Исходники не нужны. Только под Windows.<br />
<span id="more-1642"></span>Оригинальный PDF c публикацией &#8220;Automatically Patching Errors in Deployed Software&#8221; <a href="http://people.csail.mit.edu/rinard/paper/sosp09.pdf">&#8220;Automatically Patching Errors in Deployed Software&#8221; вот здесь</a>.</p>
<p>Область практической применимости очевидна и огромна. &#8220;Deployed Software&#8221; это коммерческий софт. Утверждается, что лучше всего работает в кластерах, уязвимости обнаруженные на одном из хостов, автоматически накатываются на все остальные.</p>
<p>Идея такова:<br />
это самое &#8220;Deployed Software&#8221; постоянно мониторится на подозрительную активность, например переполнение буферов, подозрительные передачи управления и прочее некорректное поведение. Это само по себе не новость, обычно после обнаружения такой активности приложение прерывается, при повторении &#8211; блокируется.</p>
<p>Тут на самом деле две проблемы:</p>
<ul>
<li> Если система high availability &#8211; ни о каком прерывании или блокировках не может быть и речи.</li>
<li>Скорость латания дыр в коммерческом софте не велика &#8211; буквально через месяц программисты выпускают патч.</li>
</ul>
<p>Новость тут в том, что ClearView, так называется система, обещает чинить баги и устранять уязвимости в реальном времени без рестартов и человеческого вмешательства.</p>
<p>ClearView сначала собирает статистику поведения во время нормального выполнения, они называют это &#8220;инвариантами выполнения&#8221;, затем отслеживает активность, при обнаружении подозрений автоматически патчит бинарный код пытаясь восстановить &#8220;инварианты выполнения&#8221;. Умеет сама тестировать различные варианты исправлений, накатывать и откатывать заплатки. Т.е. фактически пытаться держать систему в устойчивом состоянии, фильтруя input или блокируя и исправляя код.</p>
<p>P.S.<br />
Ещё два шага и программы будут писать сами себя.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1642" width="1" height="1" style="display: none;" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.katkovonline.com%2F2009%2F11%2Fsoftware-that-fixes-itself%2F&amp;title=%D0%9F%D0%9E%20%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D0%BE%D0%B5%20%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D1%82%20%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B8%20%D0%B2%20%D1%81%D0%B5%D0%B1%D0%B5%20%D1%81%D0%B0%D0%BC%D0%BE%D0%BC" id="wpa2a_8"><img src="http://www.katkovonline.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/11/software-that-fixes-itself/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Work: Сказка про ID generation</title>
		<link>http://www.katkovonline.com/2009/07/id-generation/</link>
		<comments>http://www.katkovonline.com/2009/07/id-generation/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 22:44:24 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
				<category><![CDATA[Work]]></category>
		<category><![CDATA[generation]]></category>
		<category><![CDATA[id generation schema]]></category>
		<category><![CDATA[генерация id]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1425</guid>
		<description><![CDATA[Жили были item-ы и было у них sequential numeric id. То, что оно sequential &#8211; это тяжелое наследие царского режима, потом пришли большевики, но ничего сделать было уже нельзя. #0 И вот, при Николае-батюшке, было это autoincrement поле в MS SQL, item-ы получали id при вставке и никто горя не знал. Очевидно для того, что [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-1551" style="margin: 5px 10px;" title="split-flap-flip-counter-calendar-clock" src="http://www.katkovonline.com/wp-content/uploads/2009/10/split-flap-flip-counter-calendar-clock.jpg" alt="" width="110" height="75" /></p>
<p>Жили были item-ы и было у них sequential numeric id.</p>
<p>То, что оно sequential &#8211; это тяжелое наследие царского режима, потом пришли большевики, но ничего сделать было уже нельзя.</p>
<p>#0</p>
<p style="padding-left: 30px;">И вот, при Николае-батюшке, было это autoincrement поле в MS SQL, item-ы получали id при вставке и никто горя не знал. Очевидно для того, что бы узнать это id на клиенте надо вставлять item-ы один за другим.</p>
<p>#1</p>
<p style="padding-left: 30px;">Нагрузка возросла &#8211; власть поменялась, хостов баз данных стало больше одного, генерацию вынесли в отдельную таблицу. Простой инкремент. Продолжали вставлять один за другим.</p>
<p>#2</p>
<p style="padding-left: 30px;">Нагрузка возросла &#8211; сделали вставку item-ов сразу пачками, а генерацию соответсвенно тоже поменяли, что бы генерировать сразу на всю пачку за один запрос. Стандартная hi-lo процедура (см ниже). Скажем, если вставляется 10 записей &#8211; один запрос на генерацию 10 ids.</p>
<p>#3</p>
<p style="padding-left: 30px;">Нагрузка возросла &#8211; сделали пре-генерацию id наперёд блоками и кеширование этого блока на клиенте. Скажем, если вставляется 10 записей &#8211; один запрос на генерацию 1000 ids. 10 используются сразу, а 990 ждут следующего раза.</p>
<p>При порядка 700 витках (threads), которые всё время пишут в базу, эффект поразительный.</p>
<p><img class="size-full wp-image-1435 alignnone" title="Average wait time" src="/wp-content/uploads/2009/07/graph_image3.png" alt="Average wait time" width="500" height="174" /></p>
<p>А вот если бы сесть и подумать, можно было бы сразу с последнего пункта начать&#8230;</p>
<p>hi-lo cхема выглядит так:</p>
<p><span id="more-1425"></span></p>
<p>Таблица в БД</p>
<pre class="brush: sql">
CREATE TABLE IDTable(
TableName varchar(255) NOT NULL,
NextID bigint NOT NULL,
CONSTRAINT IDTable1_PK PRIMARY KEY CLUSTERED( TableName ASC)
</pre>
<p>SQL запрос на генерацию примерно так</p>
<pre class="brush: sql">
DECLARE @LocalTempTable  table(id int)
DECLARE @NEXTID INT
DECLARE @CNT INT

BEGIN TRAN
SELECT @NEXTID = (SELECT NextID FROM IDTable WITH (UPDLOCK) WHERE TableName = @@TABLENAME)
SET @CNT = 0
WHILE(@CNT &lt; @@COUNT)
BEGIN
INSERT INTO @LocalTempTable(id) VALUES(@NEXTID + @CNT)
SET @CNT = @CNT + 1
END
UPDATE IDTable WITH (UPDLOCK) SET NextID = @NEXTID+@CNT WHERE TableName = @@TABLENAME
COMMIT
SELECT id FROM @LocalTempTable
</pre>
<p>Где TABLENAME это имя последовательности, а COUNT это размер пачки.</p>
<p>Самый интересный фокус тут это <strong>SELECT &#8230; WITH (UPDLOCK)</strong>. Клиенты делают запросы указывая размер пачки, а потом либо тратят ее всё как в случае #2 либо кешируют часть про запас, как в случае #3.</p>
<p>Некоторые размер пачки хранят прямо в таблице, отсюда и название. У этого подхода есть одно достоинство &#8211; можно централизованно управлять сколько ID создать. Но это же одновременно и недостаток &#8211; часто нужно здесь создать1000 штук, а тут только 10.</p>
<p>Вот тут есть не плохой <a title="обзор доступных способов получения ID" href="http://www.scalabium.com/articles/id_generation.htm">обзор доступных способов получения ID</a></p>
 <img src="http://www.katkovonline.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1425" width="1" height="1" style="display: none;" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.katkovonline.com%2F2009%2F07%2Fid-generation%2F&amp;title=Work%3A%20%D0%A1%D0%BA%D0%B0%D0%B7%D0%BA%D0%B0%20%D0%BF%D1%80%D0%BE%20ID%20generation" id="wpa2a_10"><img src="http://www.katkovonline.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/07/id-generation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Work: про availability и двух фазный коммит</title>
		<link>http://www.katkovonline.com/2009/07/availability-two-phases-commit/</link>
		<comments>http://www.katkovonline.com/2009/07/availability-two-phases-commit/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 16:43:02 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
				<category><![CDATA[Work]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[availability]]></category>
		<category><![CDATA[CAP Theorem]]></category>
		<category><![CDATA[consistency]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[partition tolerance]]></category>
		<category><![CDATA[Werner Vogels]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1412</guid>
		<description><![CDATA[В догонку к CAP Theorem и availability Обычные распределённые системы, RDBMS и J2EE контейнеры, целостность ставят во главу угла. Все эти фокусы с блокировками и распределенными транзакциями даются дорогой ценой. Эта цену большие распределенные системы платить не готовы, им нужно прежде всего availability. Поэтому Google, Amazon и некоторые другие крупные компании построили свои собственные инфраструктуры. [...]]]></description>
			<content:encoded><![CDATA[<p>В догонку к <a title="CAP Theorem и велосипеды" href="http://www.katkovonline.com/2009/07/work-cap-theorem">CAP Theorem и availability</a></p>
<p>Обычные распределённые системы, RDBMS и J2EE контейнеры, целостность ставят во главу угла. Все эти фокусы с блокировками и распределенными транзакциями даются дорогой ценой. Эта цену большие распределенные системы платить не готовы, им нужно прежде всего availability. Поэтому Google, Amazon и некоторые другие крупные компании  построили свои собственные инфраструктуры.</p>
<p>Werner Vogels, Amazon VP &amp; CTO, <a title="почему двух-фазный коммит это плохой выбор если нужно строить scalable систему" href="http://www.infoq.com/presentations/availability-consistency">популярно объясняет</a> почему двух фазный коммит это плохой выбор если нужно строить scalable систему. Он ещё, ведет блог <a title="Werner Vogels' weblog on building scalable and robust distributed systems." href="http://www.allthingsdistributed.com/" target="_blank">All things Distribtued</a> для тех кому интересно.</p>
<p>Для того что бы система расширялась нужны асинхронные, stateless сервисы, а целостность приходится компенсировать сложными согласованиями-компенсациями в случае ошибок. Ну и конечно, модель данных оказывает существенное влияние на производительность. Чем проще &#8211; тем быстрее. Тут можно вспомнить про <a title="как работает Amazon’s Dynamo в частности и о сложностях дизайна Key-Value distributed storage вообще" href="http://www.katkovonline.com/2009/06/work-non-sql-db/">Dynamo от Amazon</a> и MapReduce/BigTables от Google.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1412" width="1" height="1" style="display: none;" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.katkovonline.com%2F2009%2F07%2Favailability-two-phases-commit%2F&amp;title=Work%3A%20%D0%BF%D1%80%D0%BE%20availability%20%D0%B8%20%D0%B4%D0%B2%D1%83%D1%85%20%D1%84%D0%B0%D0%B7%D0%BD%D1%8B%D0%B9%20%D0%BA%D0%BE%D0%BC%D0%BC%D0%B8%D1%82" id="wpa2a_12"><img src="http://www.katkovonline.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/07/availability-two-phases-commit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Work: CAP Theorem и велосипеды</title>
		<link>http://www.katkovonline.com/2009/07/work-cap-theorem/</link>
		<comments>http://www.katkovonline.com/2009/07/work-cap-theorem/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 15:17:41 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
				<category><![CDATA[Work]]></category>
		<category><![CDATA[availability]]></category>
		<category><![CDATA[CAP Theorem]]></category>
		<category><![CDATA[consistency]]></category>
		<category><![CDATA[partition tolerance]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1410</guid>
		<description><![CDATA[Полезная, для построителей распределенных систем CAP Theorem-а. Теорема о целостности, доступности и терпимости к разделению. Позволяет избежать изобретения велосипедов с квадратными колёсами. CAP Theorem-а утверждает, что система может удовлетворять не более двум требованиям из трех: целостность (consistency), доступность (availability) и терпимость к разделению (partition tolerance). Где: целостность (consistency) &#8211; гарантирует, что все клиенты всегда прочтут [...]]]></description>
			<content:encoded><![CDATA[<p>Полезная, для построителей распределенных систем CAP Theorem-а. Теорема о целостности, доступности и терпимости к разделению. Позволяет избежать изобретения велосипедов с квадратными колёсами.</p>
<p>CAP Theorem-а утверждает, что система может удовлетворять не более двум требованиям из трех: целостность (<em>consistency)</em>, доступность (<em>availability</em>) и терпимость к разделению (<em>partition tolerance</em>).</p>
<div style="text-align: center;"><a href="/wp-content/uploads/2009/07/cap.png"><img class="aligncenter size-full wp-image-1411" title="cap theorem" src="/wp-content/uploads/2009/07/cap.png" alt="" width="244" height="249" /></a></div>
<p>Где:<br />
целостность (<em>consistency) &#8211; </em>гарантирует, что все клиенты всегда прочтут одинаковые данные, в не зависимости к какому узлу в кластере они обратились. Операция записи атомарная для всех узлов.</p>
<p><em></em></p>
<p>доступность (<em>availability</em>) &#8211; гарантирует, что в в  случае любого (разумного) отказа, клиенты все равно смогут получить доступ к копии их данных.</p>
<p>терпимость к разделению (<em>partition tolerance</em>) &#8211; гарантирует, что система остается работоспособной даже если авария сети приведет к образованию двух или более под-кластеров.</p>
<p>У этой теореме существует <a title="Формальное доказательство теоремы" href="http://citeseer.ist.psu.edu/544596.html">формальное доказательство</a>. Работа 2002 года, ссылается на публикации конца 80-х начала 90-х.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1410" width="1" height="1" style="display: none;" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.katkovonline.com%2F2009%2F07%2Fwork-cap-theorem%2F&amp;title=Work%3A%20CAP%20Theorem%20%D0%B8%20%D0%B2%D0%B5%D0%BB%D0%BE%D1%81%D0%B8%D0%BF%D0%B5%D0%B4%D1%8B" id="wpa2a_14"><img src="http://www.katkovonline.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/07/work-cap-theorem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Work: Project Manager</title>
		<link>http://www.katkovonline.com/2009/06/project-manager/</link>
		<comments>http://www.katkovonline.com/2009/06/project-manager/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 05:10:23 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
				<category><![CDATA[Work]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[project manager]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1370</guid>
		<description><![CDATA[Задали вам &#8220;не решаемый&#8221; вопрос «Вы — руководитель проекта, который начинается с завтрашнего дня и заканчивается ровно через год. Все планы утверждены, команда подобрана, роли определены. И вдруг… Становятся известны результаты проведенного маркетингового исследования, которые говорят о том, что конкурирующая компания планирует выпуск такого же продукта с той же функциональностью, но месяцем раньше. Ваш топ-менеджмент [...]]]></description>
			<content:encoded><![CDATA[<p>Задали вам &#8220;не решаемый&#8221; вопрос</p>
<blockquote><p>«Вы — руководитель проекта, который начинается с завтрашнего дня и заканчивается ровно через год. Все планы утверждены, команда подобрана, роли определены. И вдруг… Становятся известны результаты проведенного маркетингового исследования, которые говорят о том, что конкурирующая компания планирует выпуск такого же продукта с той же функциональностью, но месяцем раньше. Ваш топ-менеджмент настаивает на завершении проекта тремя месяцами раньше.»<br />
Из ограничений: нельзя уменьшать функциональность и качество, увеличивать объём ресурсов и стоимость.</p></blockquote>
<p>Что должно сразу приходить в голову хорошему руководителю проекта?<br />
Ему должны сразу приходить идеи и идеи во множестве.<br />
Например</p>
<blockquote><p>В конечном счёте всё равно либо придётся вносить изменения в функциональность (не обязательно в сторону ухудшения, но однозначно в сторону уменьшения трудоёмкости), либо находить «из воздуха» дополнительные ресурсы (не те, за которые платит компания): увеличение рабочего дня на энтузиазме (что плохо), привлечь десяток студентов-программистов на практику, организовать юзабилити-конкурс на лучшее решение сложной задачи и т. п. Так или иначе, за эти ресурсы просто заплатят другие: сотрудники, студенты, участники конкурса.</p></blockquote>
<p>Или вот</p>
<blockquote><p>1) вторым быть проще (не помню, где читал)<br />
2) вы не уточняете, увеличивать стоимость чего нельзя. если речь идет только о разработке, то можно увеличить маркетинговый бюджет<br />
3) есть утопические варианты вроде саботажа =)<br />
4) группировка функциональности и запуск «облегченной» версси продукта за 6 месяцев, и выпуск полной за 12.</p></blockquote>
<p><a href="http://habrahabr.ru/blogs/pm/62622/#comment_1731597">Отсюда</a></p>
 <img src="http://www.katkovonline.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1370" width="1" height="1" style="display: none;" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.katkovonline.com%2F2009%2F06%2Fproject-manager%2F&amp;title=Work%3A%20Project%20Manager" id="wpa2a_16"><img src="http://www.katkovonline.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/06/project-manager/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Work: All probabilities becomes certanties</title>
		<link>http://www.katkovonline.com/2009/06/all-probabilities-becomes-certanties/</link>
		<comments>http://www.katkovonline.com/2009/06/all-probabilities-becomes-certanties/#comments</comments>
		<pubDate>Sat, 06 Jun 2009 16:50:31 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
				<category><![CDATA[Work]]></category>
		<category><![CDATA[probabilities]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1353</guid>
		<description><![CDATA[Очень хорошо сказано The law of big numbers insures that all probabilities becomes certanties.]]></description>
			<content:encoded><![CDATA[<p>Очень хорошо сказано</p>
<blockquote><p>The law of big numbers insures that all probabilities becomes certanties.</p></blockquote>
 <img src="http://www.katkovonline.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1353" width="1" height="1" style="display: none;" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.katkovonline.com%2F2009%2F06%2Fall-probabilities-becomes-certanties%2F&amp;title=Work%3A%20All%20probabilities%20becomes%20certanties" id="wpa2a_18"><img src="http://www.katkovonline.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/06/all-probabilities-becomes-certanties/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Work: Profiling PHP code with xhprof</title>
		<link>http://www.katkovonline.com/2009/03/work-profiling-php-code-with-xhprof/</link>
		<comments>http://www.katkovonline.com/2009/03/work-profiling-php-code-with-xhprof/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 16:10:23 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
				<category><![CDATA[Work]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[profiling]]></category>
		<category><![CDATA[xdebug]]></category>
		<category><![CDATA[xhprof]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1329</guid>
		<description><![CDATA[xhprof &#8211; маленький и простой профайлер для PHP. Лицензия Apache 2.0 Работает только под Unix. Компилируется и инсталлируется в два счёта. Статистику отдает через web интерфейс (PHP) Очень удобно, никаких дополнительных программ, только браузер. Перед инсталляцией нужно не забыть поставить PHP development module apt-get install php5-dev А потом обернуть нужный код в xhprof_enable(); &#60;some code [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://pecl.php.net/package/xhprof/" target="_blank">xhprof</a> &#8211; маленький и простой профайлер для PHP.<br />
Лицензия Apache 2.0 Работает только под Unix.<br />
Компилируется и инсталлируется в два счёта. Статистику отдает через web интерфейс (PHP)</p>
<p>Очень удобно, никаких дополнительных программ, только браузер. Перед инсталляцией нужно не забыть поставить PHP development module</p>
<p>apt-get install php5-dev</p>
<p>А потом обернуть нужный код в</p>
<pre class="brush: php">
xhprof_enable();

&lt;some code is here&gt;

$xhprof_data = xhprof_disable();
</pre>
<p>и готово.</p>
<p>Я для удобства обернул вообще все вызовы, и отдавал ссылку на страницу с собранной статистикой прямо в HTTP header. Выглядело вот так</p>
<pre class="brush: php">
// start profiling
xhprof_enable();

&lt;some code is here&gt;

// stop profiler
$xhprof_data = xhprof_disable();
include_once $XHPROF_ROOT . &quot;/root/xhprof/xhprof-0.9.1/xhprof_lib/utils/xhprof_lib.php&quot;;
include_once $XHPROF_ROOT . &quot;/root/xhprof/xhprof-0.9.1/xhprof_lib/utils/xhprof_runs.php&quot;;
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs-&gt;save_run($xhprof_data, &quot;xhprof_foo&quot;);
header(&quot;x-company-name-profile: http://xhprof.company-name.com/index.php?run=$run_id&amp;amp;source=xhprof_foo&quot;);
</pre>
<p>xhprof.company-name.com прописал в hosts на своём компьютере. А на сервере добавил в конфигурацию Apache виртуальный хост</p>
<pre class="brush: xml">
&lt;virtualHost *:80&gt;
    ServerName xhprof.company-name.com
    DocumentRoot /root/xhprof/xhprof-0.9.1/hprof_html
    &lt;directory /root/xhprof/xhprof-0.9.1/hprof_html&gt;
        AllowOverride All
    &lt;/directory&gt;
&lt;/virtualHost&gt;
</pre>
<p>Любопытно конечно сравнить с другим профайлером &#8211; <a href="http://www.xdebug.org" target="_blank">XDebug</a></p>
 <img src="http://www.katkovonline.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1329" width="1" height="1" style="display: none;" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.katkovonline.com%2F2009%2F03%2Fwork-profiling-php-code-with-xhprof%2F&amp;title=Work%3A%20Profiling%20PHP%20code%20with%20xhprof" id="wpa2a_20"><img src="http://www.katkovonline.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/03/work-profiling-php-code-with-xhprof/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

