2013-12-12 3 views
1

Я не знаю, как это название четко отражает содержание вопроса. Пожалуйста, помогите перефразировать, если вы считаете, что это сбивает с толку. Благодаря!Дизайн мобильного приложения и сервера, занимающихся разным размером фотографий

Это общий вопрос о некоторой общей архитектуре. Я работаю над Android-приложением, которое может принимать и передавать фотографии так же, как Instagram. И у меня есть веб-сервис с поддержкой Django.

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

У меня есть два предложения по ведению этой задачи, и не уверен, каким образом я должен идти:

1.При загружать фотографии с пользователем мобильного приложения, я могу сжать его локально и отправить 3 различных размеров (с низким разрешением миниатюры, середина res и высокое разрешение). Поэтому серверная сторона может хранить их и возвращать обратно в разных случаях. Кон таким подходом, о котором я могу думать, это слить больше пользовательских данных, потому что теперь пользователю нужно будет отправить несколько изображений. Это может также привести к тому, что загрузка займет больше времени и больше влияния на пользователя.

2. Когда пользователь загружает фотографии из мобильного приложения, они загружают только исходное изображение. Логика на стороне сервера сделает сжатие для каждого изображения дохода и сохранит их соответственно. Консолидация такого подхода - серверу, возможно, потребуется гораздо больше рабочей нагрузки. В этом случае, если пользователь много увеличивает, это может привести к сбою сервера.

Я надеюсь получить некоторый указатель на эту проблему, или любая ссылка на эту тему будет полезна!

ответ

1

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

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

0

Что бы я сделал, это первый размер в мобильном телефоне, только один, потому что вы не один, чтобы перенести изображение 13Mpx, а также не хотите, чтобы на вашем сервере было изображение шириной 2 экрана (это первое, что делает instagram). После этого загрузите файл, и сервер сделает все остальное.

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

О сбое сервера, есть одна первая мера я бы:

  • Не делать какие-либо операции, как изменение размера или создание копий изображения в момент загрузки, вы можете выбрать один из таких подходов:
    • Сделайте это, когда есть запрос на файл. это, не делайте этого, когда пользователь его отправляет, но когда кому-то это нужно.
    • Сделайте это в непрерывном процессе backgorund, например, cronjob, работающем каждую минуту.
    • или комбинация из двух, есть процесс в фоновом режиме, делающий материал для всех ожидающих изображений, но если кто-то входит на веб-сайт, и им нужно изображение, которое еще не создано, оно генерируется в тот момент ,
0

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

С точки зрения архитектуры вы сталкиваетесь с проблемой масштабируемости. Вы не можете расширять процессор/память или хранилище устройства до любого уровня, который вы хотите. Однако вы можете масштабировать свои серверы горизонтально или вертикально, добавляя больше ram/core/disks и т. Д. Вы можете поместить кластер на сервер и иметь ферму серверов, если данные увеличатся до этого уровня.

Поэтому всегда желательно просто загрузить исходное изображение без локальной обработки. Локальная обработка также истощает батарею помимо других недостатков, о которых вы говорили.

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

Смежные вопросы