avva: (Default)
[personal profile] avva
Если кто-то хочет узнать, как LiveJournal развивался от одного сервера к сегодняшнему устройству, и как это сегодняшнее устройство выглядит, советую почитать слайды, которые Брэд использовал для своего доклада на OSCON пару дней назад. Некоторые не очень значительные подробности и этапы большого пути там опущены, но всё основное и существенное упомятуто и вкратце разъяснено.

Эта ссылка только для технарей, предупреждаю. Если что-то там непонятно, можно меня спросить, я постараюсь объяснить.

Date: 2004-07-30 06:29 am (UTC)
From: [identity profile] shch.livejournal.com
ну на конец то ... а то я думал уже не дождусь

Date: 2004-07-30 06:35 am (UTC)
From: [identity profile] koshermann.livejournal.com
Дурацкий вопрос - а Вы когда-нибудь видели Брэда лично?

Date: 2004-07-30 06:56 am (UTC)
From: [identity profile] avva.livejournal.com
Нет.

Date: 2004-07-30 06:47 am (UTC)
From: [identity profile] mansch.livejournal.com
еще более дурацкий вопрос, а как Вы попали в главне разработчики ЖЖ, или это очень таинственная история ?

Date: 2004-07-30 07:02 am (UTC)
From: [identity profile] avva.livejournal.com
Постепенно. Сначала участвовал на добровольческих началах, просто потому, что ЖЖ очень понравился и хотелось как-то помочь, постепенно неплохо изучил код и внутреннее устройство, потом как раз совпало так, что перестал работать на фирму, на которую работал два года до того, и думал искать новое место, а Брэд, узнав об этом, предложил мне работать за деньги.

Но я не главный разработчик, а один из главных. Самый главный и важный - сам Брэд.

Date: 2004-07-30 06:55 am (UTC)
From: [identity profile] ilraf.livejournal.com
Ох ты, и у вас Akamai доставляет статический контент...

Date: 2004-07-30 07:03 am (UTC)
From: [identity profile] avva.livejournal.com
Юзерпики, да (ну и ещё кой-какую мелочь, но главное - юзерпики).

Даа...

Date: 2004-07-30 07:27 am (UTC)
From: [identity profile] bougakov.livejournal.com
Забавно читать это "мы подкрутили, стало полегче, но ненадолго, мы подкрутили снова, это опять помогло ненадолго, так мы подкрутили ещё и ещё..."

Re: Даа...

Date: 2004-07-30 07:32 am (UTC)
From: [identity profile] avva.livejournal.com
И так много лет, да.

Date: 2004-07-30 07:31 am (UTC)
From: [identity profile] slv.livejournal.com
На oscon2004.sxi пароль стоит :(

Date: 2004-07-30 07:32 am (UTC)
From: [identity profile] avva.livejournal.com
Не знаю, почему. Тогда pdf только. Если Вам зачем-то нужен .sxi, напишите Брэду, спросите его.

Date: 2004-07-30 07:36 am (UTC)
From: [identity profile] slv.livejournal.com
Да ничего, про sxi меньше

Date: 2004-07-30 07:39 am (UTC)
From: [identity profile] slv.livejournal.com
А что там за Jesus в структуре? :)
"Сбожией помощью" работает?

Date: 2004-07-30 07:41 am (UTC)
From: [identity profile] avva.livejournal.com
Сервер так называется.

Date: 2004-07-30 10:15 am (UTC)
From: [identity profile] onodera.livejournal.com
Нет, он логи вроде сохраняет.
Ибо Jesus saves.

Date: 2004-07-30 10:36 am (UTC)
From: [identity profile] avva.livejournal.com
Это сейчас ;) изначально это был очень мощный центральный DB-сервер, с 12Gb памяти. Когда мы распараллели юзеров по кластерам, необходимость в такой зверюге отпала. Некоторое время он только сохранял логи, а потом стал служить также кэш-сервером для memcached: он идеален для этой цели, т.к. у него очень много памяти, а сохранение логов много памяти не требует.

Date: 2004-07-30 09:04 am (UTC)
From: [identity profile] alehhandro.livejournal.com
Спасибо - очень интересно. Несколько вопросов (если конечно не секрет фирмы):

1. A зачем dist FS? Почему не хранить все в дазе банных?
2. На слайде Cache Disadvantages, было упомянуто что ставит cache между app и db - плохо. Почему? Можно иметь два слоя: один ближе к пользователю (static content) другой прямо перед db (dynamic content)..
3. Интересно, а что вы использовали для performance (и load) testing особенно когда стало так много пользователей?

Date: 2004-07-30 10:39 am (UTC)
From: [identity profile] avva.livejournal.com
1) dist FS используется для больших статических файлов. В первую очередь речь идёт о картинках - мы заканчиваем работу над сервисом image hosting, интегрированного с ЖЖ. Хранить очень большое количество фотографий и других картинок в DB невыгодно, перформанс базы данных оказывается узким местом, к тому же не получается использовать специализированные машины с огромными дисками для хранения данных (напр. тех, что продаёт NetApp, мы ими будем пользоваться). Удобнее в базе данных хранить путь к файлу, а сам файл брать из файловой системы; т.к. необходимо обеспечить удобный менеджмент многих разных хранилищ файлов, и такие вкусности, как автоматическое подключение резервной копии в случае хардверных проблем, эта файловая система так или иначе должна быть дистрибутивной, в том или ином виде. Изначально мы хотели использовать NFS, но у неё множество серьёзных проблем с перформансом и стабильностью. MogileFS это что-то вроде специализированной замены NFS, заточенной под дистрибутивное хранение большого числа статических файлов и выдачу их наружу.

2) LJ устроен так, что по сути дела статического контента нет вообще. Каждая страница генерируется динамически; статические только юзерпики. Почти каждая страница должна выглядеть по-разному в зависимости от того, какой юзер logged in и на неё смотрит, т.е. от того, какую cookie его браузер посылает серверу. Поэтому на уровне сразу перед пользователем кэшируются только юзерпики (и это делает Akamai). memcached кэширует не целые страницы, а логические объекты: содержание записи, или атрибуты юзера, или данные пользовательского стиля, итд. итп. Ставить cache между app и db плохо потому, что тогда cache должен знать о db и говорить с ней, знать устройство таблиц и полей, списки DB-серверов итд. итп. Тогда cache во-первых становится столь же медленным in the worst case, как db, с которой он говорит, а во-вторых, становится очень сложным и его постоянно надо менять и развивать, по мере того как мы меняем базу данных. Он становится по сути дела частью app, только разбитой на много машин вместо одного вебсервера. Очень неустойчивая и неудачная конфигурация. У нас сделано по-другому. С точки зрения логической организации данных cache сидит-таки между app и db, но с точки зрения обмена данными они друг о друге не знают. app сначала пробует найди данные в cache, если их там нет - обращается к db. Когда есть новые данные, пишет их и туда, и туда. Это позволяет кэшу быть очень быстрым, простым, "глупым" и супер-оптимизированным (на скорость) компонентом системы. Он всего лишь хранит любые данные по ключу и возвращает их по ключу, ничего не зная об этих данных.

3) мы не нашли удобного готового решения, которое подходило бы к нашим нагрузкам и требованиям. В результате мы тестируем сами, с помощью скриптов, которые для этого пишутся и симулируют нагрузку. Для разных частей системы это делается разными способами. Потом, если это возможно, новый код запускается на небольшой части живых серверов, а не на всех; потом на всём живом сайте. Вообще говоря, сгенерировать искусственным образом правдоподобную нагрузку, соотвествующую той нагрузке, что мы видим на живых серверах, оказывается довольно сложным и не всегда возможным (без слишком больших затрат времени/труда) делом.

Date: 2004-07-30 12:10 pm (UTC)
From: [identity profile] alehhandro.livejournal.com
1) Понятно, спасибо. Оффтоп: "Узкое место" - это я так понимаю перевод "bottleneck"? Забавно. Интересно, есть ли в русском языке более научный термин...
2) Согласен - значит я просто неправильно понял слайд. Ставить cache между app и db плохо потому, что тогда cache должен знать о db и говорить с ней - да, потому что это называется не "cache", а "cache proxy". Под "cache" я имел ввиду как раз то что вы сказали дальше любые данные по ключу что и должно стаять между db и app. Hence my question. Короче теперь "мы на одной страннице" ;)
3) Ясно. Поэтому мне было интересно есть ли что-нибудь в OpenSource связанное с этой проблеммой. Я знаю несколько платный программ-монстров (из которий больше всего уважаю LoadRunner) - но они естественно бешенно дорогие.

Date: 2004-07-30 03:35 pm (UTC)
From: [identity profile] ly0lik.livejournal.com
1. "Узкое место" — вполне адекватный русский термин, обозначающий именно "bottleneck".
...
3. LoadRunner, к сожалению, тут мало применим. Зффективно им можно симулировать лишь end-user load, и соответственно, мерять end-user experience. Что само по себе тоже очень важно, но составляет лишь заключительный этап тестирования. Покомпонентное или послойное тестирование по-прежнему приходится делать "в ручную". Если интересно, постараюсь расказать подробнее — мы на этом съели не одну собаку (я был почти 2 года консультантом по LR в Mercury, а затем ещё 3,5 - участвовал в написании собственно LR и его многочисленных "младших братьев").

Date: 2004-07-30 09:37 pm (UTC)
From: [identity profile] alehhandro.livejournal.com
Зффективно им можно симулировать лишь end-user load
Именно с этой точки зрения я его и предлагал (и если использовать только для этой цели, как я и сказал, он слишком дорог). На то он и "Load Runner", не так-ли? Осуществив нужный user load, покомпонентный анализ делаeтся намного удобнее используя уже море profiling программ.

я был почти 2 года консультантом..
С удовольствием послушаю подробности и Ваши рекоммендации об алтернативах.Вот, Вы упомянули "end-user experience"... на сколько я понимаю, как раз эти способности у LoadRunner кажутся достаточно ограничеными. Например, мне может быть интересно не только сколько времени нужно что бы загрузить страницу (HTML,JavaScript,etc) к себе в браузер, но и сколько нужно для ее rendering (server-side) в случае скажем JSPs. Можно ли это исследовать LoadRunnerom с точки зрения того самого "end-user experience"?

Date: 2004-07-31 02:26 pm (UTC)
From: [identity profile] ly0lik.livejournal.com
LR не так уж дорог, Вы не видели TestCentr'а - там цены начинаются с полумиллиона, кажется:-)

Например, мне может быть интересно не только сколько времени нужно что бы загрузить страницу (HTML,JavaScript,etc) к себе в браузер, но и сколько нужно для ее rendering (server-side) в случае скажем JSPs. Можно ли это исследовать LoadRunnerom с точки зрения того самого "end-user experience"?
Ой, что-то я не пойму, как связан "end-user experience" и обработка страницы на стороне сервера... По-этому, отвечаю как понимаю: transaction breakdown всегда был большой бедой (под транзакцией мы здесь понимаем всё то, что происходило между тем, как юзверь нажал на "submit form" и до того момента, как в ответ пришла и показалась новая страница). Это проблематично, потому что нужно собирать информацию по дороге. Плюс, для многослойных систем (3 layers and more) нетривиальной задачей оказывается сопоставить нажатие конкретной кнопки в UI с тем, что произошло в базе данных.

В принципе, для WEB, J2EE и Oracle в LR есть общие решения (поройтесь в документации: transaction breakdown). Для WEB и Oracle результат можно посмотреть в Analysis.
Для J2EE - совсем красиво, всё видно сразу в Online на уровне вызовов отдельных методов; но это появилось, по-моему, лишь с версии 7.8 и нужна специальная лецензия.

В принципе, если есть доступ к коду на server-side, можете поставить марекры в страницу (скажем, HTML-комментарий: страница сгенерировалась за надцать секунд), а в LR-скрипте эти маркеры вылавливать и обрабатывать (например, посылать data points).

Вот так вот, вкратце:-)))

Date: 2004-07-31 11:52 am (UTC)
From: [identity profile] david-m.livejournal.com
По второму пункту -- а кто следит за тем, чтобы данные в кэше вовремя устаревали?

Date: 2004-07-30 09:41 am (UTC)
From: [identity profile] old-radist.livejournal.com
Могу ли я выложить эти слайды на своей страничке, или только линк к вам давать?

Date: 2004-07-30 10:14 am (UTC)
From: [identity profile] avva.livejournal.com
Лучше поставьте ссылку, можно прямо на файл. Если очень нужно скопировать файл к себе на сервер, напишите краткую просьбу на адрес bradfitz@livejournal.com по-английски и спросите разрешения. Это не мои слайды, так что сам я разрешить не могу.

Date: 2004-07-31 06:43 am (UTC)
From: [identity profile] sobaker.livejournal.com
Так они же Creative Commons license. Свободное распространение подразумевается.

2 [livejournal.com profile] avva: спасибо, это интересно!

Date: 2004-07-30 11:11 am (UTC)
From: [identity profile] dimrub.livejournal.com
Очень прикольно наблюдать такую немаленькую систему, которая не планировалась, а росла.

Двухступенчатая система с кластеризацией юзеров - один к одному то, что мы делали в Комверсе.

Date: 2004-07-30 12:07 pm (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Прекрасное слайд шоу; хорошо бы, конечно, к нему какие-нибудь тексты - если есть опубликованные. Этот опыт нужно пропагандировать. (Да и ЖЖ становится уже чем-то этаким... глобальным, вроде гугла.)

Date: 2004-07-30 12:13 pm (UTC)
From: [identity profile] avva.livejournal.com
про memcached есть хорошая статья Брэда в Linux Journal: http://www.linuxjournal.com/article.php?sid=7451

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

Date: 2004-07-31 05:44 am (UTC)
From: [identity profile] egorfine.livejournal.com
<smallest>с нетерпением жду ваш ответ по memcached :) </smallest>

:)

Date: 2004-08-01 09:13 am (UTC)
From: [identity profile] avva.livejournal.com
Виноват :) постараюсь сегодня ответить.

Ваааау!

Date: 2004-07-30 03:44 pm (UTC)
From: [identity profile] ly0lik.livejournal.com
Большое спасибо, Анатолий!
С Вашего позволения, я бы хотел задать несколько вопросов, но чуть по-позже!

Пока же, чтобы избегнуть дурацких вопросов, на которые давно есть ответы, подскажите — что ещё стоит почитать-поглядеть, чтобы составить представление о работе ЖЖ?

Date: 2004-07-30 08:43 pm (UTC)
From: [identity profile] gamlett.livejournal.com
Спасибо. Очень поучительно.
Сегодня как раз один из тех редких дней, когда ЖЖ не тормозит.
Это хороший день, чтоб задуматься о том, что к примеру, мсдн.ком выносит нагрузки того же порядка, что ЖЖ, работая на гораздо более простой, но более продуманной архитектуре. Возможно, ЖЖ платформа дешевле на порядок (но не на два), что скорее всего компенсируется maintanence efforts.
Вы меня простите, I'm a straight MS guy. I respect Sun solutions as well. Generally I respect all _working_ solutions (I've seen too many failed ones); this is why I respect the LJ architecture too.

Спасибо, Allehandro за правильные вопросы, спасибо, Avva за понятные ответы.

Date: 2004-07-31 03:40 am (UTC)
From: [identity profile] kukutz.livejournal.com
>мсдн.ком выносит нагрузки того же порядка, что ЖЖ

MSDN можно кешировать в статику весь, кроме поиска.

Думаю, так и делается.

Не то с ЖЖ.

Date: 2004-07-31 11:03 am (UTC)
From: [identity profile] sceptic-008.livejournal.com
чтобы эффективно использовать caches, надо, чтобы каждый posting вытряхивался из БД независимо, и thread view склеивался в браузере клиента.
Также только в браузере клиента должны рисоваться украшения страницы (skins), LJ сервер должен лишь сообщать крошечный набор аттрибутов и вечно хранить в кэше мелкие гифы для украшений.
Логон и атрибуты скорее всего будут более эффективыно храниться (и scale) из специализированной быстрой базы данных, вроде LDAP.
Невозможно сказать, не копаясь в деталях, и слайды не дают достаточно информации, стоит ли архитекрутой LJ гордиться - или это всего лишь очередной kludge.
http://www.livejournal.com/users/sceptic_008/2402.html

Date: 2004-07-31 12:03 pm (UTC)
From: [identity profile] david-m.livejournal.com
"Логон и атрибуты скорее всего будут более эффективыно храниться (и scale) из специализированной быстрой базы данных, вроде LDAP"

Можно расшифровать вот эту вот гениальную мысль?

Date: 2004-07-31 12:59 pm (UTC)
From: [identity profile] sceptic-008.livejournal.com
http://www.openldap.org/

Date: 2004-07-31 01:06 pm (UTC)
From: [identity profile] david-m.livejournal.com
Я знаю, что такое LDAP. Чем он, по-Вашему, лучше обычной базы В ДАННОМ СЛУЧАЕ?

Date: 2004-07-31 02:00 pm (UTC)
From: [identity profile] sceptic-008.livejournal.com
Он может оказаться лучше потому что (три причины навскидку, по которым я бы считал полезным рассмотреть такое решение):
- LDAP - специализированная база данных, он может быть быстрее БД общего пользования, даже если это MySQL
- LDAP scales easily; на нем можно городить хоть глобальную хранилку если LJ будет существовать в виде нескольких сайтов (mirrors или региональные центры)
- под authentication through LDAP существуют готовые модули в куче программ (apache, postfix, APIs from programming languages и т.д.)
- в LDAP встроены все необходимые для maintenance удобства.

Документация "настоящего", не opensource LDAP лежит на сайте Sun Microsystems. По схемам/архитектуре его применения сейчас есть ряд книг. На Нете можно найти гору информации.

Но все же главное, на мой взгляд - деление входящего потока и кэширование каждого поста. В качестве результата запроса клиенту отправляется skeleton page, которая вызовет, в основном из cache, отдельные посты для заполнения forum thread.
Весь traffic таким образом сжимается до разностных (differential) объемов, в БД проникают лишь запросы об изменениях.
Обслуживать веб-запросы большой интенсивности и растить фермы веб и cache серверов всегда легче, чем выдавать такие же объемы из баз данных.

Date: 2004-07-31 12:04 pm (UTC)
From: [identity profile] kukutz.livejournal.com
>thread view склеивался в браузере клиента

С этого момента осуждение можно завершить.

Склейте мне это в Netscape 4 и lynx, а потом продолжим.

Date: 2004-08-02 01:00 pm (UTC)
From: [identity profile] zigmar.livejournal.com
Да вы что?! Этих броузеров давно уже не существует. Всё прогрессивное человечество ходит в интернет только с Microsoft Internet Explorer. Нафига корячиться для оставшихся 0.01% извращенцев, которые не хотят идти в ногу с прогрессом?!

Date: 2004-08-02 10:46 pm (UTC)
From: [identity profile] ex-ivk727.livejournal.com
Прогрессивное человечество уже давно акромя компьютера использует всеразличные девайсы с доступом в сеть.

Date: 2004-07-31 11:51 am (UTC)
From: [identity profile] sply.livejournal.com
Анатолий, а почему LB написан на перле, а не, скажем, C? Ведь ресурсов потребляет раз в 5 больше.

Для memcached возможность работы с клиентом через shared memory так и не планируется?

Кстати, по оптимизации гигабитной сетки еще какие-нибудь работы проводились (драйверы, роутинг etc)?

Date: 2004-08-02 12:57 pm (UTC)
From: [identity profile] zigmar.livejournal.com
Ну исходя из таких соображений уже стоило всё на asm писать :)

Date: 2004-08-02 01:15 pm (UTC)
From: [identity profile] sply.livejournal.com
Разница в 5 раз стоит того, чтобы потратить и на порядок больше времени на C.

Date: 2004-08-02 01:23 pm (UTC)
From: [identity profile] zigmar.livejournal.com
Плюс на порядок больше времени на поддержу и модификации. :)
Писать CGI на С - это тяжелая и неблагодарная работа. Я бы не стал такое делать без крайней на то необходимости. А в случае с ЖЖ, я очень сомневаюсь что Perl - это bottleneck.

Date: 2004-08-02 01:30 pm (UTC)
From: [identity profile] sply.livejournal.com
Если этот LB еще и CGI, то вопрос отпадает, ибо здесь уж точно боттлнек в другом. Я просто предположил, что это полноценный proxy.

Ладно, я не буду говорить про C, т.к. сначала нужно говорить о том, что LB как раз один из критических участков. Больше не спорю :)

Date: 2004-08-03 03:11 am (UTC)
From: [identity profile] mansch.livejournal.com
короме C , можно было пиcать на сервлетах и jsp, как вариант
From: (Anonymous)
Прокси сервис Proxyelite.biz рекомендует для вас шанс закупки быстрых прокси-серверов из Австралия, Англия, Вьетнам, Германия, Гибралтар, Голландия, Гонконг, Египет, Израиль, Индия, Индонезия, Иран, Италия, Китай, Люксембург, Норвегия, Объединённые Арабские Эмираты, Польша, Пакистан, Россия, Саудовская Аравия, Сингапур, Турция, Украина, Хорватия, Швейцария, Чехия, Южная Корея, ЮАР, Япония. Протокол прокси HTTP и SOCKS5 в одном аккаунте. А так же VPN - Сервис Поддержка протоколов L2TP/IPsec,VPN over SSL, VPN over ICMP, VPN over DNS, SoftEtherVPN. Proxy-server (прокси-сервер, от англ. proxy — полномочие действовать от имени другого лица) — представляет собой службу (програмное обеспечение), действующую в IT интернет-сети и также которая позволит потребителям делать запросы к прочим службам. Данным способом, прокси сервер осуществляет роль посредника между заказчиком (например, Вашим пк) и службой (к примеру, каким-либо Онлайн-сайтом), возможность доступа к которой запрашивает заказчик. VPN (англ. Virtual Private Network — виртуальная индивидуальная сеть). VPN-сеть формируется «сверх» online Интернет, стократно повышая защищенность коннекта. OpenVPN — исполнение программной сети с еще самой большой величиной надежности, безвредности и универсальности. Она вообще базируется на открытом первичном коде и систематично совершенствуется командами проф разрабов.


[url=http://proxyelite.biz]socks5 proxy italy[/url]

February 2026

S M T W T F S
1 2 3 4 5 67
8 9 10111213 14
15 16 17 18192021
2223 2425262728

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 25th, 2026 09:39 am
Powered by Dreamwidth Studios