На чем написан instagram для ios
Перейти к содержимому

На чем написан instagram для ios

  • автор:

На чем написан instagram для ios

Архитектура Instagram

Instagram — всего лишь iOS, а теперь и Android, приложение для обмена фотографиями с друзьями. Последнее время находится на слуху благодаря новости о покупке проекта Facebook’ом за кругленькую сумму. Недавно один из основателей проекта, Mike Krieger, выступил на конференции с докладом о техническом аспекте проекта, который я и хотел бы вкратце пересказать.

Статистика

Начало:

  • 1 сервер слабее Macbook Pro
  • 25к регистраций в первый день
  • 2 разработчика

Сегодня:

  • 40+ миллионов пользователей
  • 100+ виртуальных серверов в EC2, в том числе:
  • Проект куплен Facebook за 1 млрд. долл
  • 1 миллион регистраций за 12 часов после запуска Android-версии
  • 5 разработчиков

Технологии

Философия

  1. Простота
  2. Минимизация операционных издержек
  3. Использование подходящих инструментов

История

  • Забыли сделать favicon.ico до запуска — в первый же день логи пестрили ошибками 404
  • Для хранения данных использовали просто Django ORM и PostgreSQL (из-за postgis)
  • Начали с одного слабого сервера, после успешного запуска решили переехать на EC2
  • Довольно быстро пришлось вынести СУБД на отдельный сервер (виртуальный, естественно)
  • Количество фотографий продолжало расти и расти, даже самый большой инстанс EC2 не справлялся
  • Решили вертикально разделить данные на несколько баз, с использованием механизма routers из ORM, параллельно избавившись от внешних ключей
  • Через несколько месяцев суммарный размер базы данных перевалил за 60Гб и перестало справляться и это решение
  • Следующим шагом стало горизонтальное разбиение данных (sharding):
  • Создали несколько тысяч логических баз данных.
  • Распределили их по существенно меньшему количеству физических серверов (читай: виртуальных машин).
  • Написали свой механизм определения где искать какую базу данных, с поддержкой миграции (вероятно тоже на основе routers).
  • По последним данным под PostgreSQL используется 12+12 виртуальных машин с максимальной оперативной памятью (68.4Гб), а также сетевые диски EBS, объединенные в программный RAID посредством mdadm. Это необходимо, чтобы весь массив данных помещался в памяти, EBS не в состоянии обеспечить достаточную производительность.
  • С некоторыми задачами лучше справляется Redis:
  • Для каждого пользователя в Redis есть список идентификаторов новых фотографий от других пользователей, на которых он подписан.
  • При отображении потока новых для пользователя фотографий делается выборка части такого списка, после чего посредством multiget достается подробная о них информация из memcached.
  • Пробовали возложить на него задачу хранения списков подписчиков, но в итоге вернулись к решению на PostgreSQL с небольшим кэшированием.
  • В Redis также хранится информация о сессиях.
  • Несколько фактов о Redis:
    • Так как все находится в памяти — очень быстрые операции записи и работы с множествами.
    • Является не заменой, а дополнением к основному хранилищу данных.
    • Redis хорош для структур данных, которые относительно ограничены.
    • Отлично подходит для кэширования комплексных структур данных, где нужно большее, чем просто получить значение по ключу (например — счетчики, подмножества, проверка вхождения в множества).
    • Механизм репликации (посредством slaveof) позволяет легко масштабировать операции чтения.
    • Сохраняются гео-метки, обновляется Solr (который впоследствии заменил postgis).
    • Идентификатор нового фото добавляется в обсуждавшиеся выше списки для всех подписчиков автора.

    Подводим итоги

    • Многие проблемы с масштабируемостью — результат банальных человеческих ошибок.
    • Масштабирование = замена всех деталей в машине на скорости 150 км/ч.
    • Заранее сложно узнать как в основном будут обращаться к данным, без реального использования.
    • В первую очередь попытайтесь адаптировать известные Вам технологии и инструменты для создания простого и понятного решения, прежде чем бросаться на поиски чего-то нетривиального.
    • Дополните свое основное хранилище более гибким компонентом, вроде Redis.
    • Постарайтесь не использовать два инструмента для решения одной и той же задачи.
    • Оставайтесь гибкими и ловкими = напоминайте себе о том, что на самом деле имеет значение.
    • Разрабатывайте решения, к которым не придется постоянно возвращаться из-за их сбоев.
    • Активное юнит- и функциональное тестирование стоят потраченного на них времени.
    • DRY: не делайте одну и ту же работу несколько раз.
    • Слабая связанность посредством уведомлений или сигналов позволяет легко менять структуру проекта.
    • Дисковый ввод-вывод часто оказывается узким местом, особенно на EC2.
    • Спускаться до C нужно только при необходимости, большую часть работы лучше делать в Python.
    • Короткий цикл разработки — залог быстрого развития.
    • Частые совместные рассмотрения кода нужны, чтобы все были в курсе происходящего.
    • Не изобретайте велосипед.
    • Окружите себя с толковыми консультантами.
    • Культура открытости вокруг разработки.
    • Делитесь с opensource сообществом.
    • Фокусируйтесь на том, что вы делаете лучше всего.
    • Вашим пользователям абсолютно без разницы, написали ли Вы собственную СУБД или нет.
    • Не переоптимизируйте и не предполагайте заранее как сайт будет расти.
    • Не рассчитывайте, что «кто-то еще присоединится к команде и разберется с этим».
    • Для социальных стартапов очень мало, или даже совсем нет, нерешимых вопросов, связанных с масштабируемостью.

    Источник информации

    Упоминавшаяся во вступлении неприлично длинная презентация из 185 слайдов:

    На видео, к сожалению, это выступление не записывалось.

    На чем пишут приложения под iOS

    15677 23-08-21 Время чтения: 8 мин

    Большую часть рынка мобильных приложений занимают нативные разработки, которые «заточены» на работу на устройствах под управлением определенных операционных систем. Самыми популярными ОС сейчас являются iOS, под управлением которой работают все устройства корпорации Apple, и Android. Последняя ОС успешно используется многими компаниями и является более универсальной, тогда как iOS остается эксклюзивным продуктом Apple.

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

    Виды и направления приложений

    Прежде, чем перейти непосредственно к теме разработки, следует поговорить, о том, какие бывают приложения и зачем они создаются. Разделить приложения можно на:

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

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

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

    • Развлекательные (игры, обработка изображений, аудио и видео форматов).
    • Помощники (поиск информации, приложения погоды и т.д.).
    • Информационные (новости, события и т.п.)
    • Социальные сети
    • Для досуга (спорт, хобби, путешествия)
    • E-commerce — мобильные интернет-магазины (возможность покупки через приложения).
    • Приложения B2B в структуре (внутренние системы контроля и организации процессов внутри компании).

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

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

    Процесс разработки мобильных приложений iOS

    Разработка приложений для iOS выполняется достаточно стандартным и в то же время уникальным для каждого случая способом. Процесс включает в себя планирование, исследования и четкую направленность. Чтобы приложение было успешным, необходимо во время его разработки правильно выполнить ряд шагов. Как правило, весь цикл состоит из 7 этапов.

    Этапы разработки

    • Планирование и написание Технического задания. Перед тем, как приступить к работе нужно знать, для какой целевой аудитории будет разрабатываться iOS-приложение, какие задачи ему предстоит решать и какие функции потребуются для эффективного функционирования программы. Кроме того, необходимо комплексно исследовать рынок, чтобы понимать будет ли приложение конкурентоспособным и востребованным. Данный этап включает в себя и подготовку технического задания на разработку.
    • Проектирование и дизайн. Следующим шагом является прототипирование и дизайн интерфейса — UX/UI. После согласования прототипов, дизайнер создает визуализацию экранов, которые увидят пользователи на своих мобильных устройствах.
    • Front-end разработка. Пользователь напрямую воздействует с внешним интерфейсом приложения, поэтому на данном этапе концентрируется внимание на работе с разными элементами дизайна. Хорошо проработанный интерфейс позволяет приложению эффективно функционировать на экранах с разными характеристиками и размерами. Это позволяет ему правильно отображаться как на более ранних версиях iPhone, так и на новых моделях.
    • Back-end разработка. Начальный шаг разработки, который отвечает за функциональной iOS-приложения. Этап включает разработку на стороне сервера, а конкретнее: аутентификацию, функционирование учётных записей пользователей, настройку взаимодействия с ними, интеграцию с социальными сетями, пуш-уведомления и многое другое.
    • Создание API. API или программный интерфейс приложения связывает внутренний и внешний интерфейсы мобильного приложения. API является одним из важнейших элементов для создания iOS-приложения.
    • Тестирование. После завершения каждого этапа разработки приложение обязательно тестируется, чтобы убедится в полной работоспособности приложения без ошибок и сбоев.
    • Запуск и обслуживание. По окончанию тестирования приложение можно публиковать в App Store. Добавление в магазин не означает завершения работ. Любое ПО требует обслуживания и поддержки, а также улучшения текущих функций и добавления новых возможностей.

    Языки программирования iOS приложений

    Для разработки программ для устройств под управлением iOS, iPadOS, tvOS, macOS, watchOS используются языки программирования Objective-C и Swift. Они являются основными языками для написания iOS-приложений. Эти языки объектно-ориентированы и дают возможность в процессе написания кода группировать похожие задачи, что существенно ускоряет и упрощает работу разработчиков.

    Язык программирования Objective-C

    Objective-C является более старым. Впервые был представлен еще в 80-х годах прошлого века. Постепенно он дорабатывался и стал основным для устройств Apple, поэтому с помощью Objective-C можно создать приложения под любую технику «яблочной» корпорации. К достоинствам данного языка можно отнести высокую степень поддержки кода, огромную базу обучающих материалов и большое сообщество, схожесть с семейством языков С, совместимость с более «молодым» языком Swift.

    Язык Objective-C также известен как ObjC или Obj-C. Он является компилируемым объектно-ориентированным языком программирования корпорации Apple, который построен на основе языка Си и парадигм Smalltalk. Язык Objective-C полностью совместим с Си и код на Си компилируется. Объектная модель построена в стиле Smalltalk, то есть объектам посылаются сообщения. Компилятор Objective-C входит в GCC и доступен на большинстве основных платформ. Язык используется в первую очередь для двух реализаций объектно-ориентированного интерфейса OpenStep – MacOS X (Cocoa) и GNUstep.

    Стоит сказать, что этот язык также является message-oriented в отличии от C++, который function-oriented. В Objective-C вызовы метода интерпретируются не как вызов функции, а именно как посылка сообщения (с именем и аргументами) объекту, подобно тому, как это происходит в Smalltalk-е. Такая система обеспечивает ряд преимуществ – любой объект может посылать любые сообщения. Таким образом, вместо обработки сообщения объект может делегировать свои полномочия другому объекту для проведения обработки. Таким образом можно легко реализовать распределенные объекты, которые находятся в разных пространствах. Сообщения привязываются к соответствующей функции прямо на этапе выполнения.

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

    Язык программирования Swift

    В 2014 году корпорация Apple представила новый язык программирования, получивший название Swift. По словам разработчиков, данный язык вобрал в себя лучшее от популярного Objective-C и С, и при этом получил более мощный и удобный функционал, более современный инструментарий.

    К главным достоинствам данного языка можно отнести высокую скорость разработки программ, уменьшение кода, лучшую читаемость, поддержку динамических библиотек, улучшенную безопасность. Swift и Objective-C совместимы, поэтому их можно использовать даже в рамках одного проекта.

    Безопасность является одной из особенностей Swift. Этот язык намного безопаснее obj-c, благодаря введению новшеств и апгрейду синтаксиса. Возможность несанкционированного доступа к данным практически отсутствует, благодаря улучшениям работы с памятью. Более эффективная обработка сценариев, в свою очередь, уменьшила количество критических сценариев.

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

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

    Среда разработки

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

    Xcode – основная среда разработки

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

    Интерфейс единого окна существенно упрощает работу разработчику, причем в процессе написания кода программа укажет программисту на допущенную ошибку, если она появится. В XCode интегрировано приложение IB (Interface Builder), позволяющее разрабатывать графические интерфейсы, настраивать стили и шрифты.

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

    И это лишь основные достоинства, которыми обладает данная среда разработки iOS приложений. Главным конкурентом XCode является разработка JetBrains – AppCode с отличной работой автодополнения, хорошей интеграцией с issue-трекерами, подробным описанием ошибок. Но данную IDE в качестве основной и единственной использовать вряд ли получится, и в большинстве случаев разработчики возвращаются к XCode.

    Сколько стоит разработка приложения для iOS

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

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

    Instagram. Начём написан instagram для android (слышал, что на python, но так ли это)?

    Серверная часть на Python(кто бы сомневался в работниках гугл) , клиентская часть на Objective-C для Apple и скорее всего тоже на чем-то Си-шном для Android.

    Поисковик подсказывает, если тебе лень вбить запрос:
    Mike Krieger, выступил на конференции с докладом о техническом аспекте проекта
    Ubuntu Linux 11.04 — основная операционная система
    Python — основной язык программирования серверной части
    Django — фреймворк
    nginx/Memcached/PostgreSQL — основное хранилище данных

    Остальные ответы

    Инстаграм написан на Python? Как так?

    Никак понять не могу. Это приложение для андроид, приложения для этой платформы пишутся на Java. Причём тут питон то? Слышал, что худо-бедно можно писать на андроид на питоне с использованием особых библиотек. Но в итоге приложения получаются здоровые, следовательно, ужасно мееедленные. По слухам, сервис написан ещё и на Джанго. Но ведь это же для веба!
    Но несмотря на всё это, беззаботно работает с гигантским потоком посетителей и в ус не дует. Как так?

    • Вопрос задан более трёх лет назад
    • 48654 просмотра

    Комментировать
    Решения вопроса 2
    Vit @fornit1917

    Инстаграмм это не только мобильное приложение. Это еще и серверное приложение с сайтом. Вот они то на питоне и написаны.
    Вот, если интересно, статья (правда уже старая) с описанием некоторых применяемых на сервере технологий и архитектурных решений https://www.insight-it.ru/highload/2012/arkhitektu.

    Ответ написан более трёх лет назад
    Комментировать
    Нравится 14 Комментировать

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

    Ответ написан более трёх лет назад
    Нравится 7 5 комментариев

    Witosser

    Виктор Юрченко @Witosser Автор вопроса

    Получается приложения на андроид+ios+wphone это только фронтенд и всё. Тогда фронтенд сайта отличает от фронтенда приложения только разные ЯП?

    Виктор Юрченко: Не факт, что разные ЯП. https://ru.wikipedia.org/wiki/PhoneGap

    Witosser

    Виктор Юрченко @Witosser Автор вопроса

    Я слышал такого рода решения до жути не производительные .
    Надо полагать для оффлайн игр и приложений веб сервер не нужен?

    Я слышал такого рода решения до жути не производительные
    Производительность на клиенте и не нужна (в разумных пределах, конечно). Знаешь, если так думать, то и Java и C++ до жути не производительные в сравнении с ассемблером.
    Надо полагать для оффлайн игр и приложений веб сервер не нужен?
    Сервер нужен для того, чтобы клиент связывался с ним. Нужен он или нет — зависит от необходимого поведения. И для оффлайн игр/приложений могут быть нужны серверы. Обновления, например.

    Виктор Юрченко: Ой, чёт с тегами.
    Ответы на вопрос 4

    sayber

    Да, я программирую на PHP и еще асинхронно!
    А vk.com написан на PHP, как так? Ведь приложение есть под все OS.
    Ответ написан более трёх лет назад
    Нравится 7 6 комментариев
    ambilight1 @ambilight1
    поправочка, на компилированном php) kphp вроде бы
    ambilight1: На KPHP он перешёл сравнительно недавно. До этого был PHP.

    jcmax

    ну для начала php это серверный язык, который находится на сервере и отрабатывает все на сервере, и к клиентскому приложению вообще никакого отношения не имеет. Другое, каждое приложение написано своим языком в зависимости от ОС для которой оно написано. Андройд котлин, джава. iOS/MacOS свифт, obj-C. windows С#. все передается через json, а вообще да тут посоветовали почитать про

    «Тебе стоит почитать про клиент-серверную архитектуру. Сервер может быть написан хоть на чём.» в том числе и на C++ и на PHP и на Python’e, как и клиент

    sayber

    Иван василичь,
    Вероятно вы далеки от разработки.
    Т.к. не заметили, что комментарий древний (2014г. (upd) если не ошибаюсь).
    И ответ был до системы комментариев, но вам то это не известно.

    Когда я писал данный комментарий, в моем портфеле было с десяток приложений для андройда.
    В целом, на тот момент, я занимался программирование 13 лет.

    Зачем вы мне написали данный комментарий, не понятно.
    Мб. потому что я давно забросил PHP и последние 4 года программирую на Go и С++ ?
    Или возможно, вы работаете программистом уже 30+ лет и вероятно более опытный чем я?

    Судя по профилю — нет

    jcmax

    Sergej, ну во первых там не написано, что написано в 2014 году, и мне лично глубоко по барабану че вы там делаете, да хоть танцуете голый перед сервером. ответ был на конкретный вопрос, если он устарел то и отвечать в принципе не надо, а знать каких успехов вы добились мне лично вообще паралельно.

    sayber

    ответ был на конкретный вопрос, если он устарел то и отвечать в принципе не надо,

    Так и я про то же. Зачем вы занялись некромантией?
    Да еще и в комментариях к моему комментарию.
    Единственный тип уведомлений который оставил :\

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *