Облачные вычисления открывают мир возможностей для программного обеспечения и разработчиков, но кодирование для облака не обязательно так просто, как вы думаете.
Кривая обучения для разработчиков может быть сложной, особенно для веб-разработчиков, не привыкших работать с такими понятиями, как многопоточность и параллелизм, латентность, асинхронность и отказоустойчивость.
Вот 11 вещей, на которые нужно обратить внимание, когда вы начинаете разработку для облака.
Соблюдение и управление
Юридические и операционные требования часто определяют местоположение вашего хранилища данных и хостинга, и в облаке это не отличается. Хотя абстракция инфраструктурного уровня является огромным благом для масштабируемой разработки, вам необходимо знать, как предоставляются ваши экземпляры и службы, иначе вы можете непреднамеренно отправить ваши данные в страну или штат, нарушающие ваши местные законы о конфиденциальности.
Облачная служба может поддерживаться несколькими центрами обработки данных в разных местах, и зачастую нет способа узнать, где экземпляр будет создан физически. Это легко упустить из виду, поскольку весь смысл облака заключается в том, чтобы быть в какой-то степени независимым от местоположения и инфраструктуры, но это может иметь решающее значение для управления.
Отказоустойчивость
Имея потенциал для такого большого количества экземпляров и распределенных сервисов, вы представляете гораздо больше возможных точек отказа, чем в традиционном приложении, размещенном в центре обработки данных. В особенности для разработчиков, использующих интерпретируемые языки во время выполнения, такие как PHP, ASP или ColdFusion, необходимый скачок к отказоустойчивости и асинхронным данным может представлять сложную кривую обучения.
В частности, ваше приложение должно быть спроектировано с самого начала, чтобы предвидеть сбой — экземпляр не запускается, данные не поступают своевременно или, возможно, вообще не поступают. И ваши сервисные уровни, и ваш пользовательский интерфейс должны учитывать это и обеспечивать соответствующие механизмы и обратную связь с пользователем.
Например, предположим, у вас есть приложение, которое позволяет пользователю загружать видеофайл для преобразования, и вы создаете экземпляр для управления им. Если вы запрограммируете синхронно, ваше приложение сломается, если экземпляр не запустится или механизм хранения временно потеряет соединение. Если, с другой стороны, вы разрабатываете архитектуру с учетом очередей и распределения, ваше приложение может предупредить пользователя о задержке или постепенном переключении при сбое и разрешить работу, даже если требуемые данные еще не готовы.
Сервис карт
Природа облачных и эластичных вычислений означает, что в отличие от традиционной модели хостинга с фиксированными сетевыми адресами для различных сервисов, вы не будете знать заранее IP-адрес экземпляра, поэтому ваше приложение должно работать на высоком уровне. не будучи подчиненным физическому (или логическому) месту.
Это не так сильно отличается от правильной балансировки нагрузки или кластеризации и может создавать такие же проблемы, но те, которые не используются в архитектуре для таких сред, должны учитывать эту кривую обучения при переходе в облако.
Масштабируемость и состояние
Горизонтальная масштабируемость является одной из основных причин перехода к облачной архитектуре, но важно понимать, что не каждое приложение подходит для этой среды. Не имея возможности предсказать использование экземпляра или непрерывное соединение, каждый запрос пользователя может потенциально обслуживаться отдельным экземпляром, поэтому вы должны соответствующим образом управлять состоянием.
механическая обработка
Специфичные для облака языки все еще находятся в зачаточном состоянии, и разработка на знакомых языках в облачной инфраструктуре может представлять уникальные проблемы. Возможно, вы не сможете полагаться на свою среду IDE так часто, как раньше — отладчики могут быть проблематичными, а в некоторых случаях вообще отсутствуют.
Для тех, кто имеет опыт работы с языками низкого уровня или разработкой до появления высококачественных инструментов, это не будет чем-то новым, но если вы никогда не отлаживали приложение «старомодным способом», сейчас самое время учиться.
портативность
Это не проблема для всех, и она сильно варьируется в зависимости от используемых вами сервисов и характера вашего приложения, но вы можете обнаружить, что — однажды разработанная для данной облачной инфраструктуры — ваша система больше не является переносимой. Абстракция является ключевым моментом, имея в виду, что относительное развитие облачных платформ делает соблюдение стандартов еще более важным.
Вы можете обнаружить, что различные стандарты не поддерживаются или частично применяются вашим провайдером, и в таком случае разработка в этой среде усложнит ситуацию, если вам потребуется перейти на другую услугу из-за проблем с ценами, управлением или надежностью.
Хранилище данных
Традиционная разработка программного обеспечения чаще всего основана на хранении файлов и реляционных данных, но эти решения плохо масштабируются в облаке. Разработчики обязаны изучать новые технологии, такие как решения NoSQL, службы больших данных и собственные API-интерфейсы Platform as a Service (PaaS). Эти новые технологии требуют фундаментального изменения мышления и представляют новые проблемы кодирования, о которых традиционные разработчики программного обеспечения могут еще не знать.
Прежде чем приступить к разработке архитектуры для облака, убедитесь, что вы в курсе использования нереляционных хранилищ данных, таких как Hadoop, HBase, Cassandra и Hypertable, таких как большие данные. Также стоит изучить методы разработки с использованием PaaS-сервисов, таких как SalesForce.com , где вы полагаетесь на API для хранения данных, а не на непосредственное управление вашими данными.
Помните, что в любой момент пользовательский или сервисный запрос будет обслуживаться из неизвестного экземпляра, поэтому локализованное хранилище больше невозможно.
Расходы
В традиционной разработке это не имеет большого значения, если вы оставляете тестовый сервер запущенным или запускаете несколько локальных нагрузочных тестов. В облаке, однако, каждый цикл ЦП потенциально стоит денег, и вы должны учитывать это во всем, что вы делаете. Процессы разработки должны учитывать количество ресурсов процессора, использование полосы пропускания и распределение памяти, поэтому требуются новые формы эффективности.
Конечно, эти требования не обязательно являются новыми, но те, которые используются для разработки на мощных серверах, соединениях с высокой пропускной способностью и локальных средах, могут легко стать слабыми в тонкой настройке таких вещей, как размер сообщений, пул соединений и запись временных файлов. При кодировании облака пришло время расставить точки над точками и позаботиться о всех деталях.
тестирование
Обычно рекомендуется тестировать приложения на платформе, идентичной той, которая будет работать в производственной среде (или настолько близкой к ней, насколько вы можете управлять), но облачная инфраструктура делает это чрезвычайно трудным, и очень возможно возникновение ситуаций в производственной среде. что вы не можете повторить локально. Даже сделать снимок приложения во время системного события может быть проблематично, поэтому наряду с изучением новых способов отладки вам необходимо постоянно помнить, что в облаке все может работать по-другому.
Учитывайте это при предоставлении оценок и времени для функционального или пользовательского тестирования, особенно при попытке отладки и устранения проблемы.
Лицензирование
Никогда не делайте предположений о характере лицензий на развертывание в облаке — они могут вас удивить. Вскоре после разработки приложений было обнаружено несколько домов разработчиков, которые неожиданно обнаружили, что лицензии, которыми они владеют для библиотек и программных объектов, не масштабируются в облаке и могут привести к скрытым расходам.
Документация и Сообщество
Поскольку все еще так ново, вы не сможете изначально найти такой же уровень помощи сообщества, блоги, документацию и решения, для которых вы привыкли искать в Google. Во многих случаях вы можете обнаружить, что впервые используете даже простую функциональность в конкретном случае использования, поэтому убедитесь, что вы документируете свою работу и делитесь как можно больше.
Объем знаний, доступных в сети, растет, но ему еще предстоит пройти долгий путь, и эти ресурсы являются действительной и важной частью того, что составляет вашу полезность как разработчика, поэтому не стоит недооценивать это.
В целом, облачные вычисления полны обещаний.
Приложения могут создаваться для масштабирования по требованию и использовать только те ресурсы, которые им требуются, и в то же время они могут конкурировать на мировой арене с той же гарантией, что когда-то только с большими карманами и большими центрами обработки данных.
По мере роста технологий, языков и опыта разработчиков в облаке появятся новые способы ведения дел, и вы, как разработчик, сможете найти их и использовать в своих интересах.