архитектура системы при работе в Azure
От: Аноним  
Дата: 14.09.13 13:17
Оценка:
Здравствуйте, коллеги!

Есть веб-приложение (asp.net mvc), хранящее все свои данные в локальных файлах. Допустим для целей и потребностей этого приложения этого достаточно.
Рассматриваем вариант размещения (хостинга) этого приложения в Azure. Как я понял (исходя из документации по Azure) для виртуальной машины в Azure не гарантируется её бесперебойная работа, а наоборот говорится о том что переодически инстансы VM прибиваются и необходимо для хранения долговременного данных использовать только внешние хранилища (sql azure или прочие хранилища).

Подскажите коллеги, получается что для такого веб-приложения неполучится использовать Azure для хостинга? Или я что-то неверно понял про Azure?
Re: архитектура системы при работе в Azure
От: Doc Россия http://andrey.moveax.ru
Дата: 14.09.13 16:55
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Подскажите коллеги, получается что для такого веб-приложения неполучится использовать Azure для хостинга? Или я что-то неверно понял про Azure?


А речь идёт про виртуальные машины или сервис? Для первого варианта можно подмонтировать блоб как диск и хранить на нем данные.
А вот сервис по природе stateless и лучше ориентироваться на это в проектировании приложения.

Опять же, вы можете в обоих случаях запустить более одного инстанса. Надо и это учитывать.
Re[2]: архитектура системы при работе в Azure
От: Аноним  
Дата: 14.09.13 18:19
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>Здравствуйте, Аноним, Вы писали:


А>>Подскажите коллеги, получается что для такого веб-приложения неполучится использовать Azure для хостинга? Или я что-то неверно понял про Azure?


Doc>А речь идёт про виртуальные машины или сервис? Для первого варианта можно подмонтировать блоб как диск и хранить на нем данные.

Это веб-сервис, сделан как asp.net mvc приложение, работает под IIS-ом. Его хочется запустить и хостить на виртуальной машине в ажуре.
Про подмонтировать блоб — понял, спасибо). Но у нас файлов много и они активно используются, наверно при помещении их на подмонтированный блоб — скорость работы с ними заметно просядет. Одна из причина использования локальных файлов — для быстрого доступа.


Doc>А вот сервис по природе stateless и лучше ориентироваться на это в проектировании приложения.

Не понял, у сервиса же всё равно есть данные. В нашем случае для хранения этих данных использованы файлы.


Получается что всё таки саму виртуальную машину в ажуре нельзя использовать для долговременного хранения файлов веб-приложения?
В таком случае что лучше выбрать для надежного/отказоустойчивого хостинга (чтобы не переделывать приложение) ?
Re[3]: архитектура системы при работе в Azure
От: scale_tone Норвегия https://scale-tone.github.io/
Дата: 14.09.13 20:56
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Получается что всё таки саму виртуальную машину в ажуре нельзя использовать для долговременного хранения файлов веб-приложения?

А>В таком случае что лучше выбрать для надежного/отказоустойчивого хостинга (чтобы не переделывать приложение) ?

Саму машину ни в коем случае не следует использовать для долговременного хранения файлов.

В Ажуре, как уже сказали, можно блоб подмонтировать. В AWS для тех же целей есть EBS (с той разницей, что EBS-диск в каждый момент времени монтируется только к одному инстансу).

Да, конечно, виртуальный диск в облаке будет помедленнее локального физического (хотя вот, например, EBS-диски с некоторых пор поддерживают Provisioned IOPS).
Но насколько я представляю архитектуру Вашего приложения — она изначально не рассчитана на высокие нагрузки (раз приложение не масштабируется дальше одного физического сервака). Поэтому сомневаюсь, чтобы Вы заметили существенную разницу при переезде в облако.
Re[3]: архитектура системы при работе в Azure
От: Doc Россия http://andrey.moveax.ru
Дата: 15.09.13 02:24
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Это веб-сервис, сделан как asp.net mvc приложение, работает под IIS-ом.

А>Его хочется запустить и хостить на виртуальной машине в ажуре.

Под сервисом я понимаю именно Azure PaaS, где создаются специальные Worker и Web роли. Как я понимаю, у вас IaaS — просто поднята VM, где все развернуто.

А>Про подмонтировать блоб — понял, спасибо). Но у нас файлов много и они активно используются, наверно при помещении их на подмонтированный блоб — скорость работы с ними заметно просядет. Одна из причина использования локальных файлов — для быстрого доступа.


Просядет, но как вариант (слышал, но не использовал) — сделать из них рейд. Поищите, вроде такое возможно.

Doc>>А вот сервис по природе stateless и лучше ориентироваться на это в проектировании приложения.

А>Не понял, у сервиса же всё равно есть данные. В нашем случае для хранения этих данных использованы файлы.

Есть блобы, azure sql.

А>Получается что всё таки саму виртуальную машину в ажуре нельзя использовать для долговременного хранения файлов веб-приложения?


Её саму — нет. Именно ввиду её природы — как для надежности, так и для масштабируемости, ведь тогда запросы могут обрабатывать более 1 инстанса приложения или VM.

А>В таком случае что лучше выбрать для надежного/отказоустойчивого хостинга (чтобы не переделывать приложение) ?


Попробуйте поискать по поводу рейда из дисков на блобах. Но в любом случае, если вы хотите получить максимальную отдачу от Azure стоит его переписать под PaaS.
Re[4]: архитектура системы при работе в Azure
От: Аноним  
Дата: 15.09.13 16:32
Оценка:
Здравствуйте, scale_tone, Вы писали:

_>В Ажуре, как уже сказали, можно блоб подмонтировать. В AWS для тех же целей есть EBS (с той разницей, что EBS-диск в каждый момент времени монтируется только к одному инстансу).


_>Да, конечно, виртуальный диск в облаке будет помедленнее локального физического (хотя вот, например, EBS-диски с некоторых пор поддерживают Provisioned IOPS).

_>Но насколько я представляю архитектуру Вашего приложения — она изначально не рассчитана на высокие нагрузки (раз приложение не масштабируется дальше одного физического сервака). Поэтому сомневаюсь, чтобы Вы заметили существенную разницу при переезде в облако.

Для ожидаемых нагрузок архитектура вполне устраивает. С нагрузками проблемы нет, за счет чтения данных с локальных файлов удалось обеспечить довольно высокую скорострельность (при отработке запроса могут быть множественные рандомные чтения разных данных).

Есть желание обеспечить именно надежность хранения данных в том числе от отказов железа. Было ожидание что "облачные" виртуальные машины это как-то умеют.

Получается реальные варианты следующие:
— ажуре, +переделка архитектуры доступа к данным, а так как совсем не хочется её усложнять, то вариант видится непривлекательным.
— амазон с EBS. довольно интересный вариант, спасибо , смущает только производительность. какая интересно она в сравнении с локальным диском?
Re: архитектура системы при работе в Azure
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.09.13 11:59
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, коллеги!


А>Есть веб-приложение (asp.net mvc), хранящее все свои данные в локальных файлах. Допустим для целей и потребностей этого приложения этого достаточно.

А>Рассматриваем вариант размещения (хостинга) этого приложения в Azure. Как я понял (исходя из документации по Azure) для виртуальной машины в Azure не гарантируется её бесперебойная работа, а наоборот говорится о том что переодически инстансы VM прибиваются и необходимо для хранения долговременного данных использовать только внешние хранилища (sql azure или прочие хранилища).

А>Подскажите коллеги, получается что для такого веб-приложения неполучится использовать Azure для хостинга? Или я что-то неверно понял про Azure?


А чего просто сайт в azure не сделать? Бесплатно.
Re[2]: архитектура системы при работе в Azure
От: Doc Россия http://andrey.moveax.ru
Дата: 18.09.13 15:59
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>А чего просто сайт в azure не сделать? Бесплатно.


А про ограничения не забыли?
Re[2]: архитектура системы при работе в Azure
От: Аноним  
Дата: 18.09.13 16:41
Оценка:
Здравствуйте, gandjustas, Вы писали:


А>>Подскажите коллеги, получается что для такого веб-приложения неполучится использовать Azure для хостинга? Или я что-то неверно понял про Azure?


G>А чего просто сайт в azure не сделать? Бесплатно.


Вот я и пытаюсь понять, можно ли как-то использовать azure для подобного приложения (без переделки приложения)... пока выходит что нет, тк для локальных файлов не гарантируется надежное хранение.

Странно это, на мой взгляд "облачные" виртуальные машины как раз и должны обеспечить надежность именно самой машины и её устройств хранения. А получается что веб-приложение надо специально изначально прогибать под платформу, что довольно затратно и не всегда имеет смысл.
Re[3]: архитектура системы при работе в Azure
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.09.13 17:33
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>Здравствуйте, gandjustas, Вы писали:


G>>А чего просто сайт в azure не сделать? Бесплатно.


Doc>А про ограничения не забыли?


Какие например?
Re[3]: архитектура системы при работе в Azure
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.09.13 21:22
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, gandjustas, Вы писали:



А>>>Подскажите коллеги, получается что для такого веб-приложения неполучится использовать Azure для хостинга? Или я что-то неверно понял про Azure?


G>>А чего просто сайт в azure не сделать? Бесплатно.


А>Вот я и пытаюсь понять, можно ли как-то использовать azure для подобного приложения (без переделки приложения)... пока выходит что нет, тк для локальных файлов не гарантируется надежное хранение.

Да, но пока не трогаешь конфигурацию веб-сайта таки хранится.

А>Странно это, на мой взгляд "облачные" виртуальные машины как раз и должны обеспечить надежность именно самой машины и её устройств хранения.

Если ты берешь VHD и загружаешь в облако, то да. НО!
1) Ты платишь за весь VHD в storage, это порядка 10-20 гб, а данных там максимум 1-2 мб
2) Ты платишь за все время работы ВМ, хотя используется 0,001% времени
3) Тебе все равно придется возиться с настройками сети

А>А получается что веб-приложение надо специально изначально прогибать под платформу, что довольно затратно и не всегда имеет смысл.


Ты вполне можешь заменить FileStream на BlobStream и заменить открытие файла на получение блоба. Код почти не поменяется.
Что здесь означает "прогибать"?

Зато ты получаешь отказоустойчивый storage и можешь сайт хостить в бесплатном режиме.
Re[4]: архитектура системы при работе в Azure
От: Doc Россия http://andrey.moveax.ru
Дата: 22.09.13 05:02
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Какие например?


На free версии дается 1 час CPU на день. При большой нагрузке сайт просто отключат по этому лимиту. Причем не важно, обслуживал сайт 1 злобный краулер например, или 1000 юзеров.

см. сноску по ссылке
http://www.windowsazure.com/ru-ru/pricing/details/web-sites/
Re[5]: архитектура системы при работе в Azure
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 22.09.13 10:48
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>Здравствуйте, gandjustas, Вы писали:


G>>Какие например?


Doc>На free версии дается 1 час CPU на день. При большой нагрузке сайт просто отключат по этому лимиту. Причем не важно, обслуживал сайт 1 злобный краулер например, или 1000 юзеров.


Doc>см. сноску по ссылке

Doc>http://www.windowsazure.com/ru-ru/pricing/details/web-sites/

Во-первых это дофига. Это около миллиона запросов (учитывая что storage — локальные файлы). Даже кравлеры стока не сделают.
Во-вторых, если надо будет больше, то просто переключишь в shared.
Re[6]: архитектура системы при работе в Azure
От: Doc Россия http://andrey.moveax.ru
Дата: 22.09.13 17:30
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Во-первых это дофига.


Делать вывод не зная сайта — я бы постеснялся утверждать что это "дофига" (кстати, там не указан интервал тарификации CPU).
Кроме, там кроме CPU лимиты есть (нельзя привязать свой домен итд)
Re[4]: архитектура системы при работе в Azure
От: Аноним  
Дата: 22.09.13 18:18
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте, gandjustas, Вы писали:


G>Ты вполне можешь заменить FileStream на BlobStream и заменить открытие файла на получение блоба. Код почти не поменяется.

G>Что здесь означает "прогибать"?
к примеру используется локальная БД sqlite, с файлами она работает самостоятельно, просто так не подменить.
вот и придется либо отказываться от неё и думать над другим решением.
и это ведь не просто отказываться. это сильно меняется реализация. тк sqlite, при работе внутри процесса ОЧЕНЬ быстрая при множестве мелких рандомных чтениях, сейчас не приходится заморачиваться за кэширование. а отказавшись — придется, надо будет анализировать сценарии, вводить доп-е кэши, упреждающие чтения, анализировать какие надо данные чтоб сделать один запрос на доставание больших данных. сейчас за это можно не заморачиваться тк чтения с локального файла, практически и так как кэш. производительность на множестве мелких запросов — десятки/сотни в милисекунду.

проще решить вопрос с бакапированием локальных данных и надежностью диска, чем с реинжинирингом приложения относительно работы с данными.
наладить бакапирование локальных файлов после изменения в надежный внешний сторадж, выглядит проще чем заход со стороны непосредственного перестройки работы в приложении. опять же сделав так, тогда и ажуре не нужен, вариантов развертывания гораздо больше возникает...
Re[3]: архитектура системы при работе в Azure
От: ZloeBablo Германия  
Дата: 22.09.13 19:01
Оценка:
А>Странно это, на мой взгляд "облачные" виртуальные машины как раз и должны обеспечить надежность именно самой машины и её устройств хранения. А получается что веб-приложение надо специально изначально прогибать под платформу, что довольно затратно и не всегда имеет смысл.

Не не. Приложения которые разрабатываются для облака. Делаются таким образом что сервис или сайт(Node) является stateless. Т.е. он ничего у себя не хранит никаких файлов и никаких локальных баз
Делается это для того чтобы иметь возможность динамически подключать или отключать ненужные экземпляры сервиса/сайта в зависимости от нагрузки.
Например те же сессии предполагается насколько я помню хранить в Windows Azure Cache ну и т.п.
Re: архитектура системы при работе в Azure
От: ZloeBablo Германия  
Дата: 22.09.13 19:13
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть веб-приложение (asp.net mvc), хранящее все свои данные в локальных файлах. Допустим для целей и потребностей этого приложения этого достаточно.


Допустим такое решение не годиться для облака. Облако это в первую очередь возможность оперирования католичеством обслуживающих Node. там самое главное это масштабирование в ширину. т.е. количество запущенных узлов, а не одна максимально мощная VPC. Соответственно отсюда появляются нюансы. Я вам в другой ветке ответил какие.

Приложение ваше просто не готово для портирования в облака. Дизайн кривоват с файлами. Придется переделать его на хранение в BLOB.
Re[5]: архитектура системы при работе в Azure
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 22.09.13 20:01
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, gandjustas, Вы писали:


G>>Здравствуйте, Аноним, Вы писали:


А>>>Здравствуйте, gandjustas, Вы писали:


G>>Ты вполне можешь заменить FileStream на BlobStream и заменить открытие файла на получение блоба. Код почти не поменяется.

G>>Что здесь означает "прогибать"?
А>к примеру используется локальная БД sqlite, с файлами она работает самостоятельно, просто так не подменить.
А>вот и придется либо отказываться от неё и думать над другим решением.
А>и это ведь не просто отказываться. это сильно меняется реализация. тк sqlite, при работе внутри процесса ОЧЕНЬ быстрая при множестве мелких рандомных чтениях, сейчас не приходится заморачиваться за кэширование. а отказавшись — придется, надо будет анализировать сценарии, вводить доп-е кэши, упреждающие чтения, анализировать какие надо данные чтоб сделать один запрос на доставание больших данных. сейчас за это можно не заморачиваться тк чтения с локального файла, практически и так как кэш. производительность на множестве мелких запросов — десятки/сотни в милисекунду.
Если у тебя множество рандомных чтений и мало записей, то проще все в памяти иметь. Пофигу что там данные хранит. Хоть в файл (блоб) сериализуй.
Если тебе нужна масштабируемость при конкурентной работе с данными, то sqlite тебе не поможет.


А>проще решить вопрос с бакапированием локальных данных и надежностью диска, чем с реинжинирингом приложения относительно работы с данными.

А>наладить бакапирование локальных файлов после изменения в надежный внешний сторадж, выглядит проще чем заход со стороны непосредственного перестройки работы в приложении. опять же сделав так, тогда и ажуре не нужен, вариантов развертывания гораздо больше возникает...

Я перестал понимать что тебе надо вообще. Зачем тебе azure? Ты собираешься масштабировать приложение? Тебе acid гарантии нужны или нет? Отказоустойчивость нужна или нет?
Re[5]: архитектура системы при работе в Azure
От: scale_tone Норвегия https://scale-tone.github.io/
Дата: 22.09.13 21:22
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:

Описанная Вами картина однозначно свидетельствует: использовать Azure (AWS etc.) для Вашего приложения без переделки приложения, может быть, и можно, но не нужно. У Вас нет реально высокой нагрузки (иначе SQLite давно пошел бы лесом), у Вас нет реальной потребности в высокой доступности (оффлайн на время поднятия базы из бэкапа для Вас — не проблема) и у Вас уже есть своя железка, на которой сейчас все работает. Т.е. вообще ни одного аргумента за переезд в облако.
Re[6]: архитектура системы при работе в Azure
От: Аноним  
Дата: 23.09.13 08:24
Оценка:
Здравствуйте, gandjustas, Вы писали:


G>Если у тебя множество рандомных чтений и мало записей, то проще все в памяти иметь. Пофигу что там данные хранит. Хоть в файл (блоб) сериализуй.

G>Если тебе нужна масштабируемость при конкурентной работе с данными, то sqlite тебе не поможет.
один файл бд может быть сотни мегов. и их много. все в память не поднять. поднимается естественным образом в память то к чему происходят обращения. и этого достаточно. множество конкурентных чтений для sqlite не проблема, одновременные чтения идут параллельно и без проблем. текущей конкурентности на запись в рамках одного файла БД достаточно (при худшем раскладе, ожидаемая нагрузка — единицы изменений в секунду.).


G>Я перестал понимать что тебе надо вообще. Зачем тебе azure? Ты собираешься масштабировать приложение? Тебе acid гарантии нужны или нет? Отказоустойчивость нужна или нет?

мне нужен надежный хостинг с надежным хранением данных. я хочу найти наиболее оптимальный способ это обеспечить.
текущие нагрузочные характеристики приложения устраивают. ищу именно способ обеспечить надежное хранение данных, чтоб приложение по прежнему работало с локальными файлами (тк скорость устраивает), чтоб доступ к локальным файлам был такой же быстрый, но сами файлы за счет передовых облачных технологий хранились надежно, то есть как-то обеспечивалось разруливание сбоев железа..
один из рассматриваемых вариантов — ажур.

по появившемуся понимаю (спасибо всем ) картина для меня сложилась следующая. в ажуре данные нельзя долговременно хранить в локальных файлах, надо использовать специльные сервисы, один из них — блобы. блоб можно подмонтировать как диск к виртуальной машине. всё бы хорошо — но насколько просядет скорость обмена? судя по всему просядет в разы, а это плохо.
переделывать приложение на работу через BlobStream — сильно затратный путь (ибо sqlite впрямую работает с файлами, и не только sqlite — есть ещё другой функционал). и главное непонятно, а будет ли скорость нормальная работы с ним?
возможно мне в моем случае ажур действительно не нужен, тогда какие есть ещё варианты хостингов/платформ чтоб данные в локальных файлах надежно хранились?
спасибо ..
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.