<?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>Blog de Basile &#187; Математика</title>
	<atom:link href="http://www.debasil.net/blog/tag/%d0%bc%d0%b0%d1%82%d0%b5%d0%bc%d0%b0%d1%82%d0%b8%d0%ba%d0%b0/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.debasil.net/blog</link>
	<description>Think, work, live</description>
	<lastBuildDate>Fri, 19 Mar 2010 23:30:28 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Архитектура P2P и большие объемы данных. Просто о сложном.</title>
		<link>http://www.debasil.net/blog/2010/01/17/%d0%b0%d1%80%d1%85%d0%b8%d1%82%d0%b5%d0%ba%d1%82%d1%83%d1%80%d0%b0-p2p-%d0%b8-%d0%b1%d0%be%d0%bb%d1%8c%d1%88%d0%b8%d0%b5-%d0%be%d0%b1%d1%8a%d0%b5%d0%bc%d1%8b-%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85/</link>
		<comments>http://www.debasil.net/blog/2010/01/17/%d0%b0%d1%80%d1%85%d0%b8%d1%82%d0%b5%d0%ba%d1%82%d1%83%d1%80%d0%b0-p2p-%d0%b8-%d0%b1%d0%be%d0%bb%d1%8c%d1%88%d0%b8%d0%b5-%d0%be%d0%b1%d1%8a%d0%b5%d0%bc%d1%8b-%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 00:01:51 +0000</pubDate>
		<dc:creator>Basile</dc:creator>
				<category><![CDATA[Русский]]></category>
		<category><![CDATA[Collaborative filtering]]></category>
		<category><![CDATA[P2P]]></category>
		<category><![CDATA[Инновации]]></category>
		<category><![CDATA[Математика]]></category>
		<category><![CDATA[Стартап]]></category>
		<category><![CDATA[Технологии]]></category>

		<guid isPermaLink="false">http://www.debasil.net/blog/?p=194</guid>
		<description><![CDATA[Существуют различные архитектуры для систем, предназначенных для работы с большими объемами данных. Некоторые основаны на сложных математических расчетах. Предлагаемое описание архитектуры не только дает упрощенное представление о работе таких сложных вещей, как P2P системы, но может послужить инструментом для создания инновационных продуктов.
Есть конкретная математика, интуитивно понятная, строгая и точная. А есть абстрактная математика, основанная на [...]]]></description>
			<content:encoded><![CDATA[<p>Существуют различные архитектуры для систем, предназначенных для работы с большими объемами данных. Некоторые основаны на сложных математических расчетах. Предлагаемое описание архитектуры не только дает упрощенное представление о работе таких сложных вещей, как P2P системы, но может послужить инструментом для создания инновационных продуктов.</p>
<p>Есть конкретная математика, интуитивно понятная, строгая и точная. А есть абстрактная математика, основанная на красивых фантазиях, субъективных и порой ошибочных. Насколько легко конкретная математика осваивается, настолько упорно мозг противится математике абстрактной. Ведь ему совсем неочевидно, для чего именно эту математическую модель-фантазию он должен изучать. Вероятно, у каждого из нас изначально есть какое-то свое понятное видение, которое мы не хотим менять на чужое мировоззрение. Поэтому заранее предупреждаю, что и моя модель, хотя и кажется простой мне, может конфликтовать с уже сложившимся у вас представлением.</p>
<p>Допустим, вам надо разработать большую полностью децентрализованную <a href="http://en.wikipedia.org/wiki/Peer-to-peer">P2P сеть</a>, работающую в интернете. Например, аналог Скайпа, но совсем без серверов, с полностью равноправными участниками. Основная задача, которую вам надо решить изначально, если узлов много, например, несколько миллиардов, то как узлам найти друг друга быстро?</p>
<p>Допустим, узлу № 5 надо найти в сети IP-адрес узла № 8 589 934 592, как это сделать? Серверов нет, а значит нельзя обратиться к централизованному списку, в котором каждому номеру соответствует IP адрес. Обратиться ко всей сети тоже нельзя, если каждый узел начнет спрашивать у всех, то каждому узлу придется обрабатывать тысячи или даже миллионы обращений в секунду.</p>
<p>Выручит нас простой алгоритм деления на два. Принцип его легко понять. Представьте, что все четные узлы знают адреса друг друга и адрес одного нечетного узла, также все нечетные узлы знают адреса всех нечетных узлов и адрес одного четного числа.  Таким образом, №5 связан со всеми нечетными узлами и с одним четным. Значит, если ему надо найти № 8 589 934 592, он обращается к известному ему четному узлу, а тот ищет искомый узел среди только четных чисел, а их столько же сколько нечетных, которые мы отбросили. То есть мы сделали один шаг и уменьшили область поисков в два раза.</p>
<p>Теперь я перепрыгну через несколько несущественных умозаключений, и начну строить нашу архитектуру с нуля.</p>
<p>Предположим, у нас есть всего два узла на прямой линии, они связаны друг с другом напрямую, то есть знают IP-адреса друг друга, обозначим их 0 и 1. Теперь добавим второе симметричное  измерение, в котором существуют такие же 0 и 1. Добавим к их номерам по 1 на втором месте справа, обозначив таким образом, что они оба из второго измерения: 10 и 11. К номерам узлов из первого измерения мы автоматически добавляем по нулю на вторую справа позицию, чтобы обозначить, что они не из второго измерения. Свяжем каждый номер первого измерения с одним симметричным ему номером второго измерения. Теперь повторим все операции, добавив еще одно симметричное измерение, еще раз удвоив количество узлов. В итоге получим следующую картину.</p>
<p><a href="http://www.debasil.net/blog/wp-content/uploads/2010/01/p2p.gif"><img class="aligncenter size-full wp-image-202" title="p2p" src="http://www.debasil.net/blog/wp-content/uploads/2010/01/p2p.gif" alt="" width="258" height="224" /></a></p>
<p>Связь означает, что узлы знают IP адреса друг друга. У нас три измерения, и каждый узел может найти любой узел максимум за три шага, потому что он по номеру узла знает к узлу из какого измерения ему надо обращаться, чтобы приблизиться к искомому узлу. Если добавить еще одно измерение, то мы еще раз удвоим количество узлов, увеличим каждому узлу количество связей на одну, и увеличим макисмальное количество шагов на единицу. Но представить четырехмерное сооружение становится уже сложно. Допустим, это выглядит как-то так.</p>
<p><a href="http://www.debasil.net/blog/wp-content/uploads/2010/01/p2p_next.gif"><img class="aligncenter size-full wp-image-204" title="p2p_next" src="http://www.debasil.net/blog/wp-content/uploads/2010/01/p2p_next.gif" alt="" width="258" height="224" /></a></p>
<p>Таким образом, получаем простую формулу: два в степени &#8220;количество шагов&#8221; = &#8220;количество узлов&#8221;:</p>
<p><a href="http://www.debasil.net/blog/wp-content/uploads/2010/01/P2P_formula.gif"><img class="aligncenter size-full wp-image-205" title="P2P_formula" src="http://www.debasil.net/blog/wp-content/uploads/2010/01/P2P_formula.gif" alt="P2P formula" width="259" height="47" /></a></p>
<p>Если дано 8 589 934 592 узлов, то любой из узлов найдет любой другой узел за максимум 33 шага, поскольку 8 589 934 592 равно 2 в степени 33. При этом каждый узел будет связан только с 33 другими узлами.</p>
<p>Остается только вообразить себе эту роскошную 33-мерную фигуру и полюбоваться ее изяществом.</p>
<p>Можно поиграть и построить другие варианты фигур. Например, в первом измерении может быть не два узла, а 3, или 5, связанных друг с другом &#8211; очень мощная звезда получается, и поиск становится гораздо устойчивее. То есть, если часть узлов отключена, есть запасные пути к искомому узлу.</p>
<p>Упрощенное представление хорошо тем, что позволяет легче манипулировать сложными понятиями.  Обычно мозгу сложно справляться с более чем 7-ю объектами одновременно. Но поскольку мы смогли перейти от больших чисел к малым, да еще и имеем визуальную картинку, теперь можем покрутить в голове звезду с миллиардами ребер.</p>
<p>Итак, мы создали P2P сеть. Каждая вершина для нас &#8211; это IP адрес. Но это может быть и другая информация, то есть наша  звезда может представлять собой большую базу данных, которыми мы можем легко манипулировать. Координаты вершин и фигура точек в первом измерении -  это структура организации данных. Структуру мы можем задать самостоятельно, а можем скопировать уже существующую.</p>
<p>Например, представим, что  количество измерений у звезды &#8211; это количество страниц, которые посещает человек на определенном сайте. Цифры в номера узла отражают страницы, которые человек посетил и время, которое провел на странице. Например, 019 может означать, что человек быстро прошелся по странице 2 и задержался на странице 3 надолго. Можно немного усложнить структуру и добавить порядок посещения страниц.</p>
<p>Таким образом, в каждом номере узла теперь содержатся полные данные о поведении человека на сайте. Вся звезда теперь представляет набор всех возможных сценариев поведения на сайте. Поскольку у нас есть и пространственное изображение звезды, мы можем сказать, какие узлы ближе друг к другу, а какие &#8211; дальше. В этом вся прелесть абстрактной математики &#8211; 100-мерную звезду представить невозможно, зато посчитать нетяжело. Таким образом, в ваших руках теперь готовый инструмент для сбора информации о поведении пользователей в интернете, для их сравнительного анализа и для коррекции. В реальном времени. Мечта онлайн маркетинга.  Или можно заложить данные о движениях по банковским счетам клиентов, и сравнивать, наверняка все несчастные клиенты похожи друг на друга. Или цифры из балансов предприятий. Все дело теперь в вашей фантазии и <a href="http://www.debasil.net/blog/2009/12/29/%d1%87%d0%b5%d0%bc-%d1%85%d0%be%d1%80%d0%be%d1%88-brainsmatch-%d0%bc%d0%be%d1%82%d0%b8%d0%b2%d0%b0%d1%86%d0%b8%d1%8f-%d0%b8-%d0%ba%d1%80%d0%b5%d0%b0%d1%82%d0%b8%d0%b2%d0%bd%d0%be%d1%81%d1%82%d1%8c/">отсутствии функциональной закрепленности</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.debasil.net/blog/2010/01/17/%d0%b0%d1%80%d1%85%d0%b8%d1%82%d0%b5%d0%ba%d1%82%d1%83%d1%80%d0%b0-p2p-%d0%b8-%d0%b1%d0%be%d0%bb%d1%8c%d1%88%d0%b8%d0%b5-%d0%be%d0%b1%d1%8a%d0%b5%d0%bc%d1%8b-%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
