Pull to refresh
1
0
Send message

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

Супер. Как я долго искал подобное объяснение!

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

И почему каждый рабовладелец считает себя благодетелем? Который платит не зарплату, а дает милостыню. А ты должен в пояс кланяться и 24/7 принадлежать только ему. И желательно принимать пищу без отрыва от работы и в туалет тоже ходить не чаще 1-го раза в сутки. А вот сейчас обраточка. Вы думаете что очень сложно открыть ООО "рога и копыта" или считаете себя крутыми управленцами? В ИТ работают не самые глупые люди и поверьте это им по силам. И именно они зарабатывают денег себе на налоги и зарплату, на амортизацию и что бы содержать нахлебника в виде работодателя. И если бы я хотел зависеть от прибыли компании, то я давно бы основал свою. Или нашел бы работу с акционом. А если я работаю за зарплату, то мне по барабану что там творится в компании. Рабовладелец же не прибежит ко мне с удачно заключенным контрактом и скажет на тебе х3 зарплату. А вот когда он прое*ся, то конечно будут кругом все виноваты и не он чмо тупое которое не умеет вести бизнес, а работники хреновые. В любой работе есть две кривые: это уровень комфорта и вознаграждения. И они должны коррелировать. А если рабовладелец этого не понимает, то в итоге именно он останется с протянутой рукой. Начинается сильная ротация, что в ИТ вообще не допустимо. У меня есть не один пример, когда команда посылала зажравшегося работодателя и основывала свои удачные стартапы.

Запилил видео для восстановления кластера на базе Patroni, и это уже все верно для 12-ой версии Postgres-а. youtu.be/3-URl1XyBv8
Очередная какая то каша из топора. Пытаюсь понять нужен ли этот pgbackrest. Как я понял он сам wal-файлы мерджит при восстановлении, раз у топикастора не указана команда restore_command, что очень стремно. В чем его преимущество? Инкрементные бэкапы? Так wal-ы по факту и есть инкрементные бэкапы. То что он якобы использует все ядра при компрессии, нет не использует. Равномерной загрузки нет, да и не очень то это надо во время бэкапа все ядра съесть. Постоянно вылетает с ошибкой даже при полном бэкапе ERROR: [082]: WAL segment 000000290000001A0000008A was not archived before the 60000ms timeout. если у вас нет записи в базу и в течении 60сек не прилетел wal. Это маразм! Причем этот ишю еще с 17-го года висит на гитхабе. В общем нахрен это рукотворное творение я наигрался. В топку его, в прод не потяну. Нативная pg_basebackup раз в сутки и архив wal-ов за n-дней.

И по поводу скорости:
sudo -u postgres time pgbackrest --log-level-console=info --stanza=main --type=full backup
10.07user 6.71system 5:28.34elapsed

pg_basebackup --checkpoint=fast -P -Xstream -z -Ft -h 10.103.10.200 -p15432 -U repl -D /1
real 2m18.864s
user 2m13.011s
sys 0m5.643s

ПГ 12, утиль 2.33 сеть 2х10Гбит в бонде.
Готов поспорить с автором что это не кластер и что при падении одной ноды у него отвалится часть консьюмеров.

1. Ни когда, вообще никогда не разворачивайте три zookeeper-а на одной машине. Автор либо не понимает что он делает, либо не сказал об этом. Нечетное количество зоокиперов позволяет избежать сплитбрэйна. А так же позволяет кластеру сохранять свое консистенотное состояние. Ляжет нода с зоокиперами, все кафки превратятся в тыкву.
2. Как только у тебя ляжет хоть одна нода с кафкой. Часть сервисов продолжит нормально работать, а часть встанет раком. И новые сервисы будут вести себя примерно так же. В библиотеке питона, даже не удосужились причину кинуть в эксепшен. Только у нас в элексире я увидел что клиент орет на то что не найден координатор групп. А причина вот в чем. С недавних пор смещение по топикам стали хранить в так называемом системном топике __consumer_offsets. Но дело в том что по оф. доке он должен реплицироваться в 3 реплики, а на самом деле? Фактор репликации у него 1. Нода гасится и теряет все смещения своих консьюмеров и они уже ни когда нормально не заработают.
Варианта тут 2. Первый задать на новом сервере переменную offsets.topic.replication.factor=3, но это сработает только до первого запуска. Второй выполнить скрипт на уже работающем сервере:
ZOOKEEPER_CONNECT=localhost:2181                                                                                                                                                               
                                                                                                                                                                                               
./kafka-reassign-partitions.sh --zookeeper $ZOOKEEPER_CONNECT \                                                                                                                                
    --reassignment-json-file ./inc-replication-factor.json  \                                                                                                                                  
    --execute                                                                                                                                                                                  
                                                                                                                                                                                               
./kafka-reassign-partitions.sh --zookeeper $ZOOKEEPER_CONNECT \                                                                                                                                
    --reassignment-json-file ./inc-replication-factor.json  \                                                                                                                                  
    --verify                                                                                                                                                                                   
                                                                                                                                                                                               
./kafka-topics.sh --zookeeper $ZOOKEEPER_CONNECT --describe --topic __consumer_offsets


inc-replication-factor.json
{«version»:1,
«partitions»:[
{«topic»:"__consumer_offsets", «partition»:0, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:1, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:2, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:3, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:4, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:5, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:6, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:7, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:8, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:9, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:10, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:11, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:12, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:13, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:14, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:15, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:16, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:17, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:18, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:19, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:20, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:21, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:22, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:23, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:24, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:25, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:26, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:27, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:28, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:29, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:30, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:31, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:32, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:33, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:34, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:35, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:36, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:37, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:38, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:39, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:40, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:41, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:42, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:43, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:44, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:45, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:46, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:47, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:48, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:49, «replicas»:[2, 3, 1]}
]
}


Вот скриншоты оф. доки и гита по состоянию на 2021.04.22
image
image
Придется оставит ссылки. Шёл 2021 год, а у хабра до сих пор мегаотстойный движок, который глючит даже при добавлении картинок.
ibb.co/8519YGB
ibb.co/Pm9J6HF
Я смотрел их видео курсы под руководством Воронцова. По моему назывался «Алгоритмы и структуры данных». Ну со структурами данных я полностью согласен, понимать как они устроены внутри что бы писать эффективный код конечно же нужно. Но какой то бред в виде оценки методом монетки… Чё за хрень? Мне сложно представить кейс когда я скажу «Так, все профилировщики говно, они не отражают истинную картину, пойдука я методом монетки оценю». У меня только один вывод, таким образом они оценивают вашу стресоустойчивость или с Я. что то не так.
Кстати я понял почему их тренажер лажал. Они наивные думают что в функции я буду передавать нужное им количество аргументов. А я работал через стэйт класса везде, где только можно. И максимально гетеры и сеттеры использовал. Аргументы методов не совпадали и их assert-ы шли лесом. По крайней мере по анализу одного из заданий и их эталонного решения это вытекает.
Присоединяюсь к выводам автора. Действительно приходилось гадать как нужно оформить вывод, с пробелами без, с переводом строк или нет. Я не понимаю почему нельзя в ассертах все потримить. НО! Дальше больше. В одном из уроков их «эталонное решение» для вывода топ5 использует сначала сортирвку, затем реверс. Вы серьезно?! Это даже для джуна зашквар. Я конечно это сделал с лямбдой в качестве компаратора. Решение не принималось. Задал вопрос сапортам. Началась лапша, что типа у вас не учитывается бла-бла-бла. Это очевидный отмаз и я с ним не согласен, но да хрен с ним. И какого мое удивление, когда через пару занятий их эталонный код полностью повторяет мой «неправильный». Какого х… звучал мой вопрос в ТП. Вроде как признали. Дальше еще интереснее. Делаю решение, заданию соответсвует, тренажер не принимает. Пишу в ТП, мне отвечают: «Ваше решение отличается от эталонного, попрубойте сверится». Ок, не стал копипастить. Решил проверить их решение. Вашу мать… вы его сами проверяли?! Ваш код делает вывод не соответствующий заданию. Но его тренажер принял ))). Написал в ТП, тоже признали. Финальный проект, так же не принимался тренажером. Устал бится. Показываю выводы, скриншоты которые полностью совпадают с заданием. Ни в какую. Я синьёр девелопер на Elixir, работаю в проде. На С++ в проде не писал. Курсы прошел для интереса. Могу сказать что курсы от Я. просто отвратительные, терию не читал, так как все в основном знал. Но когда решил прочитать Сильно был удивлен. Я функциональщик и после объяснения функции accumulate, я засомневался что понял как она работает и что это обычная редьюс функция. В теории про лямбды, при захвате переменной по ссылке ни одного слова о том что её можно изменять в теле. А задание именно на это. Платные курсы конечно же проходить не собираюсь. Есть много курсов, которые на порядок лучше. Где очень кратко и доходчиво объясняют простым языком сложные вещи. Начинающим очень не рекомендую сильно демотивируют «не понятные» задания.
Большинство выводов верны. Но позволю себе дополнить.
1. Не используйте кэш из SSD. Кэш помогает сгладить пики, но вовсе не решает проблему производительности ваших HDD. Это с играет с вами злую шутку, даст вам запустится а затем когда данные перестанут влезать в кэш вы сильно попадете. Причем сразу и сильно. Если в случае с SSD в качестве основных дисков вы постепенно начнете испытывать «тормоза», и у вас будет время что бы модернизировать систему, то в случае переполнения кэша сразу наступит ахтунг.

2. Сеть, чем быстрее тем лучше. Используйте две сети public и cluster. Так как при пересинхронизации ceph использует именно кластерную сеть и public сеть забитая клиентами для этого подходит очень плохо. Используйте LACP(bonding)+VPC(или его аналог). Избегайте единой точки отказа. Падение линка и его восстановление это пересинхронизация, а этого можно избежать если предусмотреть резервирование. Без этого вы получите геморой на ровном месте.

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

В остальном отличная статья и руководство к действию. Все выводы верные. Нужна хорошая сеть и быстрые диски. Эти параметры должны быть сбалансированы. Тогда все у вас будет хорошо. И не читайте всякий бред типа «анатомия катастрофы». Где напихали по 15 SSD в три машины, обвязали 10Г сетью, а потом понаписали всякой ереси.
пишете статью

Очень может быть. Как раз в планах скоро тестирование сборки стоит. Забегая вперед, скажу что сегодня с утра провел небольшое тестирование на 3 ссд, в каждой машине, в пиках загрузка по сети была около 9Гбит. Бонд работал с загрузкой обоих линков. Тестирование производилось без даунгрейда.
Во первых я не сказал что цеф не имеет проблем. Ровно так же как я и не говорил, что «Знаю как надо». Это почему то вы за меня сказали. И где я предложил заливать архитектурные проблемы железом? Не передергивайте, я сказал что ваша конфигурация идет вразрез с рекомендациями. А у вас единственный аргумент «А ты знаешь сколько это будет стоить». Мы обсуждали архитектуру, а не стоимость. Я сразу сказал что эта не тема обсуждения. Давайте тогда тогда на двух тачках соберем 50 ссдэх воткнем, кворум отключим, а когда все медным тазом накроется напишем статью анатомия апакалипсеца ))) Дальше не вижу смысла продолжать дискуссию, полезной нагрузки она не несет.
Ну почему же? Если Вы с таким апломбом декларируете о том, что у всех неправильный сетап — то наверняка Вы знаете правильный. Сообщество ждет. Сефовский чат в будет рад услышать предложения эксперта.

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

Ответ 1: Бороться можно только архитектурой — делать больше доменов отказа.

Но почему то вас очень задевает, когда я вам говорю то же самое.
Разумеется. Я вам по секрету скажу — в продуктиве мы это использовали. И не только мы — в общем то практически все, у кого сеф в продуткиве, к этим ухищрениям прибегают.
Так а почему в статье/докладе об этом не слова и все тесты без бондов. И кстати почему не слова об утилизации сетевых интерфейсов.
И как то непонятно получается то вы говорите «2x10 вполне бы хватило», то говорите «Вот только это не помогает.» Вы уж определитесь.)
А то знаете ли, с эльфийскими фантазиями о бюджете можно много насочинять, а так чуть ближе к земле будет.
это вообще ни какого отношение к обсуждению не имеет. Могу лишь напомнить что кроилово, ведет к попадалову.
2x10 вполне бы хватило
вот наконец то вы озвучили это. Агрегация и бондинги появились за долго до 2016-2017 года.
Ну то есть вы настаиваете, что конфигурация была подобрана оптимально. Три машины по 10ssd в каждой, обвязаны 10Г сетью? Так надо делать?
Не вижу призыва покупать патч. Напротив, вижу обещание предоставить этот патч сообществу после доработки (уж не знаю произошло ли это за 2 года, пишу про то что прочитал).


На видео 41:38 человек явно спрашивает где можно посмотреть патч, где он его вежливо посылает на хрен и говорит что получите, цитирую: «Когда приобретете наш програмно-аппартный комплекс».
Вы так пишете, как будто проблема была в пропускной способности сети, а не в доступной оперативной памяти.

И да, по моему мнению здесь была проблема именно в сети. Оперативы нехватало, потому что данные не могли записаться и росли кэши.
Если вы про патч, то см видео 41:38

Information

Rating
Does not participate
Registered
Activity