Контекст: Облако
У нас есть веб-приложение на основе Java, которое мы обычно размещаем на наших собственных серверах. Недавно мы использовали облако Amazon Web Services (AWS EC2) для размещения экземпляра.
Эта «облачная настройка» соответствует нашей типичной настройке «на месте»: один сервер для сервера приложений, другой сервер для сервера базы данных. (Несколько серверов приложений указывают на один и тот же сервер базы данных)
Проблема В этой облачной настройке мы получаем прерывистый «сброс соединения из-за ошибок однорангового узла» между базой данных и драйвером jdbc, где через (по-видимому) случайные интервалы и в случайных точках кодовой базы соединение с базой данных не работает.
Вот несколько примеров. фрагменты ошибок для журнала
Пример трассировки стека 1:
at com.participate.pe.genericdisplay.client.taglib.GenDisplayViewTag.doStartTag(GenDisplayViewTag.java:77)
... 75 more
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The connection is closed.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:170)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.checkClosed(SQLServerConnection.java:304)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.getMetaData(SQLServerConnection.java:1734)
at org.jboss.resource.adapter.jdbc.WrappedConnection.getMetaData(WrappedConnection.java:354)
Пример трассировки стека 2
at java.lang.Thread.run(Thread.java:619)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1368)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1355)
at com.microsoft.sqlserver.jdbc.TDSChannel.read(IOBuffer.java:1532)
at com.microsoft.sqlserver.jdbc.TDSReader.readPacket(IOBuffer.java:3274)
at com.microsoft.sqlserver.jdbc.TDSCommand.startResponse(IOBuffer.java:4437)
at com.microsoft.sqlserver.jdbc.TDSCommand.startResponse(IOBuffer.java:4389)
at com.microsoft.sqlserver.jdbc.SQLServerConnection$1ConnectionCommand.doExecute(SQLServerConnection.java:1457)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4026)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1416)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectionCommand(SQLServerConnection.java:1462)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.setAutoCommit(SQLServerConnection.java:1610)
at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.checkTransaction(BaseWrapperManagedConnection.java:429)
Техническая среда
Некоторые моменты
Вопросы
-Кто-нибудь видел это раньше? -Если это «известная проблема» EC2, можем ли мы настроить способ решения проблемы (то есть убедиться, что все находится в собственной подсети или виртуальном частном облаке (vpc)? -Любые настройки драйвера jdbc для решения этой проблемы?
** Обновить ** Я расширил и увеличил вознаграждение по этому вопросу.
Что касается дополнительной информации: два виртуальных сервера (база данных и сервер приложений) находились в разных подсетях, т.е. один переход между двумя серверами.
В не облачной среде у нас есть "нулевые переходы" между двумя серверами.
Наши администраторы хостинга заявили, что мы не можем контролировать подсети наших экземпляров EC2. Это заставило меня задуматься, поможет ли виртуальное частное облако.
заранее спасибо