Случайны выбор дневника Раскрыть/свернуть полный список возможностей


Найдено 2632 сообщений
Cообщения с меткой

выступления - Самое интересное в блогах

Следующие 30  »
opetrov

Европейский вещательный союз защитит право России на участие в Евровидении

Понедельник, 27 Марта 2017 г. 15:08 (ссылка)
infopolk.ru/1/M/16324-evrop...b63e01cc03


  Европейский вещательный союз (EBU) рассчитывает, что все исполнители смогут принять участие в конкурсе и проследит, чтобы среди них была и Россия, заявил в интервью берлинской газете Tagesspiegel
...

Комментарии (0)КомментироватьВ цитатник или сообщество
oryoberta

Европейский вещательный союз защитит право России на участие в Евровидении

Понедельник, 27 Марта 2017 г. 13:13 (ссылка)
infopolk.ru/1/M/16324-evrop...144a12aa01

Европейский вещательный союз защитит право России на участие в Евровидении



  Европейский вещательный союз (EBU) рассчитывает, что все исполнители смогут принять участие в конкурсе и проследит, чтобы среди них была и Россия, заявил в интервью берлинской газете Tagesspiegel ...
Комментарии (0)КомментироватьВ цитатник или сообщество
lj_miumau

Мое видео для #amoconf

Понедельник, 21 Марта 2017 г. 01:52 (ссылка)



Для организаторов - другие посты про это:

https://www.facebook.com/mammamiu
https://www.instagram.com/p/BR4LlCpFCsa/?taken-by=mammamiu

Я сегодня, вернувшись от врача (с полностью залитыми лекарствами глазами) взялась снимать видео, нужное, чтобы попроситься выступать на конференцию amoCONF в Москве. Мы видели уже другое мероприятие этих организаторов, и нам очень понравилось. И когда мы увидели, что они вот такое устраивают, сразу загорелись: хочу! (Представляете, я, которую в командировки обычно выпихивают исключительно пинками :-))

В ходе съемок мы придумали завороченное предложение: как сделать видео, на котором не видно, что объект съемок ничего не видит? :-) "Вививи". Первые две съемки ушли в помойку, потому что я там смотрела в камеру воооот такими глазами. Потом как-то уговорила себя не делать такое лицо - все равно ведь от этого лучше не становится. :-))
Единственный, кто получился в этом ролике хорошо, это Мусечка. :-)) (Что бы мы без нее делали!)


Вообще, я не любительница делать все в последниюю минуту (как вы знаете). Просто я все надеялась, что у меня вид чуть менее затуманенным станет в обозримом будущем. Но вышло не очень. А делать нечего, дедлайн завтра.

Итак, дорогие друзья, если вы хотите, чтобы я прилетела к вам к 7 апреля, смотрите и лайкайте.
И если случится чудо чудесное, и меня туда возьмут, и я действительно туда поеду, некоторые особенно любящие родные и близкие собираются устраивать спортивные пари на то, расплачусь ли я перед такой непривычной большой аудиторией. (Дада, мои в меня верят.) :-)))
На самом деле я никаких аудиторий не боюсь, до тех пор, пока все они живьем передо мной. Это они ссылаются на давнюю драму в телестудии, почему-то там, на этом маленьком закрытом островке, я растерялась. Но говорят, что было бы лучше, если бы я расплакалась. Стала бы звездой ютюба. А то кого интересуют бизнес-лекции, сами понимаете. Вот рудающая "Герилья. Муза" - это да. :-))
Ну ладно, ладно. Вот фам фото единственной дамы, которая сегодня выглядит свежо, как всегда:






***

Участвую в конкурсе «Открытый слот» от amoCONF – самой большой бизнес-конференции в России. Хочу выступать в Олимпийском! Подробности на сайте www.amoconf.ru
#amoCONF

http://miumau.livejournal.com/2437177.html

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
AGATA2013

Морячка Соня и другие...BAND ODESSA

Четверг, 16 Марта 2017 г. 04:47 (ссылка)

ВСЕМ САМОГО ХОРОШЕГО НАСТРОЕНИЯ!!!

Дорогие друзья! Лечу в отпуск на месяц, не скучайте, не засыпайте меня ссылками, трудно потом будет их разгребать,всем отличного времяпровождения на Ли.ру..
А ПОКА НАЧНИТЕ С ТАНЦЕВ! ДО СКОРОЙ ВСТРЕЧИ!Я УЛЕТАЮ В ДАЛЬНИЙ ПУТЬ,НО СЕРДЦЕ С ВАМИ ОСТАЁТСЯ....











Метки:   Комментарии (10)КомментироватьВ цитатник или сообщество
AGATA2013

Евровидение 2017. Юлия Самойлова FLAME IS BURNING

Воскресенье, 12 Марта 2017 г. 23:52 (ссылка)




Мне кажется, что это не самая лучшая из её песен, послушайте вот это:





Метки:   Комментарии (13)КомментироватьВ цитатник или сообщество
AGATA2013

Быть женщиной...Из дневника Tatjanushka

Воскресенье, 12 Марта 2017 г. 23:32 (ссылка)

Автор монолога: Наталья Коростелева


Метки:   Комментарии (3)КомментироватьВ цитатник или сообщество
Romeo_Paradise

Я живу только на сцене

Вторник, 07 Марта 2017 г. 23:55 (ссылка)


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



ывпарокенргнек (700x700, 458Kb)


Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
sasha_psih

VERSUS BPM: MickeyMouse VS Витя CLassic » Версус Баттл (Versus Battle)

Четверг, 16 Февраля 2017 г. 10:17 (ссылка)
vbatle.ru/347-versus-bpm-mi...assic.html

В сеть вышел новый, уже третий по счёту, Версус на битах, в котором приняли участие такие исполнители, как MickeyMouse и Витя Классик. Если первого исполнителя зрители уже могли видеть на 140 bpm, то
Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Сравнение решений по балансировке высоконагруженных систем

Пятница, 10 Февраля 2017 г. 20:02 (ссылка)

И вновь мы публикуем расшифровки выступлений с конференции HighLoad++, которая прошла в подмосковном Сколково 7—8 ноября 2016 года. Сегодня Евгений Пивень знакомит с решениями балансировки в облаках.



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



Сначала я пробегусь по понятиям, которыми буду оперировать. Начнём с того чем мы занимается: RTB, Real Time Bidding — показ рекламы с аукционом в реальном времени. Очень упрощенная схема того, что происходит, когда вы заходите на сайт:







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



Особенности IPONWEB



У нас вся инфраструктура в облаках. Мы очень активно пользуемся Amazon и GCE, у нас несколько тысяч серверов. Главная причина, по которой мы полностью живем в облаках, — это скалируемость, то есть у нас реально часто нужно добавлять/удалять инстансы, иногда очень много.



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



Для нас не актуально кэширование. Мы не поддерживаем CDN. Если нашим клиентам нужны CDN, то они сами занимаются этими решениями. У нас есть очень сильные суточные и событийные колебания. Они проявляются во время праздников, спортивных событий, каких-то сезонных скидок и т. д. Суточные можно хорошо посмотреть на таком графике:







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



У нас есть большой разброс пользователей по всему миру. Это — вторая большая причина, почему мы пользуемся облаками. Нам очень важно отдать ответ быстро, и если сервера находятся в каких-то других регионах от пользователей, то часто это неприемлемо для RTB-реалий.



И у нас есть чёткое разграничение серверного и пользовательского трафика. Вернёмся к той схеме, которую я показал на первом слайде. Для простоты всё то, что приходит от пользователя до первичного RTB-сервера — это пользовательский трафик, все то что происходит за ним — это серверный трафик.







Зачем балансировать?



Две главные причины — это масштабируемость и доступность сервисов.



Масштабируемость — это когда мы добавляем новые сервера, когда мы из одного сервера, который уже не может справиться, вырастаем как минимум до двух, и между ними надо как-то раскидывать запросы. Доступность — это когда мы боимся, что с этим одним сервером что-то случится. Опять же нужно добавить второй, чтобы между ними как-то всё это балансировать и распределять запросы только по тем серверам, которые могут на них ответить.



Что ещё часто требуется от балансировщиков? Эти функции, естественно, для целей каждого приложения могут быть разными. Для нас больше всего актуально SSL Offload. Как это работает, показано здесь.







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



Ещё нам очень важна такая шутка, как Sticky-балансировка, которую часто называют session affinity.







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



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



Также у нас есть Fallback. На примере сверху виден баннер, на котором он не работает, а справа — баннер, на котором он работает.







Fallback — это ситуация, когда по каким-то причинам бэкенд не справляется, и дабы не сломать страницу пользователю, мы отдаем ему обычно совсем пустой пиксель. Здесь я его нарисовал большим зеленым прямоугольником для понимания, но на самом деле обычно это просто маленькая гифка, двухсотый HTTP Response и правильный набор header’ов, чтобы у нас не сломалось ничего в верстке.



Так у нас выглядит нормальная балансировка.







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



Это — балансировка курильщика. Здесь что-то пошло не так.







Проблема — на стороне Amazon. Подобное, кстати, произошло совсем недавно, буквально две недели назад. С амазоновских балансеров трафик стал приходить в таком виде.



Стоит сказать, что метрики — это хорошо. Здесь Amazon до сих пор не верит нам, что у нас происходит что-то плохое. Они видят только вот этот общий график, в котором видно лишь сумму запросов, но не видно, сколько запросов приходит по инстансам. До сих пор с ними боремся, пытаемся им доказать, что что-то с их балансировщиком идет не так.



Балансировка DNS



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







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



Первое, чем мы начали пользоваться, — это была обычная DNS-балансировка.







Пользуемся Round-robin DNS-пулами.







Каждый раз при запросе на DNS, пул ротируется, и сверху оказывается новый IP-адрес. Таким образом работает балансировка.



Проблемы обычного Round-Robin DNS:




  • У него нет никаких проверок статуса. Мы не можем понять, что с бэкэндом случилось что-то не то и перестать отсылать на него запросы.

  • У нас нет понимания геолокации клиента.

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



Балансировка gdnsd



На помощь приходит gdnsd – это DNS сервер, который многие, наверное, знают, которым мы активно пользуемся и сейчас.




  • Главная фича gdnsd, которой мы пользуемся, — это DYNA-записи. Это такие записи, которые выдают на каждый запрос, используя некий плагин, динамически либо одну A-запись, либо набор A-записей. Там внутри они могут использовать Round-robin.

  • gdnsd умеет поддерживать базы данных geoIP.

  • У него есть проверка статуса. Он может по TCP какие-то запросы посылать хосту, по HTTP смотреть Response и выкидывать из пула те серверы, которые не используются, в которых в данный момент есть какая-то проблема.



Чтобы поддерживать динамичность этих записей, нам нужно поддерживать довольно низкий TTL. Это сильно увеличивает трафик на наши DNS-сервера: довольно часто клиентам приходится перезапрашивать эти пулы, и поэтому DNS-серверов, соответственно, приходится иметь больше.



Через какой-то промежуток времени мы сталкиваемся с проблемой 512 байт.







Проблема 512 байт — это проблема практически всех DNS-серверов. Изначально, когда DNS только проектировался, максимальный MTU у модемов был 576 байт. Это 512 байт + 64 длины заголовка. Пакеты от DNS исторически не отсылают больше чем 576 байт по UDP.

Соответственно если у нас пул длиннее, чем 512 байт, то мы отсылаем только часть пула, включаем в нем флаг truncated. Потом уже от клиента приходит запрос по TCP, переспрашивая нас опять это пул. И тогда мы присылаем ему полный пул, теперь уже по TCP.



Эта проблема была только у части наших клиентов, примерно у 15%. Мы смогли выделить их отдельно в пул и использовать для них weighted-пулы в gdnsd.



Бонус weighted-пулов в этом случае — их можно разбивать. Если у нас, скажем, 100 серверов, мы их разбиваем на 5 частей. Мы отдаем на каждый запрос один из этих маленьких подпулов, в которых всего 20 серверов. И Round-robin проходит по этим маленьким пулам, каждый раз он выдает новый пул. Внутри самого пулa тоже используется Round-Robin: он шаффлит эти айпишники и каждый раз выдает новые.



Веса gdnsd можно использовать помимо этого для, например, staging серверов. Если у вас есть более слабый инстанс, вы на него можете изначально отсылать гораздо меньше трафика и проверять, что что-то там сломалось, только на нём, отсылая на него достаточно маленький набор трафика. Или если у вас есть разные типы инстансов, либо вы используете разные сервера. (Я часто говорю «инстансы» потому что у нас всё в облаках, но для вашего конкретного случая это может быть не так.) То есть вы можете использовать разные типы серверов и с помощью gdnsd слать на них больше или меньше трафика.



Тут у нас тоже возникает проблема — DNS-кэширование. Часто, когда идет запрос этого пула, мы отдаем только маленький пул, и этот пул кэшируется. С этим пулом у нас продолжает жить какой-то клиент, не переспрашивая наш DNS. Такое случается, когда DNS-клиент плохо себя ведет, не придерживается TTL и работает только с маленьким ограниченным набором IP-адресов, не обновляя его. Если он получил изначально полный лист по TCP, это нормально. Но если он получил только маленький пул, который weighted, то это может быть проблемой.



Через какое-то время мы сталкиваемся с новой проблемой.







Те оставшиеся 85% серверного трафика всё ещё пользуются обычными мультифопулами, как это называется в gdnsd. С некоторыми из них начинаются проблемы.



Мы поняли, что проблема происходит только у амазоновских DNS. То есть у тех наших клиентов, которые сами хостятся в Amazon, при ресолве пула, в котором находится больше 253 хостов, им просто приходит ошибка NXDOMAIN, и они полностью не ресолвят этот целый пул.



Это произошло тогда, когда мы добавили около 20 хостов, и у нас их стало 270. Мы локализовали число до 253, мы поняли, что на этом количестве становится проблемно. Сейчас эту проблему уже починили. Но на тот момент мы поняли, что топчемся на месте, и надо как-то эту проблему решать дальше.



Так как мы находимся в облаках, первое, о чем мы подумали, — попробовать вертикальное масштабирование. Оно сработало, соответственно, мы сократили количество инстансов. Но опять же, это временное решение проблемы.



ELB



Мы решили попробовать что-то еще, тогда выбор пал на ELB.







ELB – это Elastic Load Balancing, решение от Amazon, которое балансирует трафик. Как это работает?



Они предоставляют вам CNAME, в данном случае это вот эта страшная строчка под www.site.com: elb, цифры, регион и так далее. И этот CNAME ресолвится на несколько внутренних айпишников инстансов, которые балансируют на наши бэкенды. В таком случае нам нужно всего один раз привязать их CNAME в нашем DNS к нашему пулу. Потом мы уже добавляем в группу серверы, на которые раскидывают балансировщики.



ELB умеет SSL Offload, к нему можно прицепить сертификат. Также он умеет HTTP status checks, чтобы понимать, насколько живые у нас инстансы.



Мы практически сразу стали сталкиваться с проблемами с ELB. Есть такая шутка как прогрев балансировщиков ELB. Это нужно, когда вы хотите пускать больше 20—30 тысяч запросов в секунду. Прежде чем перевести весь ваш трафик на ELB, вам нужно написать письмо в Amazon, сказать, что мы хотим пустить много трафика. Вам присылают письмо с кучей страшных вопросов про характеристики вашего трафика, сколько, когда, как долго вы собираетесь это всё поддерживать. Затем они добавляют новых инстансов в свой пул и готовы к наплыву трафика.



И даже при предварительном прогреве мы столкнулись с проблемой. Когда мы у них запросили 40 тысяч запросов в секунду, примерно на 30 тысячах у них все сломалось. Нам пришлось все это дело быстро откатывать.



Ещё у них есть балансировка по скорости ответов. Это алгоритм работы амазоновского балансировщика. Он смотрит насколько быстро ваши бэкенды отвечают. Если он видит, что быстро, то шлет туда больше трафика.



Проблема здесь в чем? Если ваш бэкенд отчаянно пятисотит [выдаёт код состояния HTTP 5XX, что говорит об ошибке сервера] и не справляется, то балансировщик думает, что бэкэнд очень быстро отдает ответы, и начинает слать ему ещё больше трафика, загибая ваш бэкэнд ещё сильнее. В наших реалиях это ещё проблемнее, потому что мы, как я уже рассказывал, обычно отсылаем 200-ый ответ, даже если всё плохо. Пользователь не должен видеть ошибку — просто посылаем пустой пиксель. То есть для нас эту проблему решить ещё сложнее.



На последней конференции Amazon они рассказывали, что если у вас что-то плохое происходит, то в exception’ы заворачивайте какие-нибудь таймауты по 100-200 мс, искусственно замедляя 500-ые ответы, чтобы амазоновской балансировщик понимал, что ваш бэкенд не справляется. Но вообще, по-хорошему надо делать правильные status checks. Тогда ваш бэкенд понимал бы, что есть проблемы, и отдавал бы на status checks проверки проблему, и его просто выкидывало бы из пула.



Теперь у Amazon появилось новое решение: Application Load Balancer (ALB). Это довольно интересное решение, но нам оно не сильно актуально, потому что оно для нас ничего не решает и скорее всего будет стоить гораздо больше. Их система с хостами стала сложнее.



Но ALB поддерживает Path-based routing: это значит, что если у вас, например, пользователь приходит на /video, то вы можете перенаправлять запрос на один набор инстансов, если на /static, то на другой, и так далее.



Есть поддержка WebSocket, HTTP/2 и контейнеров. Если у вас Docker внутри одного инстанса, то он может распределять между ними.



GLB



В Google мы пользуемся GLB. Это довольно интересное решение. По сравнению с Amazon, у него есть много преимуществ.



Первое — у нас всего 1 IP. Когда вы создаете балансировщик в Google, вам даётся единственный айпишник, который вы можете привязать к своему сайту. Это значит, что вы можете привязать его даже к «голому» домену. CNAME же можно привязать к домену второго уровня.







Вам нужно создать всего один балансировщик по всем регионам. То есть в Amazon нам нужно в каждом регионе создавать по балансировщику, чтобы балансировать между инстансами внутри этого региона, а в Google — всего один балансировщик, всего один один IP, и он балансирует между всеми вашими инстансами по разным регионам.



Гугловский балансировщик умеет Sticky и по IP, и по cookie. Я рассказывал, зачем нужен Sticky — нам нужно одного пользователя переслать на один бэкэнд. Амазоновские балансировщики умеют только по cookie, то есть они сами на уровне балансировщика выдают cookie. Потом его проверяют, и если видно, что у пользователя cookie, соответствующий одному из инстансов, его отсылают на тот же самый. Гугловский умеет IP, что нам гораздо лучше, хоть и не всегда решает все проблемы.



У балансировщика Google есть Instant warm-up: его не надо никак прогревать, на него сразу можно отсылать до миллиона запросов. Миллион запросов — это то, что они обещают сами точно, и то, что я сам проверял. Думаю, дальше они растут как-то сами внутри.



Но при этом у них есть проблема с резким изменением числа бэкендов. В какой-то момент мы добавили около 100 новых хостов. На этом этапе гугловский балансировщик загнулся. Когда мы стали общаться с инженером из Google, они сказали: добавляйте по одному в минуту, тогда будет вам счастье.



Также недавно в их HTTP-балансировщике подрезали порты, которыми вы можете пользоваться при создании балансировщика. Раньше было обычное поле для ввода, сейчас можно выбрать только между 80 и 8080 портами. Для кого-то это может быть проблемой.



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






Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/321560/

Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Балансировка нагрузки и отказоустойчивость в «Одноклассниках»

Среда, 08 Февраля 2017 г. 17:34 (ссылка)

Мы продолжаем посты с расшифровками выступлений на конференции HighLoad++, которая проходила в подмосковном Сколково 7—8 ноября 2016 года.



Здравствуйте, меня зовут Никита Духовный, и я работаю ведущим системным администратором в проекте «Одноклассники».



На данный момент инфраструктура «Одноклассников» располагается более чем на 11 тысячах физических серверов. Они расположены в 3-х основных дата-центрах в Москве. Также у нас есть точки присутствия CDN. По последним данным в час пик мы отдаем нашим пользователям свыше 1 терабита трафика в секунду.



В отделе системного администрирования мы разрабатываем и развиваем системы автоматизации. Мы занимаемся многими исследовательскими задачами. Мы помогаем разработчикам запускать новые проекты.



Сегодня мы поговорим о балансировке нагрузки и отказоустойчивости на примере нашей социальной сети.



На заре проекта перед «Одноклассниками» стояла задача сделать балансировку нагрузки между многими фронтендами. Проект проживал взрывоопасный рост, и поэтому решение было принято следующим. Пользователь заходил на www.odnoklassniki.ru, в ответ получал редирект на конкретное имя сервера, например, wg13.odnoklassniki.ru. Это имя было намертво привязано к физическому серверу.



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



Тогда мы решили ввести в эксплуатацию балансировщики нагрузки. Нам было достаточно использовать Layer 4 балансировку. Что это значит? Это значит, что балансировщик осведомлен об IP-адресе и порте. То есть пользователь, приходя на виртуальный IP, порт 80, будет отправлен на порт 80 реального сервера, приходя на порт 443, будет отправлен на порт 443.



Мы рассматривали разные опции. На тот момент выбор был между проприетарными решениями — причём как программными, так и программно-аппаратными — и открытым проектом LVS (Linux Virtual Server). По результатам тестирования мы не нашли ни одной причины остановиться на проприетарных решениях.



Как мы организовали схему работы LVS



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







Мы хотели, чтобы наш кластер LVS был отказоустойчивым, поэтому мы организовали пары master/standby. Между парами master/standby постоянно происходит синхронизация сессий. Для чего это нужно? Чтобы при вылете master-сервера, пользователь, попадя на standby-сервер, был отправлен на тот же самый фронтенд.



Также между серверами запущен протокол VRRP средствами известного демона keepalive. Это нужно для того, чтобы IP-адрес самого сервера LVS переехал на standby. Таких пар master/standby у нас много. Между ними мы балансируем средствами протокола ECMP. Причем наше сетевое оборудование также осведомлено о настройках персистентности, и таким образом работает вся цепочка. Пользовательский запрос будет отправлен на одну и ту же пару LVS, пара LVS, в свою очередь, отправит на тот же самый фронтенд.



Нужно было каким-то образом управлять таблицей балансировки. На тот момент мы выбрали популярное решение ldirector. Демон ldirecor добавляет реальные сервера в таблицу балансировки на основании своего конфига. Он также осуществляет проверки реальных серверов. И в случае если какой-то из реальных серверов начинает возвращать ошибку, ldirector корректирует таблицу балансировки, и этот сервер выводится из ротации.



Всё выглядело хорошо, но количество серверов увеличивалось. На данный момент в каждом из наших дата-центров у нас есть двести фронтендов типа web — это те сервера, которые обрабатывают запросы www.odnoklassniki.ru.



Дело в том, что ldirector осуществляет свои проверки в однопоточном режиме. В случае неполадок, когда сервера начинают отвечать дольше, чем таймаут, происходит следующее: запрос приходит на первый сервер, ждёт время таймаута (например, 5 секунд), и только после этого проверка приступает ко второму серверу. Таким образом, при масштабной проблеме, например, когда затронута половина серверов, вывод этой половины занимает более 8 минут. Это было неприемлемо.



Чтобы решить эту проблему, мы написали собственное решение: ok-lvs-monitor. Оно обладает двумя главными достоинствами.




  1. Осуществляет проверки в многопоточном режиме. Это значит, что при описанной выше проблеме сервера будут выведены из ротации одновременно.

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



В ходе эксплуатации LVS мы столкнулись с рядом технических проблем.




  • Мы наткнулись на то, что при синхронизации сессий имеется довольно большое расхождение между master и standby.

  • Процесс синхронизации работал только на первом ядре процессора.

  • На standby-сервере он потреблял свыше 50% этого ядра.

  • Также были замечены разные мелочи. Например, утилита управления таблицей балансировки ipvsadm не различала Active/InActive сессии в случае с нашей конфигурацией.



Мы репортили баги разработчику проекта LVS, помогали в тестировании, и все эти проблемы были устранены.



Настройки персистентности



Ранее я упоминал, что у нас используются настройки персистентности. Для чего это нам?



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



LVS умеет делать персистентность на основании клиентского IP-адреса. И вот тут-то мы столкнулись со следующей проблемой. Популярность набирал мобильный интернет, и многие операторы, в первую очередь, крупнейший оператор Армении, прятали своих пользователей всего за несколькими IP-адресами. Это приводило к тому, что наши mobile-web сервера стали очень неравномерно нагружены, и многие из них были перегружены.



Мы решили обеспечивать персистентность по cookie-файлу, который ставим пользователю. Когда речь идёт о cookie-файле, к сожалению, невозможно ограничиться Layer 4 балансировкой, потому что речь идёт уже о Layer 7, об уровне приложения. Мы рассмотрели различные решения, и на тот момент самым лучшим был HAProxy. Популярный в наши дни nginx тогда не обладал должными механизмами балансировки.







Пользовательский запрос, попадая на сетевое оборудование, балансируется всё по тому же протоколу ECMP, до сих пор ничего не поменялось. А вот дальше начинается интересное: безо всякой персистентности, чистым Round-robin запрос отправляется на любой из HAProxy серверов. Каждый из этих серверов в своей конфигурации хранит соответствия значения cookie-файла к конкретному фронтенд-серверу. Если пользователь пришел первый раз, ему будет поставлен cookie-файл, если пользователь пришел второй и последующие разы, он будет отправлен на тот же самый мобильный фронтенд.



Подождите, скажите вы, то есть «Одноклассники» поставили кластер балансировщиков за кластером балансировщиков? Выглядит как-то сложновато.







На самом деле, давайте разберемся. Почему бы и нет?



В случае с нашей ситуацией процент трафика, проходящего через HAProxy, составляет менее 10% трафика, проходящего через весь LVS. То есть для нас это не какое-то дорогое решение. А вот преимущество у такого подхода налицо.



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



Аварии в дата-центре



«Одноклассники» за свою историю неоднократно сталкивались с авариями. У нас была история, когда сгорели и основная, и резервная оптика к дата-центру. Дата-центр стал недоступен. У нас была история, когда из-за неправильной проектировки стала плавиться электрическая проводка в дата-центре, что привело к пожару. У нас была очень увлекательная история, когда ураган в Москве оторвал кусок крыши, а он вывел из строя систему охлаждения в дата-центре. Нам надо было принимать решение, какие сервера выключать, а какие оставлять, потому что начался перегрев.



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



Каким образом мы шли к этой цели?




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

  • Мы используем replication factor=3. Вкупе эти два пункта приводят к тому что в каждом из дата-центров появляется своя реплика данных.

  • В наших системах мы используем quorum=2. Это значит, что при вылете одного из дата-центров система будет продолжать свою работу.



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







Если вы сделаете DNS-запрос на www.ok.ru, то вы увидите, что вам отдаётся 3 IP-адреса. Каждый из этих адресов как раз и соответствует одному дата-центру.



Мы обрабатываем ситуацию с аварией в дата-центре автоматически. Здесь вы можете видеть пример такой проверки:







Видно, что в случае если 10 из 20 последних проверок были неуспешны, IP-адрес этого дата-центра перестанет отдаваться. 10 — это довольно много, вывод дата-центра — это тяжелая операция. Мы хотим быть уверенными, что правда началась авария. Здесь можно увидеть, что автоматически дата-центр будет заведен в ротацию в случае 20 из 20 успешных проверок. Да, вывод — это операция тяжелая, но мы хотим быть уверенным, что всё в порядке, перед тем как заводить пользователей.



По нашим подсчетам, при такой методике за 5 минут из дата-центра уйдет 80 % аудитории. Есть предположения, откуда взялась цифра 5 минут?







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



Представим, что пользователь идёт на IP-адрес 217.20.156.159. Пользователь попадет в один из дата-центров. Другой пользователь, обращаясь к тому же самому IP-адресу, может на самом деле попасть в соседний дата-центр. Для чего это нужно? В случае отказа одного из пограничных раутеров пользователи не заметят никакого эффекта.



Здесь есть тонкий момент. Я вам только что рассказывал про то, что у нас в каждом дата-центре будет свой IP-адрес для сервиса и вроде бы даю вам противоречащую информацию. На самом деле нет. На уровне ядра сети в каждом дата-центре всё-таки свой набор сетей, и просто пограничные раутеры, используя либо прямое соединение, либо своё кольцо, имеют возможность отправить запрос в нужный дата-центр.







По поводу ядра сети. Всё сетевое оборудование у нас зарезервировано с таким запасом мощности, чтобы быть способным принять на себя нагрузку вылетевшего соседа. Только авария со всем ядром сети правда приведет к ситуации, когда нам придется выводить трафик из дата-центров.



Тяжелый контент



Под тяжелым контентом я подразумеваю музыку, видео и фотографии.



Дело в том, что значительная часть аудитории «Одноклассников» не может похвастаться таким же качеством Интернет-соединения, как жители столицы. Во-первых, большая часть нашей аудитории проживает за пределами Российской Федерации. Во многих странах скорость зарубежного интернета и внутреннего очень сильно различается. Во-вторых, пользователи в удаленных регионах в принципе зачастую не могут похвастаться стабильным каналом. Даже если он стабилен, это вовсе не значит, что он не медленный.



Мы хотели сделать так, чтобы пользователям было комфортно работать с «Одноклассниками». Поэтому мы задумались о собственном решении CDN.



Идея CDN довольно проста. Вы берёте кэширующие сервера и ставите их близко к пользователю. При построении CDN обычно используется один из двух классических подходов.



IP Anycast. Его суть заключается в том, что каждая из ваших площадок анонсирует в мир одну и ту же сеть, одни и те же адреса. И то, на какую площадку попадет ваш пользователь, определяет текущая топология Интернета. Плюсы такого подхода очевидны: вам не нужно имплементировать никакую логику для того, чтобы пользователь попал на оптимальную площадку.







Минусы также хорошо видны. Представим, что у вас есть CDN в Воронеже, вы хотите провести с ним серьезные сервисные работы. Для этого вам нужно отправить всех пользователей на какую-то конкретную площадку, например, в Санкт-Петербург. Используя IP Anycast в чистом виде, у вас нет прямых механизмов, как вы можете это сделать. Кроме того, вы должны будете готовить ваше приложение к такому повороту событий, как неожиданный переход пользователя. В топологии Интернета что-то изменилось, и пользователь следующий запрос отправляет на другую площадку.



Другая классическая технология основана на использовании геолокации и DNS. В чем суть?







Москвич, делая запрос за статическим контентом, за именем сервиса, который отдает статический контент к DNS, получит в ответ московский IP-адрес и будет отправлен на площадку в Москве. Житель Новосибирска, делая аналогичный запрос, получит IP-адрес площадки в Новосибирске и будет отправлен туда.



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



У «Одноклассников» была еще одна задача: мы хотели запускать проекты вида «трафик до «Одноклассников» бесплатно». То есть, выбирая, к примеру, мобильное подключение нашего партнера, всё то, что вы делаете через мобильное приложение Одноклассников, не учитывается как расход трафика. Чтобы осуществить такую задачу, наш CDN должен был обладать функционалом, позволяющим отправлять только те сети на площадку, которые хочет видеть там наш партнер.



Классические решения для такой задачи не подходят. Что мы сделали?







На площадке CDN наш сервер по BGP устанавливает соединение с Route Server провайдера, получая от него список тех сетей, которые провайдер хочет на нём видеть. Далее список префиксов передается на наш GSLB DNS, и тогда уже пользователь, обращаясь DNS-запросом, получает IP-адрес как раз в той площадке, что нужно. Площадка, в свою очередь разумеется весь контент забирает из основных дата-центров.







Внутри площадки между серверами мы балансируем, используя довольно тривиальный подход. У каждого из серверов есть свой IP-адрес, и по DNS-запросу отдаются оба IP-адреса. Таким образом, пользователи будут распределены между серверами приблизительно поровну. В случае отказа одного из серверов средствами всё того же протокола VRRP IP-адрес будет прозрачно переведен на другую ноду. Пользователи ничего не заметят.







Разумеется, мы осуществляем проверки всех наших площадок. В случае, если площадка перестает возвращать статус ОК, мы перестаем отдавать её IP-адрес. В таком случае пользователь из Новосибирска пойдет в дата-центры в Москве. Это будет немного медленнее, но это будет работать.



На наших CDN-площадках мы используем внутренне разработанные приложения для видео, музыки и фото, а также в дополнении к этому nginx. Хотел бы упомянуть основной момент оптимизации, который применятся в наших приложениях. Представим, что у вас есть несколько серверов, которые отдают тяжелый контент. Пользователь приходит на один сервер и спрашивает у него этот контент. Контента там не находится. Тогда сервер забирает этот контент с площадки в Москве. Но что будет, когда следующий пользователь придет за тем же самым контентом на второй сервер? Мы не хотели бы, чтобы сервер шел опять за тем же самым контентом в Москву. Поэтому в первую очередь он сходит на свой соседний сервер и заберет контент с него.



Будущее



Хотел бы рассказать о нескольких проектах, которыми нам было бы очень интересно заняться и которые нам было бы очень интересно реализовать.



Мы хотели бы видеть, чтобы каждый из наших сервисов, например, www.odnoklassniki.ru, всё-таки жил за одним IP-адресом. Для чего?




  • В случае отказа дата-центра в таком случае для пользователей всё происходило бы прозрачно.

  • Vы избавились бы от проблемы с некорректно себя ведущими кэширующими DNS, которые продолжают отдавать IP-адрес выведенной площадки, несмотря на то, что мы его уже не отдаем.

  • Раз в TTL времени (то есть в нашем случае раз в 5 минут) пользователь всё-таки может перейти на другую площадку.



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



Другая интересная тема. Это балансировщики Layer 4, которые работают в user space. В чём заключается их суть?



На самом деле, когда балансировщик использует сетевой стэк Linux, он постоянно переключается между user space и kernel space. Это довольно дорогая операция для CPU. Кроме того, network stack Linux — это универсальное решение. Как любое универсальное решение, оно не идеально подходит для данной конкретной задачи. Балансировщики user space Layer 4 самостоятельно реализуют тот необходимый функционал network stack, который им нужен. За счет этого, по слухам, всё работает очень быстро.



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



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







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



Спасибо за внимание!







Последние девять минут выступления Никита Духовный отвечал на вопросы из зала.
Original source: habrahabr.ru.

https://habrahabr.ru/post/321448/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество

Следующие 30  »

<выступления - Самое интересное в блогах

Страницы: [1] 2 3 ..
.. 10

LiveInternet.Ru Ссылки: на главную|почта|знакомства|одноклассники|фото|открытки|тесты|чат
О проекте: помощь|контакты|разместить рекламу|версия для pda