¿Puede el servidor Apache Tomcat manejar una gran cantidad de usuarios?

¿Grande? Grande es difícil de cuantificar. Sin embargo, si está realmente interesado en un gran número de transacciones por segundo, mire The LMAX Architecture. 60 millones de transacciones por segundo desde una sola máquina.

El modelo de servlet (usando un servidor de aplicaciones) es solo una forma de manejar solicitudes en Java. En ese ámbito, prefiero Jetty a Tomcat. No estoy seguro de que haya algo más que un prejuicio histórico (días perdidos por los mensajes de error de Tomcats y el complicado proceso de implementación). Jetty es tan eficiente y estable como Tomcat, con algunas ventajas agradables, como estar diseñado para ser incorporable, lo que es ideal para pruebas funcionales y desplegarlo como un frasco.

Además, hay Netty que le ofrece una arquitectura similar (controlada por eventos) a node.js. Esto puede mejorar el rendimiento, ya que en lugar de crear un subproceso por solicitud (aproximadamente 512k RAM por subproceso + programación), utiliza una cola para mantener ocupada la cantidad óptima de subprocesos para su arquitectura.

Pruebe el ajuste del conector (por supuesto, la RAM y la CPU de su PC también deberían aceptar una carga alta :))

compresión = “en” compresiónMinSize = “4096” connectionTimeout = “- 1” protocolo = “org.apache.coyote.http11.Http11NioProtocol”

disableUploadTimeout = “true” enableLookups = “false” keepAliveTimeout = “- 1”

maxConnections = “1000000” maxCookieCount = “4000” maxHttpHeaderSize = “8192”

maxSpareThreads = “1000” maxThreads = “50000” minSpareThreads = “1000”

noCompressionUserAgents = “gozilla, traviata” port = “8585” redirectPort = “8444” />

Sí, puede hacerlo si está utilizando NIO.
Al usar NIO, no necesita un subproceso por conexión y puede escalar mucho mejor en comparación con un subproceso por modelo de conexión. Usar NIO agrega una pequeña complejidad, aunque no mucho.
También depende de la cantidad de potencia de procesamiento, memoria requerida para cada solicitud. Puede estar limitado por eso, pero su aplicación es específica.

Sí lo es. Pero Tomcat puede servir a muchos usuarios concurrentes asignando un hilo de ejecución separado a cada conexión de cliente concurrente. Puede hacerlo bien, pero hay un problema cuando aumenta el número de esas conexiones concurrentes. El tiempo que el sistema operativo pasará en la gestión de esos subprocesos degradará el rendimiento general. JVM pasará más tiempo administrando y cambiando esos hilos y luego haciendo un trabajo real, atendiendo las solicitudes.

Depende de qué tipo de datos sirva Tomcat.
Probablemente, los recursos estáticos deben ser atendidos por el servidor proxy inverso Apache o Nginx.
Entonces, la mayoría de los casos Tomcat sirve tráfico vinculado a la base de datos.
Por mi experiencia:
Una sola instancia de Tomcat puede manejar alrededor de 300 ~ 350 TPS (transacción por segundo).
Entonces, si necesita un gran número de solicitudes por segundo, debe cargar el equilibrio en varias instancias de tomcat. Esa es la única manera.
De esta manera, puede manejar tantas solicitudes como desee.

Sí definitivamente.

Sí, seguramente puede, pero no es lo único que importa. La estructura de su proyecto, la estructura de la máquina del servidor, el almacenamiento en caché, los datos que sirve, etc. son algunos factores.

Sí, es un producto de grado profesional.