Pull to refresh

Программирование в стиле Теремка

Reading time 2 min
Views 2K
Original author: Ted Dziuba
Перевод старался делать точным, насколько это возможно, и изменил лишь название компании, которая используется как пример, но по сфере деятельности и принципу работы в рознице схожа с той, что в оригинале.

Каждый блинчик в меню Теремка — всего лишь набор из примерно 8ми ингредиентов. С такой простой периодической таблицей элементов компания заработала 1.9 млрд долларов в прошлом году (нет, не Теремок, а всё-таки Taco Bell).
Чем больше я программирую и проектирую системы, тем больше я понимаю, что в множестве случаев можно достигнуть желаемого результата банально сочетая базовый набор инструментов, данный нам Unix. В конце концов, функциональность — это ценность, а код — это задолженность. Это утверждение обратно абсурднму тренду DevOps (разработчико-админов), исходя из которого системные администраторы начинают писать юнит-тесты и прочие вещи, чтобы помочь разработчикам, и гласит что программирование в стиле Теремка это разработчики, которые знают достаточно об администрировании (и Unix в целом) так, что они не изобретают велосипед, и приходят к простым и масштабируемым решениям.

Вот конкретный пример: представьте, вам нужно скачать и записать на диск миллионы веб-страниц для дальнейшей обработки. Как это сделать? Детки-крутышки скажут, что нужно написать распределённый паук на Clojure и запустить на EC2, коммуницируя с помощью SQS или 0MQ.

xargs и wget. В редком случае забивания интернет канала можно добавить split и rsync. «Распределённый паук» на самом деле всего лишь около 10ти строчек кода на шелл скрипте.

Двигаясь дальше, как только у вас есть эти миллионы страниц (или даже десятки миллионов), как вы их будете обрабатывать? Конечно, понадобится Hadoop MapReduce, в конце концов это ведь то, как Google обрабатывает веб-страницы?

Буэ, к чертям эту ерунду:

find crawl_dir/ -type f -print0 | xargs -n1 -0 -P32 ./process

32 параллельных процесса и ноль невнятного кода для поддержки. Требования удовлетворены.

Каждый раз, когда вы пишете код или пользуетесь услугами третьих стороон, вы вносите возможность сбоя в вашу систему. У меня куда больше доверия к xargs, чем к Hadoop. Да я на самом деле доверяю xargs больше, чем самому себе в деле написания многопоточного обработчика. Я доверяю syslog'у в деле асинхронной записи сообщений куда больше, чем сервису очередей.

Программирование в стиле Теремка это один из шагов к Unix дзен. Это тот путь, который я сам только начинаю, но дивиденды уже начинают поступать. Чтобы действительно вступить на него, нужно выбросить кучу мыслей о том, как системы должны проектироваться: я сделал большую часть SOAP сервера используя статические файлы и Apache mod_rewrite. Можно было сделать и всё в стиле Теремка, если бы я только нашёл силы разобраться в sed, но я испугался и написал кое-что на Python.

Если вы не хотите думать об этом с точки зрения дзен, подумайте с точки зрения капиталиста: вы пишете код, чтобы положить еду на стол. Вы можете уменьшить риски, используя хорошо известные инструменты, или можете вступить на неизвестную землю. Вас наверняка не пригласят давать речь на конференции, но работа будет выполнена, и ваш пейджер можно будет принудительно не выключать на ночь.
Tags:
Hubs:
+80
Comments 73
Comments Comments 73

Articles