Слоистая архитектура

Y
Слоистая
 архитектура

    и   Yii
Алексей Спиридонов
     CityPatrol
Этапы развития в 2ГИС
От 2х сайтов к 12 сервисам и 3м проектам за 3 года

                                   2012



2009
Инфраструктура
Yii Framework в 2ГИС:

 ● maps.2gis.ru
 ● flamp.ru
 ● api.2gis.ru как совокупность сервисов
      ○ catalog.api
      ○ ads.api
      ○ stat.api
      ○ service.api
      ○ transport.api
      ○ partner.api
      ○ и т.д.

 ● go.2gis.ru
 ● и т.д.
Критерии качества системы


● Производительность

● Непрерывное развитие

● Стабильность

● Переиспользование функционала
Что такое слоистая архитектура?




              ?
Слоистая архитектура
Что такое слоистая архитектура?
Что такое слоистая архитектура?
Что такое слоистая архитектура?
Что такое слоистая архитектура?


● Есть четко определенные функциональные зоны
● Зоны образуют вертикальную иерархию
● Каждая зона несет какую то определенную
  ответственность
● Нижние зоны ничего не знают про верхние


Каждая такая зона - это слой архитектуры
Муки выбора подхода




               VS




    :(                :)
Компоненты фреймворка


● Приложение (CApplication)

● Модуль (CWebModule)

● MVC Контроллер (CController)

● Расширение (CApplicationComponent)
Меняем паттерн приложения
     M+V+C
      ● модель
      ● представление
      ● контроллер


     заменяем на
     E+V+C
      ● Extension
      ● представление
      ● конроллер
Идеальный Extension:

● изолирован, а значит заменим и поддается
  тестированию
● удобно конфигурируется в main.php
● имеет стабильный зафиксированный интерфейс
● возвращает чистые данные, а не объекты
● реализует некую часть / объект предметной области
● имеем свое собственное хранилище данных
Типичные Extensions

Extension 1 :
 ● Своя база данных
 ● ActiveRecord       Extension 2 :
                       ● враппер вокруг сервиса
                          ○ AMQP
                          ○ GeoIP
                          ○ Thrift сервис
 Extension 3:
  ● врапер вокруг
    библиотеки
                      Extension 4:
                       ● враппер к rest сервису
Слоистая архитектура
Слоистая архитектура
Изолируем функционал в слоях
на всех уровнях:

 ● классы
 ● расширения
 ● сервисы
 ● приложения
Эволюция функциональных блоков происходит
безболезненно

  Поиск гео-объекта по названию.
  от 1 класса на PHP
  к распределенному сервису на C++
  без переписывания кода приложения
Простое и легкое управление нагрузкой и надежностью:

 ● Разделение функционала по серверам становится
   задачей изменения конфигов.
 ● Мониторинг нагрузки и поиск проблемных мест.

 ● Управление требованиями к надежности. Отказ одного
   функционального блока не затрагивает всю систему.
Масштабирование данных:

 ● Слабая связанность данных.
 ● Масштабирование хранища данных за счет
   разделения данных по разным базам становится
   элементарным.
Проблемы (Последний слайд)


● Проблема сложности системы
● Проблема изменения интерфейсов
● Как предотвращать восходящие зависимости

● Как разворачивать этот клубок на сервера
● Разделение ответственности за компоненты




                           Если превысим время, просьба
                           ведущему прервать, и вынести
                           обсуждение в курилку...
Алексей Спиридонов,
ООО CityPatrol, Москва


spiridonov@citypatrol.ru
1 of 23

Recommended

Организация проектного обмена информацией на базе FME by
Организация проектного обмена информацией на базе FMEОрганизация проектного обмена информацией на базе FME
Организация проектного обмена информацией на базе FMEСергей Волков
664 views16 slides
Анализируем результаты тестирования производительности с Graphite и Grafana by
Анализируем результаты тестирования производительности с Graphite и GrafanaАнализируем результаты тестирования производительности с Graphite и Grafana
Анализируем результаты тестирования производительности с Graphite и GrafanaSQALab
2.1K views35 slides
"C# vs JS" by Maxim Goncharuk by
"C# vs JS" by Maxim Goncharuk"C# vs JS" by Maxim Goncharuk
"C# vs JS" by Maxim GoncharukBinary Studio
637 views27 slides
ковалев нестандатное нт by
ковалев    нестандатное нтковалев    нестандатное нт
ковалев нестандатное нтAlexei Lupan
697 views20 slides
Принципы разработки поддерживаемых и гибких интерфейсов / Василий Аксёнов (Ян... by
Принципы разработки поддерживаемых и гибких интерфейсов / Василий Аксёнов (Ян...Принципы разработки поддерживаемых и гибких интерфейсов / Василий Аксёнов (Ян...
Принципы разработки поддерживаемых и гибких интерфейсов / Василий Аксёнов (Ян...Ontico
484 views107 slides
TOC + TRIZ by
TOC + TRIZTOC + TRIZ
TOC + TRIZSergey Sobolev
1.1K views39 slides

More Related Content

Similar to Слоистая архитектура

Clean architecture on Android by
Clean architecture on AndroidClean architecture on Android
Clean architecture on AndroidGDG Odessa
362 views36 slides
Javascript-фреймворки:
 должен остаться только один by
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинSergey Xek
1.7K views86 slides
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis) by
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Ontico
1.4K views86 slides
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения» by
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»SpbDotNet Community
249 views85 slides
IT-инфраструктура. FAQ для разработчика by
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаMikhail Chinkov
267 views34 slides
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один by
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только одинHappyDev
294 views85 slides

Similar to Слоистая архитектура(20)

Clean architecture on Android by GDG Odessa
Clean architecture on AndroidClean architecture on Android
Clean architecture on Android
GDG Odessa362 views
Javascript-фреймворки:
 должен остаться только один by Sergey Xek
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
Sergey Xek1.7K views
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis) by Ontico
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Ontico1.4K views
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения» by SpbDotNet Community
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
IT-инфраструктура. FAQ для разработчика by Mikhail Chinkov
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
Mikhail Chinkov267 views
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один by HappyDev
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
HappyDev294 views
Микросервисная архитектура на базе CoreOS и Kubernetes by Denis Izmaylov
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и Kubernetes
Denis Izmaylov1.9K views
Как hh.ru дошли до 500 релизов в квартал без потери в качестве by SQALab
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
SQALab722 views
Как жить в согласии с SOLID? by etyumentcev
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?
etyumentcev1.1K views
Страх и ненависть в мире релиз-инжиниринга by Mikhail Chinkov
Страх и ненависть в мире релиз-инжинирингаСтрах и ненависть в мире релиз-инжиниринга
Страх и ненависть в мире релиз-инжиниринга
Mikhail Chinkov182 views
HighLoad весна 2014 лекция 1 by Technopark
HighLoad весна 2014 лекция 1HighLoad весна 2014 лекция 1
HighLoad весна 2014 лекция 1
Technopark1.7K views
Владимир Никонов "Вызовы при разработке enterprise продукта" by Fwdays
Владимир Никонов "Вызовы при разработке enterprise продукта"Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"
Fwdays618 views
«трудности при разработке сложных распределённых систем на Java. способы реше... by MDDay_4
«трудности при разработке сложных распределённых систем на Java. способы реше...«трудности при разработке сложных распределённых систем на Java. способы реше...
«трудности при разработке сложных распределённых систем на Java. способы реше...
MDDay_4835 views
Роман Приходько, Владимир Беспрозванных, «Сбербанк-Технологии» — Платформа ЕФС by Dev_Party
Роман Приходько, Владимир Беспрозванных, «Сбербанк-Технологии» — Платформа ЕФСРоман Приходько, Владимир Беспрозванных, «Сбербанк-Технологии» — Платформа ЕФС
Роман Приходько, Владимир Беспрозванных, «Сбербанк-Технологии» — Платформа ЕФС
Dev_Party1.8K views
Дизайн больших приложений в ФП by Alexander Granin
Дизайн больших приложений в ФПДизайн больших приложений в ФП
Дизайн больших приложений в ФП
Alexander Granin761 views
MyBatis и Hibernate на одном проекте. Как подружить? by Alexey Zinoviev
MyBatis и Hibernate на одном проекте. Как подружить?MyBatis и Hibernate на одном проекте. Как подружить?
MyBatis и Hibernate на одном проекте. Как подружить?
Alexey Zinoviev816 views
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно! by CodeFest
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
CodeFest817 views

Слоистая архитектура

  • 1. Слоистая архитектура и Yii Алексей Спиридонов CityPatrol
  • 2. Этапы развития в 2ГИС От 2х сайтов к 12 сервисам и 3м проектам за 3 года 2012 2009
  • 3. Инфраструктура Yii Framework в 2ГИС: ● maps.2gis.ru ● flamp.ru ● api.2gis.ru как совокупность сервисов ○ catalog.api ○ ads.api ○ stat.api ○ service.api ○ transport.api ○ partner.api ○ и т.д. ● go.2gis.ru ● и т.д.
  • 4. Критерии качества системы ● Производительность ● Непрерывное развитие ● Стабильность ● Переиспользование функционала
  • 5. Что такое слоистая архитектура? ?
  • 7. Что такое слоистая архитектура?
  • 8. Что такое слоистая архитектура?
  • 9. Что такое слоистая архитектура?
  • 10. Что такое слоистая архитектура? ● Есть четко определенные функциональные зоны ● Зоны образуют вертикальную иерархию ● Каждая зона несет какую то определенную ответственность ● Нижние зоны ничего не знают про верхние Каждая такая зона - это слой архитектуры
  • 12. Компоненты фреймворка ● Приложение (CApplication) ● Модуль (CWebModule) ● MVC Контроллер (CController) ● Расширение (CApplicationComponent)
  • 13. Меняем паттерн приложения M+V+C ● модель ● представление ● контроллер заменяем на E+V+C ● Extension ● представление ● конроллер
  • 14. Идеальный Extension: ● изолирован, а значит заменим и поддается тестированию ● удобно конфигурируется в main.php ● имеет стабильный зафиксированный интерфейс ● возвращает чистые данные, а не объекты ● реализует некую часть / объект предметной области ● имеем свое собственное хранилище данных
  • 15. Типичные Extensions Extension 1 : ● Своя база данных ● ActiveRecord Extension 2 : ● враппер вокруг сервиса ○ AMQP ○ GeoIP ○ Thrift сервис Extension 3: ● врапер вокруг библиотеки Extension 4: ● враппер к rest сервису
  • 18. Изолируем функционал в слоях на всех уровнях: ● классы ● расширения ● сервисы ● приложения
  • 19. Эволюция функциональных блоков происходит безболезненно Поиск гео-объекта по названию. от 1 класса на PHP к распределенному сервису на C++ без переписывания кода приложения
  • 20. Простое и легкое управление нагрузкой и надежностью: ● Разделение функционала по серверам становится задачей изменения конфигов. ● Мониторинг нагрузки и поиск проблемных мест. ● Управление требованиями к надежности. Отказ одного функционального блока не затрагивает всю систему.
  • 21. Масштабирование данных: ● Слабая связанность данных. ● Масштабирование хранища данных за счет разделения данных по разным базам становится элементарным.
  • 22. Проблемы (Последний слайд) ● Проблема сложности системы ● Проблема изменения интерфейсов ● Как предотвращать восходящие зависимости ● Как разворачивать этот клубок на сервера ● Разделение ответственности за компоненты Если превысим время, просьба ведущему прервать, и вынести обсуждение в курилку...
  • 23. Алексей Спиридонов, ООО CityPatrol, Москва spiridonov@citypatrol.ru