62
Alessandro de Oliveira Binhara Projeto MONO BRASIL [email protected] @binhara Interoperabilidade com .NET em ambiente Mainframe CÓDIGO DA SESSÃO: #####

Interoperabilidade com .NET em ambiente Mainframe

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

6

Sistema WebISS

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

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.

17

C# Shell Demos

Shell Interativo

Suporte a code completion

Suporte a GTK#

18

Compilador C# - MCS

EXECUTA EXECUTA

USA USA

USA

COMPILA /USA COMPILA

19

Build Farm Desenvolvimento

Consulta da implementação do framework

em comparação ao MS.NET

http://wrench.mono-project.com/builds

20

Mono Test Suite Desenvolvimento

http://mono-project.com/Test_Suite

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);

25

Quem já usa MonoTouch

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

Portando sua aplicação Asp.Net Suse Linux Enterprise 11.3 for S390

Mono no Z10

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.

34

MOMA Portando aplicativos

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.

40

Instalação Mono Z10

41

Mono 2.11 Instalado!!

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.

43

Erro Página de Código

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

48

WebISS rodando Linux/Z10

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.

51

WebServices

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.

Resultados dos teste!!!

Bechmarks!!!!!

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.

61

Por favor preencha a avaliação