Распределенные системы в Одноклассниках / Олег...
-
Upload
ontico -
Category
Engineering
-
view
175 -
download
2
Transcript of Распределенные системы в Одноклассниках / Олег...
![Page 2: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/2.jpg)
1. Абсолютно надежная сеть 2. Мизерная сетевая задержка 3. Практически безлимитная пропускная способность 4. Полностью однородна 5. Изменения топологии сети незаметны 6. Полностью защищена 7. Управляется одним администратором 8. Транспортировка данных почти ничего не стоит
2
В Одноклассниках
![Page 3: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/3.jpg)
1. Абсолютно надежная сеть 2. Мизерная сетевая задержка 3. Практически безлимитная пропускная способность 4. Полностью однородна 5. Изменение топологии сети незаметны 6. Полностью защищена 7. Управляется одним администратором 8. Транспортировка данных почти ничего не стоит
3
Заблуждения разработчиков распределенных систем
https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing[Peter Deutsch, 1994; James Gosling 1997]
![Page 4: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/4.jpg)
4
4ЦОД
150типов
сервисов
8000серверов
В Одноклассниках
![Page 5: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/5.jpg)
5
инженеры
сетевики
админы
разработчики
![Page 6: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/6.jpg)
6
Страница друзей
1. Получить список друзей
2. Применить фильтр
3. Подавить ЧС
4. Получить профили
5. Отсортировать
6. Получить наклейки
7. Посчитать счетчики
![Page 7: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/7.jpg)
7
Простой способ
SELECT * FROM friendlist f, users uJOIN ON f.vertexId=u.userId WHERE u.userId=? AND f.kind=?
AND NOT EXISTS( SELECT * FROM blacklist …)…
![Page 8: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/8.jpg)
• Дружбы
• 12 млрд. связей, 300GB
• 500 000 запросов в сек.
8
Простой способ не работает
• Профили пользователей
• > 350 млн. штук,
• 3 500 000 запросов в сек.
• 50 Gbit
![Page 9: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/9.jpg)
9
Работает так
web frontend API frontend
app server
one-graph user-cache black-list
(микро) сервисы
![Page 10: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/10.jpg)
10
Анатомия (микро) сервиса
Ремотный интерфейс
Логика , Кэши
[ Локальное хранилище ]
Внутри 1 Java VM
![Page 11: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/11.jpg)
11
Анатомия (микро) сервиса
Ремотный интерфейс
https://github.com/odnoklassniki/one-nio
interface GraphService extends RemoteService { @RemoteMethod long[] getFriendsByFilter(@Partition long vertexId, long relationMask);}
interface UserCache { @RemoteMethod User getUserById(long id);}
![Page 12: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/12.jpg)
12
App Server code
https://github.com/odnoklassniki/one-nio
long []friendsIds = graphService.getFriendsByFilter(userId, mask); List<User> users = new ArrayList<>(friendsIds.length); for (long id : friendsIds) { if(blackList.isAllowed(userId,id)) {
users.add(userCache.getUserById(id)); }
}…
return users;
![Page 13: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/13.jpg)
• По таким значениям партиционируем
• У сервиса есть стратегия
• long id -> int partitionId(id) -> node1,node2,…
• Стратегии разные
• Cassandra ring, Voldemort partitions
• или…
13
interface GraphService extends RemoteService { @RemoteMethod long[] getFriendsByFilter(@Partition long vertexId, long relationMask);}
![Page 14: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/14.jpg)
14
Взвешенный квадрат
p = id % 16 p = 0
p = 15
p = 1
N01 N02 N03 . . . 019 020
W =
1
W =
100
N11
node = wrr(p)
SET
![Page 15: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/15.jpg)
15
Проблема в коде
https://github.com/odnoklassniki/one-nio
long []friendsIds = graphService.getFriendsByFilter(userId, mask); List<User> users = new ArrayList<>(friendsIds.length); for (long id : friendsIds) { if(blackList.isAllowed(userId,id)) {
users.add(userCache.getUserById(id)); }
}…
return users;
![Page 16: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/16.jpg)
16
Цена сетевого запроса
0.1-0.3 ms
0.7-1.0 ms
Другой ЦОД
* цена сильно зависит от конкретной инфраструктуры и фреймворков.
задержка = 1.0ms * 2 reqs * 200 друзей = 400 ms
10k друзей задержка = 20 seconds
![Page 17: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/17.jpg)
17
Решение: пакетные запросы
public interface UserCache { @RemoteMethod( split = true ) Collection<User> getUsersByIds(long[] keys);}
long []friendsIds = graphService.getFriendsByFilter(userId, mask);friendsIds = blackList.filterAllowed(userId, friendsIds );List<User> users = userCache.getUsersByIds(friendsIds);
…return users;
![Page 18: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/18.jpg)
18
split & merge
split ( ids by p ) -> ids0, ids1
p = 0
p = 1
N01 N02 N03 . . .
N11
ids0
ids1
users = merge (users0, users1)
![Page 19: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/19.jpg)
19
1. Пропажа клиента
2. Пропажа сервера
3. Потеря исходящего сообщения
4. Потеря входящего сообщения
5. Таймаут сервера
6. Неправильный ответ
7. Произвольный отказ
Что может пойти не так ?
![Page 20: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/20.jpg)
Отказы
Распределенные системы в Одноклассниках
![Page 21: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/21.jpg)
• Отказы невозможно предотвратить, только скрыть
• Отказ произойдет обязательно.
• Ключ к скрытию отказов — избыточность:
• Информации (коды защиты от ошибок)
• Железа (резервирование, реплики, дублирующие схемы)
• Времени (транзакции, retries)
21
Что делать с отказами ?
![Page 22: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/22.jpg)
22
Что сервер сделал ?
Сдаваться нельзя , повторить !
Сдаваться , нельзя
повторить !
? ?Добавить друга
![Page 23: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/23.jpg)
• Со стороны клиента — неизвестно
• Что клиент может сделать ?
• Не давать никаких гарантий
• Никогда не повторять запрос. Максимум 1 раз. At Most Once.
• Всегда повторять запрос. По меньшей мере 1 раз. At Least Once.
23
Был ли друг добавлен ?
![Page 24: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/24.jpg)
1. Транзакция в ACID хранилище
• есть мастер, успех однозначен (или проходит, или нет)
• возможен атомарный откат
2. Обновление информации в кэшах
• много реплик, мастера нет
• атомарного отката нет: возможны частичные отказы
24
Добавляем друга
![Page 25: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/25.jpg)
• Операция применима повторно с тем же результатом
• напр: чтение, Set.add(), Math.max(x,y)
• Упорядоченное Атомарное изменение с контролем дубликата
25
Идемпотентность
Только для Идемпотентных операцийможно применять стратегию“всегда повторять попытку”
https://ru.wikipedia.org/wiki/Идемпотентность
![Page 26: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/26.jpg)
26
Идемпотентность в ACID хранилище
Подружиться
ждем; timeout
Подружиться
Подружились!
Уже друзья ?
Нет, делаем изменения!
Уже друзья ?
Да, ничего не делаем !
![Page 27: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/27.jpg)
27
Идемпотентность через секвенсинг
Подружиться (ОпИД)
Подружились!
УжеДелали (ОпИд) ?
Нет, делаем изменения!
Выписать ОпИД
Примеры ОпИД:
• OpId+=1
• OpId=currentTimeMillis()
• OpId=TimeUUIDhttp://johannburkard.de/software/uuid/
![Page 28: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/28.jpg)
1. Транзакция в ACID хранилище
• есть мастер, успех однозначен (или проходит, или нет)
• возможен атомарный откат
2. Обновление информации в кэшах
• много реплик, мастера нет
• атомарного отката нет: возможны частичные отказы
28
Добавляем друга
![Page 29: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/29.jpg)
29
Нотификация реплик кэшей
add(Friend)
p = 0 N01 N02 N03 . . .
Но без повтора данные реплики рассинхронизируются
Повторять бессмысленно
![Page 30: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/30.jpg)
• Процесс синхронизации данных
• Непрерывно читает изменения из транзакционного хранилищаSELECT * FROM users WHERE modified > ?
• Применяет их в память кэша
• Загружает изменения при старте ноды
• Повтор — не нужен
30
Синхронизируем кэш через БД
![Page 31: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/31.jpg)
31
Смерть через таймаут
Подружиться
ждем; timeout
конец
![Page 32: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/32.jpg)
1. Клиенты перестают обращаться к серверу
После Х непрерывных отказов за последнюю секунду
2. Клиенты мониторят доступность сервера
В фоне, раз в минуту
3. И возвращают его в ротацию
32
Вывод из ротации
![Page 33: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/33.jpg)
33
Смерть через торможение
Avg = 1.5msMax = 1.5c24 cpu coresCap = 24,000 ops
10,000 ops
![Page 34: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/34.jpg)
34
Смерть через торможение
Avg = 1.5msMax = 1.5c24 cpu coresCap = 24,000 ops
Cтавить таймаут = 2.4ms ?
Выводить из ротации если среднее > 2.4ms ?
Avg = 24msMax = 1.5c24 cpu coresCap = 1,000 ops
10,000 ops
![Page 35: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/35.jpg)
35
Спекулятивный повтор
Идемпотентная Оп
wait; timeout
Повторный запрос
Результат операции
![Page 36: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/36.jpg)
36
Спекулятивный повтор: что лучше
• Задержки 99p, средние
• Стабильность системы
Классы, задержка 99p, наносекунды.без спекулятивного повтора (желтый)
и с ним (красный)
^^^ пики до 1 сек ^^^
![Page 37: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/37.jpg)
• Идемпотентные операции
• “Дополнительная” нагрузка
• Дополнительный трафик
• Балансируем спекуляцию:
• всегда, >99p, >50p
37
Спекулятивный повтор: применим не всегда
Классы, задержка 99p, наносекунды.без спекулятивного повтора (желтый)
и с ним (красный)
^^^ пики до 1 сек ^^^
![Page 38: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/38.jpg)
Больше отказов !
Распределенные системы в Одноклассниках
![Page 39: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/39.jpg)
• Чрезмерная нагрузка
• Чрезмерная паранойя
• Баги
• Люди
• Масштабные аварии
39
Отказ всех реплик сервиса
![Page 40: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/40.jpg)
40
Использовать другие источники,деградация консистентности
Использовать неполные данные, частичная деградация функции
Отключать функцию полностью
Деградировать!
![Page 41: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/41.jpg)
41
Код
interface Distributed<D>{
boolean isInconsistency(); D getData();}
class UserCacheStub implements UserCache { Distributed< Collection<User> > getUsersByIds(long[] keys) {
return Distributed.inconsistent(); }
}
interface UserCache { @RemoteMethod Distributed< Collection<User> > getUsersByIds(long[] keys);}
![Page 42: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/42.jpg)
Тестирование отказов
Распределенные системы в Одноклассниках
![Page 43: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/43.jpg)
43
Свой продукт
“Стандартные” продукты
“Админские” маневры
Что тестировать ?
— особенно!
![Page 44: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/44.jpg)
• Что делает:
• Определяет соединения с фронта на сервис
• Отрубает соединения (iptables drop)
• Запускает авто тесты
• Что проверяем
• Что ничего не валится, показываются красивые заглушки
• Сервер стартует
44
Свой продукт: “Горилла”
![Page 45: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/45.jpg)
• Тестовый стенд с синтетический нагрузкой ?
- Топология сети не неизменна
- Сложно воспроизвести профиль нагрузки
• На продакшене!
• Но чтобы никто не заметил
• Проверяем сценарии отказов и восстановления
45
Как тестировать стандартные решения ?
![Page 46: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/46.jpg)
46
Зеркало
UserCacheProxy
UserCacheImpl UserCacheNew
primary mirror
1. Вызываем primary
2. В отдельном тред пуле mirror. Сравниваем
3. На основании конфигурации отключаем, переключаем
one-conf
![Page 47: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/47.jpg)
Диагностика
Распределенные системы в Одноклассниках
![Page 48: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/48.jpg)
• Быстрое определение существования аварии
• Локализация проблемы
• Своевременное предупреждение аварий
48
Зачем
![Page 49: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/49.jpg)
• Zabbix, Cacti
• Операционные метрики
• Имена вызванных операций, напр. “Graph.getFriendsByFilter”
• Количество вызовов, успешность
• Длительность вызовов
49
Авария есть или будет ?
![Page 50: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/50.jpg)
• Оперативную статистику и тренды
• Агрегированное число вызовов и ошибок
• Агрегации задержек
• Среднее, Макс
• Перцентили 50,75,98,99,99.9
50
Что показывают графики
![Page 51: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/51.jpg)
51
Интересные графики
![Page 52: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/52.jpg)
52
Интересные графики
![Page 53: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/53.jpg)
53
Интересные графики
![Page 54: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/54.jpg)
54
Интересные графики
![Page 55: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/55.jpg)
55
Интересные графики
![Page 56: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/56.jpg)
56
Авто поиск аномалий
![Page 57: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/57.jpg)
• Возможности отказов в распределенных системах безграничны
• Отказы маскируются за счет информации, времени, железа
• При немаскируемых отказах — деградируем !
• Отказы надо тестировать наравне с функционалом
• Отказы нужно диагностировать и предупреждать на проде
57
Краткое содержание предыдущих слайдов
![Page 58: Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)](https://reader034.fdocuments.net/reader034/viewer/2022042520/589cf4b61a28abcc258b5a31/html5/thumbnails/58.jpg)
58 Распределенные системы в Одноклассниках
slideshare.net/m0nstermind
https://v.ok.ru/publishing.html
http://www.cs.yale.edu/homes/aspnes/classes/465/notes.pdf
Notes on Theory of Distributed Systems CS 465/565: Spring 2014James Aspnes
Тут можно узнать больше: