✍️ Сочинение: Как я провел летозиму. Часть 3
Те, кто знаком со мной лично, знают о моем увлечении блокчейн-технологиями. Мне кажется, что последние полгода я рассказываю о них всем, кто хотя бы делает вид, что слушает.
Обычно я участвую в проектах, связанных с DeFi (децентрализованными финансами), но пару месяцев назад мне захотелось поиграться с железками. Выбор пал на Storj. С одной стороны, проект не требует глубоких знаний: арендовал сервер, запустил докер-образ — радуешься. С другой стороны, судя по активности форума, кто-то постоянно что-то с ним мутит.
Если коротко, ребята занимаются тем, что утилизируют место на твоем жестком диске. Допустим, есть у тебя компьютер с 6 ТБ памяти. Забить такой объем не все смогут, а ребята из Storj — могут. И даже готовы тебе за это заплатить.
Я посчитал и понял, что, скорее всего, я на этом не заработаю, но поиграться интересно. Поэтому с декабря я ищу самые дешевые сервера с большим количеством места. В итоге я пришел к тому, что сейчас терабайт мне обходится всего в 2 доллара в месяц.
Но такой конфиг я нашел не сразу, и, как следствие, приходится переезжать на более дешевые сервера.
Простите за долгое вступление. В общем, задача — перенести терабайт данных (мелких файлов от 1 до 60 МБ) с одного сервера на другой.
Запустил rsync, через час ждать надоело, ушел погулять. Вечером подумал: "Ну ок, до утра перекачается". Через сутки начал подозревать неладное. Оказалось, что за сутки я не перекинул и трети. В поддержке сказали: "Ничего, они подождут и не будут выключать сервер", но мне было любопытно — я же ввязался в это, чтобы хлебнуть опыта.
Я стал искать проблему. При наличии 250-мегабитного порта на сервере мое полтерабайта должно было перекинуться за 4-5 часов. Очевидно, что, поскольку файлов много, мы получаем дополнительные расходы.
Выяснилось, что rsync не очень хорош для таких задач, поскольку каждый файл открывается, читается метадата, потом передается, а удаленный файл сравнивается с исходным.
Так я пришел к идее запустить несколько процессов rsync.
🤔 Но сколько?
В итоге оказалось, что более 40 SSH-соединений удаленный сервер принимать не готов, поэтому я вывел список папок. Скопировал все в редактор, преобразовал их в массив строк и прямо в JS написал команду типа:
rsync /mnt... root@/<сервер назначения>:/mnt... &
Объединил их через знак &, чтобы они запускались параллельно, пока не наберется 40.
Сначала хотел остановиться на этом и запускать команды по 40 штук, но вспомнил задачу в Алгоритмической секции, которую решал на интервью.
В общем, мне надо было написать скрипт, который при завершении одного процесса запускает следующий, и так пока не закончатся задачи. В каждый момент времени должно быть запущено максимальное количество задач.
Я, конечно, фронтендер, но решил уже не извращаться, а написать все на "православном" баше. Через час скрипт был готов, а я, довольный тем, что алгоритмы пригодились в реальной задаче, ушел спать. Утром все данные были перекачаны.
❓ А зачем я вообще все это расписываю?
Я люблю программирование именно за ощущение того, что вчера я чего-то не мог, а сегодня могу. Я не знал, как это сделать, и вообще, что я могу это, или вообще не знал, что такая проблема есть. А сейчас я взял это и решил. Именно это меня до сих пор восхищает в программировании. И именно из-за этого чувства я все еще работаю.
Все три поста были напоминанием того, что нужно не переставать пробовать что-то новое, играть с различными технологиями, возможно, не красиво, но решить задачу. И, к сожалению, это в первую очередь напоминание мне. Я часто замыкаюсь в своей хорошо изученной области и не смотрю по сторонам. А потом думаю: "Что-то стало скучно, наверное, программирование — это не мое".
А подобные каникулы говорят об обратном. Это мое, это то, чем я хочу продолжать заниматься, на что тратить время и где черпать вдохновение для новых проектов.
@alx_four
Написать мне | Поддержать Канал
>>Click here to continue<<