Программная архитектура вебсистем на Битриксе: от простого сайта до веб-кластера Александр Сербул Руководитель направления контроля качества интеграции и внедрений @AlexSerbul Bitrix Framework Фреймворк дает основу, «кубики» Ведущий разработчик/архитектор выбирает модель реализации веб-системы Понять философию фреймворка D7 – новое ядро Уметь «готовить из кубиков» Научиться эффективно расширять фреймворк Взаимодействие с внешними системами Простой сайт Настраиваем карту сайта, поиск, авторизацию Стандартный компонент Стандартный компонент Стандартный компонент Стандартный компонент Стандартный Стандартный модуль Стандартный модуль Стандартный модуль модуль Кастомный шаблон Кастомный компонента шаблон Кастомный компонента шаблон компонента Компоненты Страница /раздел проекта Стандартная страница/раздел Стандартная страница/раздел Стандартная страница/раздел Создаем и настраиваем 1-3 инфоблока Кастомный инфоблок Кастомный инфоблок Кастомизируем 3-10 шаблонов Создаем структуру: Главная О компании Руководство Новости Фотогалерея Каталог Детальная продукта Модули Кастомная форма Кастомная форма инфоблока элемента инфоблока Создаем 2-3 шаблона сайта с меню и цепочкой навигации Шаблон сайта Шаблон сайта Страница /раздел проекта Публичная часть Админка Простой сайт Понять как создавать шаблоны сайта Спроектировать структуру хранения статики/цепочка навигации Понять меню Разобраться с настройками стандартных компонентов, в т.ч. меню, карта сайта, цепочка навигации Научиться кастомизировать шаблоны простых компонентов Изучить принципы авторизации в ядре, формы авторизации Понять компонент поиска Много контента Настраиваем карту сайта, поиск, авторизацию Стандартный компонент Стандартный компонент Стандартный компонент Стандартный компонент Стандартный Стандартный модуль Стандартный модуль Стандартный модуль модуль Кастомный шаблон Кастомный компонента шаблон Кастомный компонента шаблон компонента Компоненты Страница /раздел проекта Настраиваем модули: «Облачные хранилища», «Документооборот», «Бизнес-процессы», «CDN» Создаем и настраиваем 1-3 инфоблока Кастомная форма Кастомная форма инфоблока элемента инфоблока Кастомный инфоблок Кастомный инфоблок Кастомизируем 3-10 шаблонов Создаем структуру: Главная О компании Руководство Новости Фотогалерея Каталог Детальная продукта Модули Стандартная страница/раздел Стандартная страница/раздел Стандартная страница/раздел Создаем 2-3 шаблона сайта с меню и цепочкой навигации Шаблон сайта Шаблон сайта Страница /раздел проекта Публичная часть Админка Много данных в инфоблоках Настраиваем карту сайта, поиск, авторизацию Стандартный компонент Стандартный компонент Стандартный компонент Стандартный компонент Стандартный Стандартный модуль Стандартный модуль Стандартный модуль модуль Кастомный шаблон Кастомный компонента шаблон Кастомный компонента шаблон компонента Компоненты Страница /раздел проекта Создаем и настраиваем 5-200 инфоблоков; Инфоблоки 2.0; Индексы; Пользовательские свойства; Связи инфоблоков; Обработчики событий; Страница /раздел проекта Кастомная форма Кастомная форма инфоблока элемента инфоблока Кастомный инфоблок Кастомный инфоблок Кастомизируем 3-10 шаблонов Создаем структуру: Главная О компании Руководство Новости Фотогалерея Каталог Детальная продукта Модули Стандартная страница/раздел Стандартная страница/раздел Стандартная страница/раздел Шаблон сайта Шаблон сайта Создаем 2-3 шаблона сайта с меню и цепочкой навигации Импорт/экспорт Публичная часть Админка Много данных в инфоблоках Спроектировать модель данных в инфоблоках Описать и реализовать основные запросы к данным из публички (иногда админки) Реализовать соединение выборок из инфоблоков (joins) Пользовательские свойства Кастомные админки к инфоблокам Управляемое и эффективное кэширование данных Экспорт/импорт – JSON, XML, REST, очереди, инкременты Много ролей в системе Настраиваем карту сайта, поиск, авторизацию Стандартный компонент Стандартный компонент Стандартный компонент Стандартный компонент Стандартный Стандартный модуль Стандартный модуль Стандартный модуль модуль Страница /раздел проекта Стандартная страница/раздел Стандартная страница/раздел Стандартная страница/раздел Кастомная форма Кастомная форма инфоблока элемента инфоблока Кастомный шаблон Кастомный компонента шаблон Кастомный компонента шаблон компонента Компоненты Настраиваем права на модули; «Проактивная защита», «Одноразовые пароли» Кастомизируем 3-10 шаблонов Создаем структуру: Главная О компании Руководство Новости Фотогалерея Каталог Детальная продукта Модули Создаем 2-3 шаблона сайта с меню и цепочкой навигации Создаем группы = роли, настраиваем права на модули, папки, файлы Кастомный инфоблок Кастомный инфоблок Шаблон сайта Шаблон сайта Группы, уровни доступа Страница /раздел проекта Публичная часть Админка Много ролей в системе Разбираемся с уровнями доступа к модулям, папкам, файлам Настраиваем группы и учетки Настраиваем уровни доступа Настраиваем административную панель, кнопки Включаем проактивную защиту, одноразовые пароли Тщательно тестируем Много кода Настраиваем карту сайта, поиск, авторизацию Стандартный Стандартный модуль Стандартный модуль Стандартный модуль модуль Стандартный компонент Стандартный компонент Стандартный компонент Стандартный компонент Кастомный компонент Кастомный компонент Кастомный компонент Кастомный компонент Кастомный компонент Кастомный компонент Кастомный компонент Кастомный компонент Компоненты Стандартная страница/раздел Стандартная страница/раздел Стандартная страница/раздел Кастомная админка Кастомная админка Кастомная админка Кастомный модуль Кастомный модуль Кастомный модуль «Кодим» свои модули Кастомная форма Кастомная форма инфоблока элемента инфоблока Пишем свои компоненты и шаблоны, 5-50 Создаем структуру: Главная О компании Руководство Новости Фотогалерея Каталог Детальная продукта Модули Кастомный инфоблок Кастомный инфоблок Создаем 2-3 шаблона сайта с меню и цепочкой навигации Шаблон сайта Шаблон сайта Страница /раздел проекта Страница /раздел проекта Публичная часть Свои обработчики событий Админка Много кода Создаем свои модули с интерфейсом настройки Код оформляем как классы/функции в своем модуле Создаем свои компоненты Определяем обработчики событий Пишем в техподдержку Битрикс – если событий не хватает Создаем свои админки Интеграция с внешними системами Исследуем модуль «Веб-сервисы» Создаем REST, SOAP, JSON, XML-RPC API Создаем свои таблицы в MySQL Используем NoSQL системы – MongoDB, Redis … Определяем обработчики событий Пишем в техподдержку Битрикс – если событий не хватает Создаем свои админки Импорты-экспорты, нагрузки Веб-кластер для архитектора upstream backend { DNS серверы Primary server app1.example.com max_fails=3 Secondary fail_timeout=30s; server app2.example.com max_fails=3 fail_timeout=30s; Балансировщик } … nginx (upstream module) proxy_next_upstream error timeout http_500 http_502 http_503 http_504; Сервер приложений 1 «1C-Битрикс: Управление сайтом» кластерная редакция Apache PHP Сервер MySQL Master MySQL (Innodb/XtraDB) Сервер приложений 2 «1C-Битрикс: Управление сайтом» кластерная редакция Apache PHP Сервер MySQL Slave MySQL (Innodb/XtraDB) Резервируем базу данных Отказал SLAVE DNS серверы Primary Secondary Балансировщик nginx (upstream module) Сервер приложений 1 «1C-Битрикс: Управление сайтом» кластерная редакция Apache PHP Сервер MySQL Master MySQL (Innodb/XtraDB) Сервер приложений 2 «1C-Битрикс: Управление сайтом» кластерная редакция Apache PHP Сервер MySQL Slave MySQL (Innodb/XtraDB) Резервируем кэш Резервируем файлы и каналы Веб-кластер для архитектора В коде приложения – ничего делать не нужно! Рассчитать ожидаемую на проект нагрузку Настроить пулы ресурсов: базы, кэши, обл. хранилища На базе требований по SLA – спроектировать логику восстановления В одном или двух ДЦ? Внедрить регламент резеврного копирования файлов и БД Спасибо за внимание! Вопросы? Александр Сербул [email protected] @AlexSerbul