Fórum Regra de Negócio: WebService ou Banco de Dados? #12536

03/12/2009

0

Oi!

Eu estou participando de um projeto, pequeno, sem muitas regras de negócio, que uma (ou algumas, acho que no máximo 3) determinada regra de negócio precisa ser executada por todos os clientes que possuem o sistema (sistema desktop, mas vai persistir alguns dados numa base em um provedor).

O gerente sugeriu de colocar essa regra no banco por meio de stored procedures porque, segundo ele, assim que houver uma alteração na regra, faz alteração uma vez e vai valer para todo mundo. Depois ainda nessa convera, eu sugeri um WebService, que também atenderia a questão da regra de negócio em um único ponto e o acesso de vários lugares para ela.

Bem, então ai chegamos na questão de performance, e eu falei que iria pesquisar. Segundo o que consegui pesquisar, um WebService num local que não seja feito muitas requisições para aquele ponto, isto é, não concorra com outras requisições (páginas, banco, ou algo a mais que possa ter) pode ter um custo bom, caso contrário, além desse problema me parece que tem o problema da transformação da mensagem no protocolo HTTP (me corrijam se eu estiver escrevendo besteira, ok?) que aumenta este custo e até que o remoting seria mais rápido neste caso (de ter várias requisições no mesmo local).

Por outro lado, o gerente (que me disse que antes era DBA) disse que consegue garantir a performance dessas regras no banco (com tuning e sei lá mais o que).

A minha dúvida fica, como boa prática, o que seria melhor, fazer uso de WebService ou de Stored Procedure para desenvolver a regra? O WebService dá até para eu encarar, pois pelo que já estudei e li sobre, não é dificil desenvolver serviços com ele. Já o remoting prefiro não me arriscar por enquanto, já que não tenho este know-how por enquanto. E o banco, tem o conhecimento do gerente, um pouco do meu, para colocar isso como stored.

Li também em alguns lugares que essa decisão pode variar conforme o expertise do seu time, é isso mesmo?
Ah e detalhe, o gerente garantiu que o cliente vai ter a performance que ele  deseja com a regra no banco, rs.. Fzer o que né, diz ele, para fechar contrato!!

Bem, fico no aguardo! Obrigado pela sua atenção!
Carlos Nogueira

Carlos Nogueira

Responder

Posts

04/12/2009

Luiz Maia

Ola Carlos, blz?   Seguinte, geralmente é usado os dois, pois o ws acessa a sp e retorna os dados, e a regra de negocios pode ficar tanto no ws ou na propria sp.   Quanto ao custo de usar uma sp ou ws, obviamente que a sp (pre compilada) é muito mais rapida, so se lembre de nao criar uma sp que seu nome começe com sp_nononono, isto retarda um pouco a performance.   Mas o uso de ws é somente recomendado para aplicações distribuidas, não sei se é seu caso. Vc disse que seu sistema é desktop, mas todos vão acessar a mesma base, correto?   Quanto a boa pratica, é o que eu te disse, isto fica a cargo de varios aspectos de seu projeto, onde colocar a regra de negocio, confidencialidade, acessibilidade, estabilidade e etc.   Voce deve decidir o que usar neste caso. Minha sugestão é: Construa um ws casca que acessa a sp, assim fica facil manutenção e quanto a performance, esquece, pois o custo disto é muito baixo e este aspecto não é tão relevante quanto a distribuição dos recursos por exemplo.   Espero ter ajudado. Caso ainda tenha alguma duvida, pore favor me diga, ok?   Abraços Att Luiz Maia
Responder

Gostei + 0

05/12/2009

Carlos Nogueira

Oi Luiz, beleza e por ai, tudo certo?

Então, acho que vou optar mesmo por colocar algumas regras da aplicação como stored procedure no banco. Sim sim, é uma aplicação desktop. Na verdade o lance é assim, vai ser instalado para os clientes essa aplicação desktop, que é bem pequena e contém umas 3 regras de negócio e vai trabalhar com um banco Access (porque o banco não vai crescer muito e devida a infra dos clientes, alguns tem na máquina windows 95, outros 98, para você ter uma idéia da encrenca) local.

E ai devido a estrutura destes clientes, eles vão enviar esses dados para uma base que está na web (no provedor da empresa que trabalho) e lá vai ter que executar mais umas 3 ou 4 regras de negócio (tipo, essas regras vão checar se o id existe, alterar o status do produto (entrada ou saída) ou incluir um registro). Esse banco é usado por um outro sistema do cliente.

Então, com relação a performance, eu li em alguns lugares que, quando a bastante concorrência no local onde o web service está sendo utilizado, isto é, já existe outras requisições sendo feitas para o mesmo local onde ele está publicado, isso custa um pouco mais para ele, justamente por uma quantidade maior de requisições que ele vai ter que enfrentar naquele ponto, além da conversão da mensagem no protocolo HTTP, e essas coisas. Ah, e detalhe, nessa mesma infra dos clientes, muito das conexão são dial-up, por isso que vai ter um banco local para armazenar primeiro esses dados e depois de tempos em tempos (isso ainda preciso se tem algum jeito de fazer no .NET) vai tentar mandar essas informações para o banco na web.

Eu acho que adotar essa solução para esse cliente não terá problema né? E como você mencionou a performance no banco será maior (fora que o meu gerente para fechar contrato prometeu para o cliente que coma  regra no banco, a performance será melhor e garantiu isso para ele, rsrs). O legal do web service é a facilidade para implementar (eu acho, colocar o atributo WebMethod e desenvolver os serviços) mas ai fico com receio justamente da performance. O que você acha?
Responder

Gostei + 0

06/12/2009

Luiz Maia

Oi Carlos, tudo bom?   Acho que vocês esta preocupando demais com a performance, como te disse não vai influenciar nada em sua aplicação. Web services trafegam arquivos XML muito leves e ainda mais que voce não tera requisições a este ws a todo momento, ja que me disse que ira fazer um recursos de tempos em tempos sincronzador de bases.   Agora, por que ao inves de usar Access vc não instala o SQL Express? É gratuito tb, pode baixar no site da MS e bem simples de gerenciar. Se não me engano, ele tem algumas restrições e acho que vai a 1 milhao de registro, mas é infinitamente superior ao Access, e isto sim fara um ganho de performance local excelente.   Abraços Att Luiz Maia
Responder

Gostei + 0

08/12/2009

Carlos Nogueira

Oi Luiz! Tudo bem sim e com você?

Então, a preocupação é com os clientes da empresa que farão uso dessa aplicação. Pelo que o gerente me passou (e foi até o mesmo que deu idéia a respeito) a maioria dessas empresas possui windows 95 ou 98, conexão dia-up, as máquinas pelo visto já não devem ser lá aquela coisa, entende? Por isso que optamos inicialmente por Access. Se fosse o SQL Express, nossa, iria facilitar tanto minha vida, porque tô tendo uns probleminhas com Access que vou ser obrigado até abrir um chamado de suporte por causa disso, rsrs...

Quanto a performance do WebService, se no mesmo local do WebService estiver outras aplicações, como páginas de outros clientes, banco e etc, isso não pode diminuir na performance do WebService que se encontra no mesmo local de outras requisições como de outros sistemas, por exemplo?
Responder

Gostei + 0

09/12/2009

Luiz Maia

Carlos, isto também não influencia em nada, ja que um WebService tem comportamento de outra aplicação e ainda, para melhorar, vc pode criar um Pool separado de conexão para cada um no IIS.   Abraços Att Luiz Maia
Responder

Gostei + 0

09/12/2009

Carlos Nogueira

Beleza Luiz, dessa forma você esclareceu minhas dúvidas!

Mais uma vez obrigado pelas explicações!

Abraços
Responder

Gostei + 0

10/12/2009

Luiz Maia

Legal Carlos, precisando, estamos ai.   Abraços Att Luiz Maia
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar