SlideShare una empresa de Scribd logo
1 de 44
Descargar para leer sin conexión
Evolution of the infrastructure
DHCP Infra @ Facebook
Angelo “pallotron” Failla <pallotron@fb.com> - ClusterOps Dublin
Incontro DevOps Italia 2015, Bologna 10/04/2015
Who is Angelo?
• First met Internet in 1994
• Linux user since 1999
• Met Freaknet Medialab in 1999
• In Ireland since early 2008
• Joined Facebook Dublin in early 2011
• Started in the S.R.O. team
• Automated itself out of the job (thanks FBAR!)
• Joined ClusterOPS team in 2013
Cluster Operations
Agenda
• Cluster overview
• DCHP: how and why it’s used
• Old architecture and its limits
• How we solved those limits
• Lesson learned and other takeaways
server
server
TOR
server
…
“Wedge” switch running FBOSS
server
server
TOR
server
…
server
server
TOR
server
…
server
server
TOR
server
…
server
server
TOR
server
…
CSW CSW CSW CSW
uplinks
Datacenter routers
DHCP: how and why?
For bare metal provisioning:
•At reboot
•Used to install OS on hosts
•Anaconda based
•iPXE
For Out Of Band management:
•To assign IPs to OOB interfaces
•Leases renewed typically

once a day
DHCP client DHCP server
DISCOVER (broadcast)
Anatomy of a DHCP4 handshake
DHCP relayer
OFFER
DISCOVER (unicast)
OFFER
REQUEST (broadcast)
REQUEST (unicast)
ACK
ACK
What about DHCPv6 (RFC3315)?
It’s similar but with few differences:
• Different option names and formats
• Doesn’t deliver routing info (done by IPv6 via RA
packets)
• 255.255.255.255 -> ff02::1:2 (special multicast IP) ->
needs Relayer
• DUID (“Dhcp Unique IDentifier”) replaces MAC
• we use DUID-LL[T]
CSW CSW CSW CSW
uplinks
Datacenter routers
server
server
TOR
server
…
relayer
server
server
TOR
server
…
relayer
server
server
TOR
DHCP server
…
relayer
server
server
TOR
…
relayer
DHCP server
L

B
server
TOR
server
…
relayer
DHCP server
DHCP server
Problem: failure domain of the old architecture
active
standby
server
TOR
server
…
relayer
static
config
static
config
Problem: bootstrapping a cluster
L
B
DHCP server
DHCP server
active
standby
TOR
routable
DHCP server
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
static
config
static
config
static
config
for all DC
intra datacenter
remote cluster
Inventory
System
Periodic job git repo grocery-delivery
Problem: configuration distribution
/etc/dhcpd/…
/etc/init.d/
dhcpd restart
DHCP server
Chef
Infrastructure
Problem: lack of instrumentation
• Lack of instrumentation, we were oblivious to things like:
• # RPS
• client latencies
• # of errors/exceptions
• flying blind
Photo by Bill Abbott-
Goals for the new system
• Support both DHCPv4 and DHCPv6
• Stateless server
• Get rid of the F5 load balancers
• Must be easy to “containerize”
• Integrated with Facebook infrastructure
Photo by Angelo Failla -
Photo by Edith Soto -
Enter ISC KEA
• New DHCP rewrite from ISC (Internet Software Consortium)
• Started in 2009 (BIND10), DHCP component started in 2011
• Why a re-write?
• ISC DHCPD code is ~18 years old
• Monolithic code
• Managed open source model (closed repo, semi-closed bug tracking)
• Lacking performances
• Complex code / not modular / not easy to extend
• Not built using modern software development models
libdhcp++
general purpose DHCP library
IPv4/IPv6 packet parsing/assembly
IPv4/IPv6 options parsing/assembly
interface detection (Linux, partial BSD/Mac OSX)
socket management
DHCPv4

Server
DHCPv6

Server
DNS

Updates
perfdhcp
JSON
Configuration
KEA server
DHCPpacketprocessingflow
Step A
Step B
Step C
Step D
Custom library 1
function1()
function2()
Custom library 2
function1()
function2()
Extending KEA: the Hook API
inbound
packet
KEA
initial
processing
pkt[46]_receive
FB Infra

(e.g.: logging,
alerting, metrics,
inventory, others)
Cache
CalloutHandle
Context

Object
subnet[46]_select
(skipped)
pkt[46]send
FB Infra

(e.g.: logging,
alerting, metrics,
inventory, others)
outbound
packet
KEA
final

assembly
lease[46]_select
(skipped)
skipped subnet/lease
selection means packet
is empty at this
point and needs to be
filled in
Life of a packet in the FB Hook library
#include <hooks/hooks.h>
#include <dhcp/pkt4.h>
#include <dhcp/hwaddr.h>
#include "yourlibs.h"
using namespace isc::hooks;
extern "C" {
int version() {
return KEA_HOOKS_VERSION;
}
int load(LibraryHandle& libhandle) {
// initialize needed objects 

// (logging, cache, config, etc)
return 0;
}
int unload() {
// destroy the objects
return 0;
}
. . . . . . .
. . . . . . .
int subnet4_select(CalloutHandle& handle) {
handle.setSkip(true);
return 0;
}
int lease4_select(CalloutHandle& handle) {
handle.setSkip(true);
return 0;
}
. . . . . . .
. . . . .
int pkt4_receive(CalloutHandle& handle) {
Pkt4Ptr query4_ptr;
handle.getArgument("query4", query4_ptr);
HWAddrPtr hwaddr_ptr = query4_ptr->getHWAddr();
HostStateObject hostInfo;
if (!getHostInfo(&hostInfo, hwaddr_ptr)) {
LOG(ERROR) << "Something went wrong!";
handle.setSkip(true);
return 0;
}
logStuff(query4_ptr);
handle.setContext("hostInfo", hostInfo);
return 0;
}
. . . . .
. . . . .
int pkt4_send(CalloutHandle& handle) {
Pkt4Ptr response4_ptr;
HostStateObject hostInfo;
// at this point response4 is empty so we have
// to fill all the things ourselves
handle.getArgument("response4", response4_ptr);
handle.getContext("hostInfo", hostInfo);
// set all relevant options (e.g. default gw,
// boot options, subnet, DNS, domain search,
// hostname, lease time, etc)
fillUpResponsePacket(response4_ptr, hostInfo);
logStuff(response4_ptr);
return 0;
}
}
$ g++ -I /usr/include/kea -L /usr/lib/kea/lib -fpic -shared -o ${your_lib}.so 
${your_hook_lib_files} -lkea-dhcpsrv -lkea-dhcp++ -lkea-hooks -lkea-log 
-lkea-util -lkea-exceptions
You can compile your code using something like this:
{
"Logging": {
"loggers": [{
"severity": "DEBUG",
"name": "*",
"debuglevel": 0
}]
},
"Dhcp4": {
"hooks-libraries": [
"/path/to/your/library.so"
],
"interfaces": [
"eth0"
],
"valid-lifetime": 4000,
"renew-timer": 1000,
"rebind-timer": 2000,
"subnet4": [{
"subnet": "0.0.0.0/0",
"pools": [{
"pool": "0.0.0.0-255.255.255.255"
}]
}]
}
}
And the KEA JSON config file looks like this:
Big wins
Photo by Greg Hildebrand -
No more static configuration
• Configuration for hosts is pulled dynamically from inventory
• DCOPs people are happy (no more problems during swaps)
• Makes deployment easier, only need to generate a small JSON
file
• Integrated with “configerator”: our configeration infrastructure
based on Python DSL.
• Version controlled, canary support, hot reload support, etc.
No more hardware load balancing!
• Moved to Anycast + ECMP
• Packets sent to the anycast address are delivered
to the nearest server
• Same fleet-wide “anycast” IP is assigned to all
DHCP servers
• Address assigned to ip6tnl0/tunl0 interfaces
• ExaBGP is used to advertise the anycast IP
• Servers become routers and part of the network
infrastructure
• Packets sent to anycast addr are delivered to the
nearest server
exaBGP
TOR
DHCP
server
eth0: 10.44.10.20
tunl0: 10.127.255.67
exaBGP
DHCP
server
eth0: 10.44.11.20
tunl0: 10.127.255.67
TOR
exaBGP
TOR
DHCP
server
eth0: 10.10.10.20
tunl0: 10.127.255.67
exaBGP
DHCP
server
eth0: 10.10.11.20
tunl0: 10.127.255.67
TOR
Infrastructure routers
Region 2Region 1
BGP BGP BGP BGP
BGP
exaBGP
DHCP
server
eth0: 10.44.10.20
tunl0: 10.127.255.67
exaBGP
DHCP
server
eth0: 10.44.11.20
tunl0: 10.127.255.67
exaBGP
DHCP
server
eth0: 10.10.10.20
tunl0: 10.127.255.67
exaBGP
DHCP
server
eth0: 10.10.11.20
tunl0: 10.127.255.67
Region 2Region 1
RSW relayer
distance =1 distance = 1
distance = 2 distance = 2
exaBGP
DHCP
server
eth0: 10.44.10.20
tunl0: 10.127.255.67
exaBGP
DHCP
server
eth0: 10.44.11.20
tunl0: 10.127.255.67
exaBGP
DHCP
server
eth0: 10.10.10.20
tunl0: 10.127.255.67
exaBGP
DHCP
server
eth0: 10.10.11.20
tunl0: 10.127.255.67
Region 2Region 1
RSW relayer
distance =1 distance = 1
distance = 2 distance = 2
Seamless cluster/datacenter turnups
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
TOR
L
B
DHCP server
DHCP server
active
standby
routable
DHCP server
static
config
static
config
static
config
for all DC
inter datacenter
Remember this problem? With Anycast/ECMP we no longer need to (manually)
set all TOR dhcp helpers to a routable dhcp server in the region, we use the
same IP everywhere and the network takes care of the rest!

Configuration heaven!
Metrics!
Time for

a war story!
Photo by Karen Roe -
First IPv6-only cluster in Luleå, Sweden
• Found bug in BIOS/firmware (*ALL* of the machines in cluster)
• Unable to fetch PXE seed via TFTPv6 when client and server are
on different VLANs
• Vendor was made aware of the problem but fix wasn’t going to
be fast (multiple months)
• Realized Cisco N3Ks can run Python scripts
• Wrote quick and dirty Python TFTP relayer
• Deployed it in all TORs in the cluster
• Modify KEA hook lib to override the IP of the
cluster TFTP endpoint with the IP of the
machine in the rack
The workaround
Some takeaways…
Photo by Ollie Richardson -
• Design your system to be as stateless as possible
• Try not to store state locally
• Let external endpoints / DBs keep state for you
• All of the above will make deployment easier (read containers)…
• …and operationally easy to support
• Stress your application properly, possibly with real production data to find
its breaking point
• The NIH syndrome

• It isn’t necessarily a bad thing

• Re-use other’s technology or write your
own?

• Some times you gotta write things from
scratch yourself for various reasons

• The more important thing is that you are
aware of it and take a reasoned decision
Photo by Andrew Tarvin -
Resources
• KEA:http://kea.isc.org
• exaBGP:https://github.com/Exa-Networks/exabgp
• FBOSS:
• https://code.facebook.com/posts/843620439027582/facebook-open-switching-system-
fboss-and-wedge-in-the-open/
• https://code.facebook.com/posts/681382905244727/introducing-wedge-and-fboss-the-
next-steps-toward-a-disaggregated-network/
• https://code.facebook.com/posts/717010588413497/introducing-6-pack-the-first-open-
hardware-modular-switch/
• https://github.com/facebook/fboss
DevopsItalia2015 - DHCP at Facebook - Evolution of an infrastructure

Más contenido relacionado

La actualidad más candente

Perforce Administration: Optimization, Scalability, Availability and Reliability
Perforce Administration: Optimization, Scalability, Availability and ReliabilityPerforce Administration: Optimization, Scalability, Availability and Reliability
Perforce Administration: Optimization, Scalability, Availability and ReliabilityPerforce
 
Cumulus networks - Overcoming traditional network limitations with open source
Cumulus networks - Overcoming traditional network limitations with open sourceCumulus networks - Overcoming traditional network limitations with open source
Cumulus networks - Overcoming traditional network limitations with open sourceNat Morris
 
Tips for Administering Complex Distributed Perforce Environments
Tips for Administering Complex Distributed Perforce EnvironmentsTips for Administering Complex Distributed Perforce Environments
Tips for Administering Complex Distributed Perforce EnvironmentsPerforce
 
RIPE 71 and IETF 94 reports webinar
RIPE 71 and IETF 94 reports webinarRIPE 71 and IETF 94 reports webinar
RIPE 71 and IETF 94 reports webinarMen and Mice
 
Network OS Code Coverage demo using Bullseye tool
Network OS Code Coverage demo using Bullseye toolNetwork OS Code Coverage demo using Bullseye tool
Network OS Code Coverage demo using Bullseye toolVikram G Hosakote
 
SaltConf14 - Oz Akan, Rackspace - Deploying OpenStack Marconi with SaltStack
SaltConf14 - Oz Akan, Rackspace - Deploying OpenStack Marconi with SaltStackSaltConf14 - Oz Akan, Rackspace - Deploying OpenStack Marconi with SaltStack
SaltConf14 - Oz Akan, Rackspace - Deploying OpenStack Marconi with SaltStackSaltStack
 
Lenovo system management solutions
Lenovo system management solutionsLenovo system management solutions
Lenovo system management solutionsinside-BigData.com
 
Hadoop engineering bo_f_final
Hadoop engineering bo_f_finalHadoop engineering bo_f_final
Hadoop engineering bo_f_finalRamya Sunil
 
From Windows to Linux: Converting a Distributed Perforce Helix Infrastructure
From Windows to Linux: Converting a Distributed Perforce Helix InfrastructureFrom Windows to Linux: Converting a Distributed Perforce Helix Infrastructure
From Windows to Linux: Converting a Distributed Perforce Helix InfrastructurePerforce
 
HA Deployment Architecture with HAProxy and Keepalived
HA Deployment Architecture with HAProxy and KeepalivedHA Deployment Architecture with HAProxy and Keepalived
HA Deployment Architecture with HAProxy and KeepalivedGanapathi Kandaswamy
 
Control Your Network ASICs, What Benefits switchdev Can Bring Us
Control Your Network ASICs, What Benefits switchdev Can Bring UsControl Your Network ASICs, What Benefits switchdev Can Bring Us
Control Your Network ASICs, What Benefits switchdev Can Bring UsHungWei Chiu
 
Guide to alfresco monitoring
Guide to alfresco monitoringGuide to alfresco monitoring
Guide to alfresco monitoringMiguel Rodriguez
 
Vigor 3910 docker firmware quick start
Vigor 3910 docker firmware quick startVigor 3910 docker firmware quick start
Vigor 3910 docker firmware quick startJimmy Tu
 
ONIE: Open Network Install Environment @ OSDC 2014 Netways, Berlin
ONIE: Open Network Install Environment @ OSDC 2014 Netways, BerlinONIE: Open Network Install Environment @ OSDC 2014 Netways, Berlin
ONIE: Open Network Install Environment @ OSDC 2014 Netways, BerlinNat Morris
 
IPTABLES Introduction
IPTABLES IntroductionIPTABLES Introduction
IPTABLES IntroductionHungWei Chiu
 
Improving the ZFS Userland-Kernel API with Channel Programs - BSDCAN 2017 - M...
Improving the ZFS Userland-Kernel API with Channel Programs - BSDCAN 2017 - M...Improving the ZFS Userland-Kernel API with Channel Programs - BSDCAN 2017 - M...
Improving the ZFS Userland-Kernel API with Channel Programs - BSDCAN 2017 - M...Matthew Ahrens
 
Iptablesrocks
IptablesrocksIptablesrocks
Iptablesrocksqwer_asdf
 
High Performance Erlang - Pitfalls and Solutions
High Performance Erlang - Pitfalls and SolutionsHigh Performance Erlang - Pitfalls and Solutions
High Performance Erlang - Pitfalls and SolutionsYinghai Lu
 

La actualidad más candente (20)

Perforce Administration: Optimization, Scalability, Availability and Reliability
Perforce Administration: Optimization, Scalability, Availability and ReliabilityPerforce Administration: Optimization, Scalability, Availability and Reliability
Perforce Administration: Optimization, Scalability, Availability and Reliability
 
Cumulus networks - Overcoming traditional network limitations with open source
Cumulus networks - Overcoming traditional network limitations with open sourceCumulus networks - Overcoming traditional network limitations with open source
Cumulus networks - Overcoming traditional network limitations with open source
 
Tips for Administering Complex Distributed Perforce Environments
Tips for Administering Complex Distributed Perforce EnvironmentsTips for Administering Complex Distributed Perforce Environments
Tips for Administering Complex Distributed Perforce Environments
 
RIPE 71 and IETF 94 reports webinar
RIPE 71 and IETF 94 reports webinarRIPE 71 and IETF 94 reports webinar
RIPE 71 and IETF 94 reports webinar
 
Network OS Code Coverage demo using Bullseye tool
Network OS Code Coverage demo using Bullseye toolNetwork OS Code Coverage demo using Bullseye tool
Network OS Code Coverage demo using Bullseye tool
 
SaltConf14 - Oz Akan, Rackspace - Deploying OpenStack Marconi with SaltStack
SaltConf14 - Oz Akan, Rackspace - Deploying OpenStack Marconi with SaltStackSaltConf14 - Oz Akan, Rackspace - Deploying OpenStack Marconi with SaltStack
SaltConf14 - Oz Akan, Rackspace - Deploying OpenStack Marconi with SaltStack
 
Ceph on rdma
Ceph on rdmaCeph on rdma
Ceph on rdma
 
Lenovo system management solutions
Lenovo system management solutionsLenovo system management solutions
Lenovo system management solutions
 
Hadoop engineering bo_f_final
Hadoop engineering bo_f_finalHadoop engineering bo_f_final
Hadoop engineering bo_f_final
 
From Windows to Linux: Converting a Distributed Perforce Helix Infrastructure
From Windows to Linux: Converting a Distributed Perforce Helix InfrastructureFrom Windows to Linux: Converting a Distributed Perforce Helix Infrastructure
From Windows to Linux: Converting a Distributed Perforce Helix Infrastructure
 
HA Deployment Architecture with HAProxy and Keepalived
HA Deployment Architecture with HAProxy and KeepalivedHA Deployment Architecture with HAProxy and Keepalived
HA Deployment Architecture with HAProxy and Keepalived
 
Control Your Network ASICs, What Benefits switchdev Can Bring Us
Control Your Network ASICs, What Benefits switchdev Can Bring UsControl Your Network ASICs, What Benefits switchdev Can Bring Us
Control Your Network ASICs, What Benefits switchdev Can Bring Us
 
Guide to alfresco monitoring
Guide to alfresco monitoringGuide to alfresco monitoring
Guide to alfresco monitoring
 
Running Legacy Applications with Containers
Running Legacy Applications with ContainersRunning Legacy Applications with Containers
Running Legacy Applications with Containers
 
Vigor 3910 docker firmware quick start
Vigor 3910 docker firmware quick startVigor 3910 docker firmware quick start
Vigor 3910 docker firmware quick start
 
ONIE: Open Network Install Environment @ OSDC 2014 Netways, Berlin
ONIE: Open Network Install Environment @ OSDC 2014 Netways, BerlinONIE: Open Network Install Environment @ OSDC 2014 Netways, Berlin
ONIE: Open Network Install Environment @ OSDC 2014 Netways, Berlin
 
IPTABLES Introduction
IPTABLES IntroductionIPTABLES Introduction
IPTABLES Introduction
 
Improving the ZFS Userland-Kernel API with Channel Programs - BSDCAN 2017 - M...
Improving the ZFS Userland-Kernel API with Channel Programs - BSDCAN 2017 - M...Improving the ZFS Userland-Kernel API with Channel Programs - BSDCAN 2017 - M...
Improving the ZFS Userland-Kernel API with Channel Programs - BSDCAN 2017 - M...
 
Iptablesrocks
IptablesrocksIptablesrocks
Iptablesrocks
 
High Performance Erlang - Pitfalls and Solutions
High Performance Erlang - Pitfalls and SolutionsHigh Performance Erlang - Pitfalls and Solutions
High Performance Erlang - Pitfalls and Solutions
 

Destacado

SunGard - Defining Sustainability Metrics (KpIs)
SunGard - Defining Sustainability Metrics (KpIs)SunGard - Defining Sustainability Metrics (KpIs)
SunGard - Defining Sustainability Metrics (KpIs)Harmeda
 
Reporting Requirements for US Citizens with Foreign Assets
Reporting Requirements for US Citizens with Foreign AssetsReporting Requirements for US Citizens with Foreign Assets
Reporting Requirements for US Citizens with Foreign Assetsgppcpa
 
Docker network performance in the public cloud
Docker network performance in the public cloudDocker network performance in the public cloud
Docker network performance in the public cloudArjan Schaaf
 
Πώς να μην σκοτώσετε τη δημιουργικότητά σας
Πώς να μην σκοτώσετε τη δημιουργικότητά σας Πώς να μην σκοτώσετε τη δημιουργικότητά σας
Πώς να μην σκοτώσετε τη δημιουργικότητά σας Marilia
 
Мадридська система міжнародної реєстрації торговельних марок: загальні характ...
Мадридська система міжнародної реєстрації торговельних марок: загальні характ...Мадридська система міжнародної реєстрації торговельних марок: загальні характ...
Мадридська система міжнародної реєстрації торговельних марок: загальні характ...Constantine Zerov
 
Assistant training manager kpi
Assistant training manager kpiAssistant training manager kpi
Assistant training manager kpijomxemas
 
μες στο μουσείο
μες στο μουσείομες στο μουσείο
μες στο μουσείοMarilia
 
Ζωγραφίζοντας την Ελλάδα
Ζωγραφίζοντας την ΕλλάδαΖωγραφίζοντας την Ελλάδα
Ζωγραφίζοντας την ΕλλάδαMarilia
 
Особенности охраны и защиты прав интеллектуальной собственности в фармацевтич...
Особенности охраны и защиты прав интеллектуальной собственности в фармацевтич...Особенности охраны и защиты прав интеллектуальной собственности в фармацевтич...
Особенности охраны и защиты прав интеллектуальной собственности в фармацевтич...Constantine Zerov
 
Untitled presentation (5)
Untitled presentation (5)Untitled presentation (5)
Untitled presentation (5)Jaevon Stewart
 
Передача технологій та ліцензування (Падучак Богдан Михайлович )
Передача технологій та ліцензування (Падучак Богдан Михайлович )Передача технологій та ліцензування (Падучак Богдан Михайлович )
Передача технологій та ліцензування (Падучак Богдан Михайлович )Constantine Zerov
 
Discipline in school short pt show 1
Discipline in school short pt show 1Discipline in school short pt show 1
Discipline in school short pt show 1Carolineburdick
 
να βρω ελληνικες πατεντες
να βρω  ελληνικες πατεντεςνα βρω  ελληνικες πατεντες
να βρω ελληνικες πατεντεςkkostasgiorgos
 
επίσκεψη στο ενυδρείο
επίσκεψη στο ενυδρείοεπίσκεψη στο ενυδρείο
επίσκεψη στο ενυδρείοMarilia
 
Pedacit ode amigo_audio_
Pedacit ode amigo_audio_Pedacit ode amigo_audio_
Pedacit ode amigo_audio_Belen Jimenez
 
Традиційні знання та традиційні вираження культури (Арданов О.Є.)
Традиційні знання та традиційні вираження культури (Арданов О.Є.)Традиційні знання та традиційні вираження культури (Арданов О.Є.)
Традиційні знання та традиційні вираження культури (Арданов О.Є.)Constantine Zerov
 
For the Love of numbers
For the Love of numbersFor the Love of numbers
For the Love of numbersNickellj1
 
Πώς να φτιάξετε ένα ψηφιακό παζλ
Πώς να φτιάξετε ένα ψηφιακό παζλΠώς να φτιάξετε ένα ψηφιακό παζλ
Πώς να φτιάξετε ένα ψηφιακό παζλMarilia
 
Music institutions
Music institutionsMusic institutions
Music institutionssophiecramer
 

Destacado (20)

PUE Reconsidered
PUE ReconsideredPUE Reconsidered
PUE Reconsidered
 
SunGard - Defining Sustainability Metrics (KpIs)
SunGard - Defining Sustainability Metrics (KpIs)SunGard - Defining Sustainability Metrics (KpIs)
SunGard - Defining Sustainability Metrics (KpIs)
 
Reporting Requirements for US Citizens with Foreign Assets
Reporting Requirements for US Citizens with Foreign AssetsReporting Requirements for US Citizens with Foreign Assets
Reporting Requirements for US Citizens with Foreign Assets
 
Docker network performance in the public cloud
Docker network performance in the public cloudDocker network performance in the public cloud
Docker network performance in the public cloud
 
Πώς να μην σκοτώσετε τη δημιουργικότητά σας
Πώς να μην σκοτώσετε τη δημιουργικότητά σας Πώς να μην σκοτώσετε τη δημιουργικότητά σας
Πώς να μην σκοτώσετε τη δημιουργικότητά σας
 
Мадридська система міжнародної реєстрації торговельних марок: загальні характ...
Мадридська система міжнародної реєстрації торговельних марок: загальні характ...Мадридська система міжнародної реєстрації торговельних марок: загальні характ...
Мадридська система міжнародної реєстрації торговельних марок: загальні характ...
 
Assistant training manager kpi
Assistant training manager kpiAssistant training manager kpi
Assistant training manager kpi
 
μες στο μουσείο
μες στο μουσείομες στο μουσείο
μες στο μουσείο
 
Ζωγραφίζοντας την Ελλάδα
Ζωγραφίζοντας την ΕλλάδαΖωγραφίζοντας την Ελλάδα
Ζωγραφίζοντας την Ελλάδα
 
Особенности охраны и защиты прав интеллектуальной собственности в фармацевтич...
Особенности охраны и защиты прав интеллектуальной собственности в фармацевтич...Особенности охраны и защиты прав интеллектуальной собственности в фармацевтич...
Особенности охраны и защиты прав интеллектуальной собственности в фармацевтич...
 
Untitled presentation (5)
Untitled presentation (5)Untitled presentation (5)
Untitled presentation (5)
 
Передача технологій та ліцензування (Падучак Богдан Михайлович )
Передача технологій та ліцензування (Падучак Богдан Михайлович )Передача технологій та ліцензування (Падучак Богдан Михайлович )
Передача технологій та ліцензування (Падучак Богдан Михайлович )
 
Discipline in school short pt show 1
Discipline in school short pt show 1Discipline in school short pt show 1
Discipline in school short pt show 1
 
να βρω ελληνικες πατεντες
να βρω  ελληνικες πατεντεςνα βρω  ελληνικες πατεντες
να βρω ελληνικες πατεντες
 
επίσκεψη στο ενυδρείο
επίσκεψη στο ενυδρείοεπίσκεψη στο ενυδρείο
επίσκεψη στο ενυδρείο
 
Pedacit ode amigo_audio_
Pedacit ode amigo_audio_Pedacit ode amigo_audio_
Pedacit ode amigo_audio_
 
Традиційні знання та традиційні вираження культури (Арданов О.Є.)
Традиційні знання та традиційні вираження культури (Арданов О.Є.)Традиційні знання та традиційні вираження культури (Арданов О.Є.)
Традиційні знання та традиційні вираження культури (Арданов О.Є.)
 
For the Love of numbers
For the Love of numbersFor the Love of numbers
For the Love of numbers
 
Πώς να φτιάξετε ένα ψηφιακό παζλ
Πώς να φτιάξετε ένα ψηφιακό παζλΠώς να φτιάξετε ένα ψηφιακό παζλ
Πώς να φτιάξετε ένα ψηφιακό παζλ
 
Music institutions
Music institutionsMusic institutions
Music institutions
 

Similar a DevopsItalia2015 - DHCP at Facebook - Evolution of an infrastructure

Network Stack in Userspace (NUSE)
Network Stack in Userspace (NUSE)Network Stack in Userspace (NUSE)
Network Stack in Userspace (NUSE)Hajime Tazaki
 
StackiFest16: What's Next in Stacki - Mason Katz
StackiFest16: What's Next in Stacki - Mason Katz StackiFest16: What's Next in Stacki - Mason Katz
StackiFest16: What's Next in Stacki - Mason Katz StackIQ
 
Docker interview Questions-3.pdf
Docker interview Questions-3.pdfDocker interview Questions-3.pdf
Docker interview Questions-3.pdfYogeshwaran R
 
Compiling P4 to XDP, IOVISOR Summit 2017
Compiling P4 to XDP, IOVISOR Summit 2017Compiling P4 to XDP, IOVISOR Summit 2017
Compiling P4 to XDP, IOVISOR Summit 2017Cheng-Chun William Tu
 
Production high-performance networking with Snabb and LuaJIT (Linux.conf.au 2...
Production high-performance networking with Snabb and LuaJIT (Linux.conf.au 2...Production high-performance networking with Snabb and LuaJIT (Linux.conf.au 2...
Production high-performance networking with Snabb and LuaJIT (Linux.conf.au 2...Igalia
 
High performace network of Cloud Native Taiwan User Group
High performace network of Cloud Native Taiwan User GroupHigh performace network of Cloud Native Taiwan User Group
High performace network of Cloud Native Taiwan User GroupHungWei Chiu
 
Leonid Vasilyev "Building, deploying and running production code at Dropbox"
Leonid Vasilyev  "Building, deploying and running production code at Dropbox"Leonid Vasilyev  "Building, deploying and running production code at Dropbox"
Leonid Vasilyev "Building, deploying and running production code at Dropbox"IT Event
 
Docker 102 - Immutable Infrastructure
Docker 102 - Immutable InfrastructureDocker 102 - Immutable Infrastructure
Docker 102 - Immutable InfrastructureAdrian Otto
 
Ingesting hdfs intosolrusingsparktrimmed
Ingesting hdfs intosolrusingsparktrimmedIngesting hdfs intosolrusingsparktrimmed
Ingesting hdfs intosolrusingsparktrimmedwhoschek
 
Dataplane programming with eBPF: architecture and tools
Dataplane programming with eBPF: architecture and toolsDataplane programming with eBPF: architecture and tools
Dataplane programming with eBPF: architecture and toolsStefano Salsano
 
14th Athens Big Data Meetup - Landoop Workshop - Apache Kafka Entering The St...
14th Athens Big Data Meetup - Landoop Workshop - Apache Kafka Entering The St...14th Athens Big Data Meetup - Landoop Workshop - Apache Kafka Entering The St...
14th Athens Big Data Meetup - Landoop Workshop - Apache Kafka Entering The St...Athens Big Data
 
Jesse Olson - Nagios Log Server Architecture Overview
Jesse Olson - Nagios Log Server Architecture OverviewJesse Olson - Nagios Log Server Architecture Overview
Jesse Olson - Nagios Log Server Architecture OverviewNagios
 
Cloud Foundry V2 | Intermediate Deep Dive
Cloud Foundry V2 | Intermediate Deep DiveCloud Foundry V2 | Intermediate Deep Dive
Cloud Foundry V2 | Intermediate Deep DiveKazuto Kusama
 
Midwest php 2013 deploying php on paas- why & how
Midwest php 2013   deploying php on paas- why & howMidwest php 2013   deploying php on paas- why & how
Midwest php 2013 deploying php on paas- why & howdotCloud
 
Kernel bug hunting
Kernel bug huntingKernel bug hunting
Kernel bug huntingAndrea Righi
 
Balázs Bucsay - XFLTReaT: Building a Tunnel
Balázs Bucsay - XFLTReaT: Building a TunnelBalázs Bucsay - XFLTReaT: Building a Tunnel
Balázs Bucsay - XFLTReaT: Building a Tunnelhacktivity
 

Similar a DevopsItalia2015 - DHCP at Facebook - Evolution of an infrastructure (20)

Network Stack in Userspace (NUSE)
Network Stack in Userspace (NUSE)Network Stack in Userspace (NUSE)
Network Stack in Userspace (NUSE)
 
StackiFest16: What's Next in Stacki - Mason Katz
StackiFest16: What's Next in Stacki - Mason Katz StackiFest16: What's Next in Stacki - Mason Katz
StackiFest16: What's Next in Stacki - Mason Katz
 
Docker interview Questions-3.pdf
Docker interview Questions-3.pdfDocker interview Questions-3.pdf
Docker interview Questions-3.pdf
 
Compiling P4 to XDP, IOVISOR Summit 2017
Compiling P4 to XDP, IOVISOR Summit 2017Compiling P4 to XDP, IOVISOR Summit 2017
Compiling P4 to XDP, IOVISOR Summit 2017
 
Production high-performance networking with Snabb and LuaJIT (Linux.conf.au 2...
Production high-performance networking with Snabb and LuaJIT (Linux.conf.au 2...Production high-performance networking with Snabb and LuaJIT (Linux.conf.au 2...
Production high-performance networking with Snabb and LuaJIT (Linux.conf.au 2...
 
High performace network of Cloud Native Taiwan User Group
High performace network of Cloud Native Taiwan User GroupHigh performace network of Cloud Native Taiwan User Group
High performace network of Cloud Native Taiwan User Group
 
Rac on NFS
Rac on NFSRac on NFS
Rac on NFS
 
Leonid Vasilyev "Building, deploying and running production code at Dropbox"
Leonid Vasilyev  "Building, deploying and running production code at Dropbox"Leonid Vasilyev  "Building, deploying and running production code at Dropbox"
Leonid Vasilyev "Building, deploying and running production code at Dropbox"
 
Docker 102 - Immutable Infrastructure
Docker 102 - Immutable InfrastructureDocker 102 - Immutable Infrastructure
Docker 102 - Immutable Infrastructure
 
Ingesting hdfs intosolrusingsparktrimmed
Ingesting hdfs intosolrusingsparktrimmedIngesting hdfs intosolrusingsparktrimmed
Ingesting hdfs intosolrusingsparktrimmed
 
Dataplane programming with eBPF: architecture and tools
Dataplane programming with eBPF: architecture and toolsDataplane programming with eBPF: architecture and tools
Dataplane programming with eBPF: architecture and tools
 
Kfs presentation
Kfs presentationKfs presentation
Kfs presentation
 
14th Athens Big Data Meetup - Landoop Workshop - Apache Kafka Entering The St...
14th Athens Big Data Meetup - Landoop Workshop - Apache Kafka Entering The St...14th Athens Big Data Meetup - Landoop Workshop - Apache Kafka Entering The St...
14th Athens Big Data Meetup - Landoop Workshop - Apache Kafka Entering The St...
 
eBPF Basics
eBPF BasicseBPF Basics
eBPF Basics
 
Jesse Olson - Nagios Log Server Architecture Overview
Jesse Olson - Nagios Log Server Architecture OverviewJesse Olson - Nagios Log Server Architecture Overview
Jesse Olson - Nagios Log Server Architecture Overview
 
Cloud Foundry V2 | Intermediate Deep Dive
Cloud Foundry V2 | Intermediate Deep DiveCloud Foundry V2 | Intermediate Deep Dive
Cloud Foundry V2 | Intermediate Deep Dive
 
Midwest php 2013 deploying php on paas- why & how
Midwest php 2013   deploying php on paas- why & howMidwest php 2013   deploying php on paas- why & how
Midwest php 2013 deploying php on paas- why & how
 
PyData Boston 2013
PyData Boston 2013PyData Boston 2013
PyData Boston 2013
 
Kernel bug hunting
Kernel bug huntingKernel bug hunting
Kernel bug hunting
 
Balázs Bucsay - XFLTReaT: Building a Tunnel
Balázs Bucsay - XFLTReaT: Building a TunnelBalázs Bucsay - XFLTReaT: Building a Tunnel
Balázs Bucsay - XFLTReaT: Building a Tunnel
 

Último

Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...panagenda
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...AliaaTarek5
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 

Último (20)

Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 

DevopsItalia2015 - DHCP at Facebook - Evolution of an infrastructure

  • 1.
  • 2. Evolution of the infrastructure DHCP Infra @ Facebook Angelo “pallotron” Failla <pallotron@fb.com> - ClusterOps Dublin Incontro DevOps Italia 2015, Bologna 10/04/2015
  • 3. Who is Angelo? • First met Internet in 1994 • Linux user since 1999 • Met Freaknet Medialab in 1999 • In Ireland since early 2008 • Joined Facebook Dublin in early 2011 • Started in the S.R.O. team • Automated itself out of the job (thanks FBAR!) • Joined ClusterOPS team in 2013
  • 4.
  • 6. Agenda • Cluster overview • DCHP: how and why it’s used • Old architecture and its limits • How we solved those limits • Lesson learned and other takeaways
  • 9. DHCP: how and why? For bare metal provisioning: •At reboot •Used to install OS on hosts •Anaconda based •iPXE For Out Of Band management: •To assign IPs to OOB interfaces •Leases renewed typically
 once a day
  • 10. DHCP client DHCP server DISCOVER (broadcast) Anatomy of a DHCP4 handshake DHCP relayer OFFER DISCOVER (unicast) OFFER REQUEST (broadcast) REQUEST (unicast) ACK ACK
  • 11. What about DHCPv6 (RFC3315)? It’s similar but with few differences: • Different option names and formats • Doesn’t deliver routing info (done by IPv6 via RA packets) • 255.255.255.255 -> ff02::1:2 (special multicast IP) -> needs Relayer • DUID (“Dhcp Unique IDentifier”) replaces MAC • we use DUID-LL[T]
  • 12. CSW CSW CSW CSW uplinks Datacenter routers server server TOR server … relayer server server TOR server … relayer server server TOR DHCP server … relayer server server TOR … relayer DHCP server
  • 13. L
 B server TOR server … relayer DHCP server DHCP server Problem: failure domain of the old architecture active standby server TOR server … relayer static config static config
  • 14. Problem: bootstrapping a cluster L B DHCP server DHCP server active standby TOR routable DHCP server TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR static config static config static config for all DC intra datacenter remote cluster
  • 15. Inventory System Periodic job git repo grocery-delivery Problem: configuration distribution /etc/dhcpd/… /etc/init.d/ dhcpd restart DHCP server Chef Infrastructure
  • 16.
  • 17.
  • 18. Problem: lack of instrumentation • Lack of instrumentation, we were oblivious to things like: • # RPS • client latencies • # of errors/exceptions • flying blind Photo by Bill Abbott-
  • 19. Goals for the new system • Support both DHCPv4 and DHCPv6 • Stateless server • Get rid of the F5 load balancers • Must be easy to “containerize” • Integrated with Facebook infrastructure Photo by Angelo Failla -
  • 20. Photo by Edith Soto -
  • 21. Enter ISC KEA • New DHCP rewrite from ISC (Internet Software Consortium) • Started in 2009 (BIND10), DHCP component started in 2011 • Why a re-write? • ISC DHCPD code is ~18 years old • Monolithic code • Managed open source model (closed repo, semi-closed bug tracking) • Lacking performances • Complex code / not modular / not easy to extend • Not built using modern software development models
  • 22. libdhcp++ general purpose DHCP library IPv4/IPv6 packet parsing/assembly IPv4/IPv6 options parsing/assembly interface detection (Linux, partial BSD/Mac OSX) socket management DHCPv4
 Server DHCPv6
 Server DNS
 Updates perfdhcp JSON Configuration
  • 23. KEA server DHCPpacketprocessingflow Step A Step B Step C Step D Custom library 1 function1() function2() Custom library 2 function1() function2() Extending KEA: the Hook API
  • 24. inbound packet KEA initial processing pkt[46]_receive FB Infra
 (e.g.: logging, alerting, metrics, inventory, others) Cache CalloutHandle Context
 Object subnet[46]_select (skipped) pkt[46]send FB Infra
 (e.g.: logging, alerting, metrics, inventory, others) outbound packet KEA final
 assembly lease[46]_select (skipped) skipped subnet/lease selection means packet is empty at this point and needs to be filled in Life of a packet in the FB Hook library
  • 25. #include <hooks/hooks.h> #include <dhcp/pkt4.h> #include <dhcp/hwaddr.h> #include "yourlibs.h" using namespace isc::hooks; extern "C" { int version() { return KEA_HOOKS_VERSION; } int load(LibraryHandle& libhandle) { // initialize needed objects 
 // (logging, cache, config, etc) return 0; } int unload() { // destroy the objects return 0; } . . . . . . . . . . . . . . int subnet4_select(CalloutHandle& handle) { handle.setSkip(true); return 0; } int lease4_select(CalloutHandle& handle) { handle.setSkip(true); return 0; } . . . . . . .
  • 26. . . . . . int pkt4_receive(CalloutHandle& handle) { Pkt4Ptr query4_ptr; handle.getArgument("query4", query4_ptr); HWAddrPtr hwaddr_ptr = query4_ptr->getHWAddr(); HostStateObject hostInfo; if (!getHostInfo(&hostInfo, hwaddr_ptr)) { LOG(ERROR) << "Something went wrong!"; handle.setSkip(true); return 0; } logStuff(query4_ptr); handle.setContext("hostInfo", hostInfo); return 0; } . . . . . . . . . . int pkt4_send(CalloutHandle& handle) { Pkt4Ptr response4_ptr; HostStateObject hostInfo; // at this point response4 is empty so we have // to fill all the things ourselves handle.getArgument("response4", response4_ptr); handle.getContext("hostInfo", hostInfo); // set all relevant options (e.g. default gw, // boot options, subnet, DNS, domain search, // hostname, lease time, etc) fillUpResponsePacket(response4_ptr, hostInfo); logStuff(response4_ptr); return 0; } }
  • 27. $ g++ -I /usr/include/kea -L /usr/lib/kea/lib -fpic -shared -o ${your_lib}.so ${your_hook_lib_files} -lkea-dhcpsrv -lkea-dhcp++ -lkea-hooks -lkea-log -lkea-util -lkea-exceptions You can compile your code using something like this:
  • 28. { "Logging": { "loggers": [{ "severity": "DEBUG", "name": "*", "debuglevel": 0 }] }, "Dhcp4": { "hooks-libraries": [ "/path/to/your/library.so" ], "interfaces": [ "eth0" ], "valid-lifetime": 4000, "renew-timer": 1000, "rebind-timer": 2000, "subnet4": [{ "subnet": "0.0.0.0/0", "pools": [{ "pool": "0.0.0.0-255.255.255.255" }] }] } } And the KEA JSON config file looks like this:
  • 29. Big wins Photo by Greg Hildebrand -
  • 30. No more static configuration • Configuration for hosts is pulled dynamically from inventory • DCOPs people are happy (no more problems during swaps) • Makes deployment easier, only need to generate a small JSON file • Integrated with “configerator”: our configeration infrastructure based on Python DSL. • Version controlled, canary support, hot reload support, etc.
  • 31. No more hardware load balancing! • Moved to Anycast + ECMP • Packets sent to the anycast address are delivered to the nearest server • Same fleet-wide “anycast” IP is assigned to all DHCP servers • Address assigned to ip6tnl0/tunl0 interfaces • ExaBGP is used to advertise the anycast IP • Servers become routers and part of the network infrastructure • Packets sent to anycast addr are delivered to the nearest server
  • 32. exaBGP TOR DHCP server eth0: 10.44.10.20 tunl0: 10.127.255.67 exaBGP DHCP server eth0: 10.44.11.20 tunl0: 10.127.255.67 TOR exaBGP TOR DHCP server eth0: 10.10.10.20 tunl0: 10.127.255.67 exaBGP DHCP server eth0: 10.10.11.20 tunl0: 10.127.255.67 TOR Infrastructure routers Region 2Region 1 BGP BGP BGP BGP BGP
  • 33. exaBGP DHCP server eth0: 10.44.10.20 tunl0: 10.127.255.67 exaBGP DHCP server eth0: 10.44.11.20 tunl0: 10.127.255.67 exaBGP DHCP server eth0: 10.10.10.20 tunl0: 10.127.255.67 exaBGP DHCP server eth0: 10.10.11.20 tunl0: 10.127.255.67 Region 2Region 1 RSW relayer distance =1 distance = 1 distance = 2 distance = 2
  • 34. exaBGP DHCP server eth0: 10.44.10.20 tunl0: 10.127.255.67 exaBGP DHCP server eth0: 10.44.11.20 tunl0: 10.127.255.67 exaBGP DHCP server eth0: 10.10.10.20 tunl0: 10.127.255.67 exaBGP DHCP server eth0: 10.10.11.20 tunl0: 10.127.255.67 Region 2Region 1 RSW relayer distance =1 distance = 1 distance = 2 distance = 2
  • 35. Seamless cluster/datacenter turnups TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR TOR L B DHCP server DHCP server active standby routable DHCP server static config static config static config for all DC inter datacenter Remember this problem? With Anycast/ECMP we no longer need to (manually) set all TOR dhcp helpers to a routable dhcp server in the region, we use the same IP everywhere and the network takes care of the rest!
 Configuration heaven!
  • 37. Time for
 a war story! Photo by Karen Roe -
  • 38. First IPv6-only cluster in Luleå, Sweden • Found bug in BIOS/firmware (*ALL* of the machines in cluster) • Unable to fetch PXE seed via TFTPv6 when client and server are on different VLANs • Vendor was made aware of the problem but fix wasn’t going to be fast (multiple months)
  • 39. • Realized Cisco N3Ks can run Python scripts • Wrote quick and dirty Python TFTP relayer • Deployed it in all TORs in the cluster • Modify KEA hook lib to override the IP of the cluster TFTP endpoint with the IP of the machine in the rack The workaround
  • 40. Some takeaways… Photo by Ollie Richardson -
  • 41. • Design your system to be as stateless as possible • Try not to store state locally • Let external endpoints / DBs keep state for you • All of the above will make deployment easier (read containers)… • …and operationally easy to support • Stress your application properly, possibly with real production data to find its breaking point
  • 42. • The NIH syndrome
 • It isn’t necessarily a bad thing
 • Re-use other’s technology or write your own?
 • Some times you gotta write things from scratch yourself for various reasons
 • The more important thing is that you are aware of it and take a reasoned decision Photo by Andrew Tarvin -
  • 43. Resources • KEA:http://kea.isc.org • exaBGP:https://github.com/Exa-Networks/exabgp • FBOSS: • https://code.facebook.com/posts/843620439027582/facebook-open-switching-system- fboss-and-wedge-in-the-open/ • https://code.facebook.com/posts/681382905244727/introducing-wedge-and-fboss-the- next-steps-toward-a-disaggregated-network/ • https://code.facebook.com/posts/717010588413497/introducing-6-pack-the-first-open- hardware-modular-switch/ • https://github.com/facebook/fboss