{"id":431,"date":"2013-04-26T15:07:51","date_gmt":"2013-04-26T18:07:51","guid":{"rendered":"http:\/\/www.viazap.com.br\/?p=431"},"modified":"2013-04-26T15:07:51","modified_gmt":"2013-04-26T18:07:51","slug":"firebird-superserver-classicserver-ou-superclassic","status":"publish","type":"post","link":"https:\/\/blog.clusterweb.com.br\/?p=431","title":{"rendered":"Firebird \u2013 SuperServer, ClassicServer ou SuperClassic?"},"content":{"rendered":"<h1><img loading=\"lazy\" decoding=\"async\" alt=\"Firebird installation screen exerpt\" src=\"http:\/\/www.sinatica.com\/blog\/br\/wp-content\/uploads\/image\/pages\/2008\/07\/FirebirdInstall.png\" width=\"224\" height=\"180\" align=\"right\" hspace=\"10\" \/><\/h1>\n<p>Uma das decis\u00f5es mais importantes na implanta\u00e7\u00e3o de um servidor Firebird \u00e9 a escolha do tipo de servidor. A escolha \u00e9 feita na tela do instalador.<\/p>\n<p>Se j\u00e1 \u00e9 dif\u00edcil fazer uma escolha bem informada hoje, espere at\u00e9 o lan\u00e7amento do Firebird 2.5. Ser\u00e3o 3 op\u00e7\u00f5es. SuperServer, ClassicServer e SuperClassic.<\/p>\n<p>As grandes diferen\u00e7as entre eles est\u00e3o no cache de p\u00e1ginas e no modo como o servidor gerencia o processo e os threads que executam seus comandos.<\/p>\n<h3>SuperServer<\/h3>\n<p>No Super Server existe apenas um cache de p\u00e1ginas que \u00e9 compartilhado por todas as conex\u00f5es.<\/p>\n<p>Por ser compartilhado, este cache \u00e9 muito eficiente. Quando v\u00e1rios clientes acessam as mesmas \u00e1reas do banco de dados ou quando algumas tabelas s\u00e3o muito mais acessadas que outras, todos os clientes se beneficiam de um cache grande e bem preenchido.<\/p>\n<p>Por exemplo, quando o cliente A executa:<\/p>\n<p><strong>SELECT <\/strong>NOME <strong>FROM <\/strong>CLIENTES <strong>WHERE<\/strong> CODIGO = 1;<\/p>\n<p>algumas p\u00e1ginas relacionadas a tabela CLIENTES e ao \u00edndice da chave prim\u00e1ria CODIGO s\u00e3o carregados para o cache.<\/p>\n<p>Quando o cliente B executa:<\/p>\n<p><strong>SELECT <\/strong>NOME, ENDERECO, TELEFONE\u00a0 <strong>FROM <\/strong>CLIENTES <strong>WHERE <\/strong>CODIGO = 2;<\/p>\n<p>ele se beneficia do cache compartilhado porque as p\u00e1ginas que este comando precisa j\u00e1 est\u00e3o no cache.<\/p>\n<p>Note tamb\u00e9m que existe apenas um \u00fanico processo onde todos os clientes se conectam.<\/p>\n<p>Veja no diagrama:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"Firebird super server architecture diagram\" src=\"http:\/\/www.sinatica.com\/blog\/br\/wp-content\/uploads\/image\/pages\/2008\/07\/SuperServerDiagram.png\" width=\"341\" height=\"315\" align=\"middle\" \/><\/p>\n<p>O SuperServer sofre de problemas de escalabilidade. Se voc\u00ea instal\u00e1-lo num computador com mais de uma CPU (o que \u00e9 bem prov\u00e1vel hoje em dia) ele vai usar apenas uma delas<sup>1<\/sup>. Isto n\u00e3o \u00e9 problema para instala\u00e7\u00f5es pequenas ou ambientes onde o servidor ter\u00e1 outras atividades al\u00e9m do banco de dados.<\/p>\n<p>Por exemplo, voc\u00ea tem um servidor dual-core e quer us\u00e1-lo como servidor de arquivos, web, impress\u00e3o e banco de dados. N\u00e3o \u00e9 problema que o Firebird use apenas uma CPU porque o servidor ter\u00e1 outras atividades para ocupar a outra CPU. E voc\u00ea ainda ter\u00e1 o benef\u00edcio de usar um banco de dados leve e \u00e1gil, que consome poucos recursos do servidor.<\/p>\n<p>Mas para opera\u00e7\u00f5es grandes, em que voc\u00ea quer que o banco de dados aproveite cada ciclo das CPUs do servidor, o SuperServer pode ser frustrante.<\/p>\n<p><sup>1<\/sup> Exceto se voc\u00ea tiver mais de um banco de dados. A partir do Firebird 2.5, o Superserver consegue usar mais de uma CPU desta maneira. Uma para cada banco de dados. Se voc\u00ea tiver apenas um banco de dados o limite ainda se aplica.<\/p>\n<h3>ClassicServer<\/h3>\n<p>No Classic, cada cliente tem um cache pr\u00f3prio e est\u00e1 conectado a um processo dedicado.<\/p>\n<p>O cache dedicado \u00e9 muito menos eficiente. Se dois clientes acessam a mesma \u00e1rea do banco de dados, esta \u00e1rea ser\u00e1 copiada no cache de cada um deles. Usando o exemplo anterior, quando o cliente B executasse seu comando, ele n\u00e3o teria o benef\u00edcio de um cache j\u00e1 preenchido e o Firebird precisaria acessar o disco novamente para responder.<\/p>\n<p>Al\u00e9m do mais, a sincroniza\u00e7\u00e3o entre os caches \u00e9 feita atrav\u00e9s do disco. Isto aumenta consideravelmente o custo de I\/O para ambientes de alta concorr\u00eancia.<\/p>\n<p>Veja no diagrama:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"Firebird classic server architecture diagram\" src=\"http:\/\/www.sinatica.com\/blog\/br\/wp-content\/uploads\/image\/pages\/2008\/07\/ClassicServerDiagram%281%29.png\" width=\"341\" height=\"315\" align=\"middle\" \/><\/p>\n<p>Um grande benef\u00edcio deste modelo \u00e9 a resili\u00eancia oferecida pelos m\u00faltiplos processos. Se um deles tiver problemas, apenas o cliente conectado a ele ser\u00e1 desconectado. Todo o restante do banco de dados continua funcionando normalmente.<\/p>\n<p>O outro grande benef\u00edcio \u00e9 a escalabilidade. Acredito que esta caracter\u00edstica seja a respons\u00e1vel por boa parte das instala\u00e7\u00f5es do ClassicServer. Mesmo em casos onde o cache dedicado produz resultados inferiores ao cache compartilhado do Superserver, a escalabilidade do ClassicServer compensa. Basta adicionar mais hardware e pronto, seu servidor fica mais r\u00e1pido.<\/p>\n<p>Mas esta escalabilidade n\u00e3o vem de gra\u00e7a. Imagine que voc\u00ea tem 200 clientes simult\u00e2neos. S\u00e3o 201 processos, um para cada cliente e mais um para ficar ouvindo novas conex\u00f5es. Seu sistema operacional deve gerenciar todos estes processos e mant\u00ea-los em sincronia. Eles consomem muitos recursos de kernel e isto significa que ele pode ser relativamente lento.<\/p>\n<p>Veja neste exemplo: Firebird 2.5 Alpha 1 Classic com 7 clientes conectados. S\u00e3o 8 processos, 18 threads, 1050 identificadores.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"Firebird Classic Task Manager Screen\" src=\"http:\/\/www.sinatica.com\/blog\/br\/wp-content\/uploads\/image\/pages\/2008\/07\/ClassicProcess.png\" width=\"243\" height=\"166\" align=\"middle\" hspace=\"10\" \/><\/p>\n<h3>SuperClassic<\/h3>\n<h5>a partir do Firebird 2.5<\/h5>\n<p>A equipe de desenvolvimento decidiu usar o Firebird Classic Server como base para construir o Firebird 3.0, que ser\u00e1 totalmente compat\u00edvel com SMP. O SuperClassic \u00e9 o primeiro passo nessa dire\u00e7\u00e3o. \u00c9 uma evolu\u00e7\u00e3o do Classic Server que resolve o maior problema que o Classic Server tem: Todos aqueles processos o deixam lento e tornam a manuten\u00e7\u00e3o mais dif\u00edcil.<\/p>\n<p>Bem-vindo ao SuperClassic: Um \u00fanico processo com cache dedicado.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"Firebird superclassic architecture diagram\" src=\"http:\/\/www.sinatica.com\/blog\/br\/wp-content\/uploads\/image\/pages\/2008\/07\/SuperClassicDiagram.png\" width=\"341\" height=\"315\" align=\"middle\" \/><\/p>\n<p>Olhando assim e levando em considera\u00e7\u00e3o o nome, parece um h\u00edbrido entre o Classic e o Super, mas n\u00e3o \u00e9. O que fizeram foi encapsular todos aqueles processos em threads. Agora cada cliente tem um thread dedicado dentro de um \u00fanico processo.<\/p>\n<p>Criar centenas de threads \u00e9 muito mais barato que criar centenas de processos e n\u00e3o existe perda de escalabilidade. A sincroniza\u00e7\u00e3o entre os caches pode ser feita diretamente em mem\u00f3ria, o que reduz o custo de I\/O. E outros controles que antes eram inter-processo agora s\u00e3o inter-thread, muito mais r\u00e1pidos.<\/p>\n<p>Veja exemplo compar\u00e1vel ao Classic: Firebird 2.5 Alpha 1 SuperClassic com 7 clientes conectados, 1 processo, 6 threads, 172 identificadores.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"Firebird SuperClassic Task Manager Screen\" src=\"http:\/\/www.sinatica.com\/blog\/br\/wp-content\/uploads\/image\/pages\/2008\/07\/SuperClassicProcess.png\" width=\"242\" height=\"47\" align=\"middle\" \/><\/p>\n<h3>Conclus\u00e3o<\/h3>\n<p>Esta compila\u00e7\u00e3o dos casos mais comuns de uso \u00e9 uma sugest\u00e3o e serve apenas como guia, um ponto inicial na sua\u00a0 escolha. A sua instala\u00e7\u00e3o pode ter detalhes pr\u00f3prios que n\u00e3o foram abordados aqui.<\/p>\n<h4>SuperServer<\/h4>\n<ul>\n<li>\n<div>Bases de dados pequenas ou pouco acessadas<\/div>\n<\/li>\n<li>Servidores pequenos<\/li>\n<li>Ambientes onde o cache compartilhado \u00e9 mais vantajoso que a escalabilidade do SuperClassic<\/li>\n<\/ul>\n<h4>ClassicServer<\/h4>\n<ul>\n<li>\n<div>Ambientes onde a estabilidade \u00e9 a maior preocupa\u00e7\u00e3o<\/div>\n<\/li>\n<li>\n<div>Servidores multi-processados<\/div>\n<\/li>\n<li>\n<div>Grandes bases de dados com centenas de usu\u00e1rios<\/div>\n<\/li>\n<\/ul>\n<h4>SuperClassic<\/h4>\n<ul>\n<li>\n<div>Servidores multi-processados<\/div>\n<\/li>\n<li>\n<div>Grandes bases de dados com centenas de usu\u00e1rios<\/div>\n<\/li>\n<li>\n<div>Ambientes onde o cache dedicado \u00e9 mais vantajoso que o cache compartilhado do SuperServer<\/div>\n<\/li>\n<li>\n<div>Ambientes onde o ClassicServer j\u00e1 n\u00e3o consegue escalar<\/div>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Uma das decis\u00f5es mais importantes na implanta\u00e7\u00e3o de um servidor Firebird \u00e9 a escolha do tipo de servidor. A escolha \u00e9 feita na tela do instalador. Se j\u00e1 \u00e9 dif\u00edcil fazer uma escolha bem informada hoje, espere at\u00e9 o lan\u00e7amento do Firebird 2.5. Ser\u00e3o 3 op\u00e7\u00f5es. SuperServer, ClassicServer e SuperClassic. As grandes diferen\u00e7as entre eles [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[91,1,51,68],"tags":[93,244,162,245],"class_list":["post-431","post","type-post","status-publish","format-standard","hentry","category-banco-de-dados","category-viazap","category-linux-linuxrs","category-redes-2","tag-banco-de-dados-2","tag-classic","tag-firebird","tag-super-server"],"_links":{"self":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/431","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=431"}],"version-history":[{"count":1,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/431\/revisions"}],"predecessor-version":[{"id":432,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/431\/revisions\/432"}],"wp:attachment":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=431"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=431"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=431"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}