Spock,
Valeu pela sua bela resposta !
Hei de consultar o link ao qual mencionaste para procurar saber mais
� respeito de minhas indaga��es e d�vidas qto � performance.
Grato !
Abra�[]s,
Max Ricardo Mercurio Ribeiro
IT & Business Consultant for Alcoa Company
e-mail: [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> (company)
/ [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> (personal)
phones # : (0x11) 9101-5511 mob. / (0x11) 3741-4418 com.
-----Original Message-----
From: Dr. Spock [mailto:[EMAIL PROTECTED]]
Sent: Monday, 6 de January de 2003 11:52 PM
To: [EMAIL PROTECTED]
Cc: [EMAIL PROTECTED]
Subject: Re: [enterprise-list] DUVIDA : Pool de Conexoes
Caro Max,
Tenha um certo cuidado com o pattern 'Singleton'. Este ter� uma �nica
inst�ncia de pool se todas as suas aplica��es rodarem na mesma inst�ncia
de JVM. Contudo, isso tamb�m n�o � necessariamente verdade quando
estamos falando de um servidor de aplica��es. As v�rias aplica��es que
residem num servidor de aplica��es J2EE tem, pode defini��o da
especifica��o, que manter um isolamento entre os v�rios objetos de uma
aplica��o com os v�rios objetos das outras aplica��es. Estas regras de
isolamento tendem a se tornarem cada vez mais importantes (Veja a
proposta em andamento no JCP - http://www.jcp.org/ - atrav�s do JSR 121,
refer�ncia [1]).
Cada inst�ncia de JVM passa a ter a sua inst�ncia de pool e cada
aplica��o isolada no servidor de aplica��es passa a ter a sua inst�ncia
de Pool. Para obter um pouco mais de detalhes veja a refer�ncia [2].
Ent�o, naturalmente estamos sujeitos a ter v�rias inst�ncias de pool
(semelhante ao 'cen�rio atual' apresentado por vc) num ambiente
distribu�do e/ou baseado em servidores de aplica��es J2EE (no mundo Java
junto com o mundo corporativo n�o teremos como escapar do J2EE, esquece
o Not Yet! :)).
Contudo, uma solu��o j� existe e � aplicada em v�rios servidores de
aplica��es J2EE disponiveis no mercado: O recurso, ou melhor, o servi�o
de 'pool' � um recurso oferecido pelo servidor de aplica��es (via
'container'), como parte do mesmo, para as aplica��es. J� vemos
normalmente um 'pool' sendo administrado pelo 'container' e
compartilhando os objetos com as v�rias aplica��es (semelhante ao
'cen�rio 1' apresentado por vc). Mas, para tudo funcionar em harmonia,
dada as necessidades especificas de uma aplica��o, os seus arquivos
descritores podem conter informa��es sobre os objetos a serem criados no
'pool' (ex.: podemos necessitar de conex�es especificas de banco de
dados usadas somente pela aplica��o - e se as v�rias aplica��es utilizam
o mesmo banco ao definir as mesmas configura��es espec�ficas nos
descritores? Da� vem o pool centralizado no 'container', otimiza��o!).
Toda a explana��o anterior n�o responde completamente �s suas
indaga��es. Alguns aspectos de performace, de quando usar ou n�o
'pools', da quantidade limite de objetos gerenciados pelo 'pool', etc,
podem ser obtidos em alguns artigos dispon�veis na rede. Veja as
refer�ncias [3], [4], [5] e [6], por exemplo. Em especial, nas
refer�ncias [3] e [4] podemos verificar que realizar 'pooling' tem o
prop�sito b�sico de utilizar os recursos que temos dispon�veis da melhor
maneira poss�vel. Por exemplo, imagine v�rias aplica��es que realizam
transa��es em banco de dados com per�odos de tempo muito breves. Uma
aplica��o precisa de uma conex�o com o banco de dados para realizar a
sua transa��o por um per�odo de tempo muito curto. Para que serviria
esta mesma conex�o, j� estabelecida, na maior parte do seu tempo de
vida? Seria interessante reutiliz�-la em outras transa��es da mesma ou
de outras aplica��es. Da� o 'pool' se torna a ferramenta para tal
reutiliza��o e gerencimento desta reutiliza��o. O mesmo � v�lido para
'threads' e at� mesmo para conex�es de rede (curiosidade: a rela��o de
usu�rios por linha telef�nica nos ISPs funcionam devido o mesmo
principio e na rela��o de assinantes e tamanho da rede de telef�nia).
Sabemos que estes recursos s�o custosos para inicializa��o e destrui��o
(garbage collection? tb!). Portanto, a melhor utiliza��o e otimiza��o
destes recursos tornar-se-� necess�rio e fundamental para uma aplica��o
que necessita de performace e escalabilidade (e redu��o de custos no
exemplo curioso).
Contudo, quanto mais objetos s�o gerenciados pelo 'pool' mais custoso
se torna este gerenciamento. Sabemos que � necess�rio 'threads' que
administram e monitoram os objetos contidos no 'pool'. Ent�o, quanto
mais objetos gerenciados menor ser� a performance neste gerenciamento. E
os poss�veis aspectos de 'thread syncronization' se tornam relevantes
frente ao volume cada vez maior de objetos administrados e de aplica��es
cliente que s�o usu�rios deste 'pool'. Usu�rios de uma �nica inst�ncia
('singleton') do 'pool'! Num ambiente de v�rias 'threads'
(clientes/usu�rios) o gerenciamento do 'pool' deve garantir o
sincronismo para o seu acesso e para a sua utiliza��o. Gargalos de
performace? Acho que agora estou come�ando a responder �s suas
indaga��es ...
Walter Kriha, autor da refer�ncia [7], escreve: "We pool things
because we want to save either time - if it takes a lot of time to build
an object - or memory - if an object has a large footprint."
Espero ter contribuido ... A partir de agora vc tem em m�os algumas
refer�ncias que podem com�ar lhe ajudar a responder a maior parte das
suas indaga��es. Quem sabe?
Valeu ... []�s
Spock
--------------------------------------------------------------------
[1]. Application Isolation API Specification
http://www.jcp.org/en/jsr/detail?id=121
[2]. When is a Singleton Not a Singleton?
http://developer.java.sun.com/developer/technicalArticles/Programming/single
tons/
[3]. What is the best method of pooling objects?
http://developer.java.sun.com/developer/qow/archive/138/index.jsp
[4]. Make Object Pooling Simple
http://www.fawcette.com/javapro/2002_11/online/obj_krangaraju_11_08_02/defau
lt_pf.asp
[5]. Build your own ObjectPool in Java to boost app speed
http://www.javaworld.com/javaworld/jw-06-1998/jw-06-object-pool_p.html
[6]. Best Practices in Pooling
http://otn.oracle.com/products/ias/pdf/pools-best-practices.pdf
[7]. Pooling: why, what and how much?
http://www.kriha.de/krihaorg/docs/papers/portalchunked/ch05s32.html#d0e1730
----------------------------------------------------------------------
Ribeiro, Max R. M. wrote:
> Galera,
>
> Estou com uma d�vida um tanto que ingrata.
>
> Tenho um pool de conex�es do estilo (SINGLETON), ou seja 1
> inst�ncia apenas.
> Hoje esta � especifica para 1 (uma) aplica��o apenas ! Ex:
>
> Cen�rio Atual
> -------------
> classe DBPool
> |
> +---- Connection (applic A) *usando
> |
> +---- Connection (applic A) *usando
> |
> +---- Connection (applic A) *livre
>
>
>
>
> No entanto, penso em utilizar esse pool para novas aplica��es
> tamb�m ...
>
> Minha d�vida � :
> - algu�m por acaso sabe se a JVM aguentar� in�meras conex�es
> com
> o BD de in�meras aplica��es sem quaisquer problemas de performance ? Ex :
>
> Cen�rio Proposto 1
> ------------------
> classe DBPool
> |
> +---- Connection (applic A) *usando
> |
> +---- Connection (applic A) *usando
> |
> +---- Connection (applic A) *livre
> |
> +---- Connection (applic B) *usando
> |
> +---- Connection (applic B) *livre
> |
> +---- Connection (applic C) *livre
> |
> +---- Connection (applic C) *livre
> |
> +---- Connection (applic D) *usando
>
>
> - ou seria mais adequado eu criar uma nova inst�ncia desse
> pool
> de conex�es espec�fico para cada aplica��o que irei utilizar ?
>
> Cen�rio Atual
> -------------
> classe DBPoolA
> |
> +---- Connection (applic A) *usando
> |
> +---- Connection (applic A) *usando
> |
> +---- Connection (applic A) *livre
>
> classe DBPoolB
> |
> +---- Connection (applic B) *usando
> |
> +---- Connection (applic B) *livre
>
> classe DBPoolC
> |
> +---- Connection (applic C) *usando
> |
> +---- Connection (applic C) *livre
>
> (assim em diante)
>
>
> PS - Esse pool que tenho J� CONTROLA conexoes minimas, extras
> e
> tempo de conex�o ociosa
>
>
> Penso dessa maneira, pois acredito que poderia estar
> sobrecarregando um �nico pool j� que estou falando de pelo menos 50
> aplica��es distintas (preocupa��es qto � performance).
>
> Por�m, claro, posso estar enganado qto � isso !
>
>
>
>
> Agrade�o futuros coment�rios e quaisquer viv�ncias nesse
> sentido !
>
>
>
> Abra�[]s,
>
> Max Ricardo Mercurio Ribeiro
> IT & Business Consultant for Alcoa Company
>
> e-mail:_ [EMAIL PROTECTED]
> <____mailto:[EMAIL PROTECTED]>_ (company) /_
> [EMAIL PROTECTED] <____mailto:[EMAIL PROTECTED]>_
(personal)
>
> phones # : (0x11) 9101-5511 mob. / (0x11) 3741-4418 com.
>
---------------------------------------------------------------------
Para cancelar a subscri��o, envie mensagem para:
[EMAIL PROTECTED]
Para comandos adicionais, envie mensagem para:
[EMAIL PROTECTED]
---------------------------------------------------------------------
Para cancelar a subscri��o, envie mensagem para:
[EMAIL PROTECTED]
Para comandos adicionais, envie mensagem para: [EMAIL PROTECTED]