Your SlideShare is downloading. ×
0
In Memory Data Grids Alexey Kharlamov [email_address] Skype: aharlamov
О этот новый мир <ul><li>Web 2.0: AJAX и стремление к высокой интерактивности </li></ul><ul><li>Экспоненциальный рост траф...
Что же делать? <ul><li>Расти вширь — использовать параллельную обработку (scale out) </li></ul><ul><li>Гауссовское распред...
Определение <ul><li>Grid — а что это вообще такое? </li></ul><ul><ul><li>Машины действующие совместно для решения одной за...
<ul><li>Ассоциативный массив </li></ul><ul><li>Данные делятся на разделы/партиции </li></ul><ul><li>Партиция реплицируются...
Динамический кластер <ul><li>ПО Grid-а автоматически управляет узлами </li></ul><ul><li>Большое число партиций </li></ul><...
Кеширование базы данных <ul><li>Когда </li></ul><ul><ul><li>Есть паттерн доступа в кеш </li></ul></ul><ul><ul><li>Высокая ...
Все свое ношу с собой <ul><li>Когда: безкомпромисный read/write; 20/80 </li></ul><ul><li>Что </li></ul><ul><ul><li>Загружа...
Когда использовать <ul><li>Скорость чтения/записи критична </li></ul><ul><li>Запросы к данным постоянны </li></ul><ul><li>...
Когда использовать <ul><li>НО </li></ul><ul><ul><li>Объем данных в памяти и в БД отличается в разы </li></ul></ul><ul><ul>...
Дизайн данных <ul><li>Самый быстрый доступ по главному ключу </li></ul><ul><li>Помещайте родственные данные в одну партици...
Дизайн: Ускорение доступа <ul><li>Используйте денормализацию данных </li></ul><ul><ul><li>Некоторые данные можно дублирова...
Транзакций <ul><li>IMDG — распределенная система: мы должны использовать 2PC </li></ul><ul><ul><li>Уже на 8 узлах скорость...
Перевод денег: шаг 1 <ul><li>Считать ордер на перевод денег (order_id, счет 1, счет 2, сумма, статус: начат ) </li></ul><u...
Перевод денег: шаг 2 <ul><li>Считать ордер на перевод денег (order_id, счет 1, счет 2, сумма, статус: списано ) </li></ul>...
Перевод денег: завершение <ul><li>Считать ордер на перевод денег (order_id, счет 1, счет 2, сумма, статус: начисленно ) </...
 
<ul><li>Обычный рубрикатор электронного магазина </li></ul><ul><li>Хотим </li></ul><ul><li>Искать по ключевому слову </li>...
<ul><li>Код сервисов stateless </li></ul><ul><li>Все данные находятся в IMDG </li></ul><ul><li>Легко добавить сервер прило...
<ul><li>Данные приходят в слой 1 </li></ul><ul><li>Проходят первичную обработку </li></ul><ul><li>Передаются в слой 2 </li...
Oracle Coherence Gigaspaces GemFire Hazelcast Terracotta Координация P2P Центр. P2P P2P P2P Запросы Фильтрация SQL ODQL Фи...
Заключение <ul><li>При помощи  IMDG вы можете </li></ul><ul><ul><li>Радикально уменьшить нагрузку на БД и время отклика </...
Материалы <ul><li>http://blog.griddynamics.com/   </li></ul><ul><li>Сайты вендоров, особенно форумы поддержки </li></ul><u...
Вопросы ?
Спасибо Alexey Kharlamov [email_address] Skype: aharlamov
Upcoming SlideShare
Loading in...5
×

HighLoad++ 2009 In-Memory Data Grids

1,773

Published on

Presentation given on HighLoad++ 2009 and 2 days later on HL event in Mail.ru

Published in: Technology, Business
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,773
On Slideshare
0
From Embeds
0
Number of Embeds
20
Actions
Shares
0
Downloads
29
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "HighLoad++ 2009 In-Memory Data Grids"

  1. 1. In Memory Data Grids Alexey Kharlamov [email_address] Skype: aharlamov
  2. 2. О этот новый мир <ul><li>Web 2.0: AJAX и стремление к высокой интерактивности </li></ul><ul><li>Экспоненциальный рост трафика </li></ul><ul><li>Закон Мура умирает </li></ul><ul><ul><li>Рост степени интеграции замедляется </li></ul></ul><ul><ul><li>Увеличение плотности упаковки не ведет к росту производительности </li></ul></ul><ul><li>Железо продолжает дешеветь </li></ul>
  3. 3. Что же делать? <ul><li>Расти вширь — использовать параллельную обработку (scale out) </li></ul><ul><li>Гауссовское распределение — наш спаситель! </li></ul><ul><ul><li>Мы можем делать только 20% работы и получать 80% заработной платы </li></ul></ul><ul><li>Использовать принцип пули </li></ul><ul><ul><li>Сделать работу заранее и сохранить ее в памяти </li></ul></ul><ul><li>Память продолжает дешеветь </li></ul>
  4. 4. Определение <ul><li>Grid — а что это вообще такое? </li></ul><ul><ul><li>Машины действующие совместно для решения одной задачи </li></ul></ul><ul><li>А In-Memory Data Grid </li></ul><ul><ul><li>Данные в памяти надежно хранятся </li></ul></ul><ul><ul><li>Всегда доступны и консистентны </li></ul></ul><ul><li>Network Attached Memory </li></ul>
  5. 5. <ul><li>Ассоциативный массив </li></ul><ul><li>Данные делятся на разделы/партиции </li></ul><ul><li>Партиция реплицируются на несколько узлов </li></ul>
  6. 6. Динамический кластер <ul><li>ПО Grid-а автоматически управляет узлами </li></ul><ul><li>Большое число партиций </li></ul><ul><li>Появление нового узла </li></ul><ul><ul><li>Перемещаем часть партиций на новый узел </li></ul></ul><ul><li>Выход узла из системы </li></ul><ul><ul><li>Переводим backup-ы в master-а </li></ul></ul><ul><ul><li>Формируем backup-ы на живых узлах </li></ul></ul><ul><li>Можем именять размер кластера во время работы </li></ul>
  7. 7. Кеширование базы данных <ul><li>Когда </li></ul><ul><ul><li>Есть паттерн доступа в кеш </li></ul></ul><ul><ul><li>Высокая плотность записи </li></ul></ul><ul><li>Что </li></ul><ul><ul><li>Read Through/Write behind </li></ul></ul><ul><ul><li>Вытеснение и обновление </li></ul></ul><ul><li>Запросы не консистентны с кешем и нагружают БД </li></ul>
  8. 8. Все свое ношу с собой <ul><li>Когда: безкомпромисный read/write; 20/80 </li></ul><ul><li>Что </li></ul><ul><ul><li>Загружаем все данные в грид </li></ul></ul><ul><ul><li>Запросы в грид, подписываемся на события </li></ul></ul><ul><li>Сеть — узкое место </li></ul><ul><ul><li>Параллельная обработка внутри узлов грида </li></ul></ul><ul><ul><li>Near Cache </li></ul></ul>
  9. 9. Когда использовать <ul><li>Скорость чтения/записи критична </li></ul><ul><li>Запросы к данным постоянны </li></ul><ul><li>Ваши данные влазят в 1ТБ </li></ul><ul><li>Вы выжали из дисковой подсистемы все что можно </li></ul><ul><li>Вам нужно горизонтально масштабироваться в онлайне, например на public cloud </li></ul>
  10. 10. Когда использовать <ul><li>НО </li></ul><ul><ul><li>Объем данных в памяти и в БД отличается в разы </li></ul></ul><ul><ul><li>Разработка и администрирование распределенной системы это не шутка </li></ul></ul><ul><ul><li>Сеть: критическая точка </li></ul></ul><ul><ul><ul><li>Распределенный запросы плохо масштабируются. </li></ul></ul></ul><ul><ul><ul><li>Стрельба дробью — тоже. </li></ul></ul></ul>
  11. 11. Дизайн данных <ul><li>Самый быстрый доступ по главному ключу </li></ul><ul><li>Помещайте родственные данные в одну партицию </li></ul><ul><ul><li>Их можно обрабатывать совместно прямо на узле грида </li></ul></ul><ul><ul><li>Сетевой запрос будет обрабатывать только 1 узел </li></ul></ul><ul><li>Балансируйте размер объектов в кеше </li></ul><ul><ul><li>Маленькие объекты — много сетевых обращений </li></ul></ul><ul><ul><li>Большие объекты — избыточный трафик </li></ul></ul>
  12. 12. Дизайн: Ускорение доступа <ul><li>Используйте денормализацию данных </li></ul><ul><ul><li>Некоторые данные можно дублировать в нескольких местах </li></ul></ul><ul><ul><li>Подсчитайте часто используемые агрегаты заранее </li></ul></ul><ul><li>Минимизируйте обращения по сети </li></ul><ul><li>Используйте индексы </li></ul><ul><ul><li>IMDG предоставляет индексы для поиска по полям объектов </li></ul></ul><ul><ul><li>Создавайте свои собственные индексы </li></ul></ul><ul><li>Транзакции — КВИНТЭССЕНЦИЯ ЗЛА </li></ul>
  13. 13. Транзакций <ul><li>IMDG — распределенная система: мы должны использовать 2PC </li></ul><ul><ul><li>Уже на 8 узлах скорость падает на 2 порядка </li></ul></ul><ul><ul><li>Существуют сценарии нарушения целостности </li></ul></ul><ul><li>В большинстве систем транзакциями можно пожертвовать </li></ul><ul><li>Либо использовать цепочки идемпотентных операции </li></ul>
  14. 14. Перевод денег: шаг 1 <ul><li>Считать ордер на перевод денег (order_id, счет 1, счет 2, сумма, статус: начат ) </li></ul><ul><li>Считать счет 1 и проверить, что order_id еще к нему не применялся </li></ul><ul><li>Обновить счет 1, списав деньги и добавив order_id в список примененных операций </li></ul><ul><li>Обновить статус order_id на списано </li></ul>
  15. 15. Перевод денег: шаг 2 <ul><li>Считать ордер на перевод денег (order_id, счет 1, счет 2, сумма, статус: списано ) </li></ul><ul><li>Считать счет 2 и проверить, что order_id еще к нему не применялся </li></ul><ul><li>Обновить счет 2, начислив деньги и добавив order_id в список примененных операций </li></ul><ul><li>Обновить статус order_id на начисленно </li></ul>
  16. 16. Перевод денег: завершение <ul><li>Считать ордер на перевод денег (order_id, счет 1, счет 2, сумма, статус: начисленно ) </li></ul><ul><li>Считать счет 1 и удалить ссылку на order_id </li></ul><ul><li>Считать счет 2 и удалить ссылку на order_id </li></ul><ul><li>Обновить статус order_id на обработан </li></ul><ul><li>Транзакция завершена </li></ul>
  17. 18. <ul><li>Обычный рубрикатор электронного магазина </li></ul><ul><li>Хотим </li></ul><ul><li>Искать по ключевому слову </li></ul><ul><li>Выбирать продукты из категории </li></ul><ul><li>Пейджинг </li></ul><ul><li>Фильтрацию продуктов по атрибутам (размер, цвет и т.д.) </li></ul>
  18. 19. <ul><li>Код сервисов stateless </li></ul><ul><li>Все данные находятся в IMDG </li></ul><ul><li>Легко добавить сервер приложений в систему </li></ul><ul><li>С ростом датасета мы можем увеличивать IMDG </li></ul><ul><li>IMDG также используется как Message Bus </li></ul>
  19. 20. <ul><li>Данные приходят в слой 1 </li></ul><ul><li>Проходят первичную обработку </li></ul><ul><li>Передаются в слой 2 </li></ul><ul><li>Проходят аггрегацию </li></ul><ul><li>Передаются в слой 3 для использования клиентами </li></ul>
  20. 21. Oracle Coherence Gigaspaces GemFire Hazelcast Terracotta Координация P2P Центр. P2P P2P P2P Запросы Фильтрация SQL ODQL Фильтрация Нет Лицензия Commercial Com./Free Commercial Free Free Near Cache Да Да Да Нет Да Выполнение Да Да Да Нет Нет* Платформа Java/C/.Net Java/C/.Net Java Java Java Scale-out Да Нет Да Да Нет*
  21. 22. Заключение <ul><li>При помощи IMDG вы можете </li></ul><ul><ul><li>Радикально уменьшить нагрузку на БД и время отклика </li></ul></ul><ul><ul><li>Горизонтально масштабироваться во время выполнения (например на public cloud) </li></ul></ul><ul><ul><li>Вести параллельную обработку данных на кластере </li></ul></ul><ul><ul><li>Обрабатывать данные в реальном времени </li></ul></ul><ul><ul><li>Обрабатывать тысячи транзакций в секунду </li></ul></ul><ul><ul><li>Сделать невозможное возможным! </li></ul></ul>
  22. 23. Материалы <ul><li>http://blog.griddynamics.com/ </li></ul><ul><li>Сайты вендоров, особенно форумы поддержки </li></ul><ul><li>InfoQ: http://www.infoq.com/ </li></ul><ul><li>Cameron Purdy, /dev/null blog: http://www.jroller.com/cpurdy/ </li></ul><ul><li>Nati Shalom: http://natishalom.typepad.com/ </li></ul><ul><li>Brian Oliver: http://brianoliver.wordpress.com/ </li></ul><ul><li>http://www.highscalability.com/ </li></ul>
  23. 24. Вопросы ?
  24. 25. Спасибо Alexey Kharlamov [email_address] Skype: aharlamov
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×