Upload
alessandro-binhara
View
285
Download
6
Embed Size (px)
DESCRIPTION
Apresentação do Case de Sucesso do Porte de uma aplicação Asp.net para ambiente MainFrame usando mono.
Citation preview
Alessandro de Oliveira Binhara Projeto MONO BRASIL [email protected] @binhara
Interoperabilidade com .NET em ambiente Mainframe
CÓDIGO DA SESSÃO: #####
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)
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
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:
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
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
8
Nascimento Projeto MONO
Criado por Miguel de Icaza em 2001
Criou o Gnome e a empresa Ximian para dar suporte ao Gnome.
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) 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
11
Phalanger
LINUX
12
O que é ? Projeto MONO
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
14
Plataformas Suportadas
Supported Architectures Runtime Operating system
s390, s390x (32 and 64 bits)
JIT Linux
SPARC (32) JIT Solaris, Linux
PowerPC JIT Linux, Mac OSX, Wii, PlayStation 3
x86 JIT Linux, FreeBSD, OpenBSD, NetBSD, Microsoft Windows, Solaris, OS X
x86-64: AMD64 and EM64T (64 bit)
JIT Linux, Solaris
IA64 Itanium2 (64 bit) JIT Linux
ARM: little and big endian JIT Linux (both old and new ABI), iPhone , Android
Alpha JIT Linux
MIPS JIT Linux
HPPA 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#
16
Desenvolvedores Comunidade
Rafael Teixeira, Alexandre Marcondes, Everaldo Canuto, Rodrigo Bambo, Francisco Figueredo, mais de 500 pessoas na comunidade de comiters.
19
Build Farm Desenvolvimento
Consulta da implementação do framework
em comparação ao MS.NET
http://wrench.mono-project.com/builds
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
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)
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/
24
Comparação de Código
Objective C
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);
astr = CFAttributedStringCreate(kCFAllocatorDefault, CFSTR("Hello World"), attr);
C# Mono Touch
var attrs = new CFStringAttributes {
Font = listLineCTFont,
ForegroundColor = UIColor.Black.CGColor
};
var astr = new NSAttributedString ("Hello World", attrs);
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
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
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
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
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);
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);
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.
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.
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.
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
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
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.
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.
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;
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.
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
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
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.
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.
54
Algrítmos Genéricos
ArrayList StringBuilder Adição de Integer & Floating Exception Reflection e recursão
Mono Linux 452 768 5192 321 4684 Mono Z10 1038 1926 12164 543 9787 dotNet
Windows 499 639 5194 3057 5865
55
Criação de Objetos em Memória
Teste feito em C# mono e .net
0
500
1000
1500
2000
1k 10k 100k
Tem
po
em
Mili
se
gun
do
s
Quantidade de Objetos
Criação de Objetos em Memória
Mono AMD
Mono Z10
.NET AMD
1k 10k 100k
Mono AMD 17 115 1059
Mono Z10 25 146 1458
.NET AMD 31 93 936
56
Teste SQL – 1 Thread .C#
0
2000
4000
6000
8000
10000
12000
14000
16000
18000
Criar Memoria
Insert Busca update Delete
Tem
po
em
mili
se
gun
do
s
Teste SQL Para 1mil Registros
Mono AMD
Mono Z10
.NET AMD
Criar Memoria Insert Busca update Delete
Mono AMD 17 8727 936 9472 11402
Mono Z10 25 4337 959 4379 4149
.NET AMD 31 10077 1029 9406 9592
57
Teste SQL – 1 Thread .C#
0
20000
40000
60000
80000
100000
120000
140000
160000
180000
Criar Memoria
Insert Busca update Delete
Tem
po
em
mili
se
gun
do
s
Teste SQL para 10mil Registros
Mono AMD
Mono Z10
.NET AMD
Criar Memoria Insert Busca update Delete
Mono AMD 115 93232 26885 137954 131444
Mono Z10 146 43677 33916 94313 101117
.NET AMD 93 99637 29749 154284 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.
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
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.