Pull to refresh
0

InvoiceMall – SaaS сервис по выставлению счетов для студий и фрилансеров

Reading time 5 min
Views 9.9K
invoicemallЗдравствуйте! Меня зовут Игнат. Я сотрудник компании КлаудМилл, разработавшей сервис управления взаимодействия с клиентами InvoiceMall. Эта статья – первая в цикле материалов, которые будут рассказывать о нем. В данной статье я затрону вопросы технической части реализации проекта, расскажу об используемых технологиях и процессе разработки. Следующий материал будет посвящен использованию сервиса с инвайт ключами.

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

Базовый функционал состоял из сервиса выставления счетов и базы клиентов. В результате кропотливой работы над проектом появились следующие дополнительные функции:
  • управление клиентами;
  • управление проектами;
  • управление счетами (различные статусы и типы счетов);
  • управление расходами;
  • система тикетов;
  • архив документов;
  • статистика;
  • возможность принимать оплату на внутренний счет в системе через различные платежные инструменты.
Мы занимаемся разработкой еще нескольких дополнительных разделов, которые сделают наш сервис полноценной CRM системой. Кроме того мы планируем введение социальных сервисов и мульти-язычного функционала. Все вышеперечисленные функции будут подключаться как модули, в зависимости от предпочтений наших клиентов. Таким образом, мы сохраним простоту сервиса для тех из них, кто хочет лишь создавать счета в нашем SaaS проекте.

Другие SaaS сервисы в работе.

Нас всегда интересовало, как работают другие команды, поэтому немного расскажем и про себя. Изначально мы использовали BaseCamp, но по определенным причинам вскоре отказались от него. После длительного процесса выбора из различных project management / collaboration сервисов мы перешли на следующие:
  • dropbox.com — Файловое хранилище и бекапы;
  • beanstalkapp.com – GIT & SVN репозитории;
  • lighthouseapp.com – Тикет система.
Железо и Хостинг

Уже года два мы являемся клиентами The Planet. На данный момент мы арендуем три сервера:
  • 2x Intel Xeon QC 2.0GHz, FreeBSD 8.0, MySQL 5.1.50, не доступен из вне, 12GB оперативной памяти;
  • 2x Intel Xeon QC 2.0GHz, FreeBSD 8.0, memcached / MongoDB, не доступен из вне, 12GB оперативной памяти;
  • 2x Intel Xeon QC 2.0GHz, FreeBSD 7.2, nginx 0.8.48, PHP 5.3.3 fastcgi (FPM).
Этого вполне достаточно для осуществления хостинга наших клиентов и для функционирования нашего проекта. Мы изначально отказались от Облака по ряду причин:
  • во-первых, это ужасный SLA Amazon`a;
  • во-вторых, цены при использовании подобных ресурсов будут не намного ниже.
Однако мы используем S3 & CloudFront (CDN) для хранения и распределения контента. Сейчас мы настраиваем инфраструктуру на Hetzner, для переноса InvoiceMall на площадку в Германии. Это снизит задержку с 220ms до 70-80ms. Также мы рассматриваем варианты использования MDNS (Zerigo), для еще более быстрого отклика.

Безопасность

Мы уделили много внимания безопасности проекта. Для этого был переработан фреймворк. Теперь все входящие данные проходят предварительную фильтрацию и очистку, что позволяет избегать возможных ошибок разработчиков. Кроме этого, все данные, которые попадают в SQL запросы также проходят очистку. Следующим нашим шагом будет подключение CSRF защиты в формы.

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

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

Софт

Как уже стало понятно, сервис написан на PHP. Мы используем собственный фреймворк, базой для которого послужил Kohana 3.0. Он был сильно переписан. Запуститься он сможет только на PHP > 5.3, ему обязательно нужен memcached и mysqli. Мы так же отказались от Kohana`вской модели View, подключив шаблонизатор H2O, который в свою очередь подвергся сильной переписке. Twig отпал, проиграв в производительности H2O. Был исключен и ORM, а вместе с ним переписаны сессии и авторизация. Исключение ORM — вынужденная мера, т.к. все запросы проходят профилирование и оптимизируются.

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

В результате мы достигли максимального времени генерации страницы в 0.007 секунд и затраты памяти в 800кб при использовании APC и многоуровневом кешировании (тесты проходили на продакшн сервисе).

При развертывании новой версии запускается скрипт, объединяющий фреймворк в один файл. Логирование и очереди идут в MongoDB, что позволяет нам спокойно масштабировать проект. На данный момент мы не планируем переходить на NoSQL.

Пара слов об архитектуре

После нашего решения сделать продукт публичным и анализа возможностей конкурентов, мы начали проектирование сервиса для сотен тысяч пользователей. Были заложены различные поля, виды инвойсов, predefined установки и многое другое в зависимости от выбранной страны. Из шаблонов и скриптов был убран весь текст и вынесен в языковые файлы, которые всегда доступны из кеша. Таким образом, единственное, что требуется для добавления нового языка – это добавить его языковые файлы, система подключит его сама.

Фичи

авторизация на invoicemall
Авторизация у нас возможна через Yahoo, Яндекс, Google и Google Apps. В скором времени мы подключим FaceBook. Мы не используем OpenID (логика работы немного другая). Авторизация произойдет только в том случае, если Вы уже зарегистрированы с этим email.

авторизация на invoicemallВ данный момент реализован импорт контактов через Google AuthSub. Нужно лишь нажать на кнопку, подтвердить разрешение на сайте и выбрать тех, кого нужно добавить.

Оба класса (OpenID, oAuth) у нас свои. Одно подключение Janrain добавило практически 0.3 с. к выполнению и увеличило память на 1мб. Заниматься рефакторингом было бессмысленно, поэтому для каждого сервиса был написан свой враппер. Базой класса взяли OpenID из ZF.

HTML / JS

Фреймворк JS — всем известный jQuery, на период беты мы не оптимизируем и не сжимаем CSS. В дальнейшем будет написан скрипт, который зальет на CloudFront сразу как исходник, так и gzip версию, предварительно прошедшие оптимизацию.

В проекте реализована частичная поддержка ИЕ6. К примеру, в нем нет скругленных углов, но ничего не плывет и скрипты работают как нужно. Мы так же оптимизировали javascript, чтобы загрузка и все действия с DOM происходили без задержек на всех браузерах. В дальнейшем мы планируем полный переход на HTML5 и отказ от поддержки IE6.

API

В данный момент мы работаем над API. Каждая функция на сайте будет доступна через API. Это будет простой и легкий способ интегрироваться. К примеру, использование нашего сервиса в работе Вашего магазина позволит выставлять красивые счета, вести удобную статистику, делать маркетинговую рассылку по клиентам и принимать оплату через различные мерчанты. Мы постараемся ограничить использование API лишь Вашей фантазией.

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

С уважением, Команда компании КлаудМилл.
Tags:
Hubs:
+22
Comments 53
Comments Comments 53

Articles

Information

Website
www.cloudmill.ru
Registered
Founded
Employees
11–30 employees
Location
Россия