Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 30
×

Distributed Systems

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

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

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

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
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 (все знайдете в Гуглі).

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

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

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

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

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

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

facepalm.jpg

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

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

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

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

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. ©

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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