хабраиндекс
50,60

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

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 лишь Вашей фантазией.

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

С уважением, Команда компании КлаудМилл.
+22
27 сентября 2010, 15:11
32
CloudMill 2,5

комментарии (53)

+11
Maxmyd #
В первой статье услышать бы о проекте, а не о том, на чем он написан. ИМХО, разумеется.
0
CloudMill #
Мы обязательно сделаем подробное описание сервиса на следующей недели, а так же раздадим инвайты. Сегодня мы разместили техническое превью для введения в проект.
0
Masterkey #
не-не-не
хочу больше про использование Монго!

кроме того, некто из sourceforge говорил, что они выкинули memcached сервера после того как сравнили быстродействие tg2 + mongoDB на одном сервере, против tg2 + mongoDB на одном и memcached на другом.

а у hetzner сейчас есть сервачки с 24 гб памяти, так что можно поставить два сервака вместо трех, после тестов конечно)
0
nateless #
Мы не любим Питон. Он медленней Java и мы предпочитаем Джаву в некоторых случаях. Google тоже отказался от него. MongoDB используется для логирования в дев интерфейс, где мы мониторим нагрузки и статистику ошибок для дальнейших исправление. Ничего уникального не используется, количество документов редко превышает несколько тысяч. Мы не планируем и никогда не перейдем на хранение данных в MongoDB.

Кроме того мы не Facebook и не Twitter :) Нам не нужна такая скорость, мы и так очень быстро выполняем все запросы. Планировать на данной стадии многоуровневое кеширование с репликацией это просто трата времени.
–1
Masterkey #
эмм, а можно линк на отказ от питона?
+1
nateless #
Посмотрите на google groups
0
VolCh #
Интересно, конечно, но, думаю, большинству проектов не нужно беспокоиться о том, «What happens if the whole planet thinks your new service is awesome». Гуглу и другим компаниям такого масшатаба нужно об этом думать, но не «обычному» стартапу. Ему нужно думать о максимально быстром старте ;) Свято место пусто не бывает.
–2
Count3r #
Извините, но авторизацию через Yahoo, Яндекс, Google и Google Apps и т.д можно было назвать «фича» года три назад, сейчас это можно включать в базовый функционал.
+4
legato_di #
ну вот чего вы понтуетесь?)
+2
Omny #
Да, описание с тестовым аккаунтом это было бы здоровски. Система интересна с позиции фрилансера.
0
CloudMill #
Через неделю мы откроем специальную страничку по генерации инвайтов, хватит всем :)
–1
VolCh #
Простите, а кой смысл в паблик странице по генерации инвайтов? Публик регистрацию не проще сделать? Или это будет квест? ;)
0
CloudMill #
Что бы хватило всем желающим :) Мы отключим ее к концу дня.
+1
DangerT #
Логотип сервиса напоминает логотип одного небезызвестного спортивного бренда :)
0
stek #
да, не напоминает, а просто перевернутая копия :)
0
slimper #
А что с налогами? Побегал по сайту так и не понял…
Или Вы просто, что-то вроде специализированной платежной системы?
0
Omny #
Базовый функционал состоял из сервиса выставления счетов и базы клиентов.

Скорее система управления финансовыми данными и ведения финансового контроля.
0
slimper #
Было бы здорово видеть сервис позволяющий выставлять счета с выбором юридического лица на аккаунт например, допустим — выставляем счет от ИП, платим налог как ИП + процент сервису, выставляем счет как ООО — платим соответственно. И имет ькакие-то документы, что мы работаем официально, платим все налоги и спим спокойно.
Интересно насколько вообще такая схема осуществима, наверное можно столкнуться с юридическими вопросами о том, что выставлять счета могут только оформленные сотрудники организации? Хотя ведь это из организация будет выставлять счет, а не пользователь.
+1
Omny #
Надеюсь CloudMill коснется этого вопроса в следующей статье, описывающей функционал сервиса, а если таких возможностей нет, возможно ребята задумаются над добавлением функционала, если он, конечно интересен. В любом случае видно, что подход основателен, поэтому следить за развитием сервиса, надеюсь, имеет смысл :-)
0
CloudMill #
Мы обязательно рассмотрим все предложения.
0
CloudMill #
При регистрации можно будет выбрать тип аккаунта, если выбрать компанию, то все счета будут иметь фоициальную форму по ГОСТу, к ним можно будет прикрепить печать и подпись, также создать акт. Мы работаем над экпортом данных.
0
doloh #
Долго размышлял, что же выбрать, частное лицо или юридическое при регистрации в сервисе. Мне нужны обе возможности, а не два аккаунта отдельно.
Сайт очень понравился.
0
CloudMill #
У юридического лица появляются дополнительные поля в профайлах, появляется возможность загрузить печать, подпись, указать налоги. Так же дополнительные меню — создание актов, экспорт и импорт.

У фрилансеров упрощенный интерфейс больше нацеленный на визуальное представление, возможность указать контакты в инвойсе, такие как icq, email, gtalk и другие, указать реквизиты кошельков ВМ и Яндекс.

Поясните, зачем Вам оба функционала?
НЛО прилетело и опубликовало эту надпись здесь
0
CloudMill #
Внешний сайт www.invoicemall.ru — без SSL

Регистрация и авторизация на акканте проходит уже с SSL.

Так как графика, скрипты, файлы стилей находятся на CDN, они забираются по протоколу HTTP, без использования шифрования. Поэтому Ваш браузер говорит о том, что соединение частично зашифровано. Не волнуйтесь, все важные данные передаются по SSL.
0
EMoney #
Тот случай, когда взлом аккаунта может повлечь за собой гораздо большие коммерческие потери, чем потеря профиля в социальных медиа (масса вариантов применения такой информации). Особенно учитывая, что большая часть бухгалтеров предприятий, включая главных бухгалтеров, — женщины. Посему — спасибо, но лучше по старинке, бумаги и сейф.
+1
Omny #
Мне кажется наоборот, лучше заняться образованием сотрудников нежели плодить «по старинке бумаги и сейф». Все таки не каменный век, слава богу. Да, и валить все на женщин-бухгалтеров это так не круто :-)
0
CloudMill #
После ввода внутренней валюты, мы усилим безопасность, добавив двухступенчатую авторизацию по смс.

Поймите, никто не застрахован от компрометации данных, мы можем лишь обеспечить безопасность на нашей стороне. Нахождение серверов в германии является дополнительной защитой от правовых неурядиц на территории РФ.
–1
kip #
Парни, а отпозиционируйте себя в одном-двух предложениях от e-kontur.ru и moedelo.org
0
CloudMill #
Мы не являемся онлайн бухгалтерией, и мы с Вами не конкуренты, если хотите об этом знать :) Но в то же самое время можем найти общие точки соприкосновения.

Наша задача была в создании сервиса, который позволит легко и просто управлять клиентами и вести мониторинг финансового состояния по работе с ними, а так же будет неразрывно связан с ведением проектов. Мы даем возможность взаимодействовать с клиентом, а не заниматься бухгалтерией.
+1
yaremko #
День онлайн бухгалтерий на Хабре :-D
0
kip #
Причем, часть из них думает, что они — не бухгалтерия, а CRM ;-)))
+1
youngest #
Выглядит симпатично, дайте инвайт потестить
0
terkin #
Сейчас пишу CRM для себя, так как не нашёл подходящей, может ваша будет подходящей, поделитесь инвайтом
0
maashaa #
Чем Вам не подошёл SugarCRM?
0
terkin #
Слишком массивный, не люблю использовать танк для уничтожения мух :) я фрилансер, мне почти подходит qcrm но вот там не хватает пару функций
0
Zaktus #
Очень интересно! Дайте инвайт, пожалуйста!
0
SpiRi7 #
Спасибо. Предварительно очень понравилось. Насколько я понял из скринов — максимально упрощенный интерфейс с главной возможностью не выводить на странице просмотра счета реквизиты которые не нужны фрилансерам.
0
CloudMill #
Не совсем :) Вы сможете кастомизировать страницу с инвойсом и показывать только те поля которые хотите ( для фрилансеров ), у организаций возможностей кастомизировать инвойс меньше.

0
Romachev #
что-то вы свой проект пиарите пиарите, а бесплатная регистрация только по инвайту, я зашел и в итоге вышел нисчем! упущение!
+1
nateless #
Инвайты раздадут через неделю ;)
0
shadeR #
Тогда ждем с нетерпением :)
0
slitno #
Инвайты в студию млин))
0
ONIKSfly #
Я бы хотел попробовать такую штуку для фриланса. Можно инвайт?
0
TEHEK #
Ух… КлаудМилл будет знать кто, когда, что, кому и почем делал (!) + замечательная возможность импортировать адресную книгу с почтового акка.

Круууто, но нет, спасибо =)

P.S.: там никто не делает SaaS сервис для резервирования номеров в отелях с последующей отправкой личных сообщений о том, какой замечательной была ночь? :)))
0
CloudMill #
InvoiceMall принадлежит не CloudMill`y :) Это отдельное юр. лицо.
0
TEHEK #
Ну ладно, замените КлаудМилл на InvoiceMall в моем комментарии =)
0
realabs #
Хотелось бы попробовать Ваш облачный сервис для фриланс-работы.
Если можно — пришлите инвайт :)
+1
yaremko #
Искрене желаю удачи и правильного позиционирования. Очень сложно зарабатывать в России на одном только инвойсинге хотя бы потому что есть бесплатный бизнеспак, но в купе с CRM и тикетами может что-то и получится.

Было бы интересно посмотреть на UI внутри жаль что нет демо. Буду рад инвайту
0
nightstalker #
Не хотите ли организовать раздачу инвайтов или хотя бы демо доступ?
0
seagor #
Ну так не будет инвайтов? Уже две недели прошло
0
bo883 #
появившиеся в результате брейншторма — просто взбесило, а просто по русски нельзя мозгового штурма.
Желаю удачи, и где демо
0
CloudMill #
Позвольте немного поерничать: если уж и писать мозговой штурм, то явно не «по русски», а по-русски.

Только суть топика совем в другом, мне кажется.

По поводу демо — раздача инвайтов тут: www.invoicemall.ru/magic

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.