Вопросы и ответы

В этом разделе я отвечаю на типичные вопросы по высоконагруженным интернет-проектам и смежным темам. В перспективе здесь соберется полноценный F.A.Q.

Буду рад, если Вы поучаствуете в его создании в комментариях.

Высоконагруженные интернет-проекты

+Что считать «высоконагруженным» (highload) интернет-проектом?

Какой-либо формальной границы, естественно, не существует: кто-то называет таковыми только всем известных интернет-гигантов, а кто-то – любой сайт, с которым перестал справляться хостинг за 5$ в месяц. Реальная граница находится между этими крайностями, можно попробовать сформулировать её следующим образом: высоконагруженным интернет-проектом можно считать тот, которому потребовалось прибегнуть к нетривиальным техническим решениям для удовлетворения текущих или ожидаемых в ближайшем будущем потребностей своей аудитории.

Наверное многие ожидали увидеть в ответе на этот вопрос какую-то пороговую цифру запросов в секунду или хотя бы месячной или дневной аудитории, но это было бы не справедливо: в зависимости от специфики проекта за одним запросом может стоять как тривиальная операция (например статичный информационный сайт), так сложная работа, требующая обработки большого  количества данных (поиск чего-либо, работа с медиа-файлами и пр.).

В большинстве случаев проект начинает чувствовать влияние нагрузки, когда изначальная (тривиальная) реализация функционала перестает справляться и команде разработчиков приходится прибегать к новым, менее очевидным, техническим решениям для поддержания работоспособности проекта при продолжающемся росте аудитории.

+Какие важные критерии учитываются при проектировании высоконагруженного интернет-проекта?

Первый и самый основной критерий – команда. Не стоит планировать использование решений, с которыми она не знакома или не может быть обучена в очень сжатые сроки. Некоторые участники могут «не переваривать» различные технологии по идеологическим и религиозным причинам, что создаст очень серьезные риски при их использовании в дальнейшем. По возможности команда должна быть максимально однородна как по предыдущему опыту работы, так и по характеру и взгляду на жизнь в целом и будущий проект в частности.

Второй критерий – специфика проекта. Как часто и кем обновляется информация? Как много информации будет одновременно находиться в системе? Структурирована она или нет? Устаревает ли она? Какие основные типы запросов? Нужен ли полнотекстовый поиск? Аудитория – живые люди, автоматизированные внешние системы или и то и другое? И многие другие вопросы, на которые нужно понять ответ и сделать выводы.

Третий критерий – план развития проекта в целом. Архитектура проектируется на много шагов вперед, план её реализации должен быть поэтапным и соответствовать развитию остальных, не технических, аспектов интернет-проекта.

+Есть ли «стандартные наборы» архитектуры и платформ для highload проектов или технологии подбираются индивидуально под проект?

Технологии подбираются индивидуально, но некоторые «связки», которые чаще используются вместе, чем остальные, все же существуют. В частности это LAMP и стеки технологий от Mi***oft и Oracle. Но, как известно, не смотря на то, что встретить в природе их можно чаще, все они относятся к «тривиальным» решениям и требуют постоянной частичной или кардинальной переработки при росте проекта.

+Какие способы и приемы снижения нагрузок самые эффективные для высоконагруженных сайтов?

Способов всего три: распределение, кэширование и откладывание на потом. На основе их комбинации строятся основные используемые на практике решения, с наиболее распространенными можно ознакомиться в статье «10 известных масштабируемых архитектурных шаблонов».

+На какие затраты стоит рассчитывать при разработке высоконагруженного интернет-проекта?

Конкретные цифры зависят от огромного числа факторов. Давайте рассмотрим теоретическую ситуацию: допустим проекту уже два года, есть инвестор и с маркетингом все хорошо. Пробежимся по основным статьям расходов:

  • Зарплата: для большинства интернет-проектов (за исключением проектов, где все создается основателями и сотрудники как таковые отсутствуют) это практически самая основная статья расходов. Очень сильно зависит от географии сотрудников, могу посчитать приблизительную сумму для Москвы, например у нас будет средняя команда из 25 человек, из которых 3 менеджера (которые сами себя назвали директорами) с зарплатой в 120 тыс.р., 1 тим лид с зарплатой 130 тыс. р., 2 системных архитектора с зарплатой 100 тыс. р., 10 разработчиков с зарплатой 80 тыс. р., 3 системных администратора с зарплатой 70 тыс. р., 2 тестировщика по 40 тыс. р. и 4 не-технических сотрудника с зарплатой 50 тыс. р. После несложной математики выходит 2 миллиона рублей в месяц, что очень прилично.
  • Налоги: не знаю платит ли сейчас кто-то зарплату официально, но с зарплаты сотрудников по-хорошему нужно платить 50% налогов, добавляем еще 1 миллион рублей в месяц.
  • Оборудование: скорее всего арендуется и расходы по сравнению с зарплатой практически не заметны. Например 50 серверов будут стоить порядка 100 тыс. р. в месяц в Европе (по 50 евро) или порядка 150 тыс. р. в США (по 100$). При удачной архитектуре количество серверов (и расходов на них) будет расти линейно относительно размера аудитории.
  • Офис: еще одна незначительная статья расходов, которая врядли будет превышать 100-150 тыс. р. в месяц, с учетом закупок офисной техники и мебели, компьютеров и расходных материалов.
  • Программное обеспечение: в большинстве случаев ноль ибо opensource. Исключения: дизайнеры, бухгалтеры и юристы, но их обычно все же не держат в штате. Mi***oft и Oracle также не рассматриваем.
  • Маркетинг: очень сильно зависит от тематики и ниши, может быть как практически нулевым (люди сами рассказывают знакомым о проекте), так и неограниченно большим (телевидение, наружка, баннерная реклама). Для большинства проектов примерно соответствует сумме остальных расходов.

Итого для этого гипотетического проекта расходы составили бы порядка 5 миллионов рублей в месяц, из которых лишь около 2-3% на аппаратное и программное обеспечение.

Вывод: расходы на техническое обеспечение у большинства проектов несоизмеримо малы по сравнению с зарплатой и продвижением, эта статья расходов становится значительной лишь на поздних стадиях, когда количество необходимых серверов начинает измеряться тысячами.

Возможны и другие сценарии, например с отсутствующим инвестором и существенно меньшим штатом, но общая картина (пропорции) приблизительно останется прежней.

+Отстают ли в технологическом плане крупные российские интернет-компании от европейских и американских коллег?

В целом по больнице – определенно да,  но если учесть поправку на ограниченность русскоговорящей аудитории по сравнению с мировой, то ситуация вполне закономерная и нормальная.

+Может ли DDoS атака навредить правильно спроектированному сайту?

Да, может, так как DDoS атаки чаще всего нацелены на поглощение интернет-канала, доступного веб-серверам интернет-проекта, а не на его внутреннюю архитектуру. Даже если злоумышленник решит воспользоваться уязвимостью в одном из компонентов системы (например в SSL-handshake HTTP-серверов), архитектура в данной ситуации тоже не спасет.

С другой стороны, проекты, столкнувшиеся с высокой нагрузкой, зачастую имеют солидный «запас» по доступной пропускной способности и альтернативный интернет-канал для своих веб-серверов, а также располагаются в датацентрах, оборудованных современными маршрутизаторами, поддерживающими фильтрацию подозрительного трафика.

Таким образом, злоумышленнику потребуется планирование DDoS атаки существенно большей мощности, чем чтобы «завалить» какой-нибудь простенький интернет-магазин, что под силу далеко не каждому, а в некоторых случаях и теоретически не реально.

Стартапы

+Как определить: является ли масштабируемая архитектура интернет-проекта залогом его успеха или пустой тратой сил и времени?

Если в общем случае, то нужно определить с насколько многочисленной аудиторией может столкнуться проект и с насколько большим и сложноструктурированным массивом данных придется работать.

Но лучше здесь отталкиваться от типа проекта:

  • Информационные ресурсы: в подавляющем большинстве случаев ответ — заранее планировать архитектуру не нужно, очень небольшое количество информационных ресурсов перерастает возможности одного сервера при грамотно настроенной системе управления контентом. А даже если это и случится, добавление новых серверов пройдет безболезненно из-за широких возможностей по кэшированию контента и отсутствия необходимости сложных решений на уровне СУБД.
  • Интернет-магазины: здесь все упирается в широту ассортимента, если ассортимент теоретически не может разрастись до сотен тысяч наименований, то особых решений точно не потребуется. В противном случае — надо задуматься об эффективном кэшировании часто посещаемых товаров и категорий, а также минимизации «тяжелых» запросов к базе данных.
  • Социальные сети: основной критерий — теоретически возможное количество участников и связей между ними. Если речь идет о маленькой региональной или узкотематической социальной сети, то можно не заморачиваясь сложить все в реляционную базу данных, но для чего-то большего потребуется масштабируемое решение.
  • Технологические проекты: основанные на техническом ноу-хау проекты напрямую от него и зависят, как правило уже при проектировании самой «изюминки» проекта становится понятно какая архитектура для него больше подходит и как её развивать в дальнейшем.

+Когда нужно начать задумываться о масштабируемости интернет-проекта?

В идеале — когда уже начали фиксироваться планируемый функционал и способы использования проекта пользователями, но еще до начала реализации.

Если же проект в каком-то виде уже реализован и запущен, но из-за стремительного роста аудитории перестал полноценно справляться со своими задачами, то ответ очевиден — «вчера».

Если же он как-то реализован, нормально работает и никаких признаков приближающейся катастрофы не видно, то определенно этот вопрос можно отложить.

+Нужно ли создавать прототип (макет, предварительный образец) будущего интернет-проекта, в каких случаях это целесообразно, как его делают и какой специалист должен его делать?

Прототип в той или иной форме появляется у любого интернет-проекта и обычно эволюционирует по мере его формирования и развития. Самый примитивный вариант прототипа – на салфетке или просто на бумаге, он появляется на очень раннем этапе для обсуждения проекта внутри команды, а еще лучше – для демонстрации и получения обратной связи от целевой аудитории. Создается, как не трудно догадаться, основателем(ями) проекта и особых специалистов не требует. Про использование подобных бумажных макетов в целях юзабилити исследований – отдельная тема.

В дальнейшем прототип может приобрести форму набросков страниц (mockups), что по сути представляет собой оцифровку и детализацию того, что раньше было на бумажках. Проще всего это делать специальным софтом, рекламировать не буду. Далее прототип уже передается «специалистам»: дизайнер предаст наброскам приемлемый внешний вид, верстальщик превратит макеты в понятный браузерам вид, а разработчик предаст им жизни и вот, собственно, проект уже практически готов к запуску и статус прототипа постепенно теряет.

Одна из побочных (вспомогательных) функций прототипа для стартапа – демонстрация проекта инвесторам, бизнес-ангелам и менторам. Для этого может сгодиться любая его инкарнация, но чем более он проработан, тем меньше придется взывать к воображению собеседников.

+Какой хостинг следует выбирать молодым интернет-стартапам: облачные хостинг-решения, аренда выделенных серверов (dedicated) или покупать собственные сервера и размещать в дата-центрах (colocation)?

Этот вопрос скорее финансовый, чем технический. Если стартап находится на ранней стадии, то его основная задача – проверить идею, зачастую с очень примитивным прототипом, при минимальных финансовых вложениях. В таком случае выбор стоит между обычным (shared) хостингом (если прототип статичен или написан на PHP) и виртуальным (VPS, VDS или один инстанс «в облаках»). Выбор не сложный, так как нагрузки как таковой не предвидится и все определяет использование в прототипе технологий, не доступных на shared хостинге.

На поздних же стадиях, когда проект получил финансирование или уже начал зарабатывать самостоятельно, да, стоит задумываться о более долгосрочном «месте жительства» проекта. Первое о чем стоит подумать это не тип хостинга, а страна, где он будет располагаться. Основные аспекты, которые стоит учитывать: близость к целевой аудитории проекта (по сети, а не географически, что не всегда одно и то же), а также особенности законодательства страны в области ИТ. Именно из-за юридических, правоохранительных и прочих национальных особенностей многие (я в их числе) предпочитают хостинг в Европе для русскоязычных интернет-проектов.

Покупку серверов с colocation за границей провернуть не так просто именно с организационной точки зрения (не говоря о финансовой), так что у большинства выбор сводится к dedicated vs cloud. Облака удобны для тех, кто не способен спрогнозировать изменение спроса аудитории, но способен автоматизировать запуск и остановку дополнительных серверов и подключение их к обслуживанию интернет-проекта, плюс нужно быть готовыми переплачивать за данное удобство, особенно при размещении на территории США. Арендуемые железные сервера же хороши, когда у проекта стабильная предсказуемая нагрузка или когда идет работа с данными, существенно превышающими по объему доступную оперативную память.

Специалисты

+Какие нужны специалисты для разработки высоконагруженного интернет-проекта и как их выбирать?

Процесс разработки высоконагруженного интернет-проекта в общих чертах мало чем отличается от разработки какого-то другого сайта, да и программного обеспечения в целом. Список требуемых специалистов абсолютно тот же, разница лишь в деталях.

В качестве общей рекомендации стоит сказать, что будущие коллеги всегда имеют больше шансов определить уровень кандидата, чем любой HR-специалист, так что по возможности именно они должны проводить собеседование (по крайней мере задавать вопросы и оценивать адекватность ответов).

Давайте пройдемся по основным позициям и рассмотрим на что стоит обратить внимание при найме:

  • Лицо Принимающее Технические Решения: официально такого человека в зависимости от ситуации могли бы обозначить как «технически директор», «системный архитектор», «начальник отдела/департамента разработки», «ИТ-менеджер», «тим лид», просто «программист» — суть от этого не меняется. Это тот человек, который собственно будет отвечать за то, как будет [технически] выглядеть проект в дальнейшем, он может даже и не быть начальником, а просто говорить «вот так надо», а начальник, ничего толком не понимая, со всем соглашаться — даже такое бывает. От него будет зависеть архитектура проекта, план развития, выбор технологий, масштабируемость, отказоустойчивость и безопасность, а также многое и многое другое. Не всегда заранее понятно кто в команде окажется в итоге этим человеком, но руководству компании очень желательно как можно раньше его выявить (желательно до найма) и максимально пристально обратить на него внимание. К нему стоит относиться как к юристу — проверить именно знания и навыки достаточно сложно, а вот ознакомиться с его историей, прошлыми проектами, мнением о нем коллег и просто других профессионалов в отрасли необходимо в любом случае. Посмотреть его в деле можно обсуждая виртуальные (придуманные) проекты с конкретными особенностями, ограничениями и проблемами; нужно просить кандидата порассуждать вслух о возможных вариантах решения трудностей, в чем преимущества каждого их них, каким он отдал бы предпочтения и почему.
  • Разработчики: в интернет-проектах их принято делить на клиентских и серверных.
    • Серверный разработчик обычно отвечает в первую очередь бизнес-логику проекта, во вторую — за генерацию шаблонов, взаимодействие с СУБД, обработку файлов и многое другое, что могут на него повесить. Так или иначе его роль заключается (но не ограничивается) в написании кода проекта на одном из  языков программирования (в большинстве проектов на серверной стороне используется один ЯП, реже — два, и совсем редко — больше). Помимо кода он отвечает за выбор деталей реализации проекта: алгоритмов, библиотек, вспомогательных инструментов и пр. Из всего этого напрямую следует процесс его найма: нужно просить писать код и обсуждать алгоритмы, библиотеки, базы данных, шаблонизаторы и т.п. тоже на примере вымышленных ситуаций. Прямо на собеседовании код лучше писать не на компьютере (бумага, маркерная доска, печатная машинка), а также можно попросить посмотреть написанный им старый код и проверить на адекватность читабельность и соответствие общепринятым стандартам (это лучше доверить его будущему коллеге по возможности).
    • Клиентский разработчик занимается всем тем, что происходит в браузере пользователя. Уклон бывает в две стороны: внешний вид (верстальщик, HTML+CSS) и динамика (JavaScript разработчик). На собеседовании также основное внимание стоит уделять коду, плюс принципам работы браузера и особенностям основных реализаций и их версий. Для верстальщика стоит попросить несколько примеров работы и проверить на валидность и кроссбраузерность, для обоих проверок существуют автоматизированные сервисы, но и глазами посмотреть тоже стоит на предмет читабельности и по возможности отсутствия неудачных решений (табличная верстка, стили внутри HTML, отсутствие семантики). С JavaScript разработчиками стоит обсудить опыт работы с различными библиотеками, понимание основных событий, происходящих внутри браузере, принципы организации кода, полезным навыком будет опыт организации навигации без перезагрузок страницы и постоянного поддержания с сервером для обновлений страницы в реальном времени.
  • Системные администраторы: как ни странно, они тоже должны уметь программировать, так как при соотношении серверов к сисадминам больше чем 1 к 3 ключевую роль в их работе начинает играть автоматизация. Обычно это самое основное на что стоит обратить внимание на собеседовании: обсудить с какими подходами к автоматизации в системном администрировании кандидат знаком, что предпочитает, попросить написать пару-тройку скриптов (обычно на bash, Python или Ruby, хотя это не так важно) для параллельного выполнения каких-то действий на кластере из >100 серверов. Вторая по важности тема, пожалуй, мониторинг и реагирование в случае проблем. Собственно понимание серверных операционных систем и основных сетевых протоколов также должно быть на очень высоком уровне, причем желательно чтобы человек мог объяснить все это так, чтобы даже не технарю все стало понятно. На тему почты, DNS, LDAP и прочих подобных стоит общаться только кандидату и правда предстоит ими заниматься.
  • Тестировщики: бывает три основных типа тестирования, применительно к интернет-проектам и, соответственно, три типа тестировщиков.
    • Автоматическое тестирование кода — по сути своей работы и требованиям очень похож на серверного разработчика, разница в том, необходимо понимание основных типов тестирования и сопутствующих инструментов. На собеседовании, естественно, стоит спрашивать как кандидат протестировал бы ту или иную часть (воображаемого) проекта, порой бывает интересно пообсуждать тестирование внутри браузера посредством Selenium или аналогов.
    • Нагрузочное тестирование — проверка поведения сайта в целом при определенном уровне нагрузки (потоке входящих пользовательских запросов). Кандидат должен понимать как максимально точно воспроизвести поведение пользователей в системе, предложить варианты сбора данных и построения на их основе сценариев, уметь определять узкие места в системе, те, которые являются причиной неполадок.
    • Ручное тестирование — такое тоже порой встречается, иногда писать автоматизированные тесты сложно, долго или лень, и проще вручную понажимать все кнопочки и посмотреть что будет. Но специально для этого людей нанимать не надо, можно напрячь, например, секретаршу или еще кого-нибудь, а еще лучше — не лениться и автоматизировать процесс тестирования.

+Какими знаниями должен обладать технический специалист для работы в высоконагруженном интернет-проекте?

На самом деле какого-то особого секрета, который непременно нужно знать, здесь нет.

Тем не менее, помимо качественного исполнения своих прямых обязанностей, от техспециалистов следует ожидать понимания основных принципов, которые используются или могут использоваться в интернет-проекте, в частности:

  • Как устроены и работают основные веб-протоколы, как минимум TCP/IP, HTTP, SSL, DNS, остальные менее важны.
  • Основные принципы работы браузеров, особенности основных пяти и их версий, HTML, CSS, JavaScript,»водопад» загрузки ресурсов, процесс отрисовки страниц, AJAX.
  • Новые стандарты и возможности, которые обычно называют «HTML5» (WebSockets, History API, различные варианты хранения данных на клиенте и др.) — как минимум быть в курсе их существования и понимать в каких случаях целесообразно их использовать.
  • Серверные операционные системы: минимальными навыками работы с Linux и общим представлении о схеме их работы стоит обладать даже клиентским разработчикам и верстальщики, если человек знаком только с Wi***ws — это тревожный знак. Процессы, потоки, сигналы, файловые системы и основные демоны.
  • Базы данных — это тема уже более узкая и не нужна совсем всем, но понимать как они работают, какие бывают основные типы, их преимущества и недостатки определенно стоит. Аббревиатуры CAP и ACID должны что-то говорить.
  • Основные принципы масштабируемости (распределение работы, кэширование, отложенные задачи), отказоустойчивости (единственные точки отказа, DDoS, сбои оборудования) и сетевой (без)опасности (инъекции, XSS, уязвимости ПО, человеческий фактор и др.). Особенности, варианты реализации, готовые решения.

Соответственно, если Вы прочитали этот ответ с точки зрения специалиста — рекомендую пройтись по вышеизложенный списку перед трудоустройством в крупный интернет-проект или стартап, который планирует стать таковым.

Технологии

+Какие интернет-технологии, платформы и языки программирования сейчас являются перспективными для использования в highload проектах?

Вопрос «какие технологии и решения использовать в конкретном проекте» очень индивидуален. Большинство современных языков программирования и сопутствующих технологий предлагают все необходимые инструменты для построения стабильной, надежной и масштабируемой архитектуры интернет-проекта.

Если же говорить о трендах, то многие считают модным использование Ruby on Rails и node.js, «NoSQL» баз данных и других относительно новых технологий. Лично мой выбор в последние годы часто падает на Python, Redis и PostgreSQL.

  • Mail

    Спасибо, за статью!

    Форум не планируете открыть на сайте?

    • http://www.insight-it.ru Ivan Blinkov

      По поводу форума думал как-то, но в итоге отказался, так как он требует намного больше сил и времени на привлечение постоянной аудитории, модерацию и прочие связанные заботы.

  • Дельгядо Филипп

    RoR для высоконагруженных систем? Брр...

    Вообще, если говорить о технологиях, то стоит различать ситуацию «мы знаем, что будет высокая нагрузка и выбираем стек под нее» и «делаем побыстрее, а там разберемся». И выбор технологий для заметной части технологий на рынке определяется скорее случайностью, чем осмысленным выбором...

    Кстати, по указанному определению, чем хуже спроектирована система, тем быстрее она становится «высоконагруженной» (т.е. требуются какие-то нетривиальные решения). Какое-нибудь стандартное решение на J2ee будет держать в десятки раз большую нагрузку, чем стандартное же решение на том же RoR.  А правильно сделанный проект вообще не станет высоконагруженным (в смысле определения).

    И доклады на разных конференциях это только подтверждают. На том же хайлоаде большая часть сообщений из формата «мы придумали себе сложности, а потом героически их преодолевали». Докладов «мы сделали сразу хорошо — и оно работает» практически нет...

    • http://www.insight-it.ru Ivan Blinkov

      Филипп, ответ на тот вопрос родился во многом именно из-за описываемой в последнем абзаце Вашего комментария ситуации. 

      С одной стороны, сделанный как попало проект быстро столкнется с проблемами и начнет пытаться их решать. А с другой — если продумывать архитектуру и её развитие заранее, то он станет «высоконагруженным» практически от рождения, как начнется реализовываться запланированное (что не очень правильно, но все же).

      А так да, до полноценного определения этому ответу еще далеко...

      Если есть предложения по поводу как его улучшить — буду рад обсудить :)

      P.S.: RoR приводился как анти-пример.

  • http://twitter.com/man4j Vladimir Petrukhin

    Про тестирование как-то не очень согласен. Всё-так тестировщиков лучше различать по принципу — юнит/интеграционное тестирование (это и сами прогеры могут и должны делать) и функциональное (это всякие селениумы и т.д. либо просто руками). 

    • http://www.insight-it.ru Ivan Blinkov

      Да, наверное стоит различать, но я не сталкивался с ситуациями, когда нанимали отдельного человека под «функциональное (это всякие селениумы и т.д. либо просто руками)». Обычно если человек профессионально пишет автоматические тесты, то он сам компетентен решать как, какие именно и с помощью каких инструментов.

  • Andrey Bloschetsov

    Есть ли у Вас опыт использования LDAP каталога в качестве хранилища аутентификационных данных? Что можете сказать о таком подходе для HL систем (например в сравнении с хранением в БД)?

    • http://www.insight-it.ru Ivan Blinkov

      LDAP — протокол аутентификации, а не хранения аутентификационных данных. 

      За LDAP-демоном всегда стоит какое-то хранилище: BerkleyDB, ***SQL, просто файлы. Каких-то особых преимуществ перед использованием аналогичного хранилища напрямую нет, кроме разве что совместимости с какими-то другими продуктами, поддерживающими протокол LDAP.

      • Andrey Bloschetsov

        Что такое LDAP — я в курсе, где и как хранятся данные — тоже. Но речь не об этом. Исходя из документации, LDAP-каталог имеет преимущества перед БД, но это теоретические сведения и я их не проверял. Мне же, как раз хотелось бы узнать, если у Вас практический опыт использования каталогов под высокие нагрузки, т.е. будет ли на практике выигрыш в производительности, сталкивались ли Вы с какими нибудь проблемами, затыками?

        • http://www.insight-it.ru Ivan Blinkov

          Я тоже не использовал LDAP для чего-то большего, чем просто организация SSO для команды проекта с разграничением прав.

          О прецедентах использования в крупных проектах для пользователей тоже не слышал.Если поделитесь ссылкой на описание теоретических преимуществ LDAP перед прямым использованием СУБД — буду благодарен.

          • Andrey Bloschetsov

            Хотел тест написать, да вот сначала решил поискать практиков по работе с ldap-каталогами.

  • Highload

    Вы (ваш выбор) рекомендуете использовать Python, Redis и

    PostgreSQL. Почему такой выбор?

    Появиться статьи в будущем на такие темы.

    1. Создание проекта на Python, Redis и PostgreSQL, личный

    опыт или чужой?

    2. “Вечный вопрос” PostgreSQL vs MySQL сегодня, преимущество

    недостатки?

    3. Python в чем преимущество перед другими решениями?

    4. Redis в чем преимущество перед другими решениями?

    Спасибо за ответы.

    • http://www.insight-it.ru Ivan Blinkov

      1. И личный и чужой :)  

      2. Эта тема по-прежнему пригодна только для «холиваров», каждый выбирает то, что ему больше по душе. Те проекты, которым хорошо подходят реляционные СУБД могут с одинаковым успехом быть реализованы на обоих решениях. После той цепочки поглощений, остановившихся на Oracle, я ни разу не пользовался MySQL для чего-то большего, чем просто БД для CMS вроде того же WordPress'а, но это все предрассудки - на самом деле проект просто замедлился в развитии, а не начал идти назад.

      3.  Python:

      — Минимальный синтаксис — отсутствие бессмысленных скобок и точек с запятой делает код намного более читаемым и позволяет не отвлекаться.

      — Гибкость — отсутствие навязанной парадигмы написания кода позволяет писать его быстро и без каких-либо ограничений.

      — Широкий выбор доступных решений, библиотек и технологий — не могу сказать, что есть много уникальных проектов, но большинство очень качественно продуманы и реализованы; писать велосипеды с нуля практически не приходится.

      — Основной минус в виде GIL не так уж и страшен, если знать о его существовании и вообще по возможности не пользоваться thread'ами (в пользу многих копий приложения на одном сервере).

      Те же плюсы можно найти и в других языках, так что все равно выбор ЯП безотносительно конкретного проекта не несет особого смысла.

      4. Redis:

      — Продвинутая модель данных, транзакции, подписка/публикация сообщений.

      — Высокая производительность из-за размещения данных в памяти (оно же и минус из-за ее ограниченности).

      — Настраиваемое сохранение на диск: можно исользовать и как кэш, и как полноценную СУБД.

      — Примитивная реализация, обратной стороной которой является отсутствие «автоматической» кластеризации — приходится делать самостоятельно. Redis Cluster активно разрабатывается, но еще не готов для повседневного использования.

  • Aleks-domnin

    Кто-нибудь поможет мне? У меня взломали профиль, после восстановления я не могу в него зайти — отклоняет e-mail, а у друзей он висвечивается

  • Pingback: Есть вопросы? | Insight IT