Slide 1

Slide 1 text

Ulisses Almeida A Tale on XML Parsing

Slide 2

Slide 2 text

● Londres/Reino Unido ● @ulissesalmeida ● (Desenvolvedor Web Elixir) Engenheiro de Software na Duffel ✈ Ulisses Almeida

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

https://www.humblebundle.com/books/elixir-programming-pragmatic-programmers-books

Slide 5

Slide 5 text

Como melhoramos em 10x o processamento de XML com Elixir

Slide 6

Slide 6 text

💉 ELIXIR ON STEROIDS!!! 󰙤 📜 A tale on XML Parsing 🤴 👸 BIIIIRRRLLL !!!! ELIXIR TA SAINDO DA JAULA!!! BIIIIRRRLLL !!!! BORA BEAM !!!! ELIXIR DESCENDENTE !!!!

Slide 7

Slide 7 text

Uma história de como saímos de uma situação assim:

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

Para uma situação assim:

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

Como funciona a busca na Duffel?

Slide 17

Slide 17 text

O Primeiro Grande Cliente A primeira investigação Quando cheguei Hoje Grande Cliente

Slide 18

Slide 18 text

JURO QUE JÁ ESTAVA ASSIM QUANDO EU CHEGUEI

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

Escalável, mas não barato

Slide 21

Slide 21 text

Vale a pena assistir! https://www.youtube.com/watch?v=ZMgUTPcHeo4

Slide 22

Slide 22 text

A Primeira Investigação A primeira investigação Quando cheguei Hoje

Slide 23

Slide 23 text

A investigação Nenhuma era mais rápida que Saxy Muito complexo e custoso Muito custoso para mudar Bibliotecas Abordagem Rust

Slide 24

Slide 24 text

Circulando o problema A primeira investigação Quando cheguei Hoje Grande Cliente Circulando

Slide 25

Slide 25 text

Resolvendo problemas! Ninguém quer ver e nem processar milhares de ofertas Validações com Ecto é realmente necessário para consumir API? Fazer o parsing mais cedo que pudermos Filtros Remover processamento HTTP Streaming

Slide 26

Slide 26 text

Resolvendo problemas! Ninguém quer ver milhares de ofertas Validações com Ecto é realmente necessário para consumir API? Fazer o parsing mais cedo que pudermos Filtros Remover processamento HTTP Streaming

Slide 27

Slide 27 text

O debug maldito!

Slide 28

Slide 28 text

O debug maldito! 1 GB de memória!!!

Slide 29

Slide 29 text

O debug maldito! # pseudo code metadata |> Map.put(:response_xml, xml) |> Jason.encode!(pretty: tue)

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

Agora vai! A primeira investigação Quando cheguei Hoje Grande Cliente Circulando Agora vai!

Slide 34

Slide 34 text

O Plano 2 semanas para examinar o problema 2 semanas para criar protótipos de baixa fidelidade 4 semanas para integrar uma companhia aérea Investigar Protótipos Produção

Slide 35

Slide 35 text

1. A nova investigação

Slide 36

Slide 36 text

Xmerl Features XPath! Manipular e gerar XMLs

Slide 37

Slide 37 text

SweetXML e Xpath duration_in_minutes: transform_by( ~x"./FlightDetail/FlightDuration/Value/text()"s, &to_minutes/1 ), https://github.com/kbrw/sweet_xml

Slide 38

Slide 38 text

2. Investigando protótipos para construir Saxy tem SimpleForm Eliminar o DOM intermediário O futuro do XML? em outra palestra talvez Mini-DOM Sax to Structs VTD-XML

Slide 39

Slide 39 text

Benchmarks

Slide 40

Slide 40 text

Nova proposta: DataSchema + SimpleForm field: {:duration_in_minutes, {["FlightSegment", "FlightDetail", "FlightDuration", "Value"], :text}, MinutesType}, https://github.com/Adzz/data_schema

Slide 41

Slide 41 text

Nova proposta: Saxy SimpleForm

Slide 42

Slide 42 text

Nova proposta: Saxy SimpleForm

Slide 43

Slide 43 text

3. Produção! A companhia aérea mais usada Feature flag com Unleash Código velho novo vivendo juntos por um tempo Impacto Gradual Débito

Slide 44

Slide 44 text

E o resultado…

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

No pretty json SimpleForm 5x moar volume

Slide 47

Slide 47 text

Novo kit de solução XML

Slide 48

Slide 48 text

● Implementação para todas integrações com companhia aéreas ● Materiais e documentação do novo kit de solução ● Treinamento e divulgação interna na empresa ● Remover código antigo durante a grande jornada de migração Com o sucesso, grande responsabilidades

Slide 49

Slide 49 text

Em uma dimensão alternativa… A primeira versão da Duffel API Hoje

Slide 50

Slide 50 text

Does Saxy work with XPath? Saxy in its core is a SAX parser, therefore Saxy does not, and likely will not, offer any XPath functionality. SweetXml is a wonderful library to work with XPath. However, :xmerl, the library used by SweetXml, is not always memory efficient and speedy. You can combine the best of both sides with Saxmerl, which is a Saxy extension converting XML documents into SweetXml compatible format. Please check that library out for more information. !

Slide 51

Slide 51 text

However, :xmerl, the library used by SweetXml, is not always memory efficient and speedy.

Slide 52

Slide 52 text

No content

Slide 53

Slide 53 text

● Documentação ambígua ● As pessoas em geral estão acostumadas com XPath ● SimpleForm do Saxy não tem um uso fácil Complicado You can combine the best of both sides with Saxmerl, which is a Saxy extension converting XML documents into SweetXml compatible format Memory efficiency and better performance - Several benchmarks show that Saxmerl usually uses 4x less memory than :xmerl or SweetXml, and is usually 70–90% faster. Note that benchmarking XML parsers is difficult and highly depends on the complexity of the documents being parsed.

Slide 54

Slide 54 text

Lições aprendidas e o futuro A primeira investigação Quando cheguei Hoje Grande Cliente Circulando Agora vai!

Slide 55

Slide 55 text

● Confie, mas verifique ○ Verifique 10 vezes mais principalmente quando a única opção boa é mudar de linguagem ● Ame o problema, investigue a fundo! ○ Não desista cedo, por mais complicado que pareça! ○ Instrumentação! Dados! Métricas! ● Não se prenda a soluções ○ XPath era legal, mas fazíamos pouco uso da ferramenta ● Mudanças grandes demoram ○ Fazer missões paralelas, ganhar experiência, conquistar confiança ● Pessoas diferentes, abordagens diferentes Lições aprendidas

Slide 56

Slide 56 text

Futuro ● Usaremos Rust? ○ Até agora não temos previsão, mas pode ser que um dia sim. Vai valer a pena? Não sei XD ● DataSchema + SimpleForm? ○ Provavelmente lançaremos o kit de maneira open source. Mas sem previsão

Slide 57

Slide 57 text

Às vezes você precisa escalar a colina para ver a montanha Clarice Lispector

Slide 58

Slide 58 text

08 e 09 de setembro Ulisses Almeida| @ulissesalmeida