company_banner
  • Архитектура и платформа проекта Одноклассники

      Архитектура и платформа проекта Одноклассники


      В этом посте расскажем о накопленном за 5 лет опыте по поддержанию высоконагруженного проекта. Надеемся, что коллегам-разработчикам будет интересно узнать, что и как мы делаем, какие проблемы и трудности у нас возникают и как мы справляемся с ними.

      Читать дальше →
    • Обзор особенностей ядра Андроида

        “А я… карбюратор промываю!”
        Анекдот


        Введение

        В детском садике мы с единомышленниками препарировали кузнечиков в надежде разобраться в их строении. В школе распаивали радиоприёмник “Россия”. В институте дошла очередь до автомобилей, гайки которых были многократно переставлены. Интересы поменялись, но желание “разбирать” иногда просыпается, и сегодня оно направлено на Андроид.

        Сколько раз вас выручало наличие исходников Андроида? Меня — уже не счесть. Андроид — открытый проект, но, к сожалению, у нас есть возможность только читать; править код Андроида, не будучи сотрудником Google, практически невозможно. Погрустим над этим моментом и загрузим репозиторий. Как это сделать, отлично описано на официальном сайте.


        Читать дальше →
      • Тюним память и сетевой стек в Linux: история перевода высоконагруженных серверов на свежий дистрибутив

          image

          До недавнего времени в Одноклассниках в качестве основного Linux-дистрибутива использовался частично обновлённый OpenSuSE 10.2. Однако, поддерживать его становилось всё труднее, поэтому с прошлого года мы перешли к активной миграции на CentOS 7. На подготовительном этапе перехода для CentOS были отработаны все внутренние процедуры, подготовлены конфиги и политики настройки (мы используем CFEngine). Поэтому сейчас во многих случаях миграция с одного дистрибутива на другой заключается в установке ОС через kickstart и развёртывании приложения с помощью системы деплоя нашей разработки — всё остальное осуществляется без участия человека. Так происходит во многих случаях, хотя и не во всех.

          Но с самыми большими проблемами мы столкнулись при миграции серверов раздачи видео. На их решение у нас ушло полгода.
          Читать дальше →
        • CSS анимации на реальном проекте



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

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

            В этом посте мы расскажем, почему так важно начинать использовать новые технологии клиентской разработки уже сегодня и о трудностях, которые могут ждать вас на пути.
            Читать дальше →
          • Анимации на GPU: делаем это правильно

              Думаю, все уже знают, что современные браузеры умеют рисовать некоторые части страницы на GPU. Особенно это заметно на анимациях. Например, анимация, сделанная с помощью CSS-свойства transform выглядит гораздо приятнее и плавнее, чем анимация, сделанная через top/left. Однако на вопрос «как правильно делать анимации на GPU?» обычно отвечают что-то вроде «используй transform: translateZ(0) или will-change: transform». Эти свойства уже стали чем-то вроде zoom: 1 для IE6 (если вы понимаете, о чём я ;) для подготовки слоя для анимации на GPU или композиции (compositing), как это предпочитают называть разработчики браузеров.


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

              Читать дальше →
            • Лекции Технополиса. Проектирование высоконагруженных систем (осень 2017)



                Мы начинаем публиковать курсы лекций Технополиса — образовательного проекта команды Одноклассников в Санкт-Петербургском Политехническом университете Петра Великого. Создание высоконагруженных приложений — это не только проектирование и написание кода, но и огромное количество других аспектов на всём протяжении жизненного цикла продукта. Мы пройдём по всему процессу создания и использования высоконагруженной системы. Особое внимание будет уделено особенностям эксплуатации, сетям, балансировке нагрузки, иерархии памяти, повседневным инструментам. Также поговорим о мониторинге, аудите и многом другом. Лекции курса читает команда экспертов под руководством ведущего разработчика в Одноклассниках Вадима Цесько.

                Список лекций:

                1. Введение (Вадим Цесько incubos)
                2. Типовые архитектуры (Александр Христофоров)
                3. Эксплуатация (Илья Щаников)
                4. Сетевой стек (Дмитрий Самсонов dmitrysamsonov)
                5. Балансировка (Андрей Домась)
                6. Процессоры и память (Алексей Горбов)
                7. Хранилища данных (Сергей Егоричев)
                8. JVM (Андрей Паньгин apangin)
                9. Мониторинг (Сергей Шарапов Sharapoff)
                10. Облака (Леонид Талалаев)

                Читать дальше →
              • Что случилось, когда мы устали смотреть на графики 5 000 серверов в мониторинге (и когда серверов стало более 10 000)



                  Мы в Одноклассниках занимаемся поиском узких мест в инфраструктуре, состоящей более чем из 10 тысяч серверов. Когда мы слегка задолбались мониторить 5000 серверов вручную, нам понадобилось автоматизированное решение.

                  Точнее, не так. Когда в седой древности появился примерно 20-й сервер, стали использовать Big Brother — простейший мониторинг, который просто собирает статистику и показывает её в виде мелких картинок. Всё очень, очень просто. Ни приблизить, ни как-то ввести диапазоны допустимых изменений нельзя. Только смотреть картинки. Вот такие:


                  Два инженера тратили по одному рабочему дню в неделю, просто отсматривая их и ставя тикеты там, где график показался «не таким». Понимаю, звучит реально странно, но началось это с нескольких машин, и потом как-то неожиданно доросло до 5000 инстансов.

                  Поэтому мы сделали новую систему мониторинга — и сейчас на работу с 10 тысячами серверов тратим по 1-2 часа в неделю на обработку алертов. Расскажу, как это устроено.
                  Читать дальше →
                • Краткая история одной «умной ленты»



                    Социальные сети — это один из наиболее востребованных на сегодняшний день интернет-продуктов и один из основных источников данных для анализа. Внутри же самих социальных сетей самой сложной и интересной задачей в сфере data science по праву считается формирование ленты новостей. Ведь для удовлетворения всё возрастающих требований пользователя к качеству и релевантности контента необходимо научиться собирать информацию из многих источников, вычислять прогноз реакции пользователя и балансировать между десятками конкурирующих метрик в А/Б-тесте. А большие объемы данных, высокие нагрузки и жесткие требования к скорости ответа делают задачу ещё интереснее.
                    Читать дальше →
                  • Data Science: Про любовь, имена и не только

                    Что значит имя? Роза пахнет розой,
                    Хоть розой назови ее, хоть нет.

                    • Шекспир "Ромео и Джульетта" (пер. Пастернака)

                    Ромео и Джульетта


                    Данная статья не может служить поводом для выражения нетолерантности или дискриминации по какому-либо признаку.


                    В этой статье я расскажу о том, что несмотря на то, каким бы странным это не казалось для образованного человека, вероятность быть одинокой/одиноким зависит от имени. То есть, по сути, мы поговорим про любовь и отношения.


                    Это примерно все равно, что сказать: вероятность быть сбитым машиной, если тебя зовут Сережа, выше, чем если бы тебя звали Костя! Звучит довольно дико, не правда ли? Ну, как минимум, ненаучно. Однако социальные сети сделали возможным сравнительно просто проверить приведенное выше утверждение.


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

                    Читать дальше →
                  • Использование разделяемой памяти в Java и off-heap кеширование

                      На прошлой неделе состоялся успешный эксперимент по запуску нового решения для download-сервиса. Один достаточно скромный сервер (2 x Intel Xeon E5620, 64 GB RAM) под управлением Java-приложения собственной разработки принял на себя нагрузку восьми Tomcat'ов, обслуживая более 70 тысяч HTTP-запросов в секунду общей пропускной способностью 3000 Mb/s. Таким образом, весь трафик Одноклассников, связанный с пользовательскими смайликами, обрабатывался одним сервером.

                      Вполне естественно, что высокие нагрузки требовали нестандартных решений. В цикле статей о разработке высоконагруженного сервера на Java я расскажу о проблемах, с которыми нам пришлось столкнуться, и о том, как мы их преодолели. Сегодня речь пойдет о кешировании изображений вне Java Heap и об использовании Shared Memory в Java.
                      Читать дальше →
                    • Щи, или Распознавание 330 млн лиц на скорости 400 фото / сек

                        Распознаванием лиц в 2018 году никого не удивишь – каждый студент, может, даже школьник, его делал. Но всё становится немного сложнее, когда у вас не датасет на 1 млн пользователей, а:


                        • 330 миллионов пользовательских аккаунтов;
                        • ежедневно заливается 20 млн пользовательских фотографий;
                        • максимальное время на обработку одного фото не должно превышать 0.2 сек;
                        • ограниченные объемы оборудования для решения задачи.


                        В этой статье мы поделимся опытом разработки и запуска системы распознавания лиц на пользовательских фотографиях в социальной сети Одноклассники и расскажем про все ”от А до Я”:


                        • математический аппарат;
                        • техническую реализацию;
                        • результаты запуска;
                        • и акцию StarFace, которую мы использовали для PR-а нашего решения.

                        Распознавание лиц Одноклассников в деталях
                      • NewSQL = NoSQL+ACID


                          До недавнего времени в Одноклассниках около 50 ТБ данных, обрабатываемых в реальном времени, хранилось в SQL Server. Для такого объема обеспечить быстрый и надежный, да еще и устойчивый к отказу ЦОД доступ, используя SQL СУБД, практически невозможно. Обычно в таких случаях используют одно из NoSQL-хранилищ, но не всё можно перенести в NoSQL: некоторые сущности требуют гарантий ACID-транзакций.

                          Это подвело нас к использованию NewSQL-хранилища, то есть СУБД, предоставляющей отказоустойчивость, масштабируемость и быстродействие NoSQL-систем, но при этом сохраняющей привычные для классических систем ACID-гарантии. Работающих промышленных систем этого нового класса немного, поэтому мы реализовали такую систему сами и запустили ее в промышленную эксплуатацию.

                          Как это работает и что получилось — читай под катом.
                          Читать дальше →
                        • Как не положить тысячи серверов с помощью системы централизованного управления конфигурацией на примере CFEngine


                            Привет, Хабр! Меня зовут Дмитрий Самсонов, я работаю ведущим системным администратором в Одноклассниках. Основные сферы моей компетенции — Zabbix, CFEngine и оптимизация Linux. У нас более 8 тыс. серверов и 200 приложений, которые в различной конфигурации формируют 700 различных кластеров. Тема этой статьи исчерпывающе описана в заголовке.


                            Сразу хочу оговориться:


                            • Я буду предвзят, потому что участвовал во внедрении CFEngine в Одноклассниках.
                            • Я пользовался CFEngine только версий 3.3—3.4.
                            • Я не питаю никаких иллюзий по поводу CFEngine, это значимый игрок, но не лидер рынка и не его аутсайдер. В статье не будет сравнений работы CFEngine с другими системами.
                            • Из систем конфигурации у меня есть опыт использования только CFEngine и Ansible.
                            Читать дальше →
                          • Три дня, которые потрясли нас в 2013



                              «Если у вас есть сомнения, авария это или нет — то это авария!»
                              (с) Мудрость предков

                              Большие сбои в онлайн-проектах происходят редко. А в больших проектах — ещё реже. Конечно, чем сложнее система, тем выше вероятность ошибки. Один час простоя крупных систем, особенно соцсетей, обходится недёшево, и потому в больших проектах прикладывается очень много усилий по предотвращению аварий и снижению негативного эффекта для пользователей. Но иногда то ли звёзды складываются в особенную комбинацию, то ли закон Мёрфи обретает реальную силу, и большие аварии всё же происходят. В истории Одноклассников крупнейший сбой произошёл 4 апреля 2013 года: в течение трёх дней проект был целиком или частично неработоспособен. О том, что же тогда произошло, по каким причинам и как мы с этим боролись, будет наш рассказ.
                              Читать дальше →
                            • История «Титанов»



                                Всем привет, меня зовут Иван Григорьев, я работаю в компании What Games. 9 июля в Одноклассниках в режиме мягкого старта вышла наша новая игра — «Титаны». Во время разработки такого большого и сложного проекта свежая информация «с полей» обычно оказывается очень полезной. К сожалению, из-за общей закрытости нашей индустрии обмен положительным опытом между разработчиками сейчас крайне затруднен. Серией своих постов мы намерены переломить сложившуюся традицию и в режиме реального времени максимально честно рассказать о разработке современной социальной игры.
                                Читать дальше →
                              • Копаемся в памяти JVM. Манипуляции с флагами



                                  HotSpot JVM имеет множество опций для отслеживания происходящего в виртуальной машине: PrintGC, PrintCompilation, TraceClassLoading и т.п. Как правило, они включаются параметрами командной строки, например, -XX:+PrintGCDetails. Однако порой возникает необходимость включить или выключить такой флаг непосредственно во время работы приложения, когда перезапуск JVM с другими параметрами невозможен. Этого можно добиться как штатным, так и хакерским способом, причем последний и мощнее, и интереснее. Впрочем, внимания заслуживают оба.

                                  Из данной статьи вы узнаете:

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

                                  Читать дальше →
                                • SmartMonitoring — мониторинг бизнес-логики в Одноклассниках



                                    Сейчас у нас в Одноклассниках есть четыре географически распределённых дата-центра, 11 тыс. серверов, более 1 тыс. сетевых устройств, 180 сервисов. Под сервисами мы понимаем фото, видео, музыку, ленту и т. д. Ежедневно сайт посещают десятки миллионов уникальных пользователей. И за всем этим хозяйством необходимо следить, чем и занимаются:

                                    • команда инженеров, которая устанавливает оборудование, меняет диски, решает hardware-инциденты;
                                    • команда мониторинга, которая как раз ищет эти инциденты и отдаёт в работу другим командам;
                                    • сетевые администраторы, они работают с сетью, настраивают оборудование;
                                    • системные администраторы, они администрируют и настраивают портал;
                                    • разработчики.

                                    Мы сами устанавливаем и настраиваем наши серверы, но так как их очень много, то неизбежно, что каждый день что-то ломается. И наша самая главная задача в таком случае — увидеть поломку быстрее пользователей. Поэтому за работу всего портала отвечает целая команда мониторинга. Они просматривают графики, ищут в них аномалии, заводят инциденты, распределяют «автоинциденты», которые создаются при помощи связки Zabbix + JIRA. Мы не просто мониторим бизнес-логику, но и автоматически её анализируем. Подробнее об этом я и расскажу далее.
                                    Читать дальше →
                                    • +49
                                    • 11,2k
                                    • 8
                                  • Геймификация багфикса. Как мы превратили исправление ошибок в увлекательную многопользовательскую online-игру

                                      Автор: maxim_korobtsev, WorkAndPlay.Ru

                                      Совсем недавно в компании Одноклассники прошло интересное и необычное событие. Пять дней разработчики и тестировщики участвовали в Багатлоне, киберспортивном соревновании по багфиксу и прокачке навыков.

                                      Фиксить баги скучно, если не превращать это в игру. Особенно, если речь идет о низкоприоритетных багах, которые не были исправлены в свое время из-за незначительности. Но, обо всем по порядку!

                                      Как все начиналось?


                                      Все началось за несколько месяцев до Багатлона, когда мы, Work&Play, вместе с OK придумывали игровые механики и само соревнование. Родилась достаточно неплохая идея: расфасовать все множество накопившихся низкоприоритетных багов по группам (коробкам с багами). Для каждого бага заранее указать навыки, которые он прокачивает у того, кто его фиксит или проверяет. Далее раз в несколько месяцев устраивать соревнование. Причем, победителем будет не тот, кто больше пофиксил, а тот, кто больше всех прокачался пока багфиксил. Также хотелось, чтобы вся игра проходила без отрыва от работы(в рабочие дни), по тикетам из багтрекера и доступ к ней был прямо из Jira.

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

                                      Что у нас получилось в итоге?


                                      В результате, после нескольких месяцев работы над плагином, у нас получилось вот это:
                                      главный экран jira модуля для геймификации багфикса
                                      Читать дальше →
                                    • Миллион видеозвонков в сутки или «Позвони маме!»

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



                                        Далее текстовая версия доклада на HighLoad++ Siberia, из которой вы узнаете:

                                        • как работают сервисы видеозвонков под капотом;
                                        • как красиво пробить NAT — это будет интересно и специалистам из игровой сферы, которым необходимо peer-to-peer соединение;
                                        • как устроен WebRTC, какие протоколы в него входят;
                                        • как можно тюнить WebRTC через BigData.


                                        О спикере: Александр Тоболь руководит разработкой платформ Видео и Ленты в ok.ru.
                                        Читать дальше →
                                      • Класс дедлоков про дедлок классов



                                          Знаете ли вы, как избежать дедлоков в своей программе? Да, этому учат, про это спрашивают на собеседованиях… И тем не менее, взаимные блокировки встречаются даже в популярных проектах серьёзных компаний вроде Google. А в Java есть особый класс дедлоков, связанный с инициализацией классов, простите за каламбур. Такие ошибки легко допустить, но трудно поймать, тем более, что сама виртуальная машина вводит программиста в заблуждение.

                                          Сегодня пойдёт речь про взаимные блокировки при инициализации классов. Я расскажу, что это такое, проиллюстрирую примерами из реальных проектов, попутно найду багу в JVM, и покажу, как не допустить такие блокировки в своём коде.

                                          Читать дальше →

                                        Самое читаемое