LINUX.ORG.RU
ФорумTalks

Почему решая литкод ты никогда не станешь архитектором (но на самом деле никогда не хотел им быть)

 , , , опус,


7

2

Специальный выпуск для linux.org.ru.

Когда я был юношей, то они мне говорили «вырастешь — поумнеешь». Я вырос, но не поумнел. Но иногда я жалею, что не знал тогда того, что знаю сейчас — так и хочется написать тому юноше письмо из будущего, что я и намерен импровизировать в виде треда на LOR.

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

Поскольку первых людей сильно больше, чем вторых (соответственно спросу), то массовый программист, как правило, оценивается по тому, как много решений он может выдать между двумя глотками смузи. Индустрии нужно зарабатывать деньги на массовом конвеерном фуфле, индустрии не нужны оригинальные решения. Как решить большую сложную задачу на подобном конвеере? Взять больше смузи и хлебать чаще, посадить дополнительных смузихлебов на тестирование этого дела. Самое страшное — когда в подобном духе начинает работать Boeing, и самолеты начинают падать. Можно радоваться тому, что упал не ваш самолет, а можно подумать о том, что завтра ваше авто с вами за рулем может внезапно оказаться не ваше, потому что его хакнет 7-летний китайский ребенок, и единственная реальная защита — это тот факт, что Илон Маск платит всем денеги только чтобы уязвимостями в автомобилях и инфраструктуре не пользовались злоумышленники.

Мне вспоминается старый-престарый эпизод моей жизни, как я еще будучи школьником выиграл олимпиаду по информатике. Задача была на поиск кратчайшего пути (пардон, точного условия уже не помню, это было давно и неправда). Грамотный программист быстро выдаст вам «правильное» решение O(N log N) по алгоритму Дейкстры. Но поскольку на тот момент я не знал алгоритма Дейкстры и не был грамотным программистом, то вместо «правильного» решения выдал асимптотику O(N), заэксплуатировав некоторые особенности конкретных условий той задачи.

И второй эпизод, современный. Меня выбесило одно из недавних моих собеседований: некая контора дала мне тестовую задачку, являющуюся также одной из фундаментальных задач, решаемых их продуктом. Мне просто забыли сказать, что «правильный» метод должен быть O(N^3), и я случайно потратил целый день на разработку метода O(N^2), который оказался настолько неожиданным для «сеньоров», что им понадобилась целая неделя для анализа моего решения на 500 строчек (inb4: фу-фу, лапшемес), а на собеседование со мной собрали всю верхушку — на минуту у меня сложилось ощущение, будто меня собеседуют в гугл, а не в местную помойку. Я не удивлюсь, если вся их шарашка уже работает над интеграцией моего метода, и в скором времени получит премию, мол «наш отдел провел тщательные исследования предметной области...», а тебе, мартыха, хрен с маслом. И это собравшееся начальство на собеседовании было серьезно намерено развести меня на решение еще одной важной для их помойки задачки. Большая часть их штата джуно-мидлов занимается обвязками-прокладками-интерфейсами-тестированием, короче говоря, теми задачами, под которые можно нанять горсть рабов с улицы хоть прям щас — но эти люди в жизни не смогут выдать оригинального решения, а только будут ждать команд сверху.

Вишенка на тортике — под конец мне дали задачку с литкода, которая была будто специально подобрана так, чтобы быстрое решение требовало от меня знание специфичных фич стандартной либы, которое я им изначально честно заявил как «слабое». Те функции выучиваются наизусть за пару дней, а аналитическое мышление развивается годами, но нет «ты слабоват, мы можем тебя взять, но на ЗП в два раза меньше». Вот так вот: «не подскажешь, как пройти к вокзалу?... А теперь встань раком и вези меня туда».

Что мы всё про меня да про меня. С точки зрения массовой индустрии Дуглас Крокфорд — посредственный программист, и в недавнем треде большое число отписавшихся доходчиво пояснило, почему это так. Да, подумаешь, он создал какой-то там JSON, на котором работает половина индустрии, а еще создал JSLint, который ведь оказался так себе и был вытеснен ESLint-ом, и вообще «я могу сделать лучше, просто оно мне не надо». Но печальная истина в том, что тысячи смузихлебов писали на JS безо всякого линта, и, я уверен, при возникновении онного долго противились новой технологии. Проходит время, и вот уже каждый школьник считает своим долгом задействовать ESLint и JSON, а пишет, естественно, на ES2015, добрая половина фич которого была реализована при непосредственном участии Крокфорда (кстати, мало кто знает, что Object.keys/Object.values еще в ES5 было внесено по инициативе Крокфорда) — но этот школьник понятия не имеет, откуда взялись «мои любимые технологии».

Я хочу подчеркнуть, что это не одиночный пример мнения отдельной макаки — это закономерность, которую заметил не только я, и не только эту. Такие люди, как Крокфорд, могут бесконечно выдавать оригинальные идеи, но как исполнитель они так-себе, у них вечно шило в попе, толкающее на приключения, потенциально грозящие сорвать сдачу проекта (которая назначена на вчера, как обычно). Я задумался: а кому могут быть в самом деле нужны такие люди? Да, в силиконовой долине можно себе пригреть местечко — по этому пути успешно прошелся Крокфорд. А что делать, если я не хочу развивать силиконовую долину? Я в молодости отказался ехать туда, и сейчас не особо горю желанием (но и не предлагают уже). Вот такое вот я капризное животное.

Более того, если допустить, что Крокфорд выдал некое супер-пупер классное решение для вашей фирмы, то возникает проблема — кто его будет поддерживать/развивать? А также так называемый Bus factor — что делать, если Крокфорда убьют Крокфорд уйдет? Типовой сеньор-помидор, посмотрев на код Крокфорда, выпучит глаза и закричит «ты где такое видел? Кто так делает? У тебя своя голова на плечах есть?».

Всё ли так безнадежно, и есть ли более-менее прикладные задачи, которые не сможет решить сеньор-принципал-архитектор даже в обнимку с цистерной смузи, даже выдавая по два заученных решения литкода в секунду? А может быть и есть. Например, быстрой инкрементальной Agile Scrum Kanban Fast-shipping Test Driven методикой постепенной разработки невозможно реализовать распределенную отказоустойчивую БД со строгой согласованностью данных. Отказоустойчивость — это бинарное свойство, БД либо отказоустойчива, либо нет. Не бывает почти отказоустойчивой приблизительно распределенной БД которая чуть ли не сохраняет все подтвержденные транзакции (привет разработчикам MongoDB). Ну то есть она в таком случае не отказоустойчива и не дает гарантий.

Даже Clickhouse можно почти сделать при достаточном стратегическом запасе смузи (только для единственного хоста), но яндекс так и не осилил аналога ZooKeeper (кластер ClickHouse работает через ZooKeeper), поскольку никакое количество костылей, инкрементально разработанных в Яндексе ранее, так и не смогли заменить одного грамотно продуманного решения. Что мы по итогу видим сейчас? Вся инфраструктура Яндекса стоит на ZooKeeper, найди возможность положить ZooKeeper — весь Яндекс встанет колом. Тот же Facebook тоже полагается на ZooKeeper (хоть и меньше, они там саги любят). В Amazon вообще всё печально, и я не поверю, что с любым количеством денег Amazon способен создать аналог ZooKeeper, поскольку я читал статьи их отдела по исследованию распределенных систем, и уровень там совершенно никакущий. Достоверно мне известна ровно одна контора, способная разрабатывать распределенные СУБД с гарантиями согласованности — это Google. Она разработала самое первое подобное решение, Google Chubby, близкой копией которого позже стал ZooKeeper.

Но вот в чем проблема — ZooKeeper уже есть, а значит «ты нам не нужен». Что же еще требует глубокого вдумчивого погружения и нестандартной находчивости? Похожие требования есть у многопоточных приложений. Еще подобного рода мышление нужно при тяжелой глубокой отладке софтины, на отладку которой систематически забивали, предпочитая спринты и быстрые релизы. Правда, с распространением защищенных сред выполенния, вроде JVM, CLR, JS, и Python, неустранимая потребность в отладке сильно снизилось, потому что в крайнем случае можно просто перезапустить контейнер или иметь запасные контейнеры сразу. (Еще есть UI/UX, но про мертвых либо хорошо, либо ничего).

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

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

Парадокс в том, что смузи-мастеры чуть ли не поголовно мечтают быть творцами. Какой смысл этого стремления? «Хорошо там, где нас нет»? «Полчаса побунтовал - и фатит»? Прежде чем окончательно и бесповоротно решить встать на этот путь, посмотрите на настоящих успешных творцов (не путать с клоунами вроде меня или Илона Маска). Такие люди не заработают заоблачных денег, их не расхватывают на рынке труда, им не так просто устроиться на обычную должность, а даже если устроятся — умрут со скуки, попутно занимаясь ремонтом того, что не ломалось, таким образом выведя из строя какой-нибудь старый добрый сервис на Cobol или MUMPS, написанный в 70-х годах «настоящими программистами, настоящими, не то что новое поколение».

Показательно, что работодатели идут навстречу этому стремлению, мол «пишешь конфиги для CI/CD? Ну ты же архитектор теперь». Аналитический склад ума нельзя поменять за месяц, его нельзя быстро приобрести или положить на полку на период отпуска. Wannabe-творец-на-выходные в лучшем создаст популярный клон существующего софта — даже не потому, что не способен ни на что другое, а потому, что понимает, что сообщество не примет ни одной значимой инновации серьезнее плагина к Emacs или очередных скрипт-костылей для сборки C++. Да и то, плагины к Emacs не нужны, поскольку уже есть настоящее проверенное решение в виде Vim и его аналогов.

И я не могу упрекать работодателей (как правильно заметил Kogrom по ссылке выше): им нужна взаимозаменяемость и предсказуемость, им нужно снижение рисков и издержек; им нужен посредственный сайт, который будет создавать иллюзию наличия этого сайта у компании — а больше и не нужно; заказчикам нужна иллюзия масштабирования и отказоустойчивости, с бессмысленными невыполнимыми требованиями к системы — выдайте ему микросервисную архитектуру со стоимостью и временем разработки в 3 раза больше грамотного монолита, также бонусом дайте ценные инструкции по масштабированию бигдата-серверов монги сверх 500 ГБ (на случай, если его бигдата размещается в кластере из айфонов). Можно упрекать разве что себя (мне — себя, а вам — себя, не меня). Например, много лет назад я имел возможность выбрать семью и карьеру, но я выбрал то, что выбрал — не иметь власти, но знать всё и ничего одновременно. В этом есть свой кайф и неудобство одновременно.

★★★★

Последнее исправление: alpha (всего исправлений: 6)

Ответ на: комментарий от wandrien

Ты почитай продолжение. У них все быстро перешло к наемному труду за фиксу. Нанимали «иноверцев». Комунна кончилась очень быстро.

dk__
()
Ответ на: комментарий от Legioner

Это какой-то закрытый междусобойчик. Кооператив предполагает открытый вход и выход.

BceM_IIpuBeT ★★☆☆☆
()
Ответ на: комментарий от AntonyRF

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

BceM_IIpuBeT ★★☆☆☆
()
Последнее исправление: BceM_IIpuBeT (всего исправлений: 1)
Ответ на: комментарий от AntonyRF

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

И ты придумал план для создания очередной аутсорс-конторы, коих тысячи.

byko3y ★★★★
() автор топика
Ответ на: комментарий от TDrive

А те HR-ы с которыми я сталкивался давали мне на тех собес столько инфы о кандидате что я офигевал от того откуда они все это берут

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

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

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

byko3y ★★★★
() автор топика
Ответ на: комментарий от Shaman007

Да, архитектурный этап интервью ты у меня не прошел бы

А я не сомневаюсь. Как я писал, интерпретация понятия «архитектор» в нынешнем массовом IT — это такой сомелье, который смешивает вина разных сортов, чтобы получить требуемый результат. А это уже довольно специфический набор навыков, плохо совместимый с навыками создания и анализа незнакомых вещей.

byko3y ★★★★
() автор топика
Ответ на: комментарий от Irben

Ну а знакомый вообще выставляет все домашние задания с собеседований в Github, пусть работодатель думает над новыми задачками для следующих потенциальных работников

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

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

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

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

byko3y ★★★★
() автор топика
Ответ на: комментарий от dadd

В области импортозамещения работы непочатый край. Много больших и сложных задач

За которые никто не собирается платить. И это вполне конкретная государственная политика.

byko3y ★★★★
() автор топика

Та не переживай. Ещё лет 10-15 потерпи и будешь охранником работать - склад в пятёрочке охранять. Расти он не хочет, нормальную работу искать не хочет, а его никто не хочет брать не по причине возраста, а по причине окукливания в «ООО Рога и копыта».

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от untitl3d

ты рассматриваешь кодинг и себя, как кодера, со стороны обслуги бизнеса, от того и вот эти вот простыни отчаяния и безнадеги

Ну какого же отчаяния и безнадеги? Скорее констатация реальности. Если для тебя это безнадега — ну что же я сделаю?

Да, программирование оторвано от бизнеса пока ты его изучаешь (не Java/C#), а потом вот так, встречаешь действительность, продакт овнера, скрам и кровавый ентерпрайз

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

byko3y ★★★★
() автор топика
Ответ на: комментарий от Shaman007

Если инвестор венчурный, у которого 80% проектов прогорают, то остальные 20% должны покрывать потери (ну там немного сложнее). Воообщем, суть такова, что если у тебя успешный бизнес с венчурными деньгами, а ты - его основатель, то по получении хорошей стабильной прибыли ты можешь оказаться в стороне от этого бизнеса, да еще и сповешенными на тебя долгами, а не на островах со смузи

Да, потому доля в стартапе никому не нужна — эти стартапы доят наемные сотрудники и аутсорсеры, в число которых обязательно причислит себя CEO.

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

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

byko3y ★★★★
() автор топика
Ответ на: комментарий от no-such-file

Я бы сказал, что у пациент в принципе противопоставляет себя миру. Отсюда и все фантазии, бред отношения и т.д

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

byko3y ★★★★
() автор топика
Ответ на: комментарий от Sunil

Тем не менее в данном произведении конфликт автора и индустрии предельно прост - последняя не готова оплачивать художникам творчество вне рамок договоренностей

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

byko3y ★★★★
() автор топика
Ответ на: комментарий от Shaman007

Да, потому доля в стартапе никому не нужна

На самом деле нужна

Чтобы продать ее, да, но не чтобы владеть ею.

byko3y ★★★★
() автор топика
Ответ на: комментарий от BattleCoder

У меня плохие новости, собеседования в шмугл выглядят примерно также или даже хуже

Так а я о чем? Я примерно в курсе, что там в гугле, потому меня и удивило, что местные ребята косят под гугл.

byko3y ★★★★
() автор топика
Ответ на: комментарий от byko3y

Архитектурный этап интервью - это этап техничкской части собеседования, когда тебя спрашивают архитектурные вещи, чтобы посмотреть на ход твоих мыслей. Это может быть архитектура локальной сети или архитектура веб-приложения в крупную клетку (чего угодно), но должность не архитектора.

Shaman007 ★★★★★
()
Ответ на: комментарий от byko3y

Ты не понимаешь что такое деньги и что такое доли.

Shaman007 ★★★★★
()
Ответ на: комментарий от olelookoe

лучше расскажи поправил ли ты багу Макака ищет работу, C, Python, JS, либо челендж в опенсорсе на C++ (комментарий)

Нет, я кое-что другое писал в это время.

byko3y ★★★★
() автор топика
Ответ на: комментарий от BceM_IIpuBeT

Вот это паста. Что-то смузи захотелось

Могу одолжить.

byko3y ★★★★
() автор топика
Ответ на: комментарий от Shaman007

РАЦПРЕДЛОЖЕНИЕ: ты нанимаешь @byko3y и Эдди_эм, а они без вот этого вот капитализьма и продажности рубят задачи! Как тебе идея?

То есть, ты приравниваешь довольно неадекватного эдика, который готов чуть ли не писать вебсайты на ассемблере, ко мне? У меня есть ощущение, что ты просто оцениваешь людей как «их мировоззрение близко к моему» или «их мировоззрение далеко от моего».

byko3y ★★★★
() автор топика
Ответ на: комментарий от Legioner

Нанимайся техническим директором или на какую-то похожую должность. Будешь консультировать нетехнических директоров (широкий кругозор), будешь клепать за несколько часов proof-of-concept программки, которые потом остальные будут неделями исследовать и интегрировать

«Здравствуйте, вам технический директор не нужен? — Да, как раз искали, и вы — он?».

byko3y ★★★★
() автор топика
Ответ на: комментарий от Manhunt

Но это же - в лучшем случае - сведется к старым-добрым крудам на голанге, которые ТС не приемлет

В чем проблема крудов на голанге? Кто-то же должен выполнять грязную работу?

byko3y ★★★★
() автор топика
Ответ на: комментарий от byko3y

если ты работаешь с идиотами это не означает что все работают с идиотами.

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

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

Реакцию на критику нужно вообще проверять у всех кто старше 30 лет.

И это просто первое что я вспомнил.

TDrive ★★★★★
()
Ответ на: комментарий от AntonyRF

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

Причем тут структура организации и продукт который фирма делает? В чем логика?

А я бы серьезно поговорил на тему того, какие продукты нужны людям и бизнесу, потому что я реально очень плохо понимаю эти потребности, поскольку мои потребности чудовищно далеки от потребностей 99% людей. Например, как я описывал в треде ERP/CRM
CRM и ERP не нужны, ибо не автоматизируют
бесполезный bloatware мусор за десятки миллионов денег оказывается востребованным в крупном бизнесе, а простые элегантные решения воспринимаются как «несерьезные». Но это лишь капля в море, в этом и другом бизнесе есть еще огромное количество неизвестных или плохо известных мне деталей.

byko3y ★★★★
() автор топика
Ответ на: комментарий от TDrive

Реакцию на критику нужно вообще проверять у всех кто старше 30 лет

Я боюсь, что в беседе со мной реакция на критику определена как «плохая», если мы спустя 5-10 минут перешли на мат. Потому что у меня есть бездонная коллекция спорных взглядов.

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

byko3y ★★★★
() автор топика
Последнее исправление: byko3y (всего исправлений: 1)
Ответ на: комментарий от x3al

Решает проблему установки закрытого софта в линукс, которая есть

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

byko3y ★★★★
() автор топика
Ответ на: комментарий от AntonyRF

а миллиарды собрали просто потому что умеют откладывать?

они их не собрали, они просто владеют акциями своих (или не очень) компаний, которые в данный момент на фондовой бирже оцениваются в эти самые миллиарды

натуральных денег (на счету в банке или наличкой) у них наверняка на порядки меньше

Harald ★★★★★
()
Ответ на: комментарий от Harald

если мы спустя 5-10 минут перешли на мат

а кто первый начал

Конечно, если честно, русским матом мне разговаривать комфортно. Я им не ругаюсь, я им разговариваю.

byko3y ★★★★
() автор топика
Ответ на: комментарий от Legioner

Пока всё по знакомствам было, те, с кем/на кого я раньше работал

Вывод — нужно поработать в большом числе компаний.

byko3y ★★★★
() автор топика
Ответ на: комментарий от byko3y

Вот оно что. С чего бы ТС-а не берут на работу, ну точно не потому, что он интервьюеров на собеседовании половыми членами обкладывает, ну не может же такого быть :) Проблема точно в чём-то другом!

Harald ★★★★★
()
Последнее исправление: Harald (всего исправлений: 1)
Ответ на: комментарий от Harald

С чего бы ТС-а не берут на работу, ну точно не потому, что он интервьюеров на собеседовании половыми членами обкладывает, ну не может же такого быть :) Проблема точно в чём-то другом!

У меня же есть разные режимы общения, как то языки (русский, украинский, английский), а в русском есть режимы вы, ты, конина е***ная.

byko3y ★★★★
() автор топика
Ответ на: комментарий от e1nste1n

Нужен, но не ты и не здесь https://maheshba.bitbucket.io/blog/2021/10/19/42Things.html

https://research.fb.com/wp-content/uploads/2020/11/Virtual-Consensus-in-Delos...

Хороший юмор, годный. Товарища Махеша Балакришнана выгнали из исследовательского центра MS после проекта Tango — и взяли в Facebook. И не просто взяли, а еще и реализовали в проде ту дичь, которую он напроектировал. Нужно сказать, что индусы — это те самые люди, которые первыми придумали выходить на рынок с заявлениями о богатом опыте успешного решения неразрешимых задач, вроде проблемы остановки. Всё благодаря способности запутывать смысл в паутине из слов, которая является культурной традицией Индии уже много тысяч лет. Давайте же разберем написанное по частям.

Упрощенно, иерархия зависимостей компонентов Delos такая: клиент => VirtualLog with MetaStore => Loglet (Figure 4). Я не буду останавливаться на волшебном механизме интерфейса с клиентом, который якобы позволяет хранить данные в самых разных формах, а на самом деле является простой тонкой бессмысленной прокладкой. VirtualLog с MetaStore — это отказоустойчивый роутер, который знает, какой из логлетов содержит самые последние данные и доступен на запись, а в каких архивные данные доступны лишь на тение. MetaStore — это атомарный счетчик, в котором записан ID активного логлета (commit ID, но это не важно). Поскольку этот счетчик меняется только при отказах, то его реализовали простым медленным Paxos.

Логлеты представляют собой непосредственное хранилище, которое может иметь разные реализации. Это может быть кластер NativeLoglet, или прокладка к ZooKeeper под названием ZKLoglet, или прокладка к HDFS по имени BackupLoglet.

«Delos currently supports three disaggregated Loglets (see Figure 5): ZKLoglet stores log entries on a ZooKeeper namespace; LogDeviceLoglet is a pass-through wrapper for a LogDevice service; BackupLoglet layers over an HDFS-like filesystem service used for cold storage. All three backing systems – ZooKeeper, LogDevice, and the HDFS-like filesystem – internally implement fault-tolerant consensus, including leader election and reconfiguration; Delos uses the VirtualLog solely to switch to/from them.»

Конечно, такую систему проектировали не для того, чтобы сделать очереднуб прокладку к ZooKeeper, потому самое интересное — это как авторы реализовали родное хранилище, NativeLoglet. Раздел 4.2.1:

«Each Delos server – in addition to running the materialization logic and the VirtualLog code – runs a NativeLoglet client and a NativeLoglet server (or LogServer). One of the Delos servers also runs a sequencer component...»

и в конце этого же раздела:

«When the sequencer or one of the LogServers fails, the NativeLoglet is responsible for detecting this failure and invoking reconfiguration on the VirtualLog (which in turn seals it and switches to a new NativeLoglet)»

То есть, NativeLoglet — это отказоустойчивое по чтению и неотказоустойчивое по записи хранилище, при одном отказе главного сервера (с sequencer-ом) или большом числе отказов подчиненных серверов весь кластер уходит в состояние sealed, то есть «только чтение». Подразумевается что при отказе роутер VirtualLog получит уведомление и переложит ответственность по записи новых значений на свободный кластер NativeLoglet или ZKLoglet.

В разделе 5.1 неискушенного читателя могут ввести в заблуждение красивые графики изменения задержки ответа при переходе от ZKLoglet к NativeLoglet, но ниже авторы вполне честно поясняют ситуацию «The latency improvement is largely due to the unoptimized nature of our ZKLoglet implementation, which simply writes a new sequential ZooKeeper key on each append».

Figure 11 расставляет точки над i — при сравнении с чистым ZooKeeper-ом разницы во времени ответа практически нет: «Figure 11 (Right) shows that ZooKeeper can provide over 30K puts/sec before p99 latency degrades beyond 15ms. In contrast, Delos+NativeLoglet manages around 26K puts/sec. The primary reason for the performance difference is that ZooKeeper stores its materialized state in memory while Delos uses RocksDB. We also ran a version of Delos where the materialized state lives in memory; this prototype hit 40K puts/sec.»

Напоминаю, что ZooKeeper сверху донизу написан на Java, то есть, его показатели производительности можно обогнать банально переписав код на C++.

Итак, является ли Delos простым аналогом ZooKeeper? К сожалению, нет. Что происходит при отказе в ZooKeeper? Выбирается новый лидер из фиксированного числа серверов, старый лидер и другие отказавшие узлы после возобновления работы просто возвращаются в кластер. Если число отказов слишком велико, то кластер переходит в read-only и любые операции записи замораживаются до восстановления. Что происходит при отказе Delos? NativeLoglet замораживается и в строй вводится новый NativeLoglet. При большом числе отказов вся система оказывается завалена замороженными NativeLoglet-ами.

Я подозреваю, что за недавнюю проблему с доступностью фейсбука мы должны сказать спасибо не столько админам Facebook, неправильно сконфигурировавшим роутинг (а кто не ошибается?), а именно волшебной архитектуре Delos. Это то, что я называю «отказоустойчивость до первого серьезного сбоя». Ну напутал с роутингом, ну отключились-замедлились у тебя какие-то сервера — ну и что, у тебя же избыточность, другие сервера возьмут на себя нагрузку. Но нет, систематические таймауты привели к лавинному эффекту, серьезно снизив производительность и так замедленной системы.

Но Facebook «не останавливается на достигнутом» и уже готовит Zelos — это тот же Delos, только стоящий на базе другого Delos, и поверх всего этого реализовано шардирование. То есть, несмотря на сказки из статьи про «100 ГБ вывозим нормально, не то что ваш древний ZooKeeper», на самом деле 100 ГБ приходится шардировать, иначе становится больно. Возможно, на этом новом проекте Махеш Балакришнан наконец достигнет успеха, то есть, сможет сделать систему настолько запутанной и непонятной, что никто не сможет ткнуть пальцем и сказать «это отказоустойчивость до первого серьезного сбоя».

byko3y ★★★★
() автор топика
Ответ на: комментарий от e1nste1n

Обращай свою критику туда, где её могут услышать

Да, я обязательно превращу эту штуку в статью, и даже скорее всего переведу на английский.

byko3y ★★★★
() автор топика
Ответ на: комментарий от byko3y

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

И думаю критика никому не нужна, нужны полезные людям решения.

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 1)
Ответ на: комментарий от byko3y

можно обогнать банально переписав код на C++

Вылезай из криокамеры в джаву завозят довольно низкоуровневые фичи.

foror ★★★★★
()
Ответ на: комментарий от foror

Думаешь Цукерберг прочитает? Ну, может и повезет, но более вероятно читать тебя будут индусы

Да ему эта инфа даром не нужна. Но авось кто-то оценит, как я крут. «Ай, Моська, видать она сильна, ведь лает на слона.».

Странная ситуация с этим проектом вообще. У меня есть стойкое ощущение, что там очень мутная история с этим Best Article Award, помимо того, что автор просто довольно умело продает себя. VMware не купился, Microsoft не купился — фейсбук купился. Он с этим shared log-ом еще и в NUMA многопоточке засветился:

https://cs.brown.edu/people/irina/papers/asplos2017-final.pdf

Как можно увидеть из немногочисленных бенчей с участием lock-free структур данных, lock-free подход в хламище укатывает его метод, и потому большая часть «конкурентов» сделаны на глобальной блокировке и наивной реализацией flat combining. Да, его алгоритм в стэке себя хорошо показывает по сравнению с наивным lock-free, но только благодаря отсутствию согласованности операций над этим стэком, которая неявно есть в наивном lock-free стэке — короче говоря, NUMA-aware lock-free стэк из нескольких стэков опять же в хламину уделает shared log. И в этих бенчах не принимали участие STM-реализации, и конечно же не принимал участие сам оригинальный Redis, хотя он почему-то упомянут в статье, якобы они что-то на базе него делали, хотя на самом деле их реализация имеет минимум точек пересечения с функциями Redis.

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

И думаю критика никому не нужна, нужны полезные людям решения

Я могу дать полезное решение: не вы$@#!йся и не в$@#!бан будешь, используй самое простое решение, а не самое замороченное. Фейсбук не знал этого, и теперь будет долго мучиться со сложным и ненадежным решением от индуса. При написании PSO я не знал про это правило и сначала сделал блокировки сильно сложнее, чем то требовалось, о чем довольно быстро пожалел, когда попытался заставить эти блокировки правильно работать.

byko3y ★★★★
() автор топика
Последнее исправление: byko3y (всего исправлений: 1)
Ответ на: комментарий от foror

Вылезай из криокамеры в джаву завозят довольно низкоуровневые фичи

Давно уже. И даже GraalVM с AOT-компиляцией сделали. Но оптимизированный код без GC почти всегда обгонит код с GC.

byko3y ★★★★
() автор топика
Ответ на: комментарий от byko3y

Но авось кто-то оценит, как я крут.

Пока на лоре в основном оценивают в другую сторону.

Как графомана и анскильную лалку…

Не думаю что в других местах люди отличаются…

Попробуй решать реальные проблемы опенсурс проектов раз не можешь найти работу так…

Вот будет у тебя N реализованных фич в каком-нибудь проекте, которым пользуются все в этой компании, тогда закроют глаза на то что ты не можешь решать LeetCode…

А пока нет резюме в OpenSource мире и нет способностей решать LeetCode задачи за 5 минут, то остаётся только писать простыни на лоре…

fsb4000 ★★★★★
()
Ответ на: комментарий от fsb4000

тогда закроют глаза на то что ты не можешь решать LeetCode

Ты прям душнила похлеще меня. Просто «решил как-нибудь» я этот литкод за 3 минуты — проблема была в том, что я не нашел идеальный вариант O(N) за отведенное мне время. Знаешь, почему я не люблю литкод? Отгадай задачу по началу её описания: «You are given an array of integers...» Гибкость мышления и находчивость тренируется прям до небес.

byko3y ★★★★
() автор топика
Ответ на: комментарий от byko3y

Давно уже.

Они и видно, изучай https://openjdk.java.net/jeps/393

Но оптимизированный код без GC почти всегда обгонит код с GC

Ну, выиграешь 5-10%, но какой ценой?

foror ★★★★★
()

Забавный пациент.
На серьёзных щах втирает о том какие все вокруг тупицы, и индусы, и работодатели, и индустрия вообще. Зато один он сидит такой Д'Артаньян и целый день строчит простыни для лора где он всех критикует. А заодно ноет о том как никто не оценивает его ненужный проект который он уже 3 года как пилит https://github.com/byko3y/python-shared-objects у которого нет ни единого форка.

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

Lamobot
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.