dao of distributed programming

There is too many ways to build distrubuted, robust, fault-tolerant informations systems. Wich concepts are worth using and which are misleading? How these concepts depends on each other? I have no immediate answer, but I hope to wind it with the help of you, my readers.

пятница, 26 июня 2009 г.

Оптимизация и дезоптимизация

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

Дезоптимизация: улучшение структуры и универсальности программы за счет
перенебрежения явной экономией ресурсов. [При этом реальное потребление
ресурсов может возрасти, а может и уменьшиться.]

Рассмотрим, например, сборку мусора. Программы, полагающиеся на сборку
мусора, не содержат явного обращения к delete и соответственно содержат
меньше ошибок.
При этом сбока мусора может и не работать вовсе - и программа будет работать
так же быстро как и раньше, но потреблять больше памяти. Иногда
это оправданно.

На этом примере хорошо виден механизм дезоптимизации:

1) выдвигается дезоптимизирующая абстракция (здесь - бесконечная
оперативная память)
2) программы пишутся опираясь на эту абстракцию
3) скрытый оптимизирующий механизм (здесь - сборка мусора)
обеспечивает практическую работоспособность дезоптимизированных программ.

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

Но не надо думать что стоит пренебречь ресурсами и мы можем надеяться
на улучшение. Некоторыми ресурсами пренебречь в принципе нельзя. Например,
время передачи ограничено скоростью распростравнения электрического
сигнала, который в свою очередь ограничен скоростью света. Для каналов
связи через геостационарные спутники задержки измеряются секундами.
Поэтому такая дезоптимизирующая метафора, как распределенная
оперативная память, не состоятельна. Интересно что WWW (но не e-mail)
базируется на схожей абстракции - общедоступной прямоадресуемой файловской
системе, и соответственно имеет проблемы (например, с кэшированием),
и будет их иметь пока не сменит основополагающую абстракцию.
То же относится и к проекту фирмы Sun под кодовым названием Jini: с одной
стороны, он базируется на идее потоков данных, и это хорошо, но с другой
стороны, предполагается, что исключение данных из потока можно сделать
синхронизированным, а это уже предполагает высокую скорость и надежность
взаимодействия участников процесса, что может быть отчасти верным только
для локальных сетей. Для построения моделей, пригодных для глобальных сетей,
необходимо распространить на информатику принципы релятивистской физики,
отказавшись от идеи дальнодействия в пользу близкодействия. А куда деваться,
раз реальная информатика базируется на реальных физических процессах.