37signals больше всего известны благодаря выпуску в свет Ruby on Rails грамотному его использованию для запуска их очень популярных продуктов: Basecamp, Highrise, Backpack и Campfire. RoR как обычно пытаются винить во всех проблемах с производительностью, но 37signals казалось бы справляется с большой нагрузкой, используя вполне разумное количество вычислительных ресурсов.
Источники информации
Этот текст является переводом статьи, автор - Todd Hoff. Извиняюсь за не сильно оригинальный контент (да и, как выяснилось, практически не технической направленности), но на написание своих полноценных текстов у меня последнее время все никак не хватает то креатива, то времени :( .
- Спросите 37signals: цифры?
- Спросите 37signals: как вы работаете с кредитными картами?
- За сценой 37signals: поддержка.
- Спросите 37signals: почему вы перезапустили Highrise?
Платформа
- Ruby on Rails
- Memcached
- Xen
- MySQL
- Amazon S3 для хранения изображений
Статистика
- 30 серверов: от простых однопроцессорных файловых серверов до восьмипроцессорных серверов приложений, в сумме около 100 процессоров и 200 GB оперативной памяти.
- В планах диагональное масштабирование: уменьшение количества серверов до 16, но более производительных - в сумме 92 процессоров и 230 GB RAM.
- Виртуализация средствами Xen для более гибкого управления системой.
- Basecamp (управление проектами):
- 2000000 пользователей с учетными записями
- 13200000 задач
- 9200000 сообщений
- 12200000 комментариев
- 5500000 записей о распределении времени
- Backpack (управление информацией для личного использования и малого бизнеса):
- Около миллиона страниц
- 6800000 задач
- 1500000 записей
- 829000 фотографий
- 370000 файлов
- Общая статистика проектов (на ноябрь 2007 г.):
- 5.9 TB загруженных пользователями данных
- 888 GB загружено (upload)
- 2 TB скачано (download)
Архитектура
- Кэширование средствами memcached уже используется, но они ищут способы более активно его применять. Позволяет достичь впечатляющих результатов в плане производительности.
- Методы для составления URL используются вместо ручного их составления.
- Используются стандартные ActiveRecord запросы, но при необходимости они используют и ручную настройку.
- Иногда они дорабатывают Rails, если сталкиваются с проблемами с производительностью.
- Amazon S3 используется для хранения данных, загруженных пользователями. Разработчики очень довольны результатами.
Работа с кредитными картами
- Ежемесячное выписывание счетов. Это позволяет компаниям, занимающимся кредитными картами, чувствовать себя более комфортно, так как им не придется столкнуться с огромным количеством работы, если ваша фирма вдруг выйдет из бизнеса. Пользователям такой подход также по душе, так как издержки в итоге оказываются относительно невелики, а также не требуется подписание контракта, имеется возможность пользоваться сервисами необходимый промежуток времени и оплачивать именно ту сумму, которую потратили.
- Получение учетной записи продавца услуг. Кто-то определенно должен обрабатывать операции с кредитными картами. Они используют Chase Bank. Воспользуйтесь услугами кого-нибудь, кому вы доверяете, а когда масштаб ваших сделок станет существенным - будет возможность получить более выгодные условия контракта.
- Они используют authorize.net в роли шлюза для процессинга операций с кредитными картами.
- Ежемесячным выписыванием счетов занимается специально написанная для этого проекта система. Она запускается каждую ночь, отправляет счета нужным людям и записывает результаты выполненных операций.
- В случае успеха счет-фактура высылается по электронной почте.
- В случае каких-либо сбоев - пользователю отправляется объяснение причин.
- Если три раза с помощью кредитной карты не удается оплатить счет - учетная запись замораживается до тех пор, пока не будет предоставлен платежеспособный номер кредитной карты.
- Обработка ошибок является критичным моментом, так как проблемы с оплатой возникают достаточно часто.
- Все продукты конвертируются для использования централизованным биллинговым сервисом.
- Необходимо быть совместимыми с PCI DSS (Payment Card Industry Data Security Standard).
- Пользуйтесь услугами шлюзов, это позволит не хранить номера кредитных карт на своем сайте, что сильно упрощает жизнь в плане безопасности. Некоторые из них предоставляют и биллинговые услуги, что позволяет также не заниматься этим самостоятельно.
Поддержка пользователей
- Campfire используется для работы с клиентами. По сути эта система представляет собой групповой веб-чат с расширенными возможностями в виде опциональной защиты паролем, личных сообщений, обмена файлами, предпросмотра изображений, а также коллективного принятия решений.
- Поднимаемые вопросы используются для поиска ошибок в коде, а обновление данных в SVN отображается прямо в процессе общения. Bugtracking система обходится стороной, что казалось бы должно лишь усложнять исправление неполадок, например из-за отсутствия возможности проследить связь между конкретным изменением в коде и вызвавшей его неполадкой.
- Зато служба поддержки может решать проблемы клиентов с помощью общения в чате в реальном времени, с возможностью обмена изображениями и снимками экранов, демонстрирующими неисправность.
- Разработчики также всегда доступны с помощью Campfire для помощи в решении проблем клиентов.
Подводим итоги
- Возьмите пример с Amazon и постройте все внутренние функции в виде сервисов с самого начала. Это позволит более легко использовать их в разных продуктах и прозрачно обновлять предоставляемые возможности.
- Не храните номера кредитных карт внутри своей базы данных - это существенно снижает риски, связанные с безопасностью.
- Разработчики и пользователи должны иметь возможность легко общаться друг с другом публично. Пользователи получают сервис намного более высокого качества, если общаются напрямую с разработчиками, которые решают все проблемы прямо в рамках нормального хода процесса разработки. Это позволяет избежать нескольких излишних промежуточных этапов при обработке заявок о неисправности. Помимо этого разработчикам предоставляется возможность узнать пользовательское мнение об их продукте, что делает дальнейшее развитие проекта более эффективным. Потенциальные клиенты могут убедиться в отзывчивости компании, просто посмотрев на такое общение, что подталкивает их к более охотной регистрации.
- Развивайте свой продукт добавлением новых функций, которые нужны конкретным клиентам, а не тех, которые когда-нибудь может быть кому-нибудь понадобятся.
05 июня 2008 | | Высокие нагрузки