Незаурядная Java как инструмент разработки высоконагруженного сервераodnoklassniki.ruАндрей Паньгин рассказывает о трюках, которые позволяют нам делать высоконагруженные сетевые серверы на Java
Проект «Одноклассники» Mail.Ru Group, Андрей ПаньгинEYevseyevaПрезентация с технической секции #BitByte - фестиваля профессионального развития, который прошел 19 мая в Санкт-Петербурге.
Андрей Паньгин, Ведущий инженер проекта компании Mail.Ru Group «Одноклассники»: «Незаурядная Java как инструмент разработки высоконагруженного сервера».
Распределенные системы в Одноклассникахodnoklassniki.ruОдноклассники состоят из тысяч серверов, большая часть которых участвует в онлайн обработке запросов пользователей. Каждый из этих серверов владеет только частью данных или логики. Эти части в социальной сети изолировать друг от друга невозможно, поэтому между серверами происходит много сетевого взаимодействия, разнообразного и большого по объему. Таким образом, Одноклассники - это одна из самых больших, сложных и нагруженных распределенных систем в мире.
В этом докладе я расскажу об опыте построения отказоустойчивых распределенных систем на Java, основных ошибках и отказах, приемах их тестирования и диагностики. Также поговорим об авариях в распределенных системах и методах их предупреждения.
Алексей Захаров "Архитектура Яндекс.Фоток"YandexЯндекс.Фотки – современный фотохостинг. В докладе идет речь об общих архитектурных принципах его построения, загрузке и обработке фотографий, механизме распределенного выполнения заданий, API для взаимодействия с внешним миром.
Node.js введение в технологию, КПИ #ITmeetingKPITimur ShemsedinovСеминар по Node.js в КПИ 20 октября 2014. Докладчики: Тимур Шемсединов, Никита Савченко, Максим Петренко. Краткое содержание:
* Что такое Node.js и как работает JavaScript в V8
* Профессионалы расскажут, почему они выбрали Node.js
* Вы узнаете его сильные и слабые стороны и где его лучше применять
* Будет полный обзор особеностей и внутреннего строения Node.js
* Примеры внедрения и Highload-проекты
* Вопросы развертывания, хостинг, тестирования, и отладки
* Где и что учить, что читать, как осваивать
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)Ontico«Одноклассники» состоят из тысяч серверов, большая часть которых участвует в онлайн-обработке запросов пользователей. Каждый из этих серверов владеет только частью данных или логики. Эти части в социальной сети изолировать друг от друга невозможно, поэтому между серверами происходит много сетевого взаимодействия — разнообразного и большого по объему. Таким образом, Одноклассники — это одна из самых больших, сложных и нагруженных распределенных систем в мире.
В этом докладе Олег расскажет об опыте построения отказоустойчивых распределенных систем на Java, основных ошибках и отказах, приемах их тестирования и диагностики. Также речь пойдет об авариях в распределенных системах и методах их предупреждения.
Не бойся, это всего лишь данные... просто их многоRoman DvornovЗа последние 15 лет веб сильно изменился и ускорился. Но большинство по-прежнему боится большого количества данных и сложной логики на клиенте. Потому что "тормозит".
Я хочу сломать стереотипы и показать, как начать делать крутые штуки на client-side. Тысячи и сотни тысяч объектов, разные типы, зависимые вычисляемые свойства, агрегация, множество вариантов отображения. Все это в вашем браузере. Без тормозов, регистраций, смс.
Видео этого доклада на конференции DUMP, Екатеринбург, 14 марта 2014: https://vimeo.com/90836493
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Timur ShemsedinovПримеры кода приложений и конфигурации сервера с доступом к файлам, памяти, базам данных и параллельной асинхронной обработкой различных типов API запросов с состоянием и без состояния.
#MBLTdev: Core Data: особенности использования и синхронизация в iCloud (Avia...e-Legion#MBLTdev: Конференция мобильных разработчиков
Спикер: Руслан Шевчук
iOS-разработчик, Aviasales
http://mbltdev.ru/
За гранью NoSQL: NewSQL на Cassandraodnoklassniki.ruДо недавнего времени в Одноклассниках около 50 ТБ данных, обрабатываемых в реальном времени, хранилось в Microsoft SQL Server. Многие знают, что для такого объема обеспечить быстрый и надежный, да еще и устойчивый к отказу ЦОД доступ, используя SQL СУБД, практически невозможно. Обычно в таких случаях используют одно из NoSQL хранилищ, но не всё можно перенести в NoSQL: некоторые сущности требуют гарантий ACID-транзакций.
Это ограничение подвело нас к необходимости использования NewSQL хранилища, то есть СУБД, предоставляющей отказоустойчивость, масштабируемость и быстродействие NoSQL-систем, но при этом сохраняющей привычные для классических систем ACID-гарантии. Работающих промышленных систем этого нового класса немного (сразу приходит на ум только Google Spanner), а доступных — и вовсе нет. Поэтому мы реализовали такую систему сами на любимой нами Java и запустили ее в промышленную эксплуатацию несколько месяцев назад.
Доклад про то, как устроено это хранилище будет интересен всем, кто следит за развитием технологий управления базами данных и имеет опыт работы с (No)SQL.
SETCON'18 - Vitali Fokin - Kubernetes 101Nadzeya PusОбзор возможностей Kubernetes, зачем он нужен, кому и когда, а также немного хороших практик по развертыванию и разработке Kubernetes-powered приложений.
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"YandexПлатформа Node.js становится все более популярной. Для нее уже создано много библиотек и инструментов. Рассказ о том, какие из них и для чего мы используем.
Cоциальный граф "Одноклассников" в myTargetOleg TsarevЗадача выглядит обманчиво простой — рядом с баннером игры из Одноклассников показывать текстовый тизер «эту игру играет Кот Матроскин и ещё 5 твоих друзей» (имя и количество берутся из друзей пользователя на Одноклассниках).
Как обрабатывать граф друзей проекта Одноклассники для этой задачи?
На этот простой вопрос дают разные ответы:
- взять графовую базу данных
- использовать матрицу инцидентности
- использовать список смежных вершин.
Если уточнить, что сырые данные занимают полтора терабайта, в графе 200 миллионов вершин и 13 миллиардов связей, то ручные решения сразу отметаются.
«Графовая база данных!» Стоит озвучить нагрузку в десятки тысяч запросов секунду и требования отвечать за миллисекунды (тысячные доли секунды!) как графовые базы сразу оказываются за бортом — типичное время ответа на простые запросы — единицы секунд.
Экс-разработчик MySQL и SciDB, ныне ведущий разработчик myTarget Олег Царёв расскажет, как решалась эта непростая задача в рамках проекта.
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайOnticoНабирает обороты мода на парадигму noBackend (см., например, http://nobackend.org/). Название не стоит понимать буквально: backend никуда не делся, просто фокус разработки — особенно на начальном этапе развития нового проекта — сильно смещается в сторону «клиентской части». Это очень понятно и закономерно в эпоху Mobile First и React Ecosystem с её новомодными GraphQL и React Native.
Появляется большой соблазн взять что-то понятное для хранения данных и уже «обвязанное» REST API, максимально отказаться от PHP/Python/Ruby/Java/etc, писать 80% кода «на стороне клиента», минимально заботясь о возне «на стороне сервера». У некоторых возникает и настоящая эйфория — чувство приятное, но очень опасное (прежде всего, если в команде нет сильного backend-опыта).
Этот доклад — компиляция опыта ряда проектов, написанных на React, React Native и Swift и переходящих на парадигму (или же сразу стартанувших с неё) noBackend за счёт PostgreSQL+PostgREST.
Мы обсудим важные вопросы, которые обязан задавать себе каждый, выбравший noBackend-подход (и не обязательно на связке Postgres+PostgREST): безопасность (аутентификация/авторизация; ограничение чтения и — особенно! — модификации «чужих» данных), производительность (нетривиальные запросы а-ля «свежий контент от тех, на кого я подписан»; компромисс между сетевой сложностью и CPU; защита от «домашнего» ddos — ситуации, когда свои же, родные «фронтендеры» кладут «бэкэнд»), масштабируемость и асинхронная обработка задач.
Задача-минимум (для всех): у каждого слушателя остаётся список must-check-вопросов для работы с noBackend-подходом.
Задача-максимум (для тех, кто с Postgres-опытом): разворачивание безопасного, высокопроизводительного и годного для быстрого развития REST API — сегодня же, в день док
Node.js введение в технологию, КПИ #ITmeetingKPITimur ShemsedinovСеминар по Node.js в КПИ 20 октября 2014. Докладчики: Тимур Шемсединов, Никита Савченко, Максим Петренко. Краткое содержание:
* Что такое Node.js и как работает JavaScript в V8
* Профессионалы расскажут, почему они выбрали Node.js
* Вы узнаете его сильные и слабые стороны и где его лучше применять
* Будет полный обзор особеностей и внутреннего строения Node.js
* Примеры внедрения и Highload-проекты
* Вопросы развертывания, хостинг, тестирования, и отладки
* Где и что учить, что читать, как осваивать
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)Ontico«Одноклассники» состоят из тысяч серверов, большая часть которых участвует в онлайн-обработке запросов пользователей. Каждый из этих серверов владеет только частью данных или логики. Эти части в социальной сети изолировать друг от друга невозможно, поэтому между серверами происходит много сетевого взаимодействия — разнообразного и большого по объему. Таким образом, Одноклассники — это одна из самых больших, сложных и нагруженных распределенных систем в мире.
В этом докладе Олег расскажет об опыте построения отказоустойчивых распределенных систем на Java, основных ошибках и отказах, приемах их тестирования и диагностики. Также речь пойдет об авариях в распределенных системах и методах их предупреждения.
Не бойся, это всего лишь данные... просто их многоRoman DvornovЗа последние 15 лет веб сильно изменился и ускорился. Но большинство по-прежнему боится большого количества данных и сложной логики на клиенте. Потому что "тормозит".
Я хочу сломать стереотипы и показать, как начать делать крутые штуки на client-side. Тысячи и сотни тысяч объектов, разные типы, зависимые вычисляемые свойства, агрегация, множество вариантов отображения. Все это в вашем браузере. Без тормозов, регистраций, смс.
Видео этого доклада на конференции DUMP, Екатеринбург, 14 марта 2014: https://vimeo.com/90836493
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Timur ShemsedinovПримеры кода приложений и конфигурации сервера с доступом к файлам, памяти, базам данных и параллельной асинхронной обработкой различных типов API запросов с состоянием и без состояния.
#MBLTdev: Core Data: особенности использования и синхронизация в iCloud (Avia...e-Legion#MBLTdev: Конференция мобильных разработчиков
Спикер: Руслан Шевчук
iOS-разработчик, Aviasales
http://mbltdev.ru/
За гранью NoSQL: NewSQL на Cassandraodnoklassniki.ruДо недавнего времени в Одноклассниках около 50 ТБ данных, обрабатываемых в реальном времени, хранилось в Microsoft SQL Server. Многие знают, что для такого объема обеспечить быстрый и надежный, да еще и устойчивый к отказу ЦОД доступ, используя SQL СУБД, практически невозможно. Обычно в таких случаях используют одно из NoSQL хранилищ, но не всё можно перенести в NoSQL: некоторые сущности требуют гарантий ACID-транзакций.
Это ограничение подвело нас к необходимости использования NewSQL хранилища, то есть СУБД, предоставляющей отказоустойчивость, масштабируемость и быстродействие NoSQL-систем, но при этом сохраняющей привычные для классических систем ACID-гарантии. Работающих промышленных систем этого нового класса немного (сразу приходит на ум только Google Spanner), а доступных — и вовсе нет. Поэтому мы реализовали такую систему сами на любимой нами Java и запустили ее в промышленную эксплуатацию несколько месяцев назад.
Доклад про то, как устроено это хранилище будет интересен всем, кто следит за развитием технологий управления базами данных и имеет опыт работы с (No)SQL.
SETCON'18 - Vitali Fokin - Kubernetes 101Nadzeya PusОбзор возможностей Kubernetes, зачем он нужен, кому и когда, а также немного хороших практик по развертыванию и разработке Kubernetes-powered приложений.
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"YandexПлатформа Node.js становится все более популярной. Для нее уже создано много библиотек и инструментов. Рассказ о том, какие из них и для чего мы используем.
Cоциальный граф "Одноклассников" в myTargetOleg TsarevЗадача выглядит обманчиво простой — рядом с баннером игры из Одноклассников показывать текстовый тизер «эту игру играет Кот Матроскин и ещё 5 твоих друзей» (имя и количество берутся из друзей пользователя на Одноклассниках).
Как обрабатывать граф друзей проекта Одноклассники для этой задачи?
На этот простой вопрос дают разные ответы:
- взять графовую базу данных
- использовать матрицу инцидентности
- использовать список смежных вершин.
Если уточнить, что сырые данные занимают полтора терабайта, в графе 200 миллионов вершин и 13 миллиардов связей, то ручные решения сразу отметаются.
«Графовая база данных!» Стоит озвучить нагрузку в десятки тысяч запросов секунду и требования отвечать за миллисекунды (тысячные доли секунды!) как графовые базы сразу оказываются за бортом — типичное время ответа на простые запросы — единицы секунд.
Экс-разработчик MySQL и SciDB, ныне ведущий разработчик myTarget Олег Царёв расскажет, как решалась эта непростая задача в рамках проекта.
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайOnticoНабирает обороты мода на парадигму noBackend (см., например, http://nobackend.org/). Название не стоит понимать буквально: backend никуда не делся, просто фокус разработки — особенно на начальном этапе развития нового проекта — сильно смещается в сторону «клиентской части». Это очень понятно и закономерно в эпоху Mobile First и React Ecosystem с её новомодными GraphQL и React Native.
Появляется большой соблазн взять что-то понятное для хранения данных и уже «обвязанное» REST API, максимально отказаться от PHP/Python/Ruby/Java/etc, писать 80% кода «на стороне клиента», минимально заботясь о возне «на стороне сервера». У некоторых возникает и настоящая эйфория — чувство приятное, но очень опасное (прежде всего, если в команде нет сильного backend-опыта).
Этот доклад — компиляция опыта ряда проектов, написанных на React, React Native и Swift и переходящих на парадигму (или же сразу стартанувших с неё) noBackend за счёт PostgreSQL+PostgREST.
Мы обсудим важные вопросы, которые обязан задавать себе каждый, выбравший noBackend-подход (и не обязательно на связке Postgres+PostgREST): безопасность (аутентификация/авторизация; ограничение чтения и — особенно! — модификации «чужих» данных), производительность (нетривиальные запросы а-ля «свежий контент от тех, на кого я подписан»; компромисс между сетевой сложностью и CPU; защита от «домашнего» ddos — ситуации, когда свои же, родные «фронтендеры» кладут «бэкэнд»), масштабируемость и асинхронная обработка задач.
Задача-минимум (для всех): у каждого слушателя остаётся список must-check-вопросов для работы с noBackend-подходом.
Задача-максимум (для тех, кто с Postgres-опытом): разворачивание безопасного, высокопроизводительного и годного для быстрого развития REST API — сегодня же, в день док
По Вашей просьбе, продукты Atlassian в DockerGonchik TsymzhitovПривет!
Очень много было сообщений о том, что мы, вопреки плану на год, не обсудили Docker.
Исправляемся - предлагаем проводить уходящий год митапом про Atlassian и Docker.
Сергей Чугай с Центра Информационных проектов поделится докладом «Jira за пять минут».
Он опишет свой опыт установки, запуска контейнера с Jira, какие ошибки были с переездом проекта и плюсы в сравнение с классической схемой развертывания платформы Jira.
Далее Владимир Василькин (ALM Works, Санкт-Петербург) выступит с докладом «Pocker: играем с Jira и не только» - о том, как разработчики плагинов используют Docker.
Он расскажет, как с помощью инструмента Pocker можно просто и быстро поднимать разные конфигурации Jira и Confluence, выбирая разные СУБД, версии, плагины, базы, а затем управлять ими – запускать/выключать, просматривать логи и так далее.
Ждем-с, Вас на митапе.
P.S. Пицца будет:)
С уважением,
Atlassian User Group
Быстрый и простой способ шардирования MySQL с помощью CUBRID SHARD - 2013 R...CUBRIDБыстрый и простой способ шардирования MySQL с помощью CUBRID SHARD - 2013 RIT++, Москва.
PerepelitsakuchinskayaThis document discusses the development of high-performance services at Mail.ru for tasks like serving avatars. It describes how they use technologies like Perl, AnyEvent, IProto and Tarantool to process over 100,000 requests per second on a single server. Key points are:
1. Mail.ru uses Perl 7 with AnyEvent and IProto to build asynchronous services that can handle 40,000-120,000 requests per second per core.
2. They store data in the Tarantool NoSQL database for its performance and ability to handle multiple indexes.
3. By using these technologies like async Perl and Tarantool, they can process over 100,000 requests per second with a
2. Особенности разработки сервера на Java
Архитектура Одноклассников
Сокеты в Java: проблемы и решения
Альтернативный механизм сериализации
Кеширование данных и разделяемая память
2
3. Серверы Одноклассников
• 4000 серверов
• Web, Business logic, Download, Storage, Remote Services
• Все ПО написано на Java
Высоконагруженный сервер
• 20 тыс. одновременных подключений
• 30 тыс. запросов в секунду
• Трафик до 1 Gb/s
3
4. Remote Service
• Компоненты портала как отдельные сервисы:
система сообщений, граф дружб, поиск, лента и т. д.
• Внутренняя коммуникация между сервисами
long[] friendIds = getConnections (userId)
Graph cluster
Business logic
server
List<User> friends = getUsers (friendIds)
User service
cluster
4
6. Особенности разработки сервера на Java
Архитектура Одноклассников
Сокеты в Java: проблемы и решения
Альтернативный механизм сериализации
Кеширование данных и разделяемая память
6
7. Разработка сервера на Java
• java.net (Socket I/O)
– Поток на каждое соединение
– Максимум 10 тыс. потоков
• NIO
– Неблокирующие операции read / write
– Selector
• NIO frameworks
– Apache MINA: http://mina.apache.org
– Netty: http://netty.io
7
8. Blocking Socket Selector (BLOS)
• Сочетает преимущества Selector + Blocking I/O
• Поддерживается на уровне ОС, но не в Java
Linux BSD Solaris Windows
epoll kqueue /dev/poll Completion ports
• JNI обертки над системными вызовами
– Socket → SocketImpl impl → FileDescriptor fd → int fd
8
10. Проблемы работы с сетью в Java
• Socket
– Finalizers => утечка памяти, влияние на GC
– Не поддерживается прямой доступ к памяти (Direct ByteBuffers)
• SocketChannel (NIO)
– Не срабатывают таймауты на I/O операциях
– Возможна утечка нативной памяти
• Решение: JNI библиотека
– Такой подход используется в Tomcat (APR + Tomcat native)
– Управление сокетами вручную
10
11. Особенности разработки сервера на Java
Архитектура Одноклассников
Сокеты в Java: проблемы и решения
Альтернативный механизм сериализации
Кеширование данных и разделяемая память
11
12. Важность сериализации в RPC
• Затрачиваемое время на кодирование и декодирование
• Объем передаваемых по сети данных
Read Request
Deserialize arguments
Invoke method
Serialize result
Send response
12
13. Способы сериализации в Java
• Стандартная Java сериализация
– Медленная
– Большой объем получаемых данных
• JBoss serialization
– Не поддерживает простые изменения внутри класса:
добавление поля, удаление, изменение типа или порядка полей
• Avro, Thrift, Protocol Buffers
• Ручная сериализация – Externalizable
– Не вариант (тысячи классов!)
13
14. Архитектура сериализации
• Типы сериализаторов
– Встроенные (примитивные типы, массивы, коллекции)
– Сериализатор класса по полям
• Каждому сериализатору сопоставляется уникальный
64-битный ID – хеш от имен, типов и порядка полей
class Event {
String site = “mail.ru”;
int year = 2012; UID 7 m a i l . r u 2012 1
boolean started = true;
}
14
16. Особенности реализации в Java
• Чтение и запись private полей чужих классов
– Reflection (медленно!)
– sun.misc.Unsafe
• Создание экземпляров класса
– sun.misc.Unsafe.allocateInstance()
– Динамическая генерация байткода
ASM framework: http://asm.ow2.org
• Обход Java верификатора
– Наследование “магического” класса sun.reflect.MagicAccessorImpl
16
18. Особенности разработки сервера на Java
Архитектура Одноклассников
Сокеты в Java: проблемы и решения
Альтернативный механизм сериализации
Кеширование данных и разделяемая память
18
19. Что кешировть?
• Данные из медленного хранилища (БД)
• Результаты вычислений
Где кешировть?
• В оперативной памяти
– Java Heap (не подходит для объемов > 10 GB)
– Off-heap memory
• На диске или флеш-накопителе
19
20. Доступ к off-heap памяти в Java
• Native код (JNI обертки над malloc / free)
– Платформозавимый
• ByteBuffer.allocateDirect
– Размер буфера ≤ 2 GB
– Освобождается автоматически при GC
– Освобождение вручную: ((sun.nio.ch.DirectBuffer) buf).cleaner().clean();
• MappedByteBuffer (FileChannel.map)
• Unsafe.allocateMemory
20
21. Снимки (shapshots)
• Решают проблему холодного старта
• Должны быть целостными
• Способы создания снимков
– “Stop-the-world”
– Запись по сегментам
– Memory-mapped files (MappedByteBuffer.force)
– Copy-on-write (fork trick)
– Shared memory objects
21
22. Shared Memory
• Механизм IPC
– POSIX: shm_open + mmap
– Windows: CreateFileMapping + MapViewOfFile
– Linux: /dev/shm
• Создание объекта Shared Memory в Java
– new RandomAccessFile("/dev/shm/cache", "rw");
• Отображение в адресное пространство процесса
– легальный способ: FileChannel.map
– хитрый способ: sun.nio.ch.FileChannelImpl, методы map0 и unmap0
22
23. Реализация off-heap кеша в Java
на примере download сервера
• Непрерывная область памяти с собственным аллокатором
• FIFO (проще, чем LRU)
• sun.misc.Unsafe (самый быстрый способ доступа)
• Shared Memory (/dev/shm)
• Сегментирование ключей по хеш-коду
• Блокировка сегмента через ReadWriteLock / Semaphore
23