Спустя две недели с момента прошлого глобального сбоя вчера сеть доставки контента Cloudflare, обслуживающая около 20% всего мирового web-трафика, на 25 минут частично оказалась недоступной. Во время инцидента примерно треть запросов через Cloudflare завершалось возвращением пустой страницы с кодом ошибки 500. На этот раз, причиной стала остававшаяся много лет незамеченной проблема в коде на языке Lua, применяемом в системе фильтрации трафика WAF (Web Application Firewall) для блокирования вредоносных запросов...Подробнее: https://www.opennet.ru/opennews/art.shtml?num=64387
ну хоть 25 минут только.
Что для нас вообще не проблема:
https://blog.cloudflare.com/russian-internet-users-are-unabl.../
> причиной стала остававшаяся много лет незамеченной проблема в коде на языке Lua, применяемом в системе фильтрации трафикаТут явно написано, что клаудьфляра блокирует посетителей.
-- - - - что клаудьфляра блокирует посетителей.Да не, не посетителей, а мимо проходящих или бегающих там на всяких бравзерах типа фирифокса и подобных, использующих их сервисы и нитолька.
Во, а я думал, это опенет от меня бегает. Ну, думаю, они же забанили уже полинтернета из-за меня. А оно вона как.
это я всех блокирую!
Доступ к Google с одного IP‑адреса может быть временно ограничен или заблокирован и ограничивает при подозрительной активности - слишком большом количестве или частоте запросов с этого IP, NAT и т.д. С Cloudflare так же, только с возможностью подтверждения, что это человек хочет посетить сайт, а значит пропустит на сайт. IPv6 это решает при условии каждому подключению к интернету свой IPv6 адрес и доступ осуществляется напрямую, без NAT и т. д.
и ограничивает или времено блоктрует
> наблюдались проблемы с работой Canva, Zoom, Slack и DowndetectorDowndetector :)
Надо lua на rust переписать, правда это не поможет.
> In our replacement for this code in our new FL2 proxy, which is written in Rust, the error did not occur.
И все равно у клаудфлёра будет падучка.
ну то есть они неправильно переписали. почитай новость, там в криворукости дело
Вы как, ни садитесь, в музыканты не годитесь.
На Haskell, как это сделали в Лицекниге.
https://engineering.fb.com/2015/06/26/security/fighting-spam.../
Вот она, типичная проблема всех корпов, а именно - поналепят критикал мишн проектов со стеком аля "сборная солянка" из технологий, а потом ловят сбои из за малюсенькой детали.
Так что надо всю инфраструктуру писать на одном языке, но это что то нереальное, дешевле же нафигачить кода из разных готовых модулей, и неважно что это франкенштейн.
Вот ты-то точно сделал бы лучше.
> Так что надо всю инфраструктуру писать на одном языкеВсе гвозди на стройке здания забивать микроскопом из лаборатории, что будет расположена в этом же здании? Норм логика.
На каждый удар микроскоп по гвоздю ещё нужно 10 смотрящих и 1 начальник. Тогда уж точно безопасно будет (нет)
Зачем один язык? Там все равно разные команды.
> Вот она, типичная проблема всех корпов, а именно - поналепят критикал мишн проектов со стеком аля "сборная солянка" из технологий, а потом ловят сбои из за малюсенькой детали.Это проблема капитализма - рвутся к монополии и сверхприбылям. Нужно быстро и качественно. Между прочим если посмотреть масштабом выше, то это не такая уж и плохая идея (на уровне государства выше). Знаете почему? Потому что от множества специалистов и перехода на кроссфункциональные команды вы переходите к кроссфункциональным компаниям. Т.е. какую-то функцию (технологию) выполняет компания у которой есть пару конкурентов среди которых есть конкуренция за предоставление качественных услуг. В самом обычном приложении вам может по какой-либо случайности понадобится обычный логгер и вот вы можете или сами его написать или воспользоваться сервисом какой-либо компании, которая не только лог вам выдаст, но и причину и даже целое видео воссоздаст на сотню-другую шагов до этого.
Вот представьте что для обеспечения безопасности какой-то вот такой профессиональный сервис стоит посредине и анализирует трафик. Вот оставит какой-нибудь человек на русском военном новостном сайте небезопасный комментарий, а западные господа обязательно побеспокояться выяснить кто это и откуда. Т.е. эта палка с двумя концами - технология ещё желательно родная, поэтому и уровень не выше государства как я уже и сказал. Ну а иначе не возмущайтесь что хороших людей становится все меньше.
А я думаю, чего вчера в нужный момент сайт zoom возвращал 500 ошибку cloudflare. Не прошло незамеченным)
> две проблемы: cloudflareКлаудь по всему миру (не) работает.
ну, то есть они сами сломали и lua тут ни при чём
---- -- ну, то есть они сами сломали...Ну так ведь lua сам себя и на себе не пишет, как и любой другой.
> применяемый для тестирования WAF инструментарий не поддерживает выставленный размер буфера. Так как данный инструментарий не влияет на трафик, было решено отключить его.Вот причина, а не код на Lua.
Сложно охватить знаниямя всю комплексную инфраструктуру Cloudflare для одного человека, вот и нехватило знаний.
> В коде не было проверок существования объектаВот где ошибка.
там целый букет, чего вы по одной таскаете: не было проверок, не было тестов, не было обработчика ошибок и т.д. Времени у них судя по всему тоже не было, раз "применяемый для тестирования WAF инструментарий" решили не менять под новые требования, а отключить
> решили не менять под новые требованияДак они боятся что-то трогать, т.к. не понимают, как оно работает, иначе весь интернет на планете положат, кроме суверенного некоторых стран.
... который уже лежит. Договаривацте до конца)
Проблема не в проверке того, что машине требуется бензобак, а в том, что вы забыли, что машине нужен бензин, чтобы ехать. Этот модуль не должен был отключаться вообще, поэтому всё и рухнуло.
ясно, меняются только декорации и прочие несущественные детали.в 1986 в Чернобыле было почти тоже самое.
Только здесь на следующий день, публично рассказывают, что произошло.
Просто тут легче было выяснить.
>>Только здесь на следующий день, публично...это несущественные детали.
зрите в корень произошедшего.
Это как раз самое существенное.
Человеческий фактор и от этого никто не застрахован.
А вот публичное признание проблемы... на это не все готовы пойти.
> публичное признаниеСтранно не заметить, когда полглобуса лишается интернета из-за клаудфляры.
> рассказывают, что произошлоА что произошло? Хоть один косорукий программист был уволен?
Lua - not good, not terrible.
Мир усложняется, количество ошибок будет только возрастать. Тем более когда речь про интернет, и про проекты находящиеся, что называется, на острие. Проекты вынужденные решать задачи первыми, при помощи инструментов которых у них ещё нет, а значит - при помощи разного рода костылей и скотча.
Объемы необходимых знаний увеличиваются, размер хранилища (мозга) остаётся примерно неизменным. Когда твой проект "на острие" - у тебя нет времени пойти в "библиотеку", даже послать кого-то (так называемого ИИ) некогда, ведь ему надо сформулировать задачу, а она у тебя на костылях известных одному тебе и еще парочке чуваков. А еще нужно уметь проверить то, что тебе из "библиотеки" принесли, а для этого опять-же мозг. Готовьтесь к хаосу, господа.
Если некоторые немного жадные руководители не будут слишком торопиться половину ошибок удастся избежать.
Всё так, и отчёты CloudFlare тому подтверждение.
p.s.:
https://www.mozilla.org/ru/about/manifesto/
Знаешь как быстро распознать ложный (или просто бесполезный) тезис? Примени его к другим ситуациям - если будет так же хорошо раскрываться - значит тезис сформулирован в общем виде - значит он условно всегда верен - значит его невозможно оспорить - значит он ложный или пустой. Скажем, твой можно применить вообще ко всему - к электричеству, колесу и переходу от собирательства к разделению труда. Но что-то мир до сих пор не погрузился в пучину хаоса после каменного века))Не прогуливайте философию науки в вузах - она рулез.
И еще - есть гигиена тела, а есть гигиена мысли. Забивая себе голову теориями заговора, пустыми общими тезисами и измышлизмами - вы просто нарушаете свою гигиену. А от этого зависит как вы будете справляться с жизненными ситуациями. Ой как смешно - я написал бредовый пост на опеннете! Ну будете так продолжать - ни один психолог не поручится, что в ответственный момент вы поведете своего ребенка к врачу, а не к гадалке.
> Ну будете так продолжатьну балон с водой перед теликом это гены, промолчу про бутылку "элексира шастья" :)
Атомарность. Если вылезать из коробки хоть иногда, то окажется что фундаментальные вещи таки применимы ко всему. Не прогуливайте все остальные предметы.
Это под действием алкоголя написано? Нейросеть умнее слова генерит, а на шизофазию не похоже
Уровень владения предметом, как и уровень когнитивных способностей в целом - важны для осознания своей несостоятельности.
Молодец).
Мы тебе тут не гумонитории какие. Мы технори, с нами Линукс!
Cloudflare, это самое лучшее.
Раньше во времена SEO приманивали ботов, сейчас блокируют. Чудеса.
> сейчас блокируют...блокируют целыми подсетями, из-за чего обычным людям не зайти на сайты, которые за клаудей находятся. Ещё и MITM в придачу.
Всегда боялся lua, даже сам синтаксис:if rule_result.action == "execute" then
rule_result.execute.results = ruleset_results[tonumber(rule_result.execute.results_index)]
endУже вызывает трепет и ощущение простреленной ноги.
Нормальный синтаксис. Разве что tonumber лишний. Что интересно - в приведенном коде нет упомянутого запуска правила, только сохранение результата.
так запуск они убрали. Правда непонятно зачем в новости "execute" называют методом, когда это таблица
Потому что в луа все является таблицами и метатаблицами (как прототип, но нет). Вызов метода объекта - вызов функции полученной по ключу из таблицы.
не спец в луа, но там разве скобки для вызова не нужны? Кроме некоторых случаев.
rule_result.execute.results_index — доступ по ключу в таблице execute, если execute это метод, то там всегда будет что-то типа "attempt to index a function value"
Там метаметод на __index, который при попытке получить ключ вызывает геттер.
Тогда им однозначно следует подумать над правильным именованием таблиц и свойств. На первый взгляд код выглядит так, будто производится манипуляция результатами. И, кстати, метаметоды работают существенно медленнее прямого доступа к таблице.
Как ты думаешь, как этот tonumber там появился? Примерно так же, как появится инициализация этой таблицы.
Не говоря просто о уродливости словесных конструкции прямиком из basic, у меня сразу возникают вопросы:
Как понять что такое rule_result.action?
А rule_result.execute это что, оно вообще существует?
Про лишний tonumber ещё забавнее, видимо даже сам автор этого кода сомневается, что вернёт ему index. А вдруг там nil?
И вообще весь продакшн держится на такой скриптовый лапше, которая из-за рандомной работы с указателями вешает 20 процентов интернета?
Я высказался лишь по поводу синтаксиса языка. А вот по поводу именования таблиц и полей таблиц - согласен, фиг поймешь что, куда и зачем пишется. Но это не проблема языка. Сам язык довольно гибкий и одновременно простой.
О господи, еще и гадалки по синтаксису тут появились. Скоро будем обсуждать какой ЯП учить исходя из знака зодиака?!
Ох уж эти свидетели then. Если от этого в обоморок падаешь, что с тобой будет при виде begin end?
а как вам такой аргумент?//blog.cloudflare.com/5-december-2025-outage/
"""
This type of code error is prevented by languages with strong type systems. In our replacement for this code in our new FL2 proxy, which is written in Rust, the error did not occur.
"""код на луа и на расте, я думаю пишут разные люди.
> а как вам такой аргумент?
> //blog.cloudflare.com/5-december-2025-outage/
> """
> This type of code error is prevented by languages with strong type
> systems. In our replacement for this code in our new FL2
> proxy, which is written in Rust, the error did not occur.
> """
> код на луа и на расте, я думаю пишут разные люди.Они же честно пишут, что не тестировали код, а когда дело дошло до исполнения, то он сломался. Понятное дело, что строгая типизация помогла бы решить вопрос, но без тестирования бы упало в другом месте.
> Понятное дело, что строгая типизация помогла бы решить вопросзвучит голословно, и клаудфлейерщики не раскрыли, как эта строгая типизация помогла бы.
> Понятное делоЯ бы не удивился бы, если они написали бы такое - "Если бы код писал бы ЫЫ, то таких ошибок не было бы" :)
судя по тому, как совсем недавно они воткнули unwrap() в продакшен rust-коде, пишут как раз те же :-)
ну вот видать это их аргумент, че вы хотите от нас, мы растовики, а не луашники, надо переписать на раст, в нем такого точно не было бы. Вот и не уволили их :) А в случае с unwrap(), они признают, что такого в продакшене быть не должно вы че, неее мы растовики это знаем.
> ... Rust, the error did not occurНа расте в предыдущий раз упало, и лежало 3 часа. А на луа - только 23 минуты.
Вон луа показало строчку, шо там им раст показал?[lua] Failed to run module rulesets callback late_routing: /usr/local/nginx-fl/lua/modules/init.lua:314: attempt to index field 'execute' (a nil value)
А вот то что показал раст
thread fl2_worker_thread panicked: called Result::unwrap() on an Err value
растовики, поясните в каком это месте?
1) useEffect в react
2) unwrap в rust
3) теперь luaТролить работика vercel для них важнее, чем писать хороший код.
И опять никого не накажут... Полнейшее покровительство внутри конторы. Имена создавших это программистов не разглашаются.
> Имена создавших это программистовда их давно уже там нет :) сфарганили на луа ваф и сунули в нджинкс, давайте зарабатывать бабки на этом.
В openresty.
openresty = nginx + lua
Есть луа модуль для нжинкс и есть опенрести, который форк нжинкс и развивается параллельно.
Луа (и особенно luajit) - это наверно самый вногустрелятельный язык. Наиболее сложный, несмотря на простейший синтаксис.
одно время пришлось настраивать софтину которая опирается на lua-скрипты, языка не знал вообще, выучил буквально за 2 дня и написал довольно сложную многопоточную логику; на моей практике самый легкий язык с очень приятным синтаксисом
> язык с очень приятным синтаксисомА потом интернет во всём прозападном мире падает, потому что у программистов в коде чёрт ногу сломал.
>во всём прозападном миреЛучше сразу всё заблокировать, чтобы ничего не падало ?
https://en.wikipedia.org/wiki/List_of_websites_blocked_in_ma...
https://en.wikipedia.org/wiki/Internet_censorship_in_the_Uni...
Сравни списки заблокированного.
https://en.wikipedia.org/wiki/List_of_websites_blocked_in_th...Как думаешь, почему по USA нету списка? Цензура есть, а списка на вики нету...
ХА-ХА-ХА!
Ты хоть посмотрел списки ? Сравни, что блочат в этих странах.
Сравни списки заблокированного и не позорься больше.
А sci-hub ещё работает? Разве его не хотели прикрыть те же бриты?>> Цензура есть, а списка на вики нету...
Хах)) на вики как-то один товарищ написал безобидную шутку про мою сестру, хотел понравится. Какое-то время оно там висело. Вики несколько неадекватный сервис. Рано или поздно его найдет какой-нибудь Шай-Хулуд распространяя правки.
Пока у тебя код по принципу сунь-вынь и единицы сот строк, все легко. Сложности начинаются, когда тебе нужно писать какие-то реализации, работающие с абстракциями. Приходится собирать свою вселенную из атомов, начиная с базовых вещей. В процессе всего этого ты неизбежно косячишь с метатаблицами и получаешь совершенно невозможные в других языках ситуации. Луа неинтуитивен даже если ты очень хорошо понимаешь джаваскрипт.
Я не могу комментировать твой опыт, но мой опыт возни с луа вполне позитивный. Мне приходилось выпиливать код на 5k+ SLOC, и к тому моменту когда я решил, что он закончен, это был вполне приятный код, на который дальше можно было накручивать и накручивать фичей, если бы были фичи, которые туда можно было бы вкорячивать. Код не упёрся в потолок сложности, когда любая попытка внести изменение привносит тучу багов в самых неожиданных местах.> Приходится собирать свою вселенную из атомов, начиная с базовых вещей.
Эмм... Из того, что можно было бы назвать "собирать вселенную из атомов", в моём коде разве что комбинаторы итераторов были. (Поскольку они динамические, они такие длинные бектрейсы генерировали местами, что я ждал что рано или поздно я сорву стек очередным комбинированным итератором. Но обошлось.)
Да, lua это динамическая типизация, и да это неизбежно приводит к куче дурацких ошибок, которые легко могли бы быть отловлены компилятором. lua серит ещё дополнительно, считая что идентификатор не соответствующей никакой переменной должен вести себя при попытках чтения как переменная со значением nil. Банальная опечатка в идентификаторе, легко может отправить nil куда-то сквозь наслоения стековых фреймов, и в совершенно неожиданном и давным-давно отлаженном коде ты вдруг получишь ошибку с nil. Ну, то есть, понятно почему луа так себя ведёт -- это потому что он считает, что при обращении к табличке по несуществующему ключу, надо возвращать nil, и поскольку переменные все в табличках хранятся, получается такая шняга. Но, всё же, следовало бы запретить обращения к неизвестным переменным, чтобы ручкой граблей по лбу прилетало бы сразу, как на грабли наступишь, а не когда-нибудь потом.
Но если отвлечься от этого, то дальше всё довольно приятно выходит. Функциональные фишки языка позволяют выстраивать сколь угодно сложные абстракции, а метатаблички часто позволяют делать это даже красиво.
> В процессе всего этого ты неизбежно косячишь с метатаблицами
Позволю себе предположить, что твои проблемы были вызваны злоупотреблениями метатаблицами. У меня с ними никаких проблем не возникало, кроме той, что моя дебаг функция дампящая табличку и всё что в ней есть, уходила в бесконечную рекурсию и срывала стек, когда я ею пытался отдампить метатабличку с __index = self. Я так и не собрался приделать детект циклов при рекурсивном обходе.
Это почему?Проблема с luajit ровно одна - это закрытый процесс разработки и автор на своем уме (вроде как даже тестов нет). Хотя язык почти не меняется в чем плюс. Поэтому у многих свой форк.
Нормальный язык. Простой и гибкий. Из последнего:$ find . -name "*.lua" | wc -l
28$ find . -name "*.lua" -exec cat {} \; | wc -l
5057Как и везде - инструментом нужно уметь пользоваться.
У них кто-то умный уволился что ли? Кто раз за разом допускает дурачков до прода?
> У них кто-то умный уволился что ли? Кто раз за разом допускает
> дурачков до прода?так в этом то и заключается эффективный менеджмент, нанял хороших, сфарганили быстро продукт, уволил, нанял смузихлебов девляпсов и вуаля, айпио.
Флара - это тихий ужас, она вообще нормально не работает нигде.
Пользоваться всерьёз можно только если ты либо жестокий и большой энтерпрайз со SLA, либо для сайта локалхоста.
Какие альтернативы ?
https://www.cloudflare.com/ru-ru/plans/
Вот выбирай https://www.directline.pro/connect/p/analogi-cloudflare-v-ro.../ (кроме bunny.net его уже тоже прикрыли).Но следует учесть что у практически всего того что в списке единственная локация доступа Москва. Говорю так потому что Ngenix работает только с крупными компаниями по договорам.
Даже если твой сайт хостится во Владивостоке для жителей восточной окраины России то задержка до контента будет x2 от обычной от Владивостока до Москвы.
Так и есть. Это смех, а не аналоги, но денег просят по взрослому.
большому ентер-прайсу полагается не за чужие sla прятаться, а свои каналы и своих инженеров иметь, позволяющие жить без слива всех клиентов чужому дяде (в крайнем случае - прятаться за него кратковременно, когда действительно непосильная атака).Но проблема в том что и большие ентер-прайсы нынче нанимают вместо инженеров даже не админов локалхоста, а такое что и локалхост доверить нельзя.
Опять runtime error в скриптовом языке! Да как же тааак?!
panic! в нескриптовом был бы конечно куда более кстати.
"треть завершалось". Прелестно.
А без этого "Cloudflare", что уже и интернет не работает. Так зачем он вообще нужен, закройте его и забудьте.
> зачем он вообще нуженЕсли кратно: планетарный MITM, могущий выдавать страницы под твоим сертификатом.
https://opennet.ru/56830-tls
Если корневой сервер децентрализован, то это отличная идея. Потому что в случае отключения от всемирной сети можно ожидать чего угодно - с людьми за рубежом то трудно будет сконтактироваться, рассказать. А такие „предложения иностранцев„ были произнесены публично и поддержаны
ну как бы это тебе... в общем и целом, как видишь - уже можно считать что не работает. То что остается при неработающей - это малонужные на самом деле опеннеты.Причем дело-то в том что он и с клаудшмарью не работает теперь эпизодически, деляпляпляп и в прод, в прод - ой упало - быстроподнятое (за пол-дня) упавшим не считается и можете за следующие пол-дня не платить!
А нужен он затем что владельцы сайтов за клаудшмрадом - точно такие же, незачем разбираться, трясти надо.
Вообще проблемы не увидел, за 25 минут решили вопрос - норм, все дальше заработало - норм.Живучесть норм, ИТ поддержка норм. Во всей технической инфраструктуре для того поддержка и работает, чтобы исправлять такое. 99,9999% доступности - норм показатель.
Критиковать норм - моветон.
для твоего подкроватного сервера проблемы и правда нет. Проблема в том что это теперь - ВЕСЬ интернет. И 99.995% - столько бы получилось если бы клаудмшразь лежала на самом деле всего эти 25 минут за год, а не плюс еще предыдущие двенадцать часов - немного непохожи на "пять девяток".А зачем твоему серверу под кроватью пять девяток - которые он не сможет обеспечить просто потому что сам ляжет - тоже совершенно неочевидно.
А чего ты так агришься на CF? Они тебя на работу не взяли или что? Хороший сервис, делает хорошее полезное дело. Ну падает да, бывает. Не так уж и часто, это не гугл, у них деньги конечные.
> за 25 минут решили вопрос - норм"Борт 321, подождите 25 минут, никуда не улетайте с маршрута, у нас сети нету..."
нифига себе, такой высоконагруженный сервис - и не на C++/Rust. Видимо денег много слишком, на спичках не экономят.
Причиной был реакт. А lua и прочее это эффект бабочки.
Расплодили у себя педеrustов и начались падения.
За рубежом другая культура. На западе много людей у которых два имени, т.е. не как у нас отчество, а именно второе имя. Вот поработаешь немного с человеком и понимаешь его второе имя. Только не понимаю откуда у них столько Питеров?