Хотя технически это не дает прямого ответа на поставленный вопрос, оно отвечает на вопрос о том, как сделать то, что хотел сделать оригинальный плакат: объединить файлы. Во всяком случае, этот пост поможет новичкам понять, о чем говорят Инстанс Хантер и Константин.
Это метод, который я использую для объединения файлов (в данном случае это jpg и zip). Обратите внимание, что я создаю буфер, который заполняется содержимым zip-файла (небольшими порциями, а не одной большой операцией чтения), и затем буфер записывается в конец jpg-файла до тех пор, пока конец zip-файла не станет достиг:
private void CombineFiles(string jpgFileName, string zipFileName)
{
using (Stream original = new FileStream(jpgFileName, FileMode.Append))
{
using (Stream extra = new FileStream(zipFileName, FileMode.Open, FileAccess.Read))
{
var buffer = new byte[32 * 1024];
int blockSize;
while ((blockSize = extra.Read(buffer, 0, buffer.Length)) > 0)
{
original.Write(buffer, 0, blockSize);
}
}
}
}
Я уже около месяца использую ELB вместо HAProxy на сайте, который посещают около 100 000 человек в день, и я очень доволен результатами.
Однако есть проблема (ОБНОВЛЕНИЕ, эта проблема была исправлена с помощью Amazon AWS , см. Комментарии ниже):
http://mysite.com
на http://www.mysite.com
. Кроме того, я действительно не могу говорить достаточно высоко о предложениях AWS ELB. Я также использую мониторинг и автомасштабирование Cloudwatch. Да и не забывайте, что это дешевле, чем запуск небольшого экземпляра EC2 (0,025 доллара в час вместо 0,10 доллара).
На форуме Amazon есть жалобы на надежность ELB. Я предлагаю вам отправиться туда и поискать в ELB, чтобы составить собственное мнение по этому поводу.
Мы хотели использовать ELB для балансировки нагрузки запросов веб-служб, но у нас есть много внешних вызывающих абонентов, некоторые из которых отправляют 100-Continue HTTP сообщение. К сожалению, ELB не понимает эту часть протокола HTTP, поэтому мы не можем выйти за рамки проверки концепции, пока она не будет решена.
Обновление 2013 г.
Согласно сообщению на форуме AWS, HTTP 100-Continue теперь доступен поддерживается.
Зависимость ELB от косвенного обращения к записи CNAME DNS является очень серьезной проблемой для веб-служб, которые должны быть очень быстрыми. В нашем случае нам нужно очень хорошее время отклика. В быстром тесте производительности использование ELB увеличило среднюю задержку для HTTP-запросов почти в 2 раза. Это в основном связано с тем, что TTL при поиске CNAME равен нулю. Таким образом, все поиски связаны с обращением к серверам имен для двух разных доменов, поэтому разрешение имени происходит намного медленнее. (Я беспокоюсь, что отказ от кеширования в DNS - это просто злоупотребление системой.) Единственная надежда для ELB в нашем случае - уйти от записей CNAME, если Amazon будет поддерживать эластичный IP-адрес в качестве адреса экземпляра балансировщика нагрузки.
Одна из основных проблем для многих пользователей с ELB заключается в том, что он не поддерживает липкость, которая убивает многие веб-приложения.
Согласно Amazon AWS разработчиков, это однако должен появиться в следующем выпуске.
Другая проблема - получение IP-адреса клиента. Для обычного HTTP это нормально работает, поскольку ELB устанавливает заголовок X-FORWARDED-FOR. Но для HTTPS это невозможно, потому что он пересылается на уровне TCP. Надеюсь, когда-нибудь ELB будет иметь завершение SSL.