ݺߣ

ݺߣShare a Scribd company logo
ENKELHET, TESTBARHET OG
 SKALERBARHET MED GRID

           Proof of Concept

             Skatteetaten


             JavaZone 2012
 Tormod Varhaugvik og Trond Arve Wasskog
               12.09.2012
åٲԾԲ
Skatteetatens arkitekturavdeling
 ønsket å gjennomføre Proof of
  Concept på ny plattform for
 liknings- og skatteprosessene
Overordnet målsetting var å senke
  forvaltningskostnadene, øke
endringsevnen og bygge systemer
  som i større grad vil svare på
    fremtidige utfordringer.
Primært bevise hypotesen om at
innsamling, fastsetting og skatt- og
   avgifts-beregning kan bygges
 vesentlig enklere og gi et enklere
            vedlikehold.
Sekundært bevise hypotesen om at
 systemene kan bygges for massiv
parallell-prosessering til en lavere
             kostnad.
վæԲ
Testbarhet
Enkelhet
Vedlikeholdbarhet
Driftbarhet
Grid 101
Node 1           Node 2           Node 3




         A   B    C   D   E   F
Node 1   Node 2   Node 3

A    D   E   C    B    F
Node 1   Node 2   Node 3

A    D   E   C    B    F
Node 1                    Node 2   Node 3

    A        D             E       C    B       F



                           1
        1                                   1




1. Kjør distribuert jobb
Node 1                    Node 2   Node 3

    A        D             E       C    B       F



                           2
        2                                   2




1. Kjør distribuert jobb
2. Aggreger del-resultat
Node 1   Node 2   Node 3

A    D   E   C    B    F


B    C   A   F    D    E
Node 1   Node 2   Node 3

A    D   E   C    B    F


B    C   A   F    D    E
Node 2   Node 3

E   C    B    F


A   F    D    E


B   D    C   A
Node 1   Node 2   Node 3

A    D   E    C   B    F
Skatteberegning
      PoC
Prosesserings-              Prosesserings-           Prosesserings-          Prosesserings-
 Prosessering             modul                       modul                    modul                   modul




        Grid
(distribuert cache)




    Lagring
                                            XML                    XML                    XML
                                       Dokumentdatabase       Dokumentdatabase       Dokumentdatabase
Server
                                                        Legge (komprimert)
   Grid-node                                           Java-objekter i griden
 Beregnet skatt           ”Beregn skatt”
                                                       Generere java-objeker
Skattegrunnlag            ”Generer SG”
                                                           Parse XML-filer
Saldo- ogFodselsnr
          rente-        Part
                          ”Last S/R”
   meldinger
         08017212345    Person {Navn=”Per”, Partner=”...”, BarnAv=”..”}
                                                           Dekomprimere
          31124698765   Person {Navn=”Arne”, Partner=”...”, BarnAv=”..”}
Lønns- og24046934567
          trekk-                                              zip-arkiv
                          ”Last LTO’er”
                        Person {Navn=”Anne”, Partner=”...”, BarnAv=”..”}
   oppgaver
         16098745678    Person {Navn=”Lise”, Partner=”...”, BarnAv=”..”}
                                                           Lese zip-arkiver
     Parter               ”Last parter”                        fra disk

 Skattefamilie             ”Last skattefamilie”
Server            Server

  Grid-node         Grid-node




Saldo- og rente   Saldo- og rente
                                    ”Last S/R”
  meldinger         meldinger
Lønns- og trekk   Lønns- og trekk
                                    ”Last LTO’er”
  oppgaver          oppgaver

                      Parter
    Parter            Parter        ”Last parter”
 Skattefamilie     Skattefamilie    ”Last skattefamilie”
Server                            Server

 Grid-node                         Grid-node




                Saldo- og rente
                  meldinger
                Lønns- og trekk
                  oppgaver

                    Parter

Skattefamilie                     Skattefamilie
Server            Server

  Grid-node         Grid-node

Beregnet skatt    Beregnet skatt

Skattegrunnlag    Skattegrunnlag

Saldo- og rente   Saldo- og rente
  meldinger         meldinger
Lønns- og trekk   Lønns- og trekk
  oppgaver          oppgaver
    Parter            Parter
 Skattefamilie     Skattefamilie
Enkelhet
Domene
Spring Batch JPA EJB CDI   JTA   JSF

  Spring       Java EE
            Java SE
           Oracle RDBMS
Domene
  Grid



Java SE
Plain Old Java Objects
Map<UUID,Oppgave>
MultiTask task =
   new MultiTask(myCallable, members);

ExecutorService executorService =
   Hazelcast.getExecutorService();

executorService.execute(task);

Collection results = task.get();
Utviklingsarkitektur
Enkelhet
øܱ?
Aggregatdesign
<<aggregate root>>        <<value object>>
   Leveranse               LeveranseId


                         <<aggregate root>>
                               Oppgave                <<entity>>
                                                        Part


            <<value object>>         <<value object>>
                 Avvik                       PartId
Serialisering
Source: https://github.com/eishay/jvm-serializers
Enkelhet testbarhet og skalerbarhet med grid i skatteetaten
Idempotens
JobbInfo
Leveranse                   Oppgave
                                                          Status = READY
                                                                   FAILED
                                                                   RUNNING
UUID=3xh340b3               ID=17127123908
                    0..*                                  Status = READY
                                                          ...      SUCCESS
...                         ...


      Behandle                                            Persistent lager
      Leveranse
        Jobb




         0        100 000             200 000   300 000          400 000



         0          5s                 10s        15s                20s
Asynkronitet
1400

           1200

           1000
Oppgaver


           800

           600                          Write-through
                                        Write-behind
           400

           200

             0
                  1   2         3   4
                          Tid
Konsistens
Enkelhet testbarhet og skalerbarhet med grid i skatteetaten
DEMO
Resultater
Kjørende løsning for forhåndsutfylt
 selvangivelse og skatteberegning
  basert på reelle grunnlagsdata
Implementasjon som dekker
skatteregler for 70% av Norges
          befolkning
RESULTAT PSA-GENERERING



                                antall/min
            500,000
                                                   435,143
            450,000
            400,000
            350,000
                                      287,678
            300,000
            250,000
            200,000
            150,000   123,646
            100,000
             50,000
                 0
                        1                2           3
                                    Antall noder
Hva betyr det når
   vi har …?
5 100 000
   selvangivelser,
skatteberegninger og
    skattekort ...
...og
80 000 000
grunnlagsdata og
 underskjermaer
Jo, vi trenger …
370 GB RAM
   120 GB RAM netto
+ redundans og indekser
=
12 servere
á 32 GB RAM
Men da kan vi til
 gjengjeld ...
... lage selvangivelser
for hele landets befolkning på...
3 minutter
... og gjøre
skatteberegning
for alle sammen på...
1,5 minutter
... med en årlig
infrastrukturkostnad på
   1 400 000,-
SPØRSMÅL OG SVAR
Enkelhet testbarhet og skalerbarhet med grid i skatteetaten

More Related Content

Enkelhet testbarhet og skalerbarhet med grid i skatteetaten