среда, 23 мая 2012 г.

32 браузера

Когда организовывал доступ к базе из Интернет, решил тупо проверить, а сколько коннектов удержит моя система? Есть ли предел? Насколько мне было известно - количество подключений через WWW-шлюз не лимитируется даже на "Демо". В результате нашёл много интересного. Ты можешь повторить сам - это абсолютно безопасно даже на рабочей системе. Просто в этот момент никто не должен выполнять реальную работу, иначе получишь по полной.
Итак, запускаем браузеры. Но перед этим остановим Z-сервер и удалим EServer.log (именно .log, а не .exe!!!) - будет легче искать записи об ошибках. Стартуем Z-сервер и запускаем браузеры, сколько сможем. Проще всего это сделать из командной строки.



Стрелка вверх повторит предыдущую команду. По ходу можно закрывать уже открытые браузеры - они своё дело уже сделали. Периодически смотрим в EManager количество подключений. На "Демо" установке каждый новый браузер даёт два подключения, с другими настройками всё может быть по-другому, но смысл не изменит. Последний нормальный запуск происходит с достижением кол-ва подключений 62.



А дальше...



Подключение остаётся одно и появляется следующая ошибка:
18:42:28-15/05: [fatal][debug][warn][log][app][all] DB: User Connection: TSqlConnection.Open( Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\DB\Lib.mdb;Persist Security Info=False ): Неопознанная ошибка []
18:42:28-15/05: [fatal][debug][warn][log][app][all] Restart server []
А что произошло бы с обычными клиентами ("Абонемент", "Каталогизатор", ...)? Ты уже догадался - естественно они будут "сброшены". Если сомневаешься - проверь. У меня была очередь с жалобами на то, что система всё время требует ввести пароль, и я грешил на ошибки с таймаутом. А на самом деле всё оказалось проще. Что, при этом, происходит с базой - приходится только догадываться.
Хотя, судя по тексту ошибки, это не похоже на проблему с Z-сервером. Возможно это беда "Access" движка "Jet"? Как это проверить? Да запросто. Следующий скрипт просто создаёт подключения в кол-ве указанном в переменной count, выбрасывает исключение при ошибке и выводит кол-во успешных:
<HTML>
<HEAD>
  <TITLE>ConnectCount</TITLE>
    <HTA:APPLICATION ID="oHTA"
     APPLICATIONNAME="myApp"
  BORDER = "thick"
     BORDERSTYLE="normal"
     CAPTION="yes"
     ICON=""
     MAXIMIZEBUTTON="yes"
     MINIMIZEBUTTON="yes"
  SCROLL = "yes"
     SHOWINTASKBAR="yes"
     SINGLEINSTANCE="no"
     SYSMENU="yes"
     VERSION="1.0"
     WINDOWSTATE="maximize"/>
 <SCRIPT>
function getPath()
{
 var pathl = document.URL;
 var i = pathl.length;
 var j;
  while(pathl.charAt(--i) != '\\');
  j = i;
  while(pathl.charAt(--j) != '/');
 return pathl.substring(j+1, i+1);
}
var i = 0;
conns = [];
count = 100;
while(i < count)
{
 conns[i] = new ActiveXObject("ADODB.Connection");
 conns[i].ConnectionString = "Provider='Microsoft.Jet.OLEDB.4.0';Data Source='" + getPath() + "adb.mdb'";
 try
 {
  conns[i].Open();
  i++;
 }
 catch(e)
 {
  alert(e.message);
  break;
 }
}


function window.onload()
{
oPre.innerText = i;
}
</SCRIPT>
</HEAD>
<BODY>
  <PRE ID=oPre>  </PRE>
</BODY>
</HTML>
Для начала сделаем count=100. Если захочешь повторить просто скопируй его в "Блокнот" и сохрани с любым именем и расширением .hta (например, ConnectionCount.hta). База adb.mdb любая (я сделал "Access"-ом пустую). Можешь скопировать Explain.mdb в тоже место, где находится скрипт и переименовать в adb.mdb. Запускаем и получаем:



та же ошибка, а количество подключений:



Сделаем count=64 - ошибки нет. Более того, её не будет, если тут же запустить второй экземпляр скрипта! В сумме окажется 128 подключений! Судя по всему это ограничение на процесс и новому процессу даётся новая "квота". Известно, что Z-сервер (EServer) "АС-Библиотека-3" работает одним многопоточным процессом и, по всей видимости, упирается в это ограничение. Поиски в Интернете и настройках "Jet" как обойти, или изменить порог в 64 ничего не дали (если у тебя есть какая либо информация на эту тему сообщи в комменте).
Какой выход? Я нашёл только один - переход на SQL Server. Но не торопись делать то же самое. Если у тебя несколько клиентов (не фиксируется вышеприведённая ошибка), небольшая база (меньше 1Гб в сжатом виде) и нет внешнего доступа, то издержки эксплуатации SQL Server перекроют все прелести неограниченой подключаемости. К тому же на небольшой базе Access обставит SQL и по скорости и по компактности.

четверг, 3 мая 2012 г.

Администратор 123

Недавно подвернулась интересная утилита для анализа сетевой активности "oSpy". Она ловит даже "петлю". И вот результат.


Какой-то подозрительный "123", а где "Администратор"? Сохраним пакет в "сыром" виде и откроем любым текстовым редактором.


А вот они и вместе. Похоже, что логин и пароль в "АС-Библиотека-3" передаются открытым текстом. Хорошо это или плохо? Не то и не другое. Существует множество не "секюрных" протоколов (HTTP, FTP, telnet, ....). Всё зависит от использования. Если в локальной сети - то это не проблема (если за локалкой следить конечно), а если хочешь затеять корпоративку или просто внешний доступ - учти этот момент. Есть масса технологий для "прикрытия" (VPN, IPSec, ....).