Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)Ontico
«Одноклассники» состоят из тысяч серверов, большая часть которых участвует в онлайн-обработке запросов пользователей. Каждый из этих серверов владеет только частью данных или логики. Эти части в социальной сети изолировать друг от друга невозможно, поэтому между серверами происходит много сетевого взаимодействия — разнообразного и большого по объему. Таким образом, Одноклассники — это одна из самых больших, сложных и нагруженных распределенных систем в мире.
В этом докладе Олег расскажет об опыте построения отказоустойчивых распределенных систем на Java, основных ошибках и отказах, приемах их тестирования и диагностики. Также речь пойдет об авариях в распределенных системах и методах их предупреждения.
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)Ontico
«Одноклассники» состоят из тысяч серверов, большая часть которых участвует в онлайн-обработке запросов пользователей. Каждый из этих серверов владеет только частью данных или логики. Эти части в социальной сети изолировать друг от друга невозможно, поэтому между серверами происходит много сетевого взаимодействия — разнообразного и большого по объему. Таким образом, Одноклассники — это одна из самых больших, сложных и нагруженных распределенных систем в мире.
В этом докладе Олег расскажет об опыте построения отказоустойчивых распределенных систем на Java, основных ошибках и отказах, приемах их тестирования и диагностики. Также речь пойдет об авариях в распределенных системах и методах их предупреждения.
FrontDays #1. Алексей Ульянов, React.js и методологии разработки на нёмFrontDays
От Flux к Redux. Расскажу о том, как и почему появилась методолгия Flux и какие проблемы она решила. А также почему стоит перейти или как минимум попробовать в деле Redux.
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Ontico
HighLoad++ 2017
Зал Конгресс-Холл, 7.ноября, 11:00
Презентация и тезисы:
http://www.highload.ru/2017/abstracts/2981.html
Что нового появилось в nginx за последнее время, и для чего всё это нужно? В докладе - рассказ про основные новые функции в nginx 1.11.x (доступно в стабильной ветке 1.12.x) и 1.13.x. Для чего нужен параметр сборки --with-compat, что делает директива mirror, будет ли работать TLS 1.3, как обновлять кэш с помощью proxy_cache_background_update, что такое stale-while-revalidate, как логировать JSON и что делать, если после обновления конфигурации старые рабочие процессы долго не завершаются.
Читаем CHANGES вместе и разбираем на примерах.
Виртуализация уровня операционной системы в Linux (так, называемые контейнеры) опирается на изоляцию ресурсов и на управление их использованием. Пространства имен в Linux (linux namespaces) тот инструмент, который позволяет изолировать ресурсы друг от друга на уровне имен. Например, именами процессов являются их идентификаторы (PIDs), которые можно организовать таким образом, что процессы никогда не могут узнать о существовании друг друга. Об этом и других интересных вещах рассказывается в презентации.
Введение в блокчейн и алгоритмы консенсуса / Филипп Филиппак (Waves Platform)Ontico
HighLoad++ 2017
Зал Дели + Калькутта, 7 ноября, 12:00
Тезисы:
http://www.highload.ru/2017/abstracts/3095.html
В докладе я расскажу о том, как устроен классический блокчейн: что такое транзакции и блоки, как они подписываются, из-за чего возникают форки и почему для майнинга не всегда нужны видеокарты.
Из второй части доклада можно будет узнать о разных алгоритмах консенсуса: Proof-of-Work, Proof-of-Stake, Proof-of-Activity и нескольких гибридных и экспериментальных.
Konstantin Krivlenia - "Continuous integration for frontend"IT Event
Do you want to know what is the continuous integration? how does make a controlled code when team is growing, maintain quality of code and be calm after the release. Don't be afraid to use ruthless refactoring and don't break the product features. I am glad to share with you how it make.
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайOntico
Набирает обороты мода на парадигму noBackend (см., например, http://nobackend.org/). Название не стоит понимать буквально: backend никуда не делся, просто фокус разработки — особенно на начальном этапе развития нового проекта — сильно смещается в сторону «клиентской части». Это очень понятно и закономерно в эпоху Mobile First и React Ecosystem с её новомодными GraphQL и React Native.
Появляется большой соблазн взять что-то понятное для хранения данных и уже «обвязанное» REST API, максимально отказаться от PHP/Python/Ruby/Java/etc, писать 80% кода «на стороне клиента», минимально заботясь о возне «на стороне сервера». У некоторых возникает и настоящая эйфория — чувство приятное, но очень опасное (прежде всего, если в команде нет сильного backend-опыта).
Этот доклад — компиляция опыта ряда проектов, написанных на React, React Native и Swift и переходящих на парадигму (или же сразу стартанувших с неё) noBackend за счёт PostgreSQL+PostgREST.
Мы обсудим важные вопросы, которые обязан задавать себе каждый, выбравший noBackend-подход (и не обязательно на связке Postgres+PostgREST): безопасность (аутентификация/авторизация; ограничение чтения и — особенно! — модификации «чужих» данных), производительность (нетривиальные запросы а-ля «свежий контент от тех, на кого я подписан»; компромисс между сетевой сложностью и CPU; защита от «домашнего» ddos — ситуации, когда свои же, родные «фронтендеры» кладут «бэкэнд»), масштабируемость и асинхронная обработка задач.
Задача-минимум (для всех): у каждого слушателя остаётся список must-check-вопросов для работы с noBackend-подходом.
Задача-максимум (для тех, кто с Postgres-опытом): разворачивание безопасного, высокопроизводительного и годного для быстрого развития REST API — сегодня же, в день док
FrontDays #1. Алексей Ульянов, React.js и методологии разработки на нёмFrontDays
От Flux к Redux. Расскажу о том, как и почему появилась методолгия Flux и какие проблемы она решила. А также почему стоит перейти или как минимум попробовать в деле Redux.
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Ontico
HighLoad++ 2017
Зал Конгресс-Холл, 7.ноября, 11:00
Презентация и тезисы:
http://www.highload.ru/2017/abstracts/2981.html
Что нового появилось в nginx за последнее время, и для чего всё это нужно? В докладе - рассказ про основные новые функции в nginx 1.11.x (доступно в стабильной ветке 1.12.x) и 1.13.x. Для чего нужен параметр сборки --with-compat, что делает директива mirror, будет ли работать TLS 1.3, как обновлять кэш с помощью proxy_cache_background_update, что такое stale-while-revalidate, как логировать JSON и что делать, если после обновления конфигурации старые рабочие процессы долго не завершаются.
Читаем CHANGES вместе и разбираем на примерах.
Виртуализация уровня операционной системы в Linux (так, называемые контейнеры) опирается на изоляцию ресурсов и на управление их использованием. Пространства имен в Linux (linux namespaces) тот инструмент, который позволяет изолировать ресурсы друг от друга на уровне имен. Например, именами процессов являются их идентификаторы (PIDs), которые можно организовать таким образом, что процессы никогда не могут узнать о существовании друг друга. Об этом и других интересных вещах рассказывается в презентации.
Введение в блокчейн и алгоритмы консенсуса / Филипп Филиппак (Waves Platform)Ontico
HighLoad++ 2017
Зал Дели + Калькутта, 7 ноября, 12:00
Тезисы:
http://www.highload.ru/2017/abstracts/3095.html
В докладе я расскажу о том, как устроен классический блокчейн: что такое транзакции и блоки, как они подписываются, из-за чего возникают форки и почему для майнинга не всегда нужны видеокарты.
Из второй части доклада можно будет узнать о разных алгоритмах консенсуса: Proof-of-Work, Proof-of-Stake, Proof-of-Activity и нескольких гибридных и экспериментальных.
Konstantin Krivlenia - "Continuous integration for frontend"IT Event
Do you want to know what is the continuous integration? how does make a controlled code when team is growing, maintain quality of code and be calm after the release. Don't be afraid to use ruthless refactoring and don't break the product features. I am glad to share with you how it make.
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайOntico
Набирает обороты мода на парадигму noBackend (см., например, http://nobackend.org/). Название не стоит понимать буквально: backend никуда не делся, просто фокус разработки — особенно на начальном этапе развития нового проекта — сильно смещается в сторону «клиентской части». Это очень понятно и закономерно в эпоху Mobile First и React Ecosystem с её новомодными GraphQL и React Native.
Появляется большой соблазн взять что-то понятное для хранения данных и уже «обвязанное» REST API, максимально отказаться от PHP/Python/Ruby/Java/etc, писать 80% кода «на стороне клиента», минимально заботясь о возне «на стороне сервера». У некоторых возникает и настоящая эйфория — чувство приятное, но очень опасное (прежде всего, если в команде нет сильного backend-опыта).
Этот доклад — компиляция опыта ряда проектов, написанных на React, React Native и Swift и переходящих на парадигму (или же сразу стартанувших с неё) noBackend за счёт PostgreSQL+PostgREST.
Мы обсудим важные вопросы, которые обязан задавать себе каждый, выбравший noBackend-подход (и не обязательно на связке Postgres+PostgREST): безопасность (аутентификация/авторизация; ограничение чтения и — особенно! — модификации «чужих» данных), производительность (нетривиальные запросы а-ля «свежий контент от тех, на кого я подписан»; компромисс между сетевой сложностью и CPU; защита от «домашнего» ddos — ситуации, когда свои же, родные «фронтендеры» кладут «бэкэнд»), масштабируемость и асинхронная обработка задач.
Задача-минимум (для всех): у каждого слушателя остаётся список must-check-вопросов для работы с noBackend-подходом.
Задача-максимум (для тех, кто с Postgres-опытом): разворачивание безопасного, высокопроизводительного и годного для быстрого развития REST API — сегодня же, в день док
Тема доклада: Service Workers
- Описание проблемы оффлайна и плохого интернета
- Возможные решения
- Описание, цели, поддержка этой технологии
- Примеры
Артур Пархисенко / Livestream / Front-end Engineer
«JSSDK: Начало» Когда использовать готовые решения, а когда писать самим. Какие шаги нужно сделать, чтобы ваша работа не оказалась напрасной и принесла пользу окружающим. Все эти нюансы будут рассмотрены на примере внутреннего фреймворка, который возник вследствие необходимости объединения кодовой базы двух проектов.
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey Rebrov
Как-то так происходит, что “на 10 девчонок по статистике 9 ребят”, а точнее на группу из 5-7 разработчиков – 1 тестировщик. Или его нет совсем. Так что очень часто приходится и код писать, и тестировать, а дата релиза все ближе и ближе.
В тех случаях, когда мы пишем веб-приложение, помочь в нашей нелегкой судьбе может бодрящий микс из Selenium и TestNG... Как это сделали мы, какие потом получили выводы и результаты — все это я и хочу рассказать и показать
2. Классические серверные паттерны Процессы OS процессы // инициализация фреймворка includeMyFramework; MyFramework::init(); db=DB::connect(); // while ждеточереднойзапрос while(request=FastCGI::accept()){ MyFramework::process(request); } MyFramework::finalize(); Раздельное адресное пространство
8. Гибридные паттерны Процессы + потоки Несколько процессов (Worker MPM) В каждом процессе много потоков Увеличенная надежность Event MPM отдельный поток для Keep-Alive позволяет «рабочим» потокам работать дальше, пока висит Keep-Alive
9. COMET Long Poll Разрыв связи Конец запроса Разрыв связи Конец запроса t Соединение не закрывается Соединение не закрывается данные запрос данные запрос запрос
10. COMET Streaming Разрыв связи Конец запроса t Соединение не закрывается данные запрос данные данные запрос
17. Модель работы classMyResource(resource.Resource): deflogin(self,result,request): request.write(“…"%result) request.finish() defrender_GET(self,request): name=request.args['name'] deferred=dbpool.runQuery("…"%name) deferred.addCallback(self.login) returnserver.NOT_DONE_YET Twistd пул потоков render_GET
18. Общие данные Пример COMET-приложения comet.pycomet.js все клиенты в одном массиве Twistd classClientManager: clients=[] defregisterClient(self,client): self.clients.append(client) defbroadcastMessage(self,message): forclientinself.clients: client.write(message) client.finish() self.clients=[]
19. Характеристики метода Для удобного асинхронного вызова нужно Async API Хорошо когда оно есть Плохо, что оно не всегда есть Нет синхронизации Основной процесс использует только 1 ядро Что делать при 100% загрузке CPU? Выделять сложные операции в потоки (Python – GIL, сетевые операции не thread-safe) Запускать несколько экземпляров (процессов) сервера (данные не в едином адресном пространстве)
20. Почитать Twisted Официальная документация и учебник Twisted.Web In 60 Seconds Node.js nodejs.ru Streaming file uploads with node.js
21. Continuations(Jetty, GlassFish…) Запрос 1 ожидает сообщение 1 publicclassSubscribeServletextendsHttpServlet{ protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp){ } // 1. запрос «упаковывается» в объект continuation Continuationcontinuation=ContinuationSupport.getContinuation(req); if(continuation.isInitial()){ // true // 2. сообщить серверу, что запрос неокончен continuation.suspend(); } // 3. передать continuation асинхронному обработчику ClientManager.getInstance().registerClient(continuation); Continuation (неоконченный запрос) «подвис» на сервере
22. Continuations Запрос 2 инициирует событие 2 publicclassClientManager{ // 1. массив клиентов / запросов ArrayList<Continuation>continuations=newArrayList<Continuation>(); publicsynchronizedvoidbroadcastMessage(Stringmessage){ for(Continuationcontinuation:continuations){ } } } // 2. передать информациюо событии в continuation continuation.setAttribute("message",message); // 3. попросить сервер продолжить обработку continuation.resume(); можно в цикле выдавать ответы в запросы
24. Характеристики метода Основан на потоках Используются все ядра Синхронизация, многопоточное программирование Многопоточная обработка оживших continuations publicsynchronizedvoidbroadcastMessage for(Continuationcontinuation:continuations){ // разбросает обработку continuations по потокам continuation.resume() }
26. Микронити Erlang, Stackless Python, … Предыдущие подходы: Сохранить запрос в памяти и освободить поток для нового запроса Микронити: Сделать поток максимально «легким» - и можно не освобождать Решение: отказ от потоков и стека OS, свои потоки
28. Почитать A Million-user Comet Application with Mochiweb: Part 1, Part 2, Part 3 Building an Erlang chat server with Comet: Part1, Part 2, Part 3 Comet web chat (with MochiWeb) Using the mochiweb project skeleton Mochiweb source Документация к API Erlang Официальный сайт Erlang in Practice(screencast)