Как стать автором
Обновить

Комментарии 55

Начну с конца:
1) Amazon SES просто зарекомендовал себя как стабильный поставщик услуг. Мы укладываемся в бесплатные лимиты в месяц.

2) Так уж повелось, что асинхронность я всегда поручаю или node или go.
Не люблю с этими вещами связываться в php.
В go вообще очень просто сделать демона, упаковать в 8mb контейнер и пульнуть в прод.

3) Очередь сама по себе вещь нужная.
Сегодня с рассыльщиком работает только бэк. А завтра у вас 10 микросервисов (например платежи вы вынесли). Каждому из которых надо отсылать письма, или СМСки.
Очередь в данном случае универсальный хаб

А если вам потребуется отсылать еще и СМС и пуш уведомления?
В данном случае в NotificationManager добавляются 2 фабричных метода и все.
И делаются 2 микросервиса, или в существующий добавляются 2 метода и все просто.

В случае с symfony/mailer прийдется думать, как же отсылать смс и т.п.

P.S. В данной связке вы сможете всегда поштучно изменить любой элемент.
Будь то Nats заменить на Rabbit или что еще.
Эта связка поднимается также быстро как и ваше решение. Только на старте уже гибкое, что удобно для стартапов.
А если вам потребуется отсылать еще и СМС и пуш уведомления?

То можно взять symfony/notifier

К сожалению не пробовал на практике эти компоненты.
И симфони 5ый тоже.
Не могу сказать о их производительности.
Но обязательно попробую для других небольших стартапчиков =)

На практике пробовал то, что описал выше. И всё устраивает.
Go по своей скорости и в целом принцип микросервисной архитектуры.

Да и как я понимаю, в том компоненте не поддержан абсолютно любой СМС шлюз?
Да и как я понимаю, в том компоненте не поддержан абсолютно любой СМС шлюз?

Они легко добавляются (надо имплементировать соответствующий интерфейс)
Пока компонент эксперементальный, но, думаю, со временем обрастет сторонними транспортами

Тогда не совсем понимаю зачем эти действия.
Я вам предложил купить УАЗик, чтобы лазить в грязь и поле.
На первое время пока на гелик не накопили.
Если что — его можно продать потом таким же фанатикам.
Вы мне предлагаете купить бентли, и надеть на него сначала подвеску повыше, потом резину, потом задний мост и т.п. Потом вы бросите его, уйдете из конторы. Придет другой разработчик, будет на это смотреть и диву даваться.

В моем решении мы имеем
1) простую очередь (замечу, что ее можно использовать не только для рассылок)
2) изолированный микросервис для рассылок (легковесный, 8мб в докере)
3) используем go либу для амазона, и пишем GET/POST запрос для отправки СМС куда душе угодно

У вас же 2 библиотеки минимум + та же самая очередь потребуется (для асинхронной рассылки) + также надо имплементацию писать.

А если завтра надо 500.000 писем отсылать?
И 50.000 смс, и полтора миллиона пушей?
При этом у вас еще есть лимиты на отсылку по аккаунту в минуту и день. И в дневной вы пока не убираетесь.

Тогда вы чуть правите микросервис — добавляете рейт лимитер (стандартный пакет в go вроде есть) и поддерживаете еще 1 аккаунт и равномерно рассылаете например с 2х.
А PHP часть при этом неизменна. Да и если мы достигнем лимитов — очередь не теряет данные.

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

Решение из коробки это классно, но только если вы на 100% уверены что не придется его масштабировать. Как например HWIOAuthBundle. Есть он и есть. Ничего с ним делать не надо

Во-первых, вы выбрали это решение потому что у вас уже были наработки. Думаю большинство разработчиков поступили бы так же и были бы правы.


В случае, если таких наработок нет, я и предложил свой вариант.


В идеальном случае будет что-то вроде:


composer req symfony/messenger symfony/mailer symfony/notifier
composer req symfony/*-mailer symfony/*-notifier

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


Если нужного транспорта нет, то да, придется его реализовать (как, впрочем, и в вашем случае), что в общем-то тривиально (e.g. symfony/free-mobile-notifier)


1) простую очередь (замечу, что ее можно использовать не только для рассылок)
2) изолированный микросервис для рассылок (легковесный, 8мб в докере)
3) используем go либу для амазона, и пишем GET/POST запрос для отправки СМС куда душе угодно
У вас же 2 библиотеки минимум + та же самая очередь потребуется (для асинхронной рассылки) + также надо имплементацию писать.

Плюс-минус одинаково, разве нет? В моем варианте используются абстракции в рамках php, а в вашем — конкретные библиотеки для конкретных решений, разнесенные по разным языкам.


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

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


Решение из коробки это классно, но только если вы на 100% уверены что не придется его масштабировать.

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

Я соглашусь, что оба варианта красивые =)
Просто вне этого стартапа, на основном месте работы нагрузки выше, поэтому и активно его (свое решение) пропагандирую :)

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

Подскажите, какой используете вы?
Добрый день. cloudpayments
Сначала принимали рубли, после согласования терминала сразу переключили на евро.
В Код сразу заложили возможность указания валюты лагеря, и валюту принятия. Конвертировали в реал тайме по ЦБ
А при поиске сервера стримминга рассматривали ли Flussonic Media Server или Red5?
Flussonic Media Server или Red5 не рассматривали.

Мы стримили не сами, а через CDN. У них большие мощности, 1 сервер может отдавать контент на аудиторию до 10.000 человек при среднем разрешении.
Стоит это все от 1500руб.\ТБ по России и до 4500руб.\ТБ по миру.
Что за контора?

Cdnnow

Спасибо за рассказ. А можно узнать во сколько обходится пользователь? Сколько будет стоить амазон когда лимиты закончатся? Стримят я так понимаю тоже только платно? Не покидает ощущение какого то подвоха… Не ужели танцы такое прибыльное занятие в кризис?

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


Прибыльное потому что есть рынок и маркетолог с аудиторией

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

Лично мне совмещать проекты на PHP / Go не очень понравилось, поэтому появился Comet, который гораздо удобнее и зачастую быстрее чем Go из коробки: github.com/gotzmann/comet

Вместо Sonata Admin сейчас предпочитаю использовать EasyAdmin: github.com/EasyCorp/EasyAdminBundle

По поводу рассылок — есть мнение, что современные мощности позволяют эффективно делать большие рассылки даже без очередей :) Ну по крайней мере 10К сообщений.
Смысл очереди не в увеличении мощности. Смысл очереди — не ждать ответа SMTP сервера при отправке письма, повторить отправку если сервер не смог письмо принять. Какая бы мощность не была мы всегда будем упираться в пределы и ограничение TCP. Да, это доли секунд, но современный пользователь не хочешь ждать.
Добрый вечер. Спасибо за ответ =)
Позволю дополнить от себя.
Можно заменить «не ждать ответа SMTP сервера» на «не ждать ответа от стороннего сервиса рассылок».

В общем случае там может быть что угодно, smtp, amazon api, и т.п.

«современный пользователь не хочешь ждать» — в точку! =)
на этом и акцент
p.s.
ну и этот «сторонний сервис» может элементарно отвалиться.
тогда очередь будет хранить сообщения, а в момент перезапуска сервиса — события выполнятся (письма уйдут получателям)
Добрый вечер. Спасибо за отзыв. Comet не пробовал, EasyAdminBundle тоже.
Глянув одним глазком EasyAdminBundle, думаю надо пробовать в следующем проекте =)
Красивый вроде как)

По поводу Go — мне на нем очень нравится писать маленькие микросервисы. Но на самом деле каждому свое. И фломастеры на вкус все разные =)
Но у меня уже есть набор готовых типа sms, email, webhook, e.t.c.
Которые я могу применять в различных новых проектах.
(2 недели как раз отсюда, многие решения модульные и просто копируются ;)

По поводу очереди — эта вещь удобна не только в плане рассылок.
Как я и писал — ее очень легко поднять в докере, и также легко отказаться от нее.
Идея методики что я описал в гибкости. Чтобы манипулируя лишь переменными среды настраивать связки. Будь то PHP -> SMTP, или же PHP -> Dummy, или PHP -> RABBIT -> GO -> Amazon

Читал не все, может пропустил… но какая страна? РФ тоже Европа если что

Добрый вечер.
Зрители были со всего мира. Преподаватели делятся уже по странам света.

Мы провели уже 2 лагеря.
В первом были преподаватели из Европы (и как вы верно подметили, РФ тоже Европа, поэтому Российские преподаватели были тоже).
Второй лагерь был собран из преподавателей из США.

По поводу аудитории —
25% Российский трафик, 75% — остальной
Сторонний стриминг делает техническую часть абсолютно неинтересной. Но вот этот вот Илья, который в кризис продал онлайн-мастерклассов на миллион — это же чёртов гений! Что именно за танцы, если не секрет?
К сожалению, танцы моя слабая сторона.
Последний преподаватель был Brian Puspos.
Погуглив его имя в сети, возможно найдете ответ на свой вопрос.

По поводу стриминга — у нас и не было цели свой стриминг делать.
Наша цель была занять танцевальное сообщество, которое «грустило» в карантин =)
НЛО прилетело и опубликовало эту надпись здесь
Добрый вечер.
Судя по негативу вашего сообщения, вы видимо как раз работаете на этом колбасном заводе кодером на пол-ставки, и пилите онлайн-магазин.

Если верить Стивену Бланку, то стартап, это не что иное, как временная структура, существующая для поиска воспроизводимой и масштабируемой бизнес-модели.

Мы как раз ищем такую.
Мы провели 2 лагеря — т.е. модель воспроизводима.
А вот масштабируемость сложно проверить в условиях пандемии.

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

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

Стартап — это не всегда инновации. При создании стартапа бизнесмены пытаются при помощи своего продукта решить проблему людей. Именно это мы и делали в условиях пандемии.
И это у нас отлично получилось, судя по фидбэку от конечных пользователей
НЛО прилетело и опубликовало эту надпись здесь
Перевод деятельности в онлайн дело не малое. И это не колбасу продавать.
Это техника + софт + менеджмент. Если кажется что просто — можете попробовать сами и после этого написать о своих успехах.
Детали, которые я посчитал нужным — я описал в статье.
Кому то они будут полезны. Многое из того, что я описал — я не находил на сторонних ресурсах. Это условный список нюансов, к чему надо быть готовым.
Мы с этого (я и мой партнёр) заработали. Танцоры тоже.
В минус мы не ушли :)

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

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

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

Спасибо!
Добрый день. Пока что было 2 лагеря.

Назвать реальные суммы не могу. На текущий момент затраты составляют 60%.
При дальнейшем масштабировании они снизятся до 25-30% (здесь я имею ввиду затраты на cdn, оплата преподавателей, налоги, комиссии). Снижение идет за счет наличия гибкой системы оплаты во многих расходных статьях.

Как я писал выше — была уже определенная «подогретая» аудитория.
Маркетинг был в соц. сетях. К нему были также подключены преподаватели и информационные партнеры. Условно — продукт проверялся на неком сформированном сообществе.

Около 5% людей оставляют фидбэк после лагеря. Мы его изучаем и видим, что потребность в продукте есть. Потребность основана на том, что многие люди действительно не могут переместиться в Европу на подобные мероприятия.

На текущий момент мы думаем о том, как расширить продукт и его аудиторию.
Буду рад совету в ЛС. Там же могу более предметно ответить на вопросы о $
А вот масштабируемость сложно проверить в условиях пандемии.

Ставлю на то, что дело не в пандемии. А в том, что вы просто завели в сервис аудиторию, которая у вас (у вашего партнёра) уже была. А это можно сделать только один раз. То есть, не масштабируется. Дальше нужны другие методы, к которым вы по факту ещё не приступали. И там всё может оказаться не так гладко и не так дёшево.

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

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

Не хотите об этом разговаривать — ваше право. Но тогда и заголовок нужно сменить на соответствующий.

В любом случае, удачи в вашем начинании! Делать всегда сложнее, чем рассуждать: о)
Добрый день. Спасибо за комментарий =)

По порядку.
У моего партнера была определенная «подогретая» аудитория + какое-то кол-во информационных партнеров. Также информацию выставляли у себя в соц. сетях преподаватели.
Школы у моего партнера находятся в России, а доля РФ трафика составила около 25%.
Учитывая разные погрешности и т.п., можно предполагать что около 70% аудитории не посещали его школы никогда.

После окончания пандемии и карантинов ясное дело, что откроются оффлайн лагеря. Однако стоит принять во внимание тот момент, что далеко не все ученики\танцоры могут позволить себе регулярно ездить в Европу или США или Азию на подобные лагеря. Я не смогу назвать точных цен, но условно онлайн участие будет стоить от 10 до 20% стоимости оффлайн лагеря + расходы на перелет. К тому же, состав преподавателей в онлайне может быть абсолютно любой, в оффлайне тут уже накладываются свои факторы и трудности.

Доброго дня!

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

Спасибо!
Добрый вечер.

Как я писал выше, мой партнер владеет сетью танцевальных школ.
У него есть своя аудитория. Также информацию о лагерях распространяли преподаватели и партнеры проекта.

Мы достигли успеха за счет того, что
1) были потребители (и рынок)
2) была гипотеза, что нужно этой аудитории в карантин
3) появился я, кто смог за 2 недели быстро «окучить» эту аудиторию и сделать MVP

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

Интересно, а какой убыток получился в результате простоя сети танцевальных школ.

Увы, не могу назвать вам цифры
Вероятно огромный. Школам приходится арендовать залы и найти хороший зал за разумные деньги в городе сложно. Нет занятий, нет и денег. А аренда есть. Если при этом еще и преподаватели на ставке (а есть школы которые делают энтузиасты), то имеем еще и минусов в виде ФОТ. Компенсировать эти потери, по крайней мере в РФ, ни кто не будет.
Жаль, что неизвестны точные цифры или хотя бы порядок.
Подозреваю, что этот «удачный стартап» — просто отчаянная попытка немного уменьшить убытки.
Порядок цифр вы сможете найти в РБК, если возьмете фитнес сферу.
Убытки +- сопоставимы.

Ну в любом случае люди делают проекты для того, чтобы заработать. Это логично.
Но в данном кейсе проект сможет существовать и дольше. И после карантина.
Т.к. не у всех людей есть возможность поприсутствовать на оффлайн мероприятии.
Полная аналогия с IT мероприятиями. Там же есть такой формат =)
Спасибо за статью, особенно за часть, в которой рассказали о доставке сообщений. С тех пор, как Mailgun реформировал свой биллинг и убрал лимит в 10к бесплатных писем, Amazon SES кажется более привлекательным, даже если вы шлете небольшое количество сообщений. Спасибо за наводку на Amazon SES, буду пробовать.
Добрый вечер. Спасибо за отзыв.
Да, помню время раньше пользовался ими тоже =)

Но учтите, что вам придется пройти модерацию в Amazon SES
-f flv rtmp://rtmp.cdnhost.abc;


cdn принимает в формате флеш? можно поподробнее про стриминг
Мы поднимали свой RTMP сервер.
Стримили на него.
Зеркалили картину и отправляли по RTMP дальше в CDN.

Если бы не «зеркало», напрямую RTMP слали бы в CDN.
Про флеш увы ничего не могу сказать

в контексте сервера
входной поток мы отправляем сюда — push rtmp://localhost/cdn;

а внутри этого потока уже мы зеркало делаем, и отправляем в cdn
exec ffmpeg -i rtmp://localhost/cdn/$name -vf «hflip» -crf 30 -preset ultrafast -acodec aac -strict experimental -ar 44100 -ac 2 -b:a 128k -vcodec libx264 -x264-params keyint=60:no-scenecut=1 -r 30 -b:v 2000k -f flv rtmp://rtmp.cdnhost.abc;

rtmp.cdnhost.abc — это рыба.
для получения адреса вам стоит завести аккаунт в cdn
а как RTMP поток на клиенте проигрываете?
cdn отдает hls, на клиенте использовали videojs
понял, да, встречал такие решения. а сторона «стриминга», т.е. клиент отдающий поток, она на чем?
общая связка такая
1) у преподавателя стоит larix broadcaster
приложение которое умеет стримить rtmp
2) этот поток идет на наш «рестриминговый» сервер
там мы зеркалим картинку, и отправляем в cdn
видим статистику по входящему потоку
3) cdn отдает нам hls плейлист
4) на клиенте стоит videojs

(что внутри cdn подсказать не могу)
Спасибо

Просто много лет работал в сфере видео-стриминга, потому где-то так и предполагал, но хотелось узнать, вдруг какие новые подходы начали использовать))

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

А можно подробней. Все-таки LexikJWTAuthenticationBundle provides JWT (Json Web Token) authentication for your Symfony API. Про соц. сети в документации ни слова.


Случайно не HWIOAuthBundle имелся в виду?

Подскажите, а зачем нужно два application? Почему нельзя пушить сразу же на cdn через все тот же push?
Добрый день. Нам надо было отзеркалить картинку.
Такое требование было заложено. Это нужно для корректной подачи информации преподавателем.
Приложений, которые отдают отзеркаленную картинку мы не нашли =(
CDN тоже не зеркалит.
Поэтому у нас была маленькая виртуалка с nginx + rtmp для этого.
Если бы этого требования не было — стримили напрямую бы конечно же =)
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации