Interoperabilidade com .NET em ambiente Mainframe

  • 241 views
Uploaded on

Apresentação do Case de Sucesso do Porte de uma aplicação Asp.net para ambiente MainFrame usando mono.

Apresentação do Case de Sucesso do Porte de uma aplicação Asp.net para ambiente MainFrame usando mono.

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
241
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
2
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. CÓDIGO DA SESSÃO: ##### Interoperabilidade com .NET em ambiente Mainframe Alessandro de Oliveira Binhara Projeto MONO BRASIL binhara@gmail.com @binhara
  • 2. Agradecimentos Apoio e Financiamento Agradecimento Especial Andre Ortega – Sócio da BENEFIX (Viabilização do Projeto) Homero – Presidente da MegaData (Divulgação dos Dados) 2
  • 3. Agenda Projeto Z10 O Projeto Mono Histórico Motivações Rodmap, Features Compatibilidade, Estrutura, Ferramentas Interoperabilidade de Aplicativos .Net Migração para MainFrame Z10 3
  • 4. Apresentação Mestre em Tecnologia (UTFPR) Bacharel em Processamento de Dados Desenvolvedor a mais de 18 anos.... Mono Hacker desde 2003 Linguagens Fluente: C#, Java, PHP Outras: C++, C , Pascal, Python, Ruby, Boo, etc. EU RODEI ASP.NET no MAINFRAME !! Atualmente atua como desenvolvedor/consultor para algumas empresas: 4
  • 5. Projeto Z10 Objetivo Avaliar se é possível executar o WebIss no Z10 Avaliar o esforço necessários do porte para o Z10 Descrever os problemas encontrados e as possíveis soluções Avaliar desempenho do Z10 em relação a plataforma baixa como servidor de aplicação Web 5
  • 6. Sistema WebISS 6
  • 7. Microsoft lança o .NET Projeto MONO Miguel busca uma nova plataforma para melhorar seus projetos. Microsoft Lança a plataforma .Net Coloca o C# como um padrão O Core do .Net é colocado como padrão Padrões ECMA 334 , ECMA 335 Plataforma Microsoft .Net Multi-linguagem Coletor de Lixo 7
  • 8. Nascimento Projeto MONO Criado por Miguel de Icaza em 2001 Criou o Gnome e a empresa Ximian para dar suporte ao Gnome. 8
  • 9. O que é ? Projeto MONO Mono é uma implementação OpenSource do .NET Permite a execução e desenvolvimento de software .Net em ambiente Não Windows. Mono 2.10 (atual) 9 Suporte C# 4.0, F# e Iron Ruby, IronPython .NET Framework 4.0 Suporte Asp.Net MVC 3, Razor e WebPages Suporte Asp.Net 4.0 VB.NET profile 2.0 e 4.0 Suporte WebMatrix.Data Melhorias significativas no suporte WFC
  • 10. Mono 2.10.7 beta Is coming!!! Suporte C# 5.0 (trunk 2.11) Suporte NuGet Suporte MSBuild 4.0 Suporte para Azure Libs Suporte para o Phalanger 3.0 Mono 2.12!!! C# 5 padrão Tuned Parallel Framework .NET 4.0 Core Suporte Completa implementação do WCF/Silverligth 10
  • 11. Phalanger LINUX 11
  • 12. O que é ? Projeto MONO 12 http://www.ohloh.net/p/mono/analyses/latest
  • 13. Contribuições Microsoft Apache Licensed Libraries Ajax.NET, ASP.NET MVC1, MVC2, MVC3 Silverligth ToolKit, Silverligth Tests Managed Extensibility Framework (MEF) System.Data.Services.Client (OData) Dynamic Language Runtime 13
  • 14. Plataformas Suportadas Supported Architectures s390, s390x (32 and 64 bits) SPARC (32) Runtime Operating system JIT Linux JIT Solaris, Linux PowerPC JIT Linux, Mac OSX, Wii, PlayStation 3 x86 JIT Linux, FreeBSD, OpenBSD, NetBSD, Microsoft Windows, Solaris, OS X JIT Linux, Solaris JIT x86-64: AMD64 and EM64T (64 bit) IA64 Itanium2 (64 bit) ARM: little and big endian Alpha MIPS HPPA 14 JIT JIT Linux Linux (both old and new ABI), iPhone , Android Linux JIT Linux JIT Linux
  • 15. Início do Mono Interoperabilidade Uso das ferramentas da Microsoft Como criar um compilador C# sem um compilador. Primeira versão do mcs foi escrita no Visual Studio. Inicialmente 5 engenheiros, Foco em aplicações desktop Toda a infra-estrutura do mono é escrita em C# 15
  • 16. Desenvolvedores Comunidade Rafael Teixeira, Alexandre Marcondes, Everaldo Canuto, Rodrigo Bambo, Francisco Figueredo, mais de 500 pessoas na comunidade de comiters. 16
  • 17. C# Shell Demos Shell Interativo Suporte a code completion Suporte a GTK# 17
  • 18. Compilador C# - MCS COMPILA COMPILA /USA EXECUTA EXECUTA USA USA USA 18
  • 19. Build Farm Desenvolvimento Consulta da implementação do framework em comparação ao MS.NET http://wrench.mono-project.com/builds 19
  • 20. Mono Test Suite Desenvolvimento http://mono-project.com/Test_Suite 20
  • 21. C# no Android Portando aplicativos Versão comercial do mono para Android Pluing para Visual Studio Usa o mesmo profile do MonoTouch Suporte OpenGL , GC, Multi-threading, .NET 3.5, C# 3.0 e LINQ .NET Bindings to Native APIs http://monodroid.net/ http://monodroid.net/Tutorials 21
  • 22. Mono for Droid 4.0!!! Suporte completo API Android 4.0 Integrado MonoDevelop e VisualStudio Alta Perfomance compilado com código nativo Tudo do .NET Linq, Delegats, Events, etc CrossPlataform (IOS5, WinPhone7, Android) 22
  • 23. C# no IPHONE Portando aplicativos Versão comercial do mono para IPHONE C# and .NET on the iPhone .NET Bindings to Native APIs Distribute on the Apple App Store Enterprise deployable MonoDevelop Integration XCode Integration Suporte IOS 5 Integração com Xcode 4 Fácil Bind com bibliotecas C e Objective C http://monotouch.net/ 23
  • 24. Comparação de Código Objective C C# Mono Touch CFStringRef keys[] = { kCTFontAttributeName, kCTForegroundColorAttributeName }; CFTypeRef bval[] = { cfListLineCTFontRef, CGColorGetConstantColor(kCGColorBlack) }; attr = CFDictionaryCreate (kCFAllocatorDefault, (const void **) &keys, (const void **) &bval, sizeof(keys) / sizeof(keys[0]), &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); var attrs = new CFStringAttributes { Font = listLineCTFont, ForegroundColor = UIColor.Black.CGColor }; astr = CFAttributedStringCreate(kCFAllocatorDefault, CFSTR("Hello World"), attr); 24 var astr = new NSAttributedString ("Hello World", attrs);
  • 25. Quem já usa MonoTouch 25
  • 26. GAMES em C# Demos MONO.SIMD Cases SencondLive mudou do LSL para Mono 50x a 300x mais rápido Unit3d Usa C#, Boo, unityScritp 26
  • 27. Mono Games Implementação do XNA em Mono Jogos 2D e iniciando agora 3D Lider é um Brasileiro : Jalfx Suporte IOS, Android, MACOSX, Linux, Windows https://github.com/mono/MonoGame 27
  • 28. Mono Mac MonoMac 1.0 Março de 2011 Plataforma .NET para desenvolvimento nativo para MacOS X Mais de 40 exemplos completos Suporte completo para os Componentes CoCoa Bind nativos para o MacOSX Empacotamento e Distribuição na AppStore http://www.mono-project.com/MonoMac 28
  • 29. Mono no Z10 Portando sua aplicação Asp.Net Suse Linux Enterprise 11.3 for S390
  • 30. Crie no VS e rode no Linux Portando aplicativos Compatibilidade Binária Monte o disco do linux e copie seus binários no linux Compartilhe no windows e acesso no Linux Testando Uso de máquinas virtuas: Ex: Virtual PC Donwload das VM e LiveCD no site do mono 30
  • 31. Sistema de Arquivos Portando aplicativos Cuidado com os caminhos Cuidado com letras Maiúsculas e minúsculas Não use caminhos absolutos, eles não vão funcionar em outros sistemas. Use algum mecanismo como um arquivo de configuração para localizar seus arquivos e caminhos Busca manual de Separadores int index = exePath.LastIndexOf(""); exeDir = exePath.Substring(0, index); exeFile = exePath.Substring(index+1); Código mais portável exeDir = Path.GetDirectoryName (exePath); exeFile = Path.GetFileName (exePath); 31
  • 32. Variáveis de Ambiente Portando aplicativos Variáveis de ambiente o PATH no Windows usa “;” o linux e outros sistemas unix usam “:” Você pode usar System.IO.Path.PathSeparator para separa o path nas variáveis de ambiente Console.WriteLine ( "Subdiretorios encontrados no PATH :“ ); string path_env = Environment.GetEnvironmentVariable ( "PATH“ ); string[] path_dirs = path_env.Split (Path.PathSeparator); foreach (string pathdir in path_dirs) Console.WriteLine(pathdir); 32
  • 33. P/Invoke Portando aplicativos Chamadas a DLLs nativas a API Windows não irão funcionar em outros sistemas, pois a API não existe no Linux. Caso você dependa de bibliotecas em C, você deverá substituir por equivalentes no ambiente Linux. Sua aplicação deverá identificar o sistema que está rodando e chavear entre as bibliotecas. 33
  • 34. MOMA Portando aplicativos 34
  • 35. Banco de Dados Portando aplicativos Mono faz acesso ao SQLServer , não existe necessidade de mudar de banco para rodar sua aplicação no Linux. Mono Disponibiliza os dataproviders para os bancos : MySQL, Postgresql, Oracle, DB2, SyBase É possível usar os dataproviders do mono no .NET com VS para acessar os bancos livres. 35
  • 36. Ferramentas Portando aplicativos Mono Develop Importa soluções do Visual Studio Versões Windows, Linux e MAC Suporte para GTK# , Iphone, MacOX Debug integrado, controle de versão Bando de Dados, Sistema de Testes, www.monodevelop.com Prj2make Converte uma solução do Visual Studio em script para o make, gerando os make files. 36
  • 37. Mono Plug IN Portando aplicativos Verifique a compatibilidade do seu aplicativo com usando o MOMA diretamente do Visual Studio Teste no Windows, Teste no Linux Debug remoto no Linux Empacote para linux Crie uma Distribuição linux customizada para seu aplicativo com o Suse Studio 37
  • 38. ASP.NET Portando aplicativos Mono Suporte Asp.NET 1,2, 3 e 4.0 Suporta Asp.NET MVC 1,2 e 3 Rodando no Apache, Ngnix: XSP, Mod_Mod , FastCGI Suporta WebServices Suporta Ajax.NET (Microsoft) WCF quase completo Exemplo www.monobrasil.org 38
  • 39. Instalação Mono Linux AMD Suse Enterprise 11 Instalação dos pacotes via Zypper Instalação do Suse Linux Mono Extensions Compilação dos fontes do Mono Atualização dos pacotes para o Mono 2.10 Tudo ocorreu na mais perfeita ordem. 39
  • 40. Instalação Mono Z10 40
  • 41. Mono 2.11 Instalado!! 41
  • 42. Compatibilidade de Bibliotecas Nunit,obout_slideMenu,ThoughtWorks, e World São 100% compatíveis com o mono. Texsharp, MagicAjax Mscaptcha Podem funcionar parcialmente pois não fazem chamadas ao Windows. Component One (Relatórios) Já as bibliotecas relacionadas a relatórios não irão funcionar pois apresentam muitas chamadas a API do Windows e será necessário remove-las e substituí-las por uma biblioteca compatível. 42
  • 43. Erro Página de Código 43
  • 44. Ajustes no Código 4 Arquivos C# tinha acentuação no código. 1 Expressão Lambda estava acusando erro de compilação pelo compilador do Mono. 1 ajuste no uso de alguns objetos de conexão com o banco de dados que estava sendo usando de uma forma muito genérica, usando a forma específica foi resolvido. SqlCommand cmd = new SqlCommand(commandString, sqlConnection); cmd.Transaction = sqlTransaction; cmd.ExecuteNonQuery(); dataTable = null; 44
  • 45. Ajuste no Código Erro de Sessão ao sair do Sistema. Acontece um problema no Apache que bloqueia a session do usuário obrigando a reiniciar o apache cada vez que o usuário clica em sair do sistema. É um bug no mono no método Session.Abandon(); Está corrigido na versão 2.10.1 Foi feita um ajuste usando o Session.RemoveAll(); corrigiu o problema e está funcionando como esperado. 45
  • 46. WebISS no MonoDevelop Solução do WebIss é aberta e compilada sem maiores problemas com os ajustes feitos no ambiente do MonoDevelop. Deploy do WebIss a partir do MonoDevelop 46
  • 47. Apache no Z10 Suse Enterprise11 for S390 Pacotes desatualizados Falta de bibliotecas Recompilação do Apache e módulos mod_mono Recompilação XSP Não conseguimos compilar o FAST-CGI 47
  • 48. WebISS rodando Linux/Z10 48
  • 49. 49
  • 50. Considerações Compatibilidade O Sistema WebIss não foi pensando para rodar sobre plataforma linux, mesmo assim, eles esta funcionando bem, com exceção dos relatórios. Apenas com uma boa orientação técnica e usando componentes 100% .NET, a própria evolução natural do WebIss poderá rodar no Linux 100% sem nenhum ajuste ou mudança no código. O maior trabalho a ser realizado atualmente é a troca do componente de relatórios. 50
  • 51. WebServices 51
  • 52. WCF Existe apenas 1 método não implementado no Mono. Mas este método é o método usado para autenticar as chaves digitais. Opções são : Implementar a funcionalidade o Mono. (Desaconselhado) Mudar a implementação da Aplicação WCF. O mais simples é migrar o WCF para WebServices, pois não é utilizada nenhuma característica especial do WFC nessa aplicação. 52
  • 53. Bechmarks!!!!! Resultados dos teste!!!
  • 54. Algrítmos Genéricos ArrayList Mono Linux Mono Z10 dotNet 54 Windows StringBuilder Adição de Integer & Floating Exception Reflection e recursão 452 1038 499 768 1926 639 5192 12164 5194 321 543 3057 4684 9787 5865
  • 55. Criação de Objetos em Memória Teste feito em C# mono e .net Tempo em Mili segundos Criação de Objetos em Memória 2000 1500 Mono AMD 1000 Mono Z10 500 .NET AMD 0 1k 10k Quantidade de Objetos Mono AMD Mono Z10 .NET AMD 55 100k 1k 17 25 31 10k 115 146 93 100k 1059 1458 936
  • 56. Teste SQL – 1 Thread .C# Teste SQL Para 1mil Registros 18000 Tempo em mili segundos 16000 14000 12000 10000 Mono AMD 8000 Mono Z10 6000 .NET AMD 4000 2000 0 Criar Memoria Insert Busca update Delete Insert Busca update Delete Mono AMD 17 8727 936 9472 11402 Mono Z10 56 Criar Memoria 25 4337 959 4379 4149 .NET AMD 31 10077 1029 9406 9592
  • 57. Teste SQL – 1 Thread .C# Teste SQL para 10mil Registros 180000 Tempo em mili segundos 160000 140000 120000 100000 Mono AMD 80000 Mono Z10 60000 .NET AMD 40000 20000 0 Criar Memoria Insert Mono AMD Mono Z10 .NET AMD 57 Busca update Criar Memoria 115 146 93 Delete Insert 93232 43677 99637 Busca 26885 33916 29749 update 137954 94313 154284 Delete 131444 101117 153645
  • 58. Single e Multi Thread O Mainframe parece ter uma performance melhor com 1 única tarefa. Mas como mostrado anteriormente com teste de múltiplas tarefas simultâneas ele apresenta a mesma eficiência do AMD em vários caso. Num ambiente de WebServer ele parece não ser adequado, pois ocorrem muitas threads para serem atendidas de forma rápida para não afetar o atendimento dos pedidos. 58
  • 59. Resultados SIM : é possível executar o WebIss no Z10 com mínimo de esforço de programação e testes Avaliar o esforço necessários do porte para o Z10 Troca dos componentes Ajax e Componentes de Relatórios Conversão dos WCF para WebServices comuns Migração das Chaves de Criptografia do ISS para o Apache Descrever os problemas encontrados e as possíveis soluções Necessidade de uma maior conjunto de Testes, Teste manuai e criação de testes automáticos. Avaliar desempenho do Z10 em relação a plataforma baixa como servidor de aplicação Web 59 O Z10 teve performance equivalente a um AMD de 5 anos atrás. Com certeza a aplicação não terá a mesma velocidade que tem usando a infra estrutura de processadores Xeon atuais.
  • 60. Conclusões Z10 não é tão performático como um INTEL/AMD para rodar uma aplicação Web como o WEBISS. Tudo que esta fora do ambiente do mainframe se torna lento, e o Z10 não está preparado para esse tipo de situação. O Z10 não escala a aplicação sozinho, a aplicação e o ambiente do sistema operacional precisa ser construído para rodar nesse ambiente. 60
  • 61. 61
  • 62. Por favor preencha a avaliação