Как разработать saas приложение
Монолит против микросервисов
Возможно, мне следовало бы поговорить об этом в предыдущей статье, но, поскольку я забыл, я добавляю это здесь.
Монолит в этом контексте означает, что все приложение в одной кодовой базе развернуто как единое целое. Стек микросервисов означает разделение приложения на несколько частей (обычно по функциям), поддержание и развертывание каждой из них по отдельности.
У обоих есть свои плюсы и минусы, но когда дело доходит до небольших компаний, занимающихся разработкой программного обеспечения, я за монолит. Когда вы начинаете, вы хотите, чтобы все прошло гладко и быстро (см. Цели выше). Вы не хотите тратить время на дополнительную работу разработчиков. Оставьте микросервисы крупным предприятиям, где они имеют больше смысла. Статья DHH.
База данных
Подобно дискуссии «монолит против микросервисов», вам нужно выбирать между NoSQL и системой баз данных. Реляционные базы данных требуют определенной схемы для данных, которые вы храните. С другой стороны, базы данных NoSQL могут работать с постоянно меняющейся структурой данных.
В качестве проявления модели, о которой мы говорили в первой части, вы должны использовать реляционную базу данных. Существуют конкретные случаи - например, работа с геопространственными данными - где подход NoSQL имеет больше смысла, но они редки. Для среднего SaaS реляционные базы данных, такие как PostgreSQL или MySQL, являются идеальным выбором. Они надежны, быстры и предсказуемы, поэтому с ними легко работать.
Недостатком является то, что их сложнее и дороже в масштабировании, но давайте будем честными - вы будете рады прийти к тому моменту, когда у вас возникнут эти проблемы.
Существует один общий случай использования NoSQL DB, который используется вместе с реляционным, и это фоновая обработка. Вы не хотите, чтобы уведомления по электронной почте замедлялись и блокировали основное приложение. И это не проблема масштабирования - вы столкнетесь с этой проблемой у вашего первого активного пользователя. Без системы фоновой обработки любое действие, инициирующее уведомление по электронной почте, будет ожидать его отправки. Такие базы данных, как Redis, используются для хранения таких заданий до тех пор, пока сервер не будет готов их обработать.
Развертывание
Подобно другим аспектам индивидуальной разработки SaaS, вы не хотите тратить на секунду больше, чем необходимо на развертывание и управление сервером. Эти вещи не веселые и могут занять вас на несколько дней.
Не усложняйте свою жизнь и начните свой проект на Heroku. Люди всегда говорят мне, что это дорого, но уровень Хобби за 7 долларов в месяц более чем достаточен для питания небольшого SaaS. И когда вы действительно начинаете расти, довольно легко перейти на ваши собственные серверы.
Heroku создаст и развернет ваше приложение с помощью одной команды. Вы можете подключить его к своему репозиторию Github, поэтому каждый раз, когда вы хотите, сборка начинается автоматически.
Отличная альтернатива, которую я обнаружил недавно - это Hatchbox Криса Оливера. По сути, это сервис Heroku, но вы предоставляете свои собственные серверы. Таким образом, нет абсолютно никакой блокировки, и вы получаете полный доступ к вашему серверу, как обычно (Heroku не позволяет этого).
Услуги электронной почты
Для транзакционных электронных писем (сброс пароля, уведомление об ответе, счет-фактура и т.д.) Я настоятельно рекомендую Postmark. Они специализируются на быстрой и надежной доставке транзакционных электронных писем и подключают вас к проверенным шаблонам, поэтому вам не придется возиться с дизайном электронной почты. Они не предлагают бесплатный уровень, но начинаются с 10 долларов в месяц, что довольно дешево для начала.
Для маркетинговых электронных писем, таких как регистрация и ежемесячная рассылка новостей, мне нравится использовать MailerLite. Они предлагают щедрый бесплатный уровень, который включает в себя инструмент автоматизации, так что вы можете легко адаптировать последовательность подключения.
CSS
CSS? Это странная вещь, которую стоит упомянуть вместе со службами развертывания и электронной почты в одной статье . но выслушайте меня: напишите как можно меньше CSS.
Написание CSS занимает много времени, и это очень расстраивает, когда что-то не работает или вам приходится бороться со структурой, чтобы элемент выглядел правильно.
И я не имею в виду оставить ваше приложение без стилей - я не совсем сумасшедший. Первоклассные CSS-фреймворки, такие как Tailwind, позволяют вам оставаться в HTML и стилизовать ваши компоненты с помощью низкоуровневых классов. Это займет несколько часов, но с плагином VS Code IntelliSense, это изменит правила игры.
Когда я попробовал это в первый раз (с Tachyons ), я нашел это непрактичным. О, какая ошибка. Я дал ему шанс снова через несколько месяцев с Tailwind. На этот раз я старался выучить классы (это действительно не так сложно, их очень интуитивно назвали). Увеличение скорости разработки произошло так быстро, я думаю, вам может понадобиться ремень безопасности.
Еще более удивительным является то, что вас не заставляют придерживаться какого-то определенного стиля. Внешний вид вашего приложения полностью зависит от вас.
Если вы хотите узнать больше и стать действительно эффективным, посмотрите отличное видео Сэма Селикоффа.
Резюме
Вот некоторые из советов, которые я хотел бы знать при запуске FeedBear. Я надеюсь, что это поможет вам сэкономить время и сосредоточиться на том, что имеет значение. Как разработчики, нам часто нравится возиться с вещами, чтобы сделать их совершенными и индивидуальными. Но при построении бизнеса лучше всего противостоять этому искушению. Потратьте время на вещи, которые приносят пользу вашим клиентам.
Создание монолита вместо кластера микросервисов облегчит разработку и обслуживание вашего приложения. Не беспокойтесь о масштабировании слишком рано. Когда это произойдет, у вас будут ресурсы, чтобы делать то, что нужно.
То же самое относится и к выбору базы данных. Реляционная база данных быстра и надежна. Работать с фиксированной схемой легко. Используйте простой NoSQL (Redis) для запланированных заданий.
Разверните свое приложение с помощью Heroku или Hatchbox, чтобы вам не пришлось настраивать сервер. Это еще одна вещь, о которой стоит беспокоиться.
И как вишня на вершине - напишите как можно меньше CSS с Tailwind. Изучение названий классов по-настоящему быстро требует времени, но награда того стоит, трудно выразить словами.
Если вы застряли на чем-то или думаете, что подходите к проблеме, о которой я упоминал, лучше, пожалуйста, дайте мне знать. Я всегда стараюсь помочь и всегда рад узнать что-то новое.
Перевод Twitter-треда с ценными техническими рекомендациями и инструментами, крайне полезными при создании SaaS приложения.
- Предоставить фантастический пользовательский опыт.
- Чем меньше разработки тем лучше.
- Быстрая разработка.
- Устойчивость системы.
- Простота для одного разработчика.
Первая часть будет для определенного стека технологий, вторая — не зависящая от стека.
Пользователи ожидают красивый и удобный интерфейс, который проще и быстрее построить и поддерживать с помощью React. Сегодня это проверенная и скучная технология, используемая везде — от корпораций до стартапов. Если вам когда-нибудь понадобятся мобильные приложения, можно использовать React Native for Web, чтобы запускать ваш код на всех платформах.
Next.js (React) или Nuxt.js (Vue) предоставляют потрясающие окружение для построения пользовательских интерфейсов. Нет необходимости ругаться на Webpack и кричать на Babel. Команда Chrome активно работает, чтобы сделать то, что уже быстро работает в Next.js, ещё быстрее.
Вы можете построить весь пользовательский интерфейс без написания кода CSS, потому что он предоставляет вам похожие на Lego блоки CSS, которые вы можете скомпоновать в любом виде. @tailwindcss или CSS‑in‑JS комбинация Emotion + Theme‑UI делает использование CSS в вашем приложении очень простым.
GraphQL — это современная замена REST, которая упрощает разработку на всех уровнях и позволяет легко связать все источники данных необходимых для вашего приложения. Он намного лучше чем REST для партнёров и пользователей, поэтому GitHub, Shopify и многие другие стали использовать его вместо REST.
Эти серверы автоматически генерируют каждую CRUD-операцию для ваших данных, обрабатывают миграции и обеспечивают тонкую настройку прав — все это без дополнительного кода! Дни, когда надо было писать каждый REST‑endpoint отдельно, давно уже в прошлом.
Они более надёжные, их легче поддерживать, они лучше масштабируются, чем образы EC2. Также GraphQL-серверы, упомянутые выше, спроектированы для работы с serverless functions, поэтому работа с ними очень проста.
Typescript — это статически типизированный JavaScript, который сейчас активно используется. Его использование равноценно 1000 юнит-тестам. Вы сможете писать код быстрее и увереннее. А автодополнение кода в IDE позволит оставаться в «потоке» без необходимости искать методы или атрибуты.
GraphQL и Typescript позволяют автоматически генерировать код для получения данных. Вы определяете, какие данные вам необходимы, и они генерируют функцию для получения, включая строго типизированные классы для автодополнения и компиляции.
Вам потребуются модели для пользователя, команды и аккаунта. Пользователь может входить в систему. Аккаунт оплачивает счёт. Команда владеет ресурсами. На старте необязательно предоставлять функциональность для команды, но она точно потребуется в будущем.
Вам нужна тестовая среда, максимально идентичная среде эксплуатации — за исключением другой базы данных. Это позволит тестировать изменения в изолированном окружении, не боясь что-то сломать и потерять клиентов.
Пишите тесты: не слишком много, по большей части интеграционныеНастройте тестирование с самого начала. Для каждой крупной фичи напишите хотя бы один интеграционный end-to-end-тест. Добавьте git hook, чтобы запускать тесты при git push и отлавливать проблемы заранее. Для JS используйте Jest для запуска тестов — и Cypress для end-to-end-тестов.
Вам нужно, чтобы каждый коммит в master запускал автотесты и, если они успешны, запускалось автоматическое развертывание в продакшн. Аналогично: настройте ветку git для разработки (dev), с автотестами и автоматическим развертыванием. Таким образом публикация в продакшн будет простым git merge из ветки dev в master
Когда вы используете вебхуки сторонних сервисов, сохраняйте их в собственную таблицу в базе данных и запускайте по событию асинхронно с помощью serverless function. Это минимизирует шанс, что кто-то сможет выполнить успешную DoS-атаку на ваше приложение.
Использование собственной базы данных оставляет возможность для DoS-атаки. Лучшим вариантом будет использование очередей.
Software as a service, или SaaS — один из самых быстро растущих рынков: по прогнозам Gartner в 2022 году отрасль достигнет 144 миллиардов долларов, хотя еще в 2019 году ее годовой оборот не превышал 95 миллиардов долларов. Далее мы расскажем, как выйти на этот рынок, создав собственную SaaS -платформу.
Ваша бизнес-идея
Первым шагом на пути к созданию собственного SaaS-решения является четкое понимание того, что именно вы хотите сделать, т.е. какую проблему и как вы хотите решить с помощью облачных технологий. Обычно это просто упрощение работы с чем-то или перенос программного обеспечения в облако, что освобождает место на жестком диске и дает доступ к продукту в любой точке мира с подключением к сети.
Самый простой пример — Google Docs или Microsoft's Office 365: программное обеспечение для работы с документами, которые раньше нужно было устанавливать на компьютер, перенесли в облако. Еще один простой пример — приложение Trello: реализация в облаке системы управления проектами на базе традиционных kanban-досок.
Более сложные примеры — Shopify, WooCommerce, BigCommerce, Magento, Squarespace и прочие решения для e-Commerce. Они очень сильно упрощают и ускоряют процесс создания онлайн-магазинов, благодаря чему кто угодно может запустить маркетплейс за несколько часов (15 минут, если точно знать, что сделать), потратив всего 200 долларов на подписку и покупку шаблона сайта.
Самые сложные SaaS-решения — это такие проекты, как TradeLens и MediLedger, которые объединяют участников цепочек поставок в одну экосистему с общими базой данных, документооборотом, платежными решениями, системой для отслеживания грузов и автоматизации процессов. Больше об этом в Maersk blockchain use case.
- Перенос в облако в первую очередь был направлен на упрощение процесса (запуска сайта, управления проектами, создания документов) и только потом на реализацию дополнительных возможностей.
- До того как инструмент или услугу перенесли в облако, они уже пользовались большой популярностью у пользователей и/или бизнеса.
- Использовать реализованные SaaS-решение дешевле, нежели традиционный вариант перенесенных в облако инструмента или услуги.
- Каждая успешная бизнес-идея направлена на решение проблем / задач конкретной целевой аудитории.
- У компаний была возможность реализовать их бизнес-идеи посредством современных технологий.
Анализируем конкурентов
Если какие-то конкуренты сумели завоевать рынок, став его лицом, как Amazon, Spotify или Uber, то при запуске своего SaaS будет разумным ориентироваться на такие проекты, но либо сделать ставку на более узкую нишу, либо реализовать все на более высоком уровне. Запустить нишевый SaaS-проект быстрее, дешевле и менее рискованно. Создать улучшенный аналог существующего проекта дольше, дороже и рискованней, но в случае успеха можно получить намного больше прибыли.
- e-Commerce платформы. Большинство сервисов для запуска онлайн-магазинов и других коммерческих сайтов это SaaS, которые позволяют запустить сайт и подключить к нему множество полезных функций: продажи, платежи, аналитика, маркетинг, коммуникация с клиентами и прочее. Здесь лидируют Shopify, Magento, BigCommerce, а также CMS WordPress.
- Коммуникационные платформы. Это различные сервисы, посредством которых пользователи могут общаться между собой и своей командой, делиться файлами, оставлять заметки, проводить совещания и т.п. Такие платформы могут использоваться как в рабочих, так и в развлекательных целях. В этом сегменте SaaS-рынка лидируют Miro, Loop Email, Plivo и Twilio.
- Платформы управления взаимоотношениями с клиентами. CRM-системы используют для организации и оптимизации рабочего процесса, отслеживания продаж, анализа бизнес-показателей и улучшения отношений с клиентами. Самые популярные: Oracle CX, Microsoft Dynamics, Salesforce и Hubspot.
- Автоматизированные платформы управления персоналом. HRMS помогают создавать штатные расписания, отслеживать рабочее время и KPI, делать автоматический расчет заработной платы, планировать собеседования с кандидатами и прочее. Популярный эталон: BambooHR.
- Платформы управления проектами. Такие сервисы, как Zoho, Jira и Trello, помогают организовать работу нескольких людей, команд или компаний над одним общим проектом: отслеживание статуса, назначение задач участникам, контроль времени выполнения, комментарии, хранение данных и прочее.
- Бухгалтерские платформы. Это облачные сервисы, которые помогают управлять финансовыми операциями, налогами, страховыми отчислениями, запасами и прочими бухгалтерскими процессами. Примеры: Xero, Wave.
Выбираем модель монетизации
Разрабатываем дизайн платформы
Дизайн — это самая важная составляющая успеха любого современного приложения, поскольку именно от него зависит пользовательский опыт и, в конечном итоге, рентабельность платформы. При разработке дизайна вашей SaaS-платформы пользуйтесь следующими принципами:Упростите регистрацию. Реализуя процесс регистрации, запрашивайте заранее только самую важную информацию. Во многих случаях адреса электронной почты или телефона будет достаточно. Если ваша ниша требует большей информации, то разделите регистрацию на несколько простых этапов.
Упростите адаптацию. Отсутствие инструкций для адаптации пользователя или плохая реализация данной функции может ввести пользователя в заблуждение или сбить его с толку, из-за чего он может уйти к конкурентам. Чтобы этого не произошло, тщательно продумайте процесс знакомства пользователя с вашим сервисом, как это, например, сделали разработчики корпоративного мессенджера Slack.
Оптимизируйте навигацию. Грамотная реализация информационной архитектуры и навигации поможет пользователю максимально быстро найти то, что ему нужно на вашей платформе. Хорошие примеры данного дизайна можно найти на таких сайтах, как Airnbnb и Hootsuite. Так, на Airnbnb пользователь поэтапно получает информацию по мере уточнения его запроса. Тогда как на Hootsuite пользователю предоставили глобальную боковую навигационную панель, с помощью которой он может понять, где он сейчас находится и как перейти в нужный ему раздел.
Оптимизируйте информационные панели (дашборды). Если ваша SaaS-платформа подразумевает работу с большими массивами разнообразных данных, позаботьтесь о том, чтобы пользователь получал их в максимально наглядном виде, то есть таким образом, чтобы он сразу понимал текущее состояние, что изменилось за последнее время, за какие задачи нужно взяться в первую очередь, какие проблемы решить. Примером здесь могут послужить информационные панели Klipfolio.
Создаем MVP SaaS-решения
Определившись с тем, какой должна быть ваша платформа и какую вы будете использовать модель монетизации, можно приступать к разработке минимально жизнеспособного продукта (MVP). Цель MVP — потратить минимум времени и денег для проверки концепции и того, согласятся ли пользователи платить за него деньги. Создать MVP вы можете самостоятельно или с помощью компании на аутсорсинге.
Для самостоятельного создания небольшого SaaS-решения вам нужны будут продукт-менеджер и два инженера-программиста, которые будут работать над проектом по 40 часов в месяц в течение полугода. В зависимости от страны это будет стоить от 20 тысяч долларов (Восточная Европа) до 100 тысяч долларов (США, Западная Европа). Это бюджет таких проектов, как Qualified и Vested.
Для более сложных проектов лучше нанять компанию-разработчика с опытом разработки SaaS-проектов и пониманием специфики выбранной ниши. Как найти такого партнера, описано в статье: «Как выбрать Компанию-Разработчика». Вот ориентировочная стоимость разработки в зависимости от сложности проекта.
PaaS — самый сложный и интересный сегмент облачных сервисов. Он занимает особое положение между IaaS («инфраструктура как услуга») и SaaS («программное обеспечение как услуга»). Само объяснение того, что такое PaaS и как работают такие сервисы — нетривиальная задача.
Принципы IaaS и SaaS, в целом, просты и понятны. IaaS — это процессоры, оперативная память, хранилища данных, только не физические, а виртуальные, создаваемые в дата-центре поставщика облачных услуг.
С SaaS все еще проще. Так, например, все веб-приложения — почта, мессенджеры, видео/аудио плееры, навигаторы — это и есть SaaS. Работа приложения выполняется на удаленном сервере, а на экране компьютера, смартфона или планшета пользователя отображается ее результат.
Сервисы PaaS работают несколько иначе и носят более комплексный характер. В рамках модели PaaS поставщик дает доступ к облачной среде, в которой можно создавать, тестировать, масштабировать и обновлять собственные приложения. При этом пользователь PaaS-сервисов получает в готовом виде все инструменты, которые нужны для разработки, — операционную систему, промежуточное ПО, базы данных и многое другое.
До появления таких сервисов ИТ-командам приходилось самостоятельно выбирать, закупать, настраивать, интегрировать и обслуживать целый набор продуктов. Это длительная, сложная и дорогая работа. Только после ее завершения разработчики могли заняться непосредственно созданием приложений.
Теперь почти все необходимое можно найти на одной платформе. Специалистам остается только написать код и протестировать новое приложение.
В случае с IaaS пользователь получает доступ только к инфраструктуре — хранилищу, сетям, серверу и другим вычислительным мощностям. Прежде чем приступить к созданию продукта, здесь требуется много подготовительной работы. SaaS — это уже готовое приложение, которое может подойти для решения определенной бизнес-задачи, но… может и не подойти.
Если представить, что компании нужно не разработать приложение, а приготовить новое блюдо, то по модели PaaS он получил бы хорошо оборудованную кухню с полным набором посуды, продуктов и специй. В рамках IaaS ему бы предоставили помещение с холодильником, плитой и духовкой. А в формате SaaS — уже приготовленный ужин.
Таким образом PaaS — это сервис для тех, кто решил «готовить» сам, но не хочет слишком глубоко погружаться в технические детали и тратить время, трудовые и финансовые ресурсы на создание среды разработки.
Что предлагают поставщики услуг
По итогам прошлого года аналитики из Gartner насчитали на мировом рынке PaaS более 360 операторов, которые предлагают свыше 550 разных облачных платформ. Эксперты уверены, что к 2022 году этот сегмент вырастет более чем на треть по отношению к прошлогодним показателям и достигнет $34 млрд.
Российские поставщики PaaS лишь относительно недавно стали предлагать широкий и универсальный ассортимент сервисов. Ранее бизнес-пользователям были доступны в основном нишевые решения для разработчиков.
Сегодня среди российских поставщиков облачных PaaS-услуг самый широкий набор сервисов предлагает платформа SberCloud.Advanced компании SberCloud. Она объединяет 40+ интегрированных между собой IaaS/PaaS сервисов, которые можно использовать как по отдельности, так и объединять в единое решение разработки, развертывания и контроля работы приложений.
Наиболее активно PaaS используют компании с высоким уровнем ИТ-экспертизы, а также бизнес, работающий на высококонкурентных рынках — от ретейла до HR-индустрии и других компаний сферы услуг. По словам экспертов SberCloud, одним из последних трендов в области применения облачных решений стало более широкое использование сервисов для автоматизации развертывания, масштабирования и управления приложениями на основе технологии контейнеризации и микросервисной архитектуры.
Элементы платформы
Из чего состоит готовая программная среда, которую получают пользователи PaaS:
- Операционные системы
- Инструменты для разработки и тестирования (frameworks)
Сюда входят, например, редактор исходного кода, отладчики и компиляторы. Конкретный набор инструментов зависит от платформы.
- Промежуточное программное обеспечение / ПО промежуточного уровня (Middleware)
Конечный пользователь не взаимодействует с таким ПО, но оно необходимо для разработки новых приложений. В последнее время это направление все чаще выделяют в самостоятельный сегмент — Middleware as a Service (MWaaS). В состав сервиса обычно входит сервер приложений и интегрированные функции безопасности.
- Базы данных и инструменты для управления ими
Благодаря этой услуге пользователь получает доступ к базам данных любого типа. Поставщик обеспечивает администрирование и поддержку БД, снимая нагрузку с ИТ-специалистов компании. Эта услуга — одна из самых популярных на рынке. Ее также иногда выделяют в самостоятельный сегмент платформенных сервисов — Data Base as a Service (DBaaS).
Читайте также: