think in erlang! - codesync.global€¦ · © 2020 cisco and/or its affiliates. all rights...

26
Viktória Fördős Erlanger @ Cisco NSO Core 5 March 2020, Code BEAM SF Think in Erlang!

Upload: others

Post on 10-Aug-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

Viktória FördősErlanger @ Cisco NSO Core5 March 2020, Code BEAM SF

Think in Erlang!

Page 2: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF

Which programming language was the first you learnt?

Java

Pascal

C

Basic

Page 3: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF

Which programming language was the first you used professionally?

Python

C/C++

PHP

JavaCobol

Page 4: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF

Which programming language do you work with?

Erlang

Elixir

Other

Page 5: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF

Imperative paradigm

Page 6: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public

Statements, describing how to execute the program.

Goal is achieved through statechanges.

Focus is on the control flow.

Imperative

Page 7: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF

Is Erlang an imperative programming language?

Page 8: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF

Declarative paradigm

Page 9: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public

What we learn first• High level

• Quick prototyping & testing

• No mutable objects

Page 10: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public

Next, we learn• Lambda calculus

• Function application• Function abstraction• Function composition• Higher order functions• Fix point theorem

Page 11: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF

DataData Data

DataData

Data

DataDataData

Data

DataData

Data

Data DataData

Data DataData Data

DataDataData

Data

Data

Page 12: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF

Function f: X -> Y

Input x

Output y = f(x)

IO model

Page 13: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public

i(A, h(f(A), g(A)))

Data Transformation Function A

CB

D

E

B = f(A),

C = g(A),D = h(B, C),E = i(A, D)

Page 14: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF

Erlang

Page 15: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public

Based on data dependencies

Concurrency

Page 16: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public

Evaluates a function.

Has its own world.

Uses signals to communicate with the outside world.

Process

Page 17: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public

Network is not always reliable. Things will fail. “Let it crash!”

Distributed

Page 18: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF

Think in Erlang

Process

DistributionEmbrace failure Function

Data IO model

Page 19: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF

Case Study

Page 20: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

Intent-BasedTools

DevOps CI/CDPipeline

OSS/BSSSystems

Scripts andApplication

ServiceOrchestration

Page 21: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public

Network Services

VPNs, ACLs.

Page 22: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public

The problem

Service lifecycle management.

Page 23: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public

NSO needs

• Service model – IO model

• Mapping from service input parameters to actual device configuration. - Data transformation function.

Service lifecycle management: create, update, delete.

NSO way

Page 24: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF

Tail-f FASTMAP algorithm

to network

DELETE

NSO API

UNDO

NSO CORE

CREATE

NSO API

User code - CREATE

NSO CORE

UNDO

to network

NSO API

UPDATE

UNDO

User code - CREATE

NSO CORE

NEW UNDO

to network

Page 25: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF

Tail-f Reactive FASTMAP algorithm

NSO API

UPDATE

UNDO

User code - CREATE

NSO CORE

NEW UNDO

to network

Page 26: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir

© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF

Think in Erlang

Process

DistributionEmbrace failure Function

Data IO model