Репутація українського ІТ. Пройти опитування Асоціації IT Ukraine
×Закрыть

Distributed Systems

Есть ли на доу супербизоны которые занимаются распределенными системами?

Какую литературу порекомендуете, какие алгоритмы лучше всего изучить? Расскажите о том как работается, какие проекты типичны для данной области, желательно поделиться опытом.

LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Що читати залежить від того, які саме системи вам цікаві. А починати треба з класиків:

Непоганий оглядовий виступ.

Паралельні обчислення — то читайте про МапРедьюс тут або тут (обережно, це ПІАР), або пройдіть курс про паралельні обчислення.

Розподілене зберігання даних: Amazon Dynamo, Google Filesystem, BigTable (все знайдете в Гуглі).

Ще можна почитати про «службові» системи, без яких нічого цього б не було — наприклад, Чаббі (розподілений лок). Примітка: це варто читати тільки якщо зрозуміло нафіга ця система потрібна. Якщо поки неясно — не читайте.

Вот вам два курса:
www.coursera.org/course/posa

www.coursera.org/course/hetero

Потом добавите к ним теорию распределенных хранилищ данных, ну там можно вообще долго копать:)

Привет. Все что ниже — персональное мнение на Распределенные Системы.

Я бы рассмотрел различные подходы:

1. теоретические концепции, лежащие в основе
— Casuality and Time: The Happens-Before Relation, Vector clock, consistent cut, matrix time,, distributed gc
— message passing primitives: Atomic Broadcast, Casual Broadcast, Totally Ordered Atomic Broadcast
— distributed shared memory consistency models and realizations over message passing: Linearisable, Secuentially consistent, Casaul Consistent
— mutual exclusion problem:
— wait-free algorithms: wait-free hierarchy, atomic operations, test-and-set, CAS
— imposibility in asynchronious systems: FLP Theorem, topological structure of asynchronious computability
— CAP Theorem, eventual consistency, BASE

— Faul tolerance: 2 Phase Commit, Paxos ???, Paxos commit

2. практические вопросы при реализации + инженерные задачи
— проблема персистентности: B+tree, LSM-tree, SSTable, Memtable, WAL
— проблема координации: Zookeeper, Atomic Broadcast, notification services
— распределенные структуры данных: очереди, топики, множества, очереди с приоритетом

— distributed hash table: Amazon Dynamo, Project Voldemor, consistent hashing

3. data storage classification
— Row-oriented storage
— Collumn-oriented storage
— Key/Value stores: Amazon Dynamo, Project Voldemor, Riak, Redis,

— Document databases

4. моделирования структуры данных/состояния/поведения
— Реляционная модель: ER-диаграммы, отношение один-ко-многим, отношение многие-ко-многим, нормализация
— Distributed Shared Memory
— Messaging: Queue/Topic, publish/subscribe
— Map/Reduce:

— Actor model:

5. проблемы бизнеса
— data intensive stream processing (stock exchange data analisis: IMDG:Coherence, TupleSpace/Linda:Gigaspaces)
— event processing (clickstream: )
— semi-structured data retrieval, Extract+Transform+Load (Map/Reduce:Hadoop, Hive, Pig)
— high avaliable partition tolerant low latency storage (?: Amazon Dynamo)
— near real-time query system (advertisement system: ?)
— TPC-C/TPC-E = OLTP benchmark

— TPC-H/TPC-DS = decision support benchmark

P.S. Версия сырая, буду дописывать

проблема персистентности: B+tree, LSM-tree, SSTable, Memtable, WAL

это никаким макаром не распределенные системы

ну и главная критика — куча теории, а практически распространенных сценариев особо нету: вроде фронтенд за лоадбалансером с расшардженной ДБ, или map reduce на хадупе, т.е. студенты после курсов не будут иметь никаких практических навыков.

Я бы добавил сюда еще бы и паттерны проектирования.

Все таки есть общеизвестные архитектурные паттерны для таких систем, и изобретать мега-велосипед , для такого рода задач довольно таки опасно...

Да, стоит подобрать «классическую подборку» шаблонов. Как-то явно не сталкивался, но возможно
1. Pipes and Filters
2. Распределенный портфель задач
3. Tuple Space
4. ?

Еще неплохо было бы дать обзор существующих систем, типа hadoop, lucene и прочих.

Я извиняюсь, за оффотоп, но может вы мне объясните, что это такое — " senior XML programmer"... ?
я что то пропустил, и xml это уже язык программирования ?

Вы что в бодишопе не работали ?

не приходилось...

На старом спринге и хибернейте наверное программирует

что это такое — " senior XML programmer"

— сарказм это :)

Судя по каментам на последние топики (практически, на все), некто «Андрей Разработчик» скоро затмит в профессионализме Романа Хмиля...

Иван Головач пишет в стол курс по распределенным алгоритмам и архитектурам и советует в комментарии базовые учебники:
— Distributed Computing: Fundamentals, Simulations, and Advanced Topics
— Distributed Algorithms
— Introduction to Distributed Algorithms

— Distributed Computing: Principles, Algorithms, and Systems

Мне в этом списке больше всего нравится первый и последний учебники. Хотя вторая книга — это курс в MIT от автора курса, но слишком много аксиоматики.

У третьего учебника внушающий индекс цитирования, но написан математиком и он выбирал темы, в которых побольше математики:)

Есть знакомые, которые пишут платформу для построения распределенных систем на erlang, туда же приплетен ejabberd, и пытаются внедрить все это в коммерческие проекты прямо в этой стране. Могу дать контакты, тоже пыталась во всем этом прекрасном эрланге разобраться, но пока что забросила. Там и mnesia, и SNMP и всего хватает.

Основная задача распределенного вычисления — сделать так, чтобы прирост серверов давал прирост перфоманса, то есть масштабируемость. Значит согласно закону Амдала надо добиться возможности выполнять какие — то таски параллельно. Все, вот и основа. А дальше получаем что необходимо продумать как нам объединять данные полученные с разных источников — получаем map-reduce.

Дальше соответственно ноды должны общаться с распределенным хранилищем данных и т.д. В общем тут горы и горы инфы.

объединять данные полученные с разных источников — получаем map-reduce

О, опять профессионализм попер. Меп редьюс совсем не для этого.

ну я ноды имею в виду под источниками. А для чего по твоему мап-редьюс?

ну я ноды имею в виду под источниками

facepalm.jpg

А для чего по твоему мап-редьюс?

Что бы процессить большие обьемы данных конечно же.

ну понятно, это общая первичная цель так сказать. А детальнее это реализуется тем, что каждая нода имеет свой набор данных, потому задача сначала разбивается, а потом результаты с нод собираются. Я такое делал на фреймворке Gigaspaces.

Та нет, когда они собираются это частный случай.

Сейчас еще появилась куча распределенных хранилищ типа Riak, redis, memcache и т.д., тысячи их. Они применяются для создания больших массивов данных, на которых работают распределенные вычисления. В мире java сейчас появилась интересная штука — Storm.

С каких это пор редис — распределенное хранилище? Ну и мемкешд тоже?

What is Memcached?

Free & open source, high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load. ©

Это касательно мемкешд. ну а редис — хранилище пар ключ-значение, там с распределением хуже, но поддержка кластеризации вроде есть.

What is Memcached?

Free & open source, high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load. ©

И где там про хранилища и «применяются для создания больших массивов данных, на которых работают распределенные вычисления»? Мемкешед это кеш понятное дело а никакое не хранилище. И к слову сам мемкеш не сильно знает что он распределенный, это клиенты могут обращатся к кластеру расшардженных мемкешд серверов.

Это касательно мемкешд. ну а редис — хранилище пар ключ-значение, там с распределением хуже, но поддержка кластеризации вроде есть.

ага, в пре-пре альфе уже который год

ок, согласен.

ну есть еще Cassandra, HBase на худой конец. Тот же Hazelcast представляет собой самый что ни на есть кластер — распределенное хранилище данных, вот с мап — редьюсом у него туго.

Еще есть продукты terracotta. Ну, можно еще добавить Ehcache — у него есть режимы распределения, то есть он поддерживает кластеризацию.

Кроме того есть распределенные хранилища данных, тут надо начинать с CAP — теоремы, и дальше читать всякие terracotta, и т.д. Тот же hazelcast в целом более смахивает на распределенное хранилище данных, чем на платформу распределенных вычислений.

Ну, если касаться исключительно кластеров, то стоит посмотреть на такие кластерные системы как Gigaspaces, Hazelcast. Если смотреть вообще на распределенные вычисления в кластерах, то сейчас популярны системы Hadoop, Storm, GridGain. Стоит почитать о map-reduce подходе. Сам я работал с Gigaspaces и с hazelcast. Больше все-таки с Gigaspaces, потому спрашивайте если интересно.

Также можно обратить внимание на aktor — based распределенные вычисления — для той же скалы есть фреймворк Akka.

Еще от себя могу порекомендовать книгу «Параллельные вычисления» автора — отец и сын Воеводины. У меня она есть, сам читал остался доволен. Есть иностранные книги такого же рода — надо гуглить.

То есть вообще понятие распределенных приложений и вычисления достаточно объемное, тут и кластера и параллельные алгоритмы и т.д.

литературу ищите по конкретным технологиям, так в вакуме думаю о системах мало пишут
в основном это жесткое сношение с инфраструктурой. Веселого там мало, работы для молодежи со взглядом горящим еще меньше. чисто програмирование вообще кажется вторичным на фоне devops проблем

Это конечно персональное мнение- у меня с этим делом опыт спецефичный

А что насчет написания энджайнов?
Типа свой hadoop? Если да, то нима смысла, а вот какую-то из частей — это гуд. Но надо решить какую именно.
Для Prismatic смысл был:

highscalability.com/...ocial-netw.html

Глубоко не вчитывался. Бегло просмотрел и не увидел чтобы они писали свое дженерик решение, наоборот сделали узко заточеное решение. Если я что-то пропустил, то укажите где.

Твитер свой Storm написали, но как обычно это исключения.

Это не твитер написал. Они купили конторку которая написала сторм

Нет, все правильно, они написали узко заточенное решение. Я имел ввиду другое, что они как раз переписали под себя весь стек, а не отдельные части, то есть и такие случаи встречаются

А вам зачем? Студента к этому делу все равно не подпустят.

Пока я в этом разберусь, пройдет пару лет, и я уже буду синьором-помидором.

ну вот станете и начните разбиратся. Тк сейчас вы будете пытатся учится решать проблемы которые вы в глаза не видели. Это как плавать по асфальту, так же полезно...

Есть ли на доу супербизоны которые занимаются распределенными системами?

Ну есть, и что?

Какую литературу порекомендуете, какие алгоритмы лучше всего изучить?

Гугл один на всех — я не помню, чтобы читал что-то прям конкретное вроде «Распределенные системы для самых маленьких». Просто рутинно и постоянно что-то читаю на эту тему много лет.

Расскажите о том как работается

Когда как, самое тяжелое в таких проектах — это не построить систему, а исправлять в ней какие-то проблемы. Банально: приходит запрос и начинает хотить от машины к машине, от системы к системе — и чтобы понять, где именно узкое место, недостаточно просматривать замеры времени на каждом боксе отдельно. Отдельные баги очень трудно воспроизвести, и поэтому они могут существовать в системе месяцами и годами, периодически требуя внимания и отвлекая от других задач.

В целом, никто не строит распределенные системы ради распределнных систем — ради того, что это «круто». Их строят, потому что вынуждены это делать. И далеко не всегда «распределенный high-load проект» — это весело, замечательно и «настоящая работа». Наоборот, чаще всего это головные боли, овертаймы и героические усилия удержать какие-то узлы системы на плаву. Конечно, какое-то время можно решать проблемы, просто добавляя еще с десяток-другой серверов, но самое сложное начинается тогда, когда сколько мощностей не добавляй, толку не будет.

какие проекты типичны для данной области

Либо у вас много пользователей, либо большие объемы данных. Либо и то, и другое. Проекты самые разные.

Если ещё крутишся в универе — спроси Толстолужскую. Она на этом специализируется.

Тогда в чём проблема?

Не из этой оперы тема диплома.

Ну мы пытаемся чем то подобным заниматься, но это больше к архитектуре систем относится, кластеризация , например.

расскажите же подробнее, что за система, в рамках NDA.

Та пока все в планах и схемах, и если инвестор не утвердит их, то все на бумаге и останется, так что рассказывать особо не о чем...
Хочу сказать вот что, важно с какой стороны вы интересуетесь этим вопросом, с точки зрения использования существующих энжайнов/фрэймворком (для распределенных кластерных систем) или разработки таковых...

Я бы хотел понять как разрабатывать такие энджайны.

Ну для начала стоит посмотреть существующие инжайны (Sphinx, Lucene), прочитать про них всю доступную инфу.

распределенными системами

распределенными системами чего ?

В общем, не зависимо от предметной области.

dns — распределенная система доменных имен
интернет — распределенная система передачи информации
макдонадльдс — распределенная сеть общепита

Так не бывает. У разных схем и задач распределения практически нет ничего общего, кроме самого факта выполнения чего-то не на одном процессоре.

Хм, это ж целый универсум уже... С облаками и суперкомпьютерами...

Вы имеете в виду какие — то облачные системы, или кластера?

Оба. Тем более что сначала надо сформировать представления в принципе.

Подписаться на комментарии