Pull to refresh

Comments 91

Это всё конечно прекрасно, но специально сейчас зашел в контакт и попытался пролистать историю общения с девушкой с 2015 года. Оооочень медленно подгружает пачки сообщений и оооочень медленно отображает их с скроллируемой области просмотра.
А ведь когда-то быстро работало. Лет пять назад.
А я считаю, что долгая загрузка старых данных — это нормально, т.к. эти данные практически не востребованы. Хорошо, что они вообще отображаются.
Хорошо, что они вообще отображаются.
Некоторые — нет. Внизу оставил комментарий.
Не уверен, конечно, но скорее всего задержки из-за интеграции кода сообщений в body и отрисовки, а не из-за подгрузки с сервера. Только что через поиск нашел сообщения за февраль 2016 года, зашел в полную переписку и… другие сообщения с этой датой моментально подгружаются.
В одном из мобильных клиентов, кстати, есть функция «В начало переписки», которая так же моментально работает.
Как выше уже правильно сказали, в этом виновата не серверная часть. Сама БД достанет их и вернет PHP-коду за доли секунды.
Рассматривали вариант с выгрузкой html-кода «не нужных» сообщений при долгом пролистывании? Если да, какие подводные камни в этом варианте?
Не могу ответить с уверенностью на этот вопрос. Я занимаюсь непосредственно базами данных и их использованием. Это уже лучше у фронтендеров спрашивать. Но почти наверняка на это просто не хватает времени. Все же у нас слишком маленькая команда чтобы добраться до всех таких мелочей — кейс довольно редкий. И, как и всегда в таких задачах, есть вопрос что такое «не нужное сообщений». От ответа на него сильно зависит эффективность.
Как программист, я понимаю что это фронт-енд наркомания, кэши и всякое такое.
И что тормоза со списком сообщений скорее всего связаны с генерацией пачки тегов, накатыванием на них стилей, циклом рендеринга браузера, постраничным пачечным вытягиваем и простаскиванием всего этого добра через прорву кэшей.
А как пользователь — негодую, что 5 лет назад я в чатиках(речь не только о контакте) мог листать десятки тысяч сообщений, а теперь — сотни с трудом.
А как пользователь — негодую, что 5 лет назад я в чатиках(речь не только о контакте) мог листать десятки тысяч сообщений, а теперь — сотни с трудом.
Увы, это неизбежность. Ибо если разработчики ВКонтакте не будут тартить ресурсы на «свителки и перделки», то поколение есть еще Gerrit, который там как-то с этим борется, но интерфейс из 90х убивает все желание пользоваться этим просто от них уйдёт.

Так-то мне тоже не нравится что компьютер, с которым я познакомился в школе (Yamaha КУВТ — целых 128K памяти и ещё 128К видеопамяти… роскошь по тем временам невиданная...) загружал файл в 200K примерно за то же время, что и какой-нибудь Pixel C, имеющий в десять тысяч раз больше памяти и примерно в столько же раз более быстрый процессор… но… перделки важнее — и, увы, я говорю это без сарказма, хотя и с некоторой грустью…
UFO just landed and posted this here
Оооочень медленно подгружает пачки сообщений и оооочень медленно отображает их с скроллируемой области просмотра.

это около $5 млн + $750 тысяч в год за счёт операционных расходов.
А что происходит с удаленными сообщениями (или при удалении профиля)?
Пакуются? В смысле? Вы верно путаете, друг мой, все печатается, подшивается в коллекции и вшивается в личные дела гражданина.
На вас смотрит с грустью мой внутренний архивист (:
UFO just landed and posted this here
Написано же в статье — используется TCP. А Почта России — это UDP.

Вам смешно. А меня как на сисадмина предприятия пришёл запрос из органов. Предоставить для судебного разбирательства всю переписку сотрудника в печатном виде с 2011 года и распечатать все вложения. (((

UFO just landed and posted this here
О нет, мой товарищ по несчастью, я ничуть не смеюсь. Я распечатывал переписку сотрудника, подшивал, в приемной ставили печать на нитках, я вкладывал все это в папки и отсылал в местное отделение ФСБ.
Соц. сети ничего не удаляют. Помечаются как удаленные и все. После удаления есть же возможность восстановить профиль.
Не раз замечал, что очень старые сообщения с некоторых диалогов «пропадают». Видимо, при определенном количестве сообщений в диалоге их со временем принудительно «удаляют». Вряд ли удаляют физически и полностью, скорее архивируют в другое хранилище для оптимизации основного. Иначе не вижу смысла делать подобное.

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

Однако периодически (иногда — по времени, иногда — при накоплении определённого «процента изменений») всё это выкидывается, «упаковывается» и заменяется на «свежую версию».

Хотите посмотреть как это всё работает локально, в миниатюре? Почитайте и/или поэкспериментрийте с git gc — идея там та же.
Да, есть лимит сообщений на одного пользователя. Но он, как бы так сказать, очень большой) В старом движке он был 10 миллионов на пользователя, в новом подняли до 15 миллионов. Немногие могут похвастаться столь бурной перепиской. По достижении лимита мы отрезаем последние 5 миллионов сообщений.
Как происходит процесс «отрезания»? Они становятся навсегда недоступными? В счет 15 миллионов идут «удаленные» сообщения?
По достижении лимита мы отрезаем последние 5 миллионов сообщений
Про последние — надеюсь опечатка? А то обидно будет строчить-строчить, а потом собеседник вдруг увидит ваши сообщения десятилетней давности вместо свежих

Наверное, имелось ввиду последние в том смысле, что самые старые. Самые последние, если идти от самых актуальных к самым старым сообщениям)

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

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

Да, это делается именно для экономии места. В первую очередь в оперативной памяти. Лимит практически недостижим для обычных активных пользователей — у них обычно всего несколько сотен тысяч сообщений за несколько лет использования. Но все же имеется очень небольшое количество людей, у которых личные сообщения представляют собой откровенную мусорку и они упираются в него. Но наши основные «клиенты» этой фичи — это чат-боты.
В user-engine ссылки на них cначала помечаются удаленными и в течении 3 недель их можно восстановить. Потом они удаляются из снимков и дальше их можно достать только из бинлогов специальными утилитами. В chat-engine они на текущий момент сохраняются в снимке и дальше. Мы исследовали насколько «похудеет» chat-engine, если вычистить сообщения, на которые больше нет ссылок, но получили, что в ближайшее время это не осмысленно. Задача сложная, а профита немного — мы их и так разово «удалили» когда переезжали со старого движка.
зато я теперь знаю, кого благодарить за каждый 10-й старый репост в свою барахолку с «неизвестная ошибка»
Интересно узнать, указанные 500 серверов — это сервера с какими характеристиками?
Узкое место здесь — trade-off между оперативной памятью и нагрузкой на диск. Диски HDD, 8 штук на сервер, оперативку заранее расширили до 128Гб (на один unit).
HDD? SSD не используете? понятное дело гиг SSD дороже раза в 3-4 чем hdd, но скорость чтения\записи выше в разы, hdd в целях экономии $?
В первую очередь это path dependence. Переход на SSD требует достаточно больших разовых кап.вложений, большого количества админского и инженерского труда, поэтому надо сначала хорошо оценить эффект от перехода. Но вообще лично я вижу в переходе на SSD большой потенциал. Кстати, фраза про «скорость» чтения и записи все же не точна. Сама скорость такая же, профит в random-access, где разница несколько порядков. И в этой задаче потенциал большой, а вот люди, которые отдают видео с SSD умеют упираться именно в скорость чтения.
Удалять сообщения, которые удалили у себя пользователи не пробовали? Почему то уверен, что даже если прислать письменное требование удалить персональные данные, оно будет не выполнено.
возможно ради сохранения структуры индексов, например по прямой ссылке, несколько лет назад удаленные личные фотографии, открывались по прямой ссылке, причем в альбоме и т.п. фотки давным давно нет. Помню скидывал кому нужно пряму ссылку на фото, и картинка просматривалась без авторизаций и т.п., не смотрел работает это сейчас или нет. )
Да, это всё актуально.
Но недавно заметил ещё такую вещь: при преобразовании ссылки на изображение в объект (собственно изображения) для вставки его в диалог, парсер отказывается преобразовывать и оставляет как ссылку. Но происходит это не всегда, так что отловить пока не удалось.
Теперь ясно откуда взялась проблема с чатами, когда заходишь в чат с большим количеством непрочитанных и листая его ближе к концу некоторые сообщения не подгружались. Из-за чего часто терялся контекст беседы. Чтобы их увидеть приходилось обновлять страницу.
«Прочитать подробнее о преимуществах такого подхода можно здесь.» ссылка утеряна
Спасибо, действительно потеряли. Поправили.
Почитаешь вот такую статью и думаешь: «Какой же фигней я занимаюсь, а ребята клевые штуки пилят».
Однозначно… читаешь и только расстраиваешься :(
А что мешает самим писать такие штуки? В ВК закрыли набор?
Парсер сволочь, съел тег troll
Отсутсвие фундаментального IT образования, глубоких познаний в алгоритмах и спортивном программировании например?

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

Спортивное программирование учит делать правильную декомпозицию задачи. Смотреть на задачу с нужной стороны. А классные штуки включают эту самую грамотную декомпозицию и красивое решение (хотя тут надо определиться что значит классные штуки). Само собой в продакшне не надо писать код, чтобы через 30 минут было готово, и для продакшна нужны и другие навыки, помимо спортировного программирования, но сам навык спортивного программирования сильно помогает. И вот статья выше — как раз этот случай.
Под «классными штуками» я тут прежде всего имел ввиду сложные технические решения с прикладным применением математики. А под условной «фигней» стандартные бизнес-проекты на fullstack веб-фреймворках. Самообразование это безусловно хорошо, но рано или поздно упираешься в потолок, когда недостаточно именно фундаментальных знаний, для того, чтобы решать сложные задачи бизнеса, требующие применения математики и знания фундаментальных вещей из области Computer Science и расти дальше.

Когда я начинал программировать на стыке 2000-ных, у меня была только книжка по VB6, и книжка по PHP4, при этом до 2004 года не было интернета. И до настоящего времени не было возможности получить IT образования.

В итоге я дополз до должности тимлида в небольшой компании за 12 лет.
Многие выпускники IT вузов до той же должности добегают за 2-3 года.
При этом я в общем то практически все время занимался «веб-сайтами».
А ребята с фундаментальным образованием занимаются тем что описано выше.

Меня же, даже с сегодняшним багажом опыта и знаний всего начиная от dev заканчивая ops вряд ли возьмут в тот же VK, потому что для меня «алгоритм Хаффмана» и «Spray-деревья» это какие то неимоверные материи, к пониманию которых я даже не смогу подойти. А все знания и опыт полученные за все это время они достаточно поверхностны и не подкреплены фундаментом, т.е. имеют кучу пробелов и недопонимания.

Так что я немного не соглашусь. Без фундаментальных знаний на текущем витке развития IT отрасли скоро можно будет стать разве что эникейщиком. Это в конце 80-ых и в начале 90-ых можно было до всего дойти самому, когда индустрия только зарождалась.
У вас очень радужное представление о качестве современного образования в отечественных(?) IT вузах. Могу вас заверить, что 99% айти выпускников знают про «алгоритм Хаффмана» и «Spray-деревья» не больше вашего, потому что их принципиально нет в курсах, либо они проходится мимолётом. Никаких действительно фундаментальных знаний, кроме основ высшей математики, вы там не получите. А математика закончится за два-два с половиной года и будет её относительно мало.

Не могу, правда, говорить за самые топовые российские университеты, может там дела обстоят получше.
Может быть. Но я сужу по тому образованию что я получил в итоге. Я учился далеко не в лучшем вузе в полнейших ***нях (простите) и не на IT специальность а на автоматизацию технологических процессов, но даже там нам поверхностно давали к примеру «нечеткую логику» и «введение в нейронные сети» на последних курсах. На минуточку это были 2007-2008 годы. И мне всегда казалось что уж в нормальных IT вузах должны преподавать все начиная от двоичной системы заканчивая блокчейном и ML на порядки лучше и глубже чем подобные вещи давали нам (из тех что нам вообще давали).
Хаффмана и деревья сейчас дают даже в некоторых школах с мат.уклоном, не говоря уже о всех ИТ-специальностях в вузах.
Вообще, в топовых российский универах сейчас можно получить великолепное образование. Правда, есть одна важная деталь — если этого хотеть. Иногда даже «сильно хотеть». И это не всегда ограничивается только парами, есть развитая система дополнительных возможностей в виде различных семинаров, спец.курсов, кружков, лабораторий, школ, etc. И это касается не только IT. Я вот учился в магистратуре на экономической специальности и там все один в один с точностью до специфики отрасли.
Справедливости ради, в локальном вузе Хаффман был, но в конце первого курса, закрывая первый семестр «языков высокого уровня». Хоть как-то разобралось в предмете (по моим нынешним мерам) на тот момент человека 3-4 из 40.
Обычная очередь давалась где-то там же, очередь с приоритетом до конца 3 курса не встречалась, а дальше я не учился. Префиксное дерево мб один раз встречалось в курсе дискретки на 3ем, мб нет.
«Расширяющиеся деревья» до текущего момента не встречал, но с ними хотя бы после красно-черного идея понятна, расширяется идея перебалансировки.
Не то чтобы я гуру спортивного программирования, но могу сказать, что этот навык качается. Просто начинайте участвовать и решать задачи, которые решают олимпиадники. Сначала будет тяжко, но вы удивитесь, насколько быстро можно минимально прокачаться в данной теме. Пишите свои велосипеды и изучайте решения других. Изучайте структуры данных, и как они устроены внутри.
Буквально через пару недель будет новогоднее соревнование тут: adventofcode.com
Можете к нему присоединиться, это фаново и весело качать свои навыки на таком соревновании.
А прямо сейччас на этом же сайте можете порешать задачи с предыдущего года. Задачи реально классные.
Я наоборот радуюсь за молодых ребят. Конечно немного печально что сам может быть к такому коду ни когда и не прикоснусь но радует что люди с горящими глазами пилят классные штуки.
Скажите пожалуйста, я правильно понял, что значительная часть хранимых у вас текстовых данных — это сообщения чат-ботов? Какой примерно общий % от всех сообщений отправлен именно чат-ботами, ну хотя бы примерно, можете сказать?
Нет, сам % данных от ботов не такой уж и значительный. Но он вызывает перекосы в распределении нагрузки между инстансами движков и проблемы возникают из-за этого. Подсчитать точную долю чат-ботов мы не можем, т.к. они не размечены и мы не можем автоматическими методами с уверенностью выделить их. А гадать лучше не буду — слишком уж велик шанс сильно ошибиться.
А отличить чат-бота от нормального пользователя вы можете? Хотя бы по числу сообщений / минуту.
Бывают, к примеру, очень активные лички групп, которые могут легко превзойти по активности слабенькие чат-боты. Если постараться, то скорее всего можно придумать весьма точное решение этой задачи, но в этом не было необходимости.

А могли бы сделать api для ботов вместе с добровольно-принудительной возможностью помечать учётки в качестве ботов.

Добровольно-принудительная регистрация — это как-то слишком=) Надо сделать правильные удобные инструменты и лимиты, чтобы создатели ботов сами были заинтересованы пользоваться ими.

В данном случае это и есть добровольно-принудительно. Хочешь удобные инструменты — регистрируй бота. Хочешь мимикрировать — используй менее удобный api.


На самом деле даже просто возможность отметить аккаунт в качестве бота — уже само по себе достаточно неплохо.

Кстати, думали над оптимизацией чат ботов, что они содержат дублирующиеся сообщения и на этом можно значительно сэкономить?

Еще не думали. Мы не успели исчерпать более простые с точки зрения идеи и реализации оптмизации. Кроме того, частично с этим разберется Хаффман.
А вообще, как вы считаете — сущетсвуют ли чаты (в т.ч. групповые), состоящие только из сообщений ботов?
Какова на ваш взляд ценность хранения истории таких чатов, и её стоимость?
Понятия не имею, честно. Субъективно, если такие и есть, то едва ли их хоть сколько-нибудь значительное количество. Все активные боты, которые у нас всплывали, общаются со вполне реальными пользователя.
Рассматривали ли вариант создания двух типов инстансов: для нормальных людей, и гиперактивных (>100K сообщений, к примеру), и реализации отдельных алгоритмов для таких инстансов?
Просто надо меньше рекламы встраивать в звуки\видео, и всё будет работать как надо.
Видимо, планировалось, раз через 10 дней эту возможность уже выкатили.
Всегда было интересно узнать архитектуру таких решений…
А в каком виде хранятся сообщения? В итоговом html? Или с использованием какой-то своей разметки, и каждый раз при отображении происходит преобразование в html? Или в двух вариантах?

А зачем хранить текстовые сообщения сразу с разметкой?

Все хранится в бинарном виде в одном варианте (там, кстати, не только текст же). PHP-код (или даже клиенты) его немного обрабатывают при получении — так, к примеру, сделаны упоминания в чатах.
Обожаю статьи про хайлоад. Недавно про облако от маил.ру читал
И тем не менее, сообщения ВК работают все хуже и хуже, особенно в мультичатах. Подгрузка новых сообщений часто работает долго или не работает вообще, приходится обновлять страницу. В мобильных клиентах часто пока не отправишь сообщение, не подгрузит, даже при принудительном обновлении диалогов прокруткой вниз. В активных мультичатах, где сообщения пишутся потоуом одновременно хотя бы 5-10 людьми, это сильно мешает. О вечных проблемах с загрузкой вложений я уже молчу, уже почти раз в неделю натыкаюсь на то, что вложения, особенно фото, просто не загружаются.
Кстати на счёт политики хранения данных и восстановления. Лично около года назад столкнулся с такой бедой, что при покупке симкарты и попытке зарегестрироваться в ВК — мне предложили восстановить доступ к странице ранее привязанной к этому номеру. Вам не кажется, что это огромное упущение? Люди меняют номера и забывают пароли от страниц. Недавно у одной знакомой так взломали старую страницу (привязанный номер уже принадлежал не ей) и шантажировали распространением личной информации, при этом делал это явно не дилетант. А что если человек погиб? Получается его мобильный номер оператор заблокирует через N месяцев и продаст другому человеку, а в соц сетях останется множество личной информации, к которой может получить доступ человек не особо порядочный. Я знаю, что этот вопрос поднимался уже не раз и ранее, но подскажите, если ли какие-то движения в его решении?
Какой-то способ авторизации все равно нужен. Не по отпечатку же пальца и скану сетчатки это делать?) По крайней мере в 2017 году. С таким же успехом у людей могут увести почту, к примеру. Если вы активный пользователь и храните в ВК важные вам данные, то уж проследите, чтобы номер телефона был актуальный. Он не так часто меняется. В крайнем случае страницу можно удалить.

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

На счёт блокировки по обращению, не знал, что такая возможность есть и думаю родственники умерших тем более не знаю этого. Учитывая, что часто им и не до этого, да и возможно они вообще в соц сетях не сидят даже. Опять же строю эти выводы на личном опыте. К сожалению знаю с десяток страниц людей, которые умерли, но страницы не заблокированы уже несколько лет… В таком случае вопрос их активации лишь вопрос времени.
UFO just landed and posted this here
Интересно, а Вы рассматриваете возможность применения плат-ускорителей на основе FPGA? Например с программированием на OpenCL?
А оно тут и не надо, тут же чтение с диска основная беда.
Сейчас существует возможность прямого подключения дисков по M.2 к FPGA. И это даёт возможность реализации быстрого поиска.
Переписать-то переписали, но вот часть сообщений за 2008-2009 год отображаются как "...". Не сказать, что там что-то особо важное, но все-таки
Спасибо, интересная статья.
Такой вопрос: если оба участника диалога удалили сообщение, и при этом сообщение никуда не пересылалось, сохранится ли оно физически?
Верните нормальное прослушивание музыки на мобильных устройствах
UFO just landed and posted this here
Sign up to leave a comment.