SlideShare une entreprise Scribd logo
1  sur  14
Télécharger pour lire hors ligne
CQRS В RAILS ПРИЛОЖЕНИЯХ
Станислав Герман
Rambler&Co Ведущий разработчик
Livejournal
Gazeta.ru
Begun
Price
Ferra
Redigo
Letidor
Канобу
Видео
Секрет фирмы
Рамблер
Инфографика
Новости
Почта
Финансы
Недвижимость
Погода
Гороскопы
Субботний Рамблер
Путешествия
Касса
Еда
Город
Воздух
Волна
Рестораны
Мослента
Lenta.ru
Афиша
Motor
Championat
Quto
Рамблер
Видеостудия
COMMAND
QUERY
RESPONSIBILITY
SEGREGATION
Command => ActiveRecord
Rambler CQRS
SEGREGATION
Query => Repository && ViewModel
Rambler CQRS
Query DB
Удобное
чтение
Нормализация
данных не
нужна
Нет нагрузки
на запись
Любое
количество
представлений
Рефакторинг
без
последствий
RESPONSIBILITY
Приложения
Объекты
Методы
Монолит vs CQRS
Особенности реализации
CMS Application
Реляционная
БД
Консистентные
данные
Малая нагрузка
на изменения
Высокие нагрузки Масштабируемость
Безопасность
Site Application
Контакты
В группе компаний Rambler&Co всегда есть
открытые вакансии для тех, кто хочет
профессионально расти и развиваться,
занимаясь тем, что по-настоящему нравится
hr@rambler-co.ru
www.rambler-co.ru/jobs

Contenu connexe

En vedette

2016 Volleyball Media Guide
2016 Volleyball Media Guide2016 Volleyball Media Guide
2016 Volleyball Media GuideBronchoSports
 
Exercicis d'accentuació gràfica
Exercicis d'accentuació gràficaExercicis d'accentuació gràfica
Exercicis d'accentuació gràficaDolors Matilló
 
Map center lesson keys and resource
Map center lesson keys and resourceMap center lesson keys and resource
Map center lesson keys and resourceCoach Cherry
 
TRENZAS DE COBRE, SOGUILLAS Y TRENCILLAS DE COBRE
TRENZAS DE COBRE, SOGUILLAS Y TRENCILLAS DE COBRETRENZAS DE COBRE, SOGUILLAS Y TRENCILLAS DE COBRE
TRENZAS DE COBRE, SOGUILLAS Y TRENCILLAS DE COBRECorporativo Abastecedor
 
Ptengine ヒートマップのキャプチャー方法
Ptengine ヒートマップのキャプチャー方法Ptengine ヒートマップのキャプチャー方法
Ptengine ヒートマップのキャプチャー方法Ptmind_jp
 
Алексей Косинский "React Native vs. React+WebView"
Алексей Косинский "React Native vs. React+WebView"Алексей Косинский "React Native vs. React+WebView"
Алексей Косинский "React Native vs. React+WebView"Fwdays
 
Sobrepoblación de perros y gatos en la ciudad
Sobrepoblación de perros y gatos en la ciudadSobrepoblación de perros y gatos en la ciudad
Sobrepoblación de perros y gatos en la ciudadcolegio_751
 
Kids Euro Festival 2015 closing summary
Kids Euro Festival 2015 closing summaryKids Euro Festival 2015 closing summary
Kids Euro Festival 2015 closing summaryEUintheUS
 
Types of Maps and other Interpretation
Types of  Maps and other Interpretation Types of  Maps and other Interpretation
Types of Maps and other Interpretation Lyn Gile Facebook
 
60 dias comigo dr. dukan - parte 9 (306 a 343)
60 dias comigo   dr. dukan - parte 9 (306 a 343)60 dias comigo   dr. dukan - parte 9 (306 a 343)
60 dias comigo dr. dukan - parte 9 (306 a 343)Vanessa Dias
 

En vedette (12)

2016 Volleyball Media Guide
2016 Volleyball Media Guide2016 Volleyball Media Guide
2016 Volleyball Media Guide
 
Exercicis d'accentuació gràfica
Exercicis d'accentuació gràficaExercicis d'accentuació gràfica
Exercicis d'accentuació gràfica
 
Map center lesson keys and resource
Map center lesson keys and resourceMap center lesson keys and resource
Map center lesson keys and resource
 
TRENZAS DE COBRE, SOGUILLAS Y TRENCILLAS DE COBRE
TRENZAS DE COBRE, SOGUILLAS Y TRENCILLAS DE COBRETRENZAS DE COBRE, SOGUILLAS Y TRENCILLAS DE COBRE
TRENZAS DE COBRE, SOGUILLAS Y TRENCILLAS DE COBRE
 
Ptengine ヒートマップのキャプチャー方法
Ptengine ヒートマップのキャプチャー方法Ptengine ヒートマップのキャプチャー方法
Ptengine ヒートマップのキャプチャー方法
 
Алексей Косинский "React Native vs. React+WebView"
Алексей Косинский "React Native vs. React+WebView"Алексей Косинский "React Native vs. React+WebView"
Алексей Косинский "React Native vs. React+WebView"
 
Edward abdalla guilty
Edward abdalla guiltyEdward abdalla guilty
Edward abdalla guilty
 
Sobrepoblación de perros y gatos en la ciudad
Sobrepoblación de perros y gatos en la ciudadSobrepoblación de perros y gatos en la ciudad
Sobrepoblación de perros y gatos en la ciudad
 
Kids Euro Festival 2015 closing summary
Kids Euro Festival 2015 closing summaryKids Euro Festival 2015 closing summary
Kids Euro Festival 2015 closing summary
 
Types of Maps and other Interpretation
Types of  Maps and other Interpretation Types of  Maps and other Interpretation
Types of Maps and other Interpretation
 
60 dias comigo dr. dukan - parte 9 (306 a 343)
60 dias comigo   dr. dukan - parte 9 (306 a 343)60 dias comigo   dr. dukan - parte 9 (306 a 343)
60 dias comigo dr. dukan - parte 9 (306 a 343)
 
Basic logging
Basic loggingBasic logging
Basic logging
 

Similaire à Rambler CQRS

Облачные вычисления - игры кончились, началась работа
Облачные вычисления - игры кончились, началась работаОблачные вычисления - игры кончились, началась работа
Облачные вычисления - игры кончились, началась работаКРОК
 
Рецепт автоматизации тестирования для бизнес-приложений
Рецепт автоматизации тестирования для бизнес-приложенийРецепт автоматизации тестирования для бизнес-приложений
Рецепт автоматизации тестирования для бизнес-приложенийtkurnosova
 
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...Ontico
 
Демо пример CBT SCM 2020 05 29
Демо пример CBT SCM 2020 05 29Демо пример CBT SCM 2020 05 29
Демо пример CBT SCM 2020 05 29ssuser60424b
 
Сервис-Ориентированная Архитектура: путь от потребностей к возможностям
Сервис-Ориентированная Архитектура: путь от потребностей к возможностямСервис-Ориентированная Архитектура: путь от потребностей к возможностям
Сервис-Ориентированная Архитектура: путь от потребностей к возможностямAlexander Makeev
 
Pronet bmc pro activenet monitoring. Современная система мониторинга и упра...
Pronet   bmc pro activenet monitoring. Современная система мониторинга и упра...Pronet   bmc pro activenet monitoring. Современная система мониторинга и упра...
Pronet bmc pro activenet monitoring. Современная система мониторинга и упра...Natasha Zaverukha
 
Appercut ufa cloud_20121113
Appercut ufa cloud_20121113Appercut ufa cloud_20121113
Appercut ufa cloud_20121113Michael Oreshin
 
Рисуем ТЗ. Эффективный способ коммуникации.
Рисуем ТЗ. Эффективный способ коммуникации.Рисуем ТЗ. Эффективный способ коммуникации.
Рисуем ТЗ. Эффективный способ коммуникации.Peter Skopin
 
Рисуем ТЗ. Эффективный способ коммуникации в веб проектах
Рисуем ТЗ. Эффективный способ коммуникации в веб проектахРисуем ТЗ. Эффективный способ коммуникации в веб проектах
Рисуем ТЗ. Эффективный способ коммуникации в веб проектахArtem Volftrub
 
Serena requirements management with dimensions rm 07-2015 ru
Serena requirements management with dimensions rm   07-2015 ruSerena requirements management with dimensions rm   07-2015 ru
Serena requirements management with dimensions rm 07-2015 ruSoftmart
 
Как российские ИТ-компании могут зарабатывать на Windows Azure
Как российские ИТ-компании могут зарабатывать на Windows AzureКак российские ИТ-компании могут зарабатывать на Windows Azure
Как российские ИТ-компании могут зарабатывать на Windows AzureValery Bychkov
 

Similaire à Rambler CQRS (13)

Облачные вычисления - игры кончились, началась работа
Облачные вычисления - игры кончились, началась работаОблачные вычисления - игры кончились, началась работа
Облачные вычисления - игры кончились, началась работа
 
Рецепт автоматизации тестирования для бизнес-приложений
Рецепт автоматизации тестирования для бизнес-приложенийРецепт автоматизации тестирования для бизнес-приложений
Рецепт автоматизации тестирования для бизнес-приложений
 
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
 
Демо пример CBT SCM 2020 05 29
Демо пример CBT SCM 2020 05 29Демо пример CBT SCM 2020 05 29
Демо пример CBT SCM 2020 05 29
 
Сервис-Ориентированная Архитектура: путь от потребностей к возможностям
Сервис-Ориентированная Архитектура: путь от потребностей к возможностямСервис-Ориентированная Архитектура: путь от потребностей к возможностям
Сервис-Ориентированная Архитектура: путь от потребностей к возможностям
 
Pronet bmc pro activenet monitoring. Современная система мониторинга и упра...
Pronet   bmc pro activenet monitoring. Современная система мониторинга и упра...Pronet   bmc pro activenet monitoring. Современная система мониторинга и упра...
Pronet bmc pro activenet monitoring. Современная система мониторинга и упра...
 
Highload++ 2015
Highload++ 2015Highload++ 2015
Highload++ 2015
 
Appercut ufa cloud_20121113
Appercut ufa cloud_20121113Appercut ufa cloud_20121113
Appercut ufa cloud_20121113
 
Рисуем ТЗ. Эффективный способ коммуникации.
Рисуем ТЗ. Эффективный способ коммуникации.Рисуем ТЗ. Эффективный способ коммуникации.
Рисуем ТЗ. Эффективный способ коммуникации.
 
Рисуем ТЗ. Эффективный способ коммуникации в веб проектах
Рисуем ТЗ. Эффективный способ коммуникации в веб проектахРисуем ТЗ. Эффективный способ коммуникации в веб проектах
Рисуем ТЗ. Эффективный способ коммуникации в веб проектах
 
Serena requirements management with dimensions rm 07-2015 ru
Serena requirements management with dimensions rm   07-2015 ruSerena requirements management with dimensions rm   07-2015 ru
Serena requirements management with dimensions rm 07-2015 ru
 
Архитектура облачных приложений. Типовые шаблоны, Azure University
Архитектура облачных приложений. Типовые шаблоны, Azure UniversityАрхитектура облачных приложений. Типовые шаблоны, Azure University
Архитектура облачных приложений. Типовые шаблоны, Azure University
 
Как российские ИТ-компании могут зарабатывать на Windows Azure
Как российские ИТ-компании могут зарабатывать на Windows AzureКак российские ИТ-компании могут зарабатывать на Windows Azure
Как российские ИТ-компании могут зарабатывать на Windows Azure
 

Rambler CQRS

Notes de l'éditeur

  1. Всем привет. Меня зовут Станислав Герман и я ведущий разработчик в Рамблер
  2. Наверное когда вы слышите Рамблер на ум приходит поисковик из 90х, но на данный момент Рамблер это группа компания с ежемесячной аулдиторией 40 млн пользовтелей и более 50 проектами различной сложности. Я думаю многим из вас знакомы такие новостные и медиа проекты как Lenta Gazeta Afisha и Большинства из этих контентных площадок в компании построенны на Ruby on Rails.
  3. В Ruby on Rails проектах мы используем паттерн CQRS Command Query Responsabilty Segregation В основе паттерна лежит принцип «вопрос не должен изменить ответ». Вы можете разделить модели на предназначенные для чтения (commands) и записи (query). Давайте я попробую объяснить на небольшом примере, как такой подход ложится на реалии Ruby on Rails приложения.
  4. Command это модель ActiveRecord, в общем случае.
  5. Каждый раз когда данные изменились в реляционной DB, происход вызов записи в базу для чтения в данном случае это mongoDB коллекция posts.
  6. Теперь дынные разделены на две базы данных. Одна для для изменений вторая предназначена для для чтения.
  7. На уровне модели для чтения реализация достаточно простая это Plain Old Ruby Object.
  8. Враппер вокруг mongo_ruby_driver реализующий репозиторий. Так как не надо писать в базу нам не нужен тяжелий mongoid. PostRepository метод all возвращает экземпляры класса PostView представленный правее.
  9. Дынные сериализуются в noSQL уже в подготовленном виде, удобном для чтения и денормализованном и они отвязаны от ActiveRecord.
  10. Разделив код на уровне данных и моделей мы получили ряд преимуществ на уровне дизайна кода и его поддержки.
  11. А что если посмотреть на данный пример чуть шире, то очевидно что дальнейшее раздение может принести дополнительные выгоды.
  12. Монолитная архитектура на начальных этапах - когда кодовая база не большая, удобна. При увеличении сложности системы её становится сложнее поддерживать, большая связность, сложность тестирования, проблемы с масштабируемостью. Один из способов избежать этого Command Query Responsabilty Segregation. В реализации CQRS мы разделяем приложение на два. Можно их назвать CMS и Site. Два приложения одно только для записи второе только для чтения. CMS и Site. У нас есть Postgress который перегоняет подготовленные и денормализованные данные в noSQL. MongoDB master реплицируется с отдельными БД для каждого инстанса приложения. При увеличении нагрузки на сайт мы можем практически до бесконечности горизонтально масштабировать приложение. Так же плюсом является безопасность решения CMS закрыта от опасного внешнего интернета и не site не CMS не влияют на работоспособность друг друга.
  13. Состоит в том что данный подход требует осторожности в использовании Он отлично подходит для контентных сайтов но не подойдет например для социальной сети. В первую очередь необходима большая нагрузка на чтение по сравнению с записью.