У меня возникла следующая проблема в системе, которую я поддерживал ~ 7 лет назад. Мы никогда не доходили до сути, и акцент сместился на другие вопросы. Мне недавно напомнили об этом, и я удивился, узнает ли кто-нибудь, что происходит. Но, увы, я буду немного не в деталях. Извините.
Настройка
У меня была ферма веб-серверов, стоящая за балансировщиком нагрузки. На серверах размещалась система, которая получала бы HTTP-запросы (XML и / или SOAP) от клиентов, а затем каждый из них отправлял несколько дополнительных HTTP-запросов сторонним поставщикам, ожидал ответов поставщиков, обрабатывал иобъединить результаты и ответить на запрос клиента.
Подумайте о сравнении страхования, но как об услуге XML Business-To-Business.
Вся обработка займет 5 секунд с момента получения исходного клиентазапросить их отправку ответа на этот исходный HTTP-запрос, и сервер будет обрабатывать 10 или 100 запросов параллельно (т. е. в любой заданный момент веб-сервер будет иметь много клиентских запросов, которые поступили и были зарегистрированы);но еще не было получено ответа.)
У нас было подробное ведение журнала, в котором записывается получение запросов, включая исходный IP-адрес и какой сервер обрабатывал запрос, и записывается, когда был отправлен ответ.
Все клиентские запросы были отправлены на один IP-адрес (ну, URL),это был адрес loadbalancer, который затем отправлял запросы веб-серверам, которые не были индивидуально доступны для Интернета (у них не было общедоступных IP-адресов).
Наш балансировщик нагрузки позволил бы намвывести отдельные веб-серверы из ротации для обслуживания. Когда мы это сделали, мы могли наблюдать журналы БД и видеть, что новые запросы перестают поступать, а существующий запрос постепенно завершается, пока не осталось невыполненных запросов и сервер не работал.
Проблема
Мы обнаружили, что иногда, когда мы выводим сервер из ротации ... он не прекращает полностью получать запросы. Вы могли видеть, что большая часть запроса внезапно перестала поступать, но он все равно получал бы струйку свежих запросов (я не знаю ... возможно, 0,1% от нормальной загрузки, может быть, меньше?). Я думаю, что самое длинное, что мы оставили, это может быть ... 10 минут?
Примечательно, что мы поняли, что все эти запросы поступали с одного клиента / IP-адреса (я не помню, какой именно). Я забыл, получали ли другие (все еще вращающиеся) веб-серверы запросы от этого клиента, но я думаю они были?
Если мы перезагрузим веб-сервер, дальнейшие запросы не будут поступатьпосле перезапуска.
Веб-стек был Windows, IIS, ASP.NET;довольно старая школа даже в то время. Все серверы принадлежат и настроены индивидуально.
Что происходит?
Мы смутно махали руками и утверждали, что интеграция клиента с нами "держала HTTPтуннель открыт и отправляет несколько запросов через него ", а не отправляет каждый запрос отдельно, и, таким образом, поддерживает этот туннель даже после того, как LB прекратил отправлять новые запросы на этот сервер. Но это было BS-waffle, и так как нам никогда не нужно было на самом деле понимать, что происходит, мы игнорировали это и шли дальше своей жизнью:)
Но я все равно хотел бы знать, что мы видим,если кто-то может диагностировать это из этого описания.