[recovery mode] Как мы обустроили сетевую инфраструктуру
Специализация компании «Эдисон» — разработка софта на заказ. Эти услуги комплексные: не то, чтобы мы сели, написали, отдали и забыли. Это растянутый во времени процесс, и заказчик является его полноправным участником. Мы предоставляем заказчику не просто рабочую силу мозгов наших программистов, но целую структуру разработки ПО как услугу, включающую в себя нашу сетевую инфраструктуру и наши сервисы.
В разработке программного обеспечения мы используем
Систему управления проектами. Выбранная нами система является зрелым продуктом на рынке, обладает всей широтой функциональных возможностей, заточена именно на проекты по разработке программного обеспечения. В то же время она обладает достаточной гибкостью настройки и доработки. К примеру, мы разработали для неё свой плагин для учёта предоплаченных часов.
Система управления проектами — сердце нашего производственного процесса. Посредством неё происходит постановка задач нашими заказчиками для разработчиков, координация командной работы для крупных проектов, учёт предоплаченных часов для проектов с повременной схемой оплаты.
Систему управления исходным кодом. Репозитории исходного кода — это сокровищница нашего производственного процесса. В ней хранится исходный код всех проектов, над которыми мы работали, за исключением тех случаев, когда заказчик желает, чтобы после завершения проекта мы удалили свою копию. Неоднократно сохранённая у нас версия исходного кода пригождалась заказчику уже спустя продолжительное время после заверешения сотрудничества для восстановления работоспособности его проекта.
Мы используем систему управления исходным кодом GIT. Она является, пожалуй, самой популярной в мире среди разработчиков. Очевидным и основным преимуществом любой системы управления исходным кодом является то, что изменения в исходном коде производятся системно, а не хаотически. Каждое изменение фиксируется как самостоятельный этап развития исходного кода, снабжается осмысленным описанием, привязывается к конкретной задаче. Так достигается полный контроль не только над текущим состоянием исходного кода, но и над всей историей его развития. Для нас преимущества используемой системы GIT в том, что эта система обладет достаточной гибкостью для командной работы над исходным кодом и для работы над несколькими версиями одновременно.
Файловое хранилище. Помимо исходного кода к проектам может относиться различная документация и прочие файлы. Для этих целей у нас организовано сетевое файловое хранилище с разграничением доступа на уровне учётных записей: только участники команды конкретного проекта имеют доступ к материалам проекта.
Тестовые сервера. Разработать ПО — это лишь полдела. Далее, необходимо его отладить, протестировать и внедрить. Для этих целей на тех проектах, где это необходимо, мы используем виртуальные тестовые сервера. Под каждый такой проект выделяется отдельная виртуальная машина, на которой разворачивается копия рабочего окружения разрабатываемого приложения. Благодаря этому мы имеем возможность воспроизвести максимально приближённую к боевой обстановку для тестирования и отладки нашего продукта. В некоторых случаях, когда того требует специфика проекта, для тестирования подбирается и закупается особое оборудование.
У нас есть собственные серверные комнаты, не находящиеся под юрисдикцией какого-либо дата-центра. Тем самым обеспечивается полная изоляция от каких бы то ни было третьих лиц. В серверные имеют право входить только избранные сотрудники, при этом ведётся строгий контроль доступа.
Также используется виртуализация, для того, чтобы виртуальные машины, на которых работают тестовые сервера проектов наших заказчиков, «крутились» изолированно друг от друга в полностью виртуальной среде.
Таким образом идёт разграничение прав доступа между разработчиками: разработчик, работающий на проекте «А» не может иметь доступ к какой-либо версии кода проекта «Б», потому что они отлаживаются на разных тестовых машинах, исходные коды хранятся в разных репозиториях.
Разграничение доступа происходит чётко по проектам: только те лица, которые имеют отношение к данному проекту, имеют доступ к исходному коду, к тестовому окружению, к задачам проекта в багтрекере.
Бесперебойный доступ к ресурсам — наше всё
Поскольку заказчик является полноценным участником проекта, он также имеет доступ ко всем этим элементам инфраструктуры. Мы обязаны организовать и организуем бесперебойный доступ к этим ресурсам извне, так как наши заказчики расположены по всему миру. Круглосуточная доступность этих ресурсов извне, а не только внутри офиса, является ключевым моментом. Для этого у нас организовано следующее.
- Зарезервированный интернет-канал. Предоставлен тремя независимыми интернет-провайдерами с публичным IP-адресом и с достаточной пропускной способностью. Даже если происходит какой-то перебой с интернетом, наши сервисы всё равно остаются доступны как для заказчиков, так и для контрагентов, с которыми мы совместно работаем над проектом. И, конечно, для самих разработчиков. Резервный канал – это очень важно, потому что в нашей работе коммуникация между разработчиком и заказчиком играет ключевую роль. Разработчики, назначенные на проект, являются полноценными участниками команды заказчика. Заказчик руководит разработкой, направляет её, задаёт тон, русло разработки, и, помимо багтрекера, это происходит путём живого общения (настолько живого, насколько это удобно заказчику). Поэтому критически важно, чтобы наши разработчики всегда были онлайн, доступны для совещаний и корректировок. Резервный канал позволяет достичь этих целей: круглосуточной доступности ресурсов и доступности разработчиков для заказчика в рабочее время.
Наличие резервного канала решает проблему мелких сбоев у интернет-провайдеров: вероятность того, что у всех провайдеров будут одновременные перебои на их внутренних сетях, крайне мала. В случае, если случается сбой у магистральных провайдеров, то в этом случае ничего помочь не может, это – форсмажор. В плане доступности в компании Edison предприняты те шаги, которые реально могут устранить «проблему последней мили» – обрывы на ветке провайдера от магистрали до конкретного пользователя. То есть с точки зрения бесперебойности два-три не очень стабильных канала лучше, чем один стабильный.
- Серверный комплекс. Это отдельная комната, доступ в которую строго регламентирован ограниченному кругу лиц. С помощью климатического оборудования в ней поддерживается оптимальная температура и влажность, рекомендованная для работы этого оборудования. Так обеспечивается отказоустойчивость, долговечность оборудования, защита от сбоев, перегревов.
Тем не менее, любая техника имеет свойство изнашиваться, поэтому у нас предусмотрен ряд мер для защиты от преждевременного износа и различных сбоев в работе.
Всё серверное оборудование подключено к источникам бесперебойного питания, что позволяет выдерживать кратковременные перебои в электроснабжении и автоматически мягко выключать всё оборудование при более продолжительных отключениях электроэнергии.
На всех серверах организован рейд – зеркалирование жёстких дисков на уровне оборудования. Поэтому даже отказ одного из жёстких дисков не приводит к потере данных. Являясь материализованным сгустком интеллектуальной энергии наших сотрудников, данные – это то, что мы продаём, интеллектуальная собственность, которую мы предлагаем нашему заказчику. И её воплощением является информация, хранимая на жёстких дисках. Соответственно, это самое ценное, что мы должны сохранять.
Помимо зеркалирования используется система ежедневных резервных копий, без которой невозможно представить сколько-нибудь серьёзное хранилище данных. Ежедневно все критически важные данные (исходный код, база данных багтрекера, файловое хранилище проектных данных и внутренней документации) архивируются в автоматическом режиме, создаётся архивная копия.
Затем по защищённому (зашифрованному) каналу эта копия передаётся в географически удалённое хранилище. Так мы защищаемся от физического уничтожения данных в результате любого происшествия, которое может привести к порче оборудования в серверной (пожар, потоп и прочее).
Поделитесь в комментариях здесь и у нас на нашей странице в Фейсбуке или во Вконтакте, чем отличается инфраструктура разработки в ваших компаниях.