RSS

Комментарии

Порекомендуйте подходящую базу данных?
День добрый.

Хотелось бы получить мнение экспертов по базам данных или кого то, кто уже работал с какими либо базами данных для Big Data.

Дано
Имеется некая аналитическая система которая работает на нескольких сайтах. Она для каждой страницы, для каждого элемента сохраняет некую статистику (к примеру, сколько раз элемент был виден, сколько раз на него кликнули и т.д., но в целом это не так важно). Все данные аггрегируются в памяти, а затем раз в сутки скидываются в табличку в БД. Затем аналитики могут генерировать отчет за определенный период для определенного сайта + определенной страницы + определенного сегмента. Либо за определенный период для определенного сайта + определенной страницы + отдельного элемента.

Структура таблицы примерно такая:
1. ID сайта
2. ID страницы
3. ID елемента
4. Дата (день)
5. ID сегмента пользователя (все пользователи поделены на некое количество разных сегментов)
6+. Все остальные поля с данными

На данный момент мы используем Amazon Aurora (MySQL 5.7) с движком InnoDB
Поля с 1-5 это первичный ключ.
Ежедневно в таблицу записывается порядка 80М строчек (но это не конечная цель, в будущем возможна запись и намного большего количества)
Запись оптимизированна и происходит блоками по 1000 строчек в каждом INSERT запросе.

Проблемы текущего подхода
1. Когда таблица пустая, то запись такого количества данных занимает несколько часов, но уже через месяц, из-за увеличения индекса, скорость падает до примерно 12 часов. Т.е. если данных будет в 2 раза больше, то уже не получится вложиться в 24 часовое окно, когда еще не закончилась запись предыдущего дня, а надо уже писать следующий.
2. Скорость генерации отчет оставляет желать лучшего. Для страницы с большим количеством элементов, генерация репорта за месяц может занимать 2-3 минуты, это слишком долго.
3. Иногда нужно удалить данные для определенного сайта, изза огромного количества данных такая процедура блокирует не только саму таблицу, но и всю БД, в которой еще много других таблиц к которым постоянно идет обращение чтение/запись. Пытались решить данную проблему партицированием, но это не особо помогло.

Какие будут предложения?
Serverless — это очень урезанный docker контейнер со своим API и временем жизни до 5 минут. При этом 1 контейнер обслуживает 1 запрос. В течении 5 минут после исполнения контейнер остается «горячим», т.е. содержит все данные после прошлого исполнения. Соответственно, если у вас память течет, то под нагрузкой память освобождаться не будет, т.к. контейнеры переиспользуются.

Кроме того, если вы хотите обслуживать внешние запросы, то нужно еще использовать прокладку в виде api gateway (за это тоже нужно платить).

Мороки с настройками тоже свои есть. Мониторить лямбды тоже задача со своими нюансами. Если у вас просто сайт/api и более-менее регулярная загрузка есть, то я бы serverless не советовал. Elastic beanstalk на самом деле удобнее и практичнее. А вот для задач вроде selenium тестирования, когда нужно 1000 тестов параллельно запустить и потом до следующего билда вам мощности не нужны — serverless это очень хорошо.
Начну с того, что если вы таки активный разработчик и не очень можете понять этот принцип, возможно он вам просто не нужен. И это не значит что вы плохой разработчик, просто не пересекались с таким видом проблем.
Что касается serverless, название больше отражает не факт отсутствия сервера и работы с ним как таковым, а скорее еще меньше возни с настройкой и поддержкой серверного окружения (даже меньше чем с докером после того как все настроено и поднято). Те это следующие шаг после условных микросервисов.
Его часто удобнее называть функция как услуга, так как де факто часто реализуется запуск именно функции по запросу.
Если кратко описать для чего это нужно, то представим себе что у нас есть микросервис у которого затраты на содержания его постоянного аптайма как то слишком велики относительно времени работы/потребления ресурсов в живую. Да и в целом сервис выходит как то слишком микро даже для микросервиса.
Вот тут мы и придумываем такую штуку, которая будет ОЧЕНЬ быстро(относительно старта минимальной виртуалки/образа и чего другого) запускаться, быстро делает свою маленькую работу и выключается.
Из ключевых особенностей отмечу что функции должно быть в целом пофиг на своего состояние, она не знает изначально о предыдущем запуске и тп(те быть stateless). Все что нужно приходит в запросе.
Ври значит если у вас есть задача, которая удовлетворяет этим условиям, можно использовать этот удобный сервис и для масштабируемости, и для экономии и для кучи других фич.
Примеры:
ресайз изображений.
Генератор статистических сайтов(через админку производим обновление статистических файлов, это бывает не часто).
Чат боты
Разные спец информеры с определенной логикой.
И тд и тп, что хорошо ложится в определенную относительно простую функцию с простым входом данных(или без) и простым результатом работы.
В целом это решение не панацея, более того нужно четко понимать насколько выгодно/невыгодно переделывать на серверлесс платформы свою функцию, ведь мы точно жертвуем той же производительностью(помним что сервис не висит и не ждет нас постоянно, а пусть и очень быстро, но запускается), понижается прозрачность исполнения и усложняется отладка и прочее.
Но в любом случае, достаточно часто плюсы перебивают минусы, популярность у этого принципа есть. люди активно пользуются, так что много шишок уже набито, в целом зрелая штука.
А и да, насчет конкретного вашего вопроса.
PHP AWS Lambda нативно не поддерживает, все через костыли, впрочем с почти вменяемой производительностью.
И так как все таки AWS Lambda все же ближе к самому популярному нынче принципу serverless — функция как сервис, я не уверен что это правильная идея будет запускать атм Ларавел.
Те мы имеем минусы: отсутствие нативной поддержки PHP и такие заточенность под что-то простое, в итоге… ну не знаю.
Я думаю плюшки serverless в виде нет мороки с настройкой сервера/облака можно решить многими другими сервисами. Впрочем может быть это будет не так выгодно в вашем случае, нужно исходить и рассчитывать по вашему сценарию работы вашего приложения. А потом решать, что лучше подходит.
В чем суть serverless подхода?
В общем недавно Lambda выкатила поддержку PHP, что довольно радостно.
Но у меня возникли некоторые вопросы по архитектуре проектов с ее использованием.

В контенксте Lambda+PHP я вижу следующие варианты использования:
1. Реализация микросервисной архитектуры ( где каждый микросервис выступает функцией)
2. Реализация монолитной архитектуры ( например закинуть монолитный Laravel как одну функцию )

На сколько этот подход оптимальный/верный/логичный в контексте serverless и AWS Lambda в часности?
1) data-only containers
2) решите задачу подъема самого сервера с запущенным Docker, в контейнерах задаете политику всегда перезапускаться — они вместе с самим Docker запустятся
3) в идеале по контейнеру на процесс либо логическую часть, к примеру MariaDB это один, Python сервер это второй и так далее
4) внимательно изучать внутренности, кроме официальных выбирать только те, которые имеют автоматические билды с отрытым Dockerfile и поддерживаются актуальными, иногда придется делать свои
5) ответ тот же что и 1) + резервное копирование/восстановление из томов
6) не встраивайте чувствительные данные в образы и не попадут

В качестве неплохого примера можете посмотреть мою разработку (правда, ориентирована на PHP, но суть та же, посмотрите как устроено
Вы читали кучу мануалов, но упустили самое главное — официальная документация. Как так? Там как раз и говорится как делать и почему. На вопросы уже поотвечали, но пройдусь ещё раз, раз столько времени на чтение ответов потратил :>
1) docs.docker.com/engine/userguide/dockervolumes/
2) docs.docker.com/engine/articles/host_integ…
3) Ответ простой — как хотите. Как лучше знаете только вы, звучит банально, но это так. Хотите хоть всё в один контейнер запихните, это ваше дело. Хотя рекомендуют 1 компонент на 1 контейнер. В этом есть своя логика — хочется обновить только mysql — обновляете этот контейнер и не думаете, поломался ли у вас uwsgi или nginx или ещё чего.
4) Напишите свой первый Dockerfile, станет куда яснее как выбирать. А пока доверяйте только официальным образам.
5) git? Этот вопрос — следствие непонимания вопроса 1)
6) Уже ответили. Самое простое, если не понимаете — не используйте dockerhub вообще. Или начните понимать. Или платите за приватные репозитории, чтобы не думать об этом.
Уважаемые девопсы и системные администраторы, нужна ваша помощь в понимании как работает и как настраивать Docker.

Например, моя ситуация: VDS c Debian, нужно поставить внутри MySQL(MariaDB), Python/Django, Nginx, Memcached, Sphinx Search.

Задачи, которую я хочу решить Докером:

— разграничения по ресурсам некоторых особо прожорливых компонентов (швыряю булыжник в окно MySQL)
— возможность немного поэксперементировать с версиями и настройками компонентов
— если что-то не устроит на хостинге — взял свои контейнеры и пошел на другой

За последние дни я прочитал кучу мануалов и объяснений зачем, и как работает докер, кучу примеров по разработке приложений, но вот моего юзкейса в чистом виде, решения моих задач я не нашел — только намеки, полунамеки и скупые строчки, что да, вот так вот сделать можно, но ничего подробного, исчерпывающего для понимания и уж тем более никаких инструкций такого плана: отсюда бери — туда клади, тут запускай эту команду, потому что…

Основные вопросы, которые у меня остались:
1) т/к контейнеры стейтлес, а мне нужно все же хранить и создавать данные, как создавать, записывать и хранить изменения?
2) как автоматически стартовать контейнеры с изменениями, если какой-то пьяный дебил перерубил лопатой провод из ДЦ и все потухло? Т/е как стейтлес контейнеры превратить в стейтфул простыми способами. Т/е сервер падает, поднимается и все работает с того места где он упал.
3) Как лучше разбить на контейнеры мою обвязку сервера?
4) Как выбирать необходимые контейнеры приложений на Докерхабе?
5) Как и где хранить данные (например проекты Django), чтобы их не потерять, но вместе с тем удобно мигрировать на другой хост в случае чего
6) Из-за недопонинимания как все работает: как (и возможно ли вообще такое) не допустить утечки каких-либо чувствительных данных в докерхаб вместе с образом какого-нибудь моего контейнера?
Звучит как обычный таск-трекер. Если таски правильно сформулированы и оформлены — то все там можно будет найти.

1. Формировать задачи в трекере, например gitlab
2. Использовать релизы
3. С выходом релиза фиксировать задачи/фикс багов, релиза в CHANGELOG.md
Спасибо за интересные статьи, хотел спросить как вести базу знаний всех обновлений, исправлений и изменений, вносимых в проект?

Есть проект, в нем есть разные механизмы. Я хочу вести какую-нибудь базу знаний, в которую буду делать записи обо всех нововведениях, вносимых в проект. Главное: нужна какая-нибудь система «тегов», чтобы можно было для записи об обновлении указать в «теге» конкретный механизм, который это обновление затрагивает. И в будущем, если мне нужно будет просмотреть все обновления, связанные с каким-то конкретным механизмом, я бы искал по этим «тегам».

Наверняка есть какой-то термин для того, что я описал. И наверняка существуют сервисы, созданные для этого.

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

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

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

Чтобы избежать излишнего расхода бюджета для таких стратегий рекомендуем использовать модель атрибуции «Последний значимый переход». Это поможет расходовать бюджет Директа рациональнее и правильно подбирать каналы для взаимодействия с целевой аудиторией.
Поиск Яндекса на основе микроразметки формирует специальные сниппеты для следующих объектов:
— товары;
— программное обеспечение, игры;
— рецепты;
— сериалы, кино;
— вопросы и ответы для мобильной выдачи;
— рефераты, научные работы;
— организация;
— изображения;
— видеозаписи.

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

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

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

Разметка schema, которую мы обсуждаем, никак не связана с добавлением контента в социальные сети.

Микроразметка — это теги и атрибуты HTML-кода, а также объекты в скриптах, которые описывают виды информации. Они помогают роботам поисковых сервисов и социальным сетям понять, о чем сайт.

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

Существует несколько стандартов микроразметки. Яндекс предпочитает формат Schema.org, использует JSON-LD и Open Graph для отдельных сервисов. Google рекомендует JSON-LD, берет информацию из Schema.org. Репосты в социальные сети или сообщения выглядят понятнее при наличии на сайте Open Graph.

Микроразметка не влияет напрямую на позицию сайта в выдаче. Однако расширенный сниппет привлекает больше посетителей, улучшает кликабельность и повышает поисковый трафик. Это положительно повлияет на оценку поведенческих факторов и ранжирование. Поэтому исправление микроразметки входят в обязательные работы по SEO.
Поисковики то не требуют, но по факту микро-разметка нужна сайту для продвижения в соц.сетя, как минимум
Вкратце если. Микроразметка сейчас скорее улучшает сниппет и вид в выдаче, но не является факторов продвижения. Также стоит учесть что для новостей, товаров и других материалов для каждого своя схема т.е. настройки у каждого сайта индивидуальны то есть то что Вы увидите у другого не означает что будет у Вас т.к. разный тип контента и разные данные которые нужно выводить.

Однако schema.org и Open graph удобно применять например для товаров — показана будет цена, наличие товара, рейтинг и оценка товара, для рецептов, для объявлений, но каждый требует своей схемы и надо каждую подключать к типу контента, чем больше подключений и данных нужно выводить тем сложнее внедрение.

При этом совместить требования Яндекса и Гугла не получится универсально. Существует более 500 видов разметки на различные виды материалов. Поисковики поддерживают только немногое из этого и при этом каждый по-своему требует разные данные.

Отсутствие микроразметки не критично и сейчас поисковики это направление не акцентируют т.к. идут в сторону искусственного интеллекта. Думаю столкнувшись с разнообразием выдуманных видов и свойств, они решили остановиться на основных и не более.
Для понимания хотелось бы узнать, как работает schema.org и Open graph в чем и какая ее главная польза? Что дает сайту? Критично ли что на сайте нет микроразметки?
Наша команда создает маркетплейс нового поколения по бизнес модели D2C, для продажи медицинской продукции, где российские и зарубежные производители медицинских товаров могут продавать свой продукт конечному пользователю, без посредников (дистрибьюторов и дилеров).

У нас было несколько сценариев создания маркетплейса:
— набрать свою команду программистов и пойти во все тяжкие
— купить интернет-магазин с намеком на маркетплейс
— купить DST Маркетплейс для маркетплейсов

Выбор пал на решение DST Маркетплейс для маркетплейсов Плюс. На сегодня мы всем довольны, ну почти всем. Для быстрого старта и проверки вашей идеи — это лучшее решение, если вам действительно нужен маркетплейс.
Наша команда создает маркетплейс нового поколения по бизнес модели D2C, для продажи медицинской продукции, где российские и зарубежные производители медицинских товаров могут продавать свой продукт конечному пользователю, без посредников (дистрибьюторов и дилеров).

У нас было несколько сценариев создания маркетплейса:
— набрать свою команду программистов и пойти во все тяжкие
— купить интернет-магазин с намеком на маркетплейс
— купить DST Маркетплейс для маркетплейсов

Выбор пал на решение DST Маркетплейс для маркетплейсов Плюс. На сегодня мы всем довольны, ну почти всем. Для быстрого старта и проверки вашей идеи — это лучшее решение, если вам действительно нужен маркетплейс.

Заявка на услуги DST

Наш специалист свяжется с вами, обсудит оптимальную стратегию сотрудничества,
поможет сформировать бизнес требования и рассчитает стоимость услуг.

Адрес

Ижевск, ул. Воткинское шоссе 170 Е.
Региональный оператор Сколково. Технопарк Нобель

8 495 1985800
Заказать звонок

Режим работы: Пн-Пт 10:00-19:00

info@dstglobal.ru

Задать вопрос по почте

Укажите ваше имя
Укажите ваше email
Укажите ваше телефон