About Oops! Basic features Help page Source codes F.A.Q. Subscribe our mail list Commerical services Mail to Oops! author

Oops! proxy server


Основные "ФИЧИ"

  • Высокая скорость обслуживания

1. Программа готова обслуживать запросы сразу после старта. Проверка целостности хранилищ по старту программы или при перечитывании конфигурационного файла производится в фоне и не задерживает обработку запросов клиентов.

2. В качестве модели для хранения кэшированных обектов выбрана простейшая файловая система. Т.е. обекты хранятся не в отдельных файлах, а в одном или нескольких больших файлах (хранилищах), представляющих собой файловую систему внутри файла. Помимо повышения скорости чтения/записи обектов в таком хранилище, по сравнению с хранением типа "один обьект - один файл", это позволяет создавать хранилища на блочных устройствах. К сожалению, это приводит к ограничениям на 32-битных системах, где размер файла (точнее смещение в файле) ограничен примерно 2GB. Это не означает невозможности использования хранилищ емкостью более 2GB, просто в таких системах придется использовать несколько файлов.

3. Обьекты в хранилище проиндексированы. Индекс имеет вид btree базы данных, что позволяет находить обьекты с минимальными потерями времени.

4. Все работы по поддержанию хранилищ (чистка, expire), требующие блокировки доступа, производятся в фоновом режиме, с меньшим приоритетом. При наличии запроса блокировка снимается так быстро, как только возможно (время максимальной задержки конфигурируемо и составляет по умолчанию 1 секунду).

5. Программа написана с использованием multithread-технологии. В этом есть, конечно, и плюсы и минусы. Плюсы очевидны: более простая разработка программы, отсутствие непредвиденных блокировок, возможность использования нескольких процессоров на многопроцессорорных машинах с соответствующим повышением производительности. Минусы: поддерживаются только те платформы, на которых есть pthread's, некоторые сложности с отладкой. Нужно учесть, что threads становятся всё более популярной парадигмой программирования, так что, надеюсь, минусы скоро совсем исчезнут.

6. Все необходимые действия производятся внутри одной программы, никаких внешних демонов (ftpget, dnsservers, unlinkd).

  • Устойчивость работы достигается путем тщательного тестирования и устранения ошибок. Для обнаружения ошибок программирования и memory-leak-ов используются такие средства, как purify и внутренний checker отладчика dbx.
  • Поддерживаемые протоколы: http, ftp, ssl-tunneling, icp v2.
  • Возможности конфигурирования: несколько типов acl (к сожалению, такого обилия acl, как в squid я пока не наплодил). Например:
 group localusers { 
 networks 192.168/16 127/8;
 badports [0:79],110,138,139,513,[6000:6010]; 
 bandwidth 8k; 
     icp { 
     allow dstdomain * ; 
     } 
     http { 
     allow dstdomain * ; 
     } 
     } 
     group otherworld { 
     networks 0/0; 
     icp { 
     deny dstdomain * ; 
     } 
     http { 
     deny dstdomain * ; 
     } 
  }

В принципе, все достаточно очевидно. Мне этих типов acl хватает, при необходимости типы можно наращивать (по идее - за счет модулей). Oops перечитывает конфигурационный файл по сигналу HUP. При этом текущие клиентские и серверные сессии не обрываются. Новые параметры действуют только на вновь образуемые соединения.