SlideShare a Scribd company logo
1 of 39
Download to read offline
The simplicity of implementing
a job scheduler with Circuit
DEVIEW 2015
Seoul, South Korea
Petar Maymounkov
Circuit: Light-weight cluster OS
● Real-time API to see and control:
○ Hosts, processes, containers
● System never fails
○ API endpoint on every host
○ Robust master-less, peer-to-peer membership
protocol
API overview
API: Model of cluster
Proc 1
Proc 2 Proc 3
Proc 4
Proc 5
Proc 7
Host 1 Host 2 Host 3 Host 4
Proc 8
Proc 6
API: Abstraction
Proc 1
Proc 2 Proc 3
Proc 4
Proc 5
Proc 7
Host 1 Host 2 Host 3 Host 4
Proc 8
Proc 6
Host 1
Host 2
etc.
Cluster DOM operations:
● Traversal
● Manipulation
● Notifications
API: Entrypoints
● Command-line tool
● Go client package (more later)
API: Command-line example Host A
mysql
hdfs
Host B
apache
php
mem
cache
fs
db
cache
http
X85ec139ad
X68a30645c7
$ circuit ls -l /...
server /X85ec139ad
server /X85ec139ad/fs
proc /X85ec139ad/db
server /X68a30645c
proc /X68a30645c/cache
docker /X68a30645c/http
API: Command-line example Host A
mysql
hdfs
Host B
apache
php
mem
cache
fs
db
cache
http
X85ec139ad
X68a30645c7
$ circuit mkproc /X85ec/test <<EOF
{“Path”:”/sbin/lscpu”}
EOF
$ circuit stdout /X85ec/test
Architecture: x86_64
etc.
$ circuit wait /X85ec/db
$ circuit stderr /X68a3
etc.
System architecture
Host C
System architecture: Boot individual hosts
Host A Host B
circuit
server
circuit
server
circuit
server
$ circuit start
Host C
System architecture: Discovery
Host A Host B
circuit
server
circuit
server
circuit
server
$ circuit start --discover=228.8.8.8:8822
Host C
System architecture: API endpoints
Host A Host B
circuit
server
circuit
server
circuit
server
API API API
$ circuit start
circuit://127.0.0.1:7822/17880/Q413a079318a275ca
Eng Notebook
System architecture: Client connections
Host A Host B
circuit
server
circuit
server
circuit
client
circuit
client
$ circuit start
circuit://127.0.0.1:7822/17880/Q413a079318a275ca
App-to-circuit
connection never
fails, because of
colocation.
Go API overview
Go: Entrypoint
import . “github.com/gocircuit/circuit/client”
func Dial(
circuitAddr string,
crypto []byte,
) *Client
func DialDiscover(
udpMulticast string,
crypto []byte,
) *Client
Go: Error handling
● Physical errors are panics
● Application errors are returned values
func Dial(
circuitAddr string,
crypto []byte,
) *Client
Anchor
Anchor
Anchor
Anchor
Anchor
Anchor
Anchor
Anchor
Anchor
/X114cd3eba3423596
/Xfea8b5b798f2fc09
/X45af9c2b9c9ab78b
/X114cd3eba3423596/db
/X114cd3eba3423596/jobs
/X45af9c2b9c9ab78b/nginx
/X45af9c2b9c9ab78b/nodej
s
/X45af9c2b9c9ab78b/dns
/
Container
Process
Container
DNS
Server
Server
Server
Go: Anchor hierarchy
An anchor is a node in a
unified namespace
An anchor is like a “directory”.
It can have children anchors
An anchor is like a “variable”.
It can be empty or hold an
object (server, process,
container, etc.)
Client connection is the root
anchor
Anchor
Anchor
Anchor
Anchor
/
Server
Server
Server
Go: Anchor API
type Anchor interface{
Walk(path []string) Anchor
View() map[string]Anchor
MakeProc(Spec) (Proc, error)
MakeDocker(Spec) (Container, error)
Get() interface{}
Scrub()
}
type Proc interface{
Peek() (State, error)
Wait() error
…
}
/Xfea8b5b798f2fc09
/X45af9c2b9c9ab78b
/X114cd3eba3423596
Go: Anchor residence
Anchor
Anchor
Anchor
Anchor
Anchor
Anchor
Anchor
Anchor
Residing on host:
/X114cd3eba3423596
/X114cd3eba3423596
/X45af9c2b9c9ab78b
/X114cd3eba3423596/db
/X114cd3eba3423596/jobs
/X45af9c2b9c9ab78b/nginx
/X45af9c2b9c9ab78b/nodejs
/X45af9c2b9c9ab78b/dns
/
Container
Process
Container
DNS
Server
Server
Residing on host:
/X45af9c2b9c9ab78b
Implementing a job scheduler
Scheduler: Design spec
● User specifies:
○ Maximum number of jobs per host
○ Address of circuit server to connect to
● HTTP API server:
○ Add job by name and command spec
○ Show status
Scheduler: Service architecture
Host CHost B
circuit
server
circuit
server
circuit
server
sched
Host A
HTTP API
Job1
Job2
Job3
Scheduler: State and logic
State
ControllerAdd job
Show status
Job exited
Host
joined/left
USER
CIRCUIT
schedule
Start job
H1
J1
J2
J3
H3
J4
J7
H5
J8
Pend
J5
J6
Live hosts and
the jobs they are
running
Jobs
waiting to
be run
Scheduler: Main
import “github.com/gocircuit/circuit/client”
var flagAddr = flag.String(“addr”, “”, “Circuit to connect to”)
var flagMaxJobs = flag.Int(“maxjob”, 2, “Max jobs per host”)
func main() {
flag.Parse()
defer func() {
if r := recover(); r != nil {
log.Fatalf("Could not connect to circuit: %v", r)
}
}()
conn := client.Dial(*flagAddr, nil)
controller := NewController(conn, *flagMaxJobs)
… // Link controller methods to HTTP requests handlers.
log.Fatal(http.ListenAndServe(":8080", nil))
}
Scheduler: Controller state
type Controller struct {
client *client.Client
maxJobsPerHost int
sync.Mutex // Protects state fields.
jobName map[string]struct{}
worker map[string]*worker
pending []*job
}
type worker struct {
name string
job []*job
}
type job struct {
name string
cmd client.Cmd
}
H1
J1
J2
J3
H3
J4
J7
H5
J8
Pend
J5
J6
Live hosts and
the jobs they are
running
Jobs
waiting to
be run
func NewController(conn *Client, maxjob int) *Controller {
c := &Controller{…} // Initialize fields.
// Subscribe to notifications of hosts joining and leaving.
c.subscribeToJoin()
c.subscribeToLeave()
return c
}
Scheduler: Start controller
func (c *Controller) subscribeToJoin() {
a := c.client.Walk([]string{c.client.ServerID(), "controller", "join"})
a.Scrub()
onJoin, err := a.MakeOnJoin()
if err != nil {
log.Fatalf("Another controller running on this circuit server.")
}
go func() {
for {
x, ok := onJoin.Consume()
if !ok {
log.Fatal("Circuit disappeared.")
}
c.workerJoined(x.(string)) // Update state.
}
}()
}
Scheduler: Subscribe to host join/leave events
Place subscription on server
the scheduler is connected to.
Pick a namespace for
scheduler service.
func (c *Controller) workerJoined(name string) {
c.Lock()
defer c.Unlock()
… // Update state structure. Add worker to map with no jobs.
go c.schedule()
}
func (c *Controller) workerLeft(name string) {
c.Lock()
defer c.Unlock()
… // Update state structure. Remove worker from map.
go c.schedule()
}
Scheduler: Handle host join/leave
Scheduler: So far ...
State
ControllerAdd job
Show status
Job exited
Host
joined/left
USER
CIRCUIT
schedule
Start job
func (c *Controller) AddJob(name string, cmd Cmd) {
c.Lock()
defer c.Unlock()
… // Update state structure. Add job to pending queue.
go c.schedule()
}
func (c *Controller) Status() string {
c.Lock()
defer c.Unlock()
… // Print out state to string.
}
Scheduler: User requests
Scheduler: So far ...
State
ControllerAdd job
Show status
Job exited
Host
joined/left
USER
CIRCUIT
schedule
Start job
Scheduler: Controller state
func (c *Controller) schedule() {
c.Lock()
defer c.Unlock()
// Compute job-to-worker matching
var match []*match = …
for _, m := range match {
… // Mark job as running in worker
go c.runJob(m.job, m.worker)
}
}
type match struct {
*job // Job from pending
*worker // Worker below capacity
}
H1
J1
J2
H3
J4
H5
J8
Pend
Live hosts and
the jobs they are
running
Jobs
waiting to
be run
Ja
Jb
J9 J6J3 J7
Scheduler: Run a job
func (c *Controller) runJob(job *job, worker *worker) {
defer func() {
if r := recover(); r != nil { // Worker died before job completed.
… // Put job back on pending queue.
}
}()
jobAnchor := c.client.Walk([]string{worker.name, "job", job.name})
proc, err := jobAnchor.MakeProc(job.cmd)
… // Handle error, another process already running.
proc.Stdin().Close()
go func() { // Drain Stdout. Do the same for Stderr.
defer func() { recover() }() // In case of worker failure.
io.Copy(drain{}, proc.Stdout())
}()
_, err = proc.Wait()
… // Mark complete or put back on pending queue.
}
Place process on desired host. Pick namespace for jobs.
Scheduler: Demo.
State
ControllerAdd job
Show status
Job exited
Host
joined/left
USER
CIRCUIT
schedule
Start job
Universal cluster binaries
Recursive processes: Execution tree
Host CHost B
master
Host A
Job1
sched1 sched2
Job2 Job3 Job4 Job5
user
user
master
sched1 sched2
Job1 Job2 Job4 Job3 Job5
Universal distribution
master
sched
job1
job2
One Go binary
that takes on
different roles
master
sched
job1
job2
circuit
server
Package binary & circuit
in an executable
container image
Host A Host B
Host C Host D
Customer runs container
alongside other
infrastructure with
isolation
mysql
The vision forward
● Easy (only?) way to share any cloud system
○ “Ship with Circuit included” vs “Hadoop required”?
○ Circuit binary + Your binary = Arbitrary complex cloud
○ Like Erlang/OTP but language agnostic
Thank you.
Circuit website:
http://gocircuit.org
Source for Job Scheduler demo:
http://github.com/gocircuit/talks/deview2015
Twitter:
@gocircuit

More Related Content

What's hot

Fighting Against Chaotically Separated Values with Embulk
Fighting Against Chaotically Separated Values with EmbulkFighting Against Chaotically Separated Values with Embulk
Fighting Against Chaotically Separated Values with EmbulkSadayuki Furuhashi
 
Golang Performance : microbenchmarks, profilers, and a war story
Golang Performance : microbenchmarks, profilers, and a war storyGolang Performance : microbenchmarks, profilers, and a war story
Golang Performance : microbenchmarks, profilers, and a war storyAerospike
 
How NOT to write in Node.js
How NOT to write in Node.jsHow NOT to write in Node.js
How NOT to write in Node.jsPiotr Pelczar
 
Fluentd at Bay Area Kubernetes Meetup
Fluentd at Bay Area Kubernetes MeetupFluentd at Bay Area Kubernetes Meetup
Fluentd at Bay Area Kubernetes MeetupSadayuki Furuhashi
 
Elasticsearch for Logs & Metrics - a deep dive
Elasticsearch for Logs & Metrics - a deep diveElasticsearch for Logs & Metrics - a deep dive
Elasticsearch for Logs & Metrics - a deep diveSematext Group, Inc.
 
Elasticsearch (R)Evolution — You Know, for Search… by Philipp Krenn at Big Da...
Elasticsearch (R)Evolution — You Know, for Search… by Philipp Krenn at Big Da...Elasticsearch (R)Evolution — You Know, for Search… by Philipp Krenn at Big Da...
Elasticsearch (R)Evolution — You Know, for Search… by Philipp Krenn at Big Da...Big Data Spain
 
Spark summit2014 techtalk - testing spark
Spark summit2014 techtalk - testing sparkSpark summit2014 techtalk - testing spark
Spark summit2014 techtalk - testing sparkAnu Shetty
 
Kubernetes at Datadog the very hard way
Kubernetes at Datadog the very hard wayKubernetes at Datadog the very hard way
Kubernetes at Datadog the very hard wayLaurent Bernaille
 
How and Why Prometheus' New Storage Engine Pushes the Limits of Time Series D...
How and Why Prometheus' New Storage Engine Pushes the Limits of Time Series D...How and Why Prometheus' New Storage Engine Pushes the Limits of Time Series D...
How and Why Prometheus' New Storage Engine Pushes the Limits of Time Series D...Docker, Inc.
 
London devops logging
London devops loggingLondon devops logging
London devops loggingTomas Doran
 
S3, Cassandra or Outer Space? Dumping Time Series Data using Spark - Demi Ben...
S3, Cassandra or Outer Space? Dumping Time Series Data using Spark - Demi Ben...S3, Cassandra or Outer Space? Dumping Time Series Data using Spark - Demi Ben...
S3, Cassandra or Outer Space? Dumping Time Series Data using Spark - Demi Ben...Codemotion Tel Aviv
 
Tuning Elasticsearch Indexing Pipeline for Logs
Tuning Elasticsearch Indexing Pipeline for LogsTuning Elasticsearch Indexing Pipeline for Logs
Tuning Elasticsearch Indexing Pipeline for LogsSematext Group, Inc.
 
Performance Optimization of Rails Applications
Performance Optimization of Rails ApplicationsPerformance Optimization of Rails Applications
Performance Optimization of Rails ApplicationsSerge Smetana
 
Using Node.js to Build Great Streaming Services - HTML5 Dev Conf
Using Node.js to  Build Great  Streaming Services - HTML5 Dev ConfUsing Node.js to  Build Great  Streaming Services - HTML5 Dev Conf
Using Node.js to Build Great Streaming Services - HTML5 Dev ConfTom Croucher
 
Kafka monitoring and metrics
Kafka monitoring and metricsKafka monitoring and metrics
Kafka monitoring and metricsTouraj Ebrahimi
 
Cassandra NodeJS driver & NodeJS Paris
Cassandra NodeJS driver & NodeJS ParisCassandra NodeJS driver & NodeJS Paris
Cassandra NodeJS driver & NodeJS ParisDuyhai Doan
 
Testing Wi-Fi with OSS Tools
Testing Wi-Fi with OSS ToolsTesting Wi-Fi with OSS Tools
Testing Wi-Fi with OSS ToolsAll Things Open
 
Streaming huge databases using logical decoding
Streaming huge databases using logical decodingStreaming huge databases using logical decoding
Streaming huge databases using logical decodingAlexander Shulgin
 

What's hot (20)

Celery introduction
Celery introductionCelery introduction
Celery introduction
 
Fighting Against Chaotically Separated Values with Embulk
Fighting Against Chaotically Separated Values with EmbulkFighting Against Chaotically Separated Values with Embulk
Fighting Against Chaotically Separated Values with Embulk
 
Tuning Solr for Logs
Tuning Solr for LogsTuning Solr for Logs
Tuning Solr for Logs
 
Golang Performance : microbenchmarks, profilers, and a war story
Golang Performance : microbenchmarks, profilers, and a war storyGolang Performance : microbenchmarks, profilers, and a war story
Golang Performance : microbenchmarks, profilers, and a war story
 
How NOT to write in Node.js
How NOT to write in Node.jsHow NOT to write in Node.js
How NOT to write in Node.js
 
Fluentd at Bay Area Kubernetes Meetup
Fluentd at Bay Area Kubernetes MeetupFluentd at Bay Area Kubernetes Meetup
Fluentd at Bay Area Kubernetes Meetup
 
Elasticsearch for Logs & Metrics - a deep dive
Elasticsearch for Logs & Metrics - a deep diveElasticsearch for Logs & Metrics - a deep dive
Elasticsearch for Logs & Metrics - a deep dive
 
Elasticsearch (R)Evolution — You Know, for Search… by Philipp Krenn at Big Da...
Elasticsearch (R)Evolution — You Know, for Search… by Philipp Krenn at Big Da...Elasticsearch (R)Evolution — You Know, for Search… by Philipp Krenn at Big Da...
Elasticsearch (R)Evolution — You Know, for Search… by Philipp Krenn at Big Da...
 
Spark summit2014 techtalk - testing spark
Spark summit2014 techtalk - testing sparkSpark summit2014 techtalk - testing spark
Spark summit2014 techtalk - testing spark
 
Kubernetes at Datadog the very hard way
Kubernetes at Datadog the very hard wayKubernetes at Datadog the very hard way
Kubernetes at Datadog the very hard way
 
How and Why Prometheus' New Storage Engine Pushes the Limits of Time Series D...
How and Why Prometheus' New Storage Engine Pushes the Limits of Time Series D...How and Why Prometheus' New Storage Engine Pushes the Limits of Time Series D...
How and Why Prometheus' New Storage Engine Pushes the Limits of Time Series D...
 
London devops logging
London devops loggingLondon devops logging
London devops logging
 
S3, Cassandra or Outer Space? Dumping Time Series Data using Spark - Demi Ben...
S3, Cassandra or Outer Space? Dumping Time Series Data using Spark - Demi Ben...S3, Cassandra or Outer Space? Dumping Time Series Data using Spark - Demi Ben...
S3, Cassandra or Outer Space? Dumping Time Series Data using Spark - Demi Ben...
 
Tuning Elasticsearch Indexing Pipeline for Logs
Tuning Elasticsearch Indexing Pipeline for LogsTuning Elasticsearch Indexing Pipeline for Logs
Tuning Elasticsearch Indexing Pipeline for Logs
 
Performance Optimization of Rails Applications
Performance Optimization of Rails ApplicationsPerformance Optimization of Rails Applications
Performance Optimization of Rails Applications
 
Using Node.js to Build Great Streaming Services - HTML5 Dev Conf
Using Node.js to  Build Great  Streaming Services - HTML5 Dev ConfUsing Node.js to  Build Great  Streaming Services - HTML5 Dev Conf
Using Node.js to Build Great Streaming Services - HTML5 Dev Conf
 
Kafka monitoring and metrics
Kafka monitoring and metricsKafka monitoring and metrics
Kafka monitoring and metrics
 
Cassandra NodeJS driver & NodeJS Paris
Cassandra NodeJS driver & NodeJS ParisCassandra NodeJS driver & NodeJS Paris
Cassandra NodeJS driver & NodeJS Paris
 
Testing Wi-Fi with OSS Tools
Testing Wi-Fi with OSS ToolsTesting Wi-Fi with OSS Tools
Testing Wi-Fi with OSS Tools
 
Streaming huge databases using logical decoding
Streaming huge databases using logical decodingStreaming huge databases using logical decoding
Streaming huge databases using logical decoding
 

Viewers also liked

[224] 번역 모델 기반_질의_교정_시스템
[224] 번역 모델 기반_질의_교정_시스템[224] 번역 모델 기반_질의_교정_시스템
[224] 번역 모델 기반_질의_교정_시스템NAVER D2
 
[263] s2graph large-scale-graph-database-with-hbase-2
[263] s2graph large-scale-graph-database-with-hbase-2[263] s2graph large-scale-graph-database-with-hbase-2
[263] s2graph large-scale-graph-database-with-hbase-2NAVER D2
 
[223] h base consistent secondary indexing
[223] h base consistent secondary indexing[223] h base consistent secondary indexing
[223] h base consistent secondary indexingNAVER D2
 
[232] 수퍼컴퓨팅과 데이터 어낼리틱스
[232] 수퍼컴퓨팅과 데이터 어낼리틱스[232] 수퍼컴퓨팅과 데이터 어낼리틱스
[232] 수퍼컴퓨팅과 데이터 어낼리틱스NAVER D2
 
[234] 산업 현장을 위한 증강 현실 기기 daqri helmet 개발기
[234] 산업 현장을 위한 증강 현실 기기 daqri helmet 개발기[234] 산업 현장을 위한 증강 현실 기기 daqri helmet 개발기
[234] 산업 현장을 위한 증강 현실 기기 daqri helmet 개발기NAVER D2
 
[252] 증분 처리 플랫폼 cana 개발기
[252] 증분 처리 플랫폼 cana 개발기[252] 증분 처리 플랫폼 cana 개발기
[252] 증분 처리 플랫폼 cana 개발기NAVER D2
 
[243] turning data into value
[243] turning data into value[243] turning data into value
[243] turning data into valueNAVER D2
 
[244] 분산 환경에서 스트림과 배치 처리 통합 모델
[244] 분산 환경에서 스트림과 배치 처리 통합 모델[244] 분산 환경에서 스트림과 배치 처리 통합 모델
[244] 분산 환경에서 스트림과 배치 처리 통합 모델NAVER D2
 
[253] apache ni fi
[253] apache ni fi[253] apache ni fi
[253] apache ni fiNAVER D2
 
[242] wifi를 이용한 실내 장소 인식하기
[242] wifi를 이용한 실내 장소 인식하기[242] wifi를 이용한 실내 장소 인식하기
[242] wifi를 이용한 실내 장소 인식하기NAVER D2
 
[233] level 2 network programming using packet ngin rtos
[233] level 2 network programming using packet ngin rtos[233] level 2 network programming using packet ngin rtos
[233] level 2 network programming using packet ngin rtosNAVER D2
 
[262] netflix 빅데이터 플랫폼
[262] netflix 빅데이터 플랫폼[262] netflix 빅데이터 플랫폼
[262] netflix 빅데이터 플랫폼NAVER D2
 
[211] 네이버 검색과 데이터마이닝
[211] 네이버 검색과 데이터마이닝[211] 네이버 검색과 데이터마이닝
[211] 네이버 검색과 데이터마이닝NAVER D2
 
[214] data science with apache zeppelin
[214] data science with apache zeppelin[214] data science with apache zeppelin
[214] data science with apache zeppelinNAVER D2
 
[222]대화 시스템 서비스 동향 및 개발 방법
[222]대화 시스템 서비스 동향 및 개발 방법[222]대화 시스템 서비스 동향 및 개발 방법
[222]대화 시스템 서비스 동향 및 개발 방법NAVER D2
 
[213] ethereum
[213] ethereum[213] ethereum
[213] ethereumNAVER D2
 
[241] Storm과 Elasticsearch를 활용한 로깅 플랫폼의 실시간 알람 시스템 구현
[241] Storm과 Elasticsearch를 활용한 로깅 플랫폼의 실시간 알람 시스템 구현[241] Storm과 Elasticsearch를 활용한 로깅 플랫폼의 실시간 알람 시스템 구현
[241] Storm과 Elasticsearch를 활용한 로깅 플랫폼의 실시간 알람 시스템 구현NAVER D2
 
[251] implementing deep learning using cu dnn
[251] implementing deep learning using cu dnn[251] implementing deep learning using cu dnn
[251] implementing deep learning using cu dnnNAVER D2
 
[264] large scale deep-learning_on_spark
[264] large scale deep-learning_on_spark[264] large scale deep-learning_on_spark
[264] large scale deep-learning_on_sparkNAVER D2
 
[221] docker orchestration
[221] docker orchestration[221] docker orchestration
[221] docker orchestrationNAVER D2
 

Viewers also liked (20)

[224] 번역 모델 기반_질의_교정_시스템
[224] 번역 모델 기반_질의_교정_시스템[224] 번역 모델 기반_질의_교정_시스템
[224] 번역 모델 기반_질의_교정_시스템
 
[263] s2graph large-scale-graph-database-with-hbase-2
[263] s2graph large-scale-graph-database-with-hbase-2[263] s2graph large-scale-graph-database-with-hbase-2
[263] s2graph large-scale-graph-database-with-hbase-2
 
[223] h base consistent secondary indexing
[223] h base consistent secondary indexing[223] h base consistent secondary indexing
[223] h base consistent secondary indexing
 
[232] 수퍼컴퓨팅과 데이터 어낼리틱스
[232] 수퍼컴퓨팅과 데이터 어낼리틱스[232] 수퍼컴퓨팅과 데이터 어낼리틱스
[232] 수퍼컴퓨팅과 데이터 어낼리틱스
 
[234] 산업 현장을 위한 증강 현실 기기 daqri helmet 개발기
[234] 산업 현장을 위한 증강 현실 기기 daqri helmet 개발기[234] 산업 현장을 위한 증강 현실 기기 daqri helmet 개발기
[234] 산업 현장을 위한 증강 현실 기기 daqri helmet 개발기
 
[252] 증분 처리 플랫폼 cana 개발기
[252] 증분 처리 플랫폼 cana 개발기[252] 증분 처리 플랫폼 cana 개발기
[252] 증분 처리 플랫폼 cana 개발기
 
[243] turning data into value
[243] turning data into value[243] turning data into value
[243] turning data into value
 
[244] 분산 환경에서 스트림과 배치 처리 통합 모델
[244] 분산 환경에서 스트림과 배치 처리 통합 모델[244] 분산 환경에서 스트림과 배치 처리 통합 모델
[244] 분산 환경에서 스트림과 배치 처리 통합 모델
 
[253] apache ni fi
[253] apache ni fi[253] apache ni fi
[253] apache ni fi
 
[242] wifi를 이용한 실내 장소 인식하기
[242] wifi를 이용한 실내 장소 인식하기[242] wifi를 이용한 실내 장소 인식하기
[242] wifi를 이용한 실내 장소 인식하기
 
[233] level 2 network programming using packet ngin rtos
[233] level 2 network programming using packet ngin rtos[233] level 2 network programming using packet ngin rtos
[233] level 2 network programming using packet ngin rtos
 
[262] netflix 빅데이터 플랫폼
[262] netflix 빅데이터 플랫폼[262] netflix 빅데이터 플랫폼
[262] netflix 빅데이터 플랫폼
 
[211] 네이버 검색과 데이터마이닝
[211] 네이버 검색과 데이터마이닝[211] 네이버 검색과 데이터마이닝
[211] 네이버 검색과 데이터마이닝
 
[214] data science with apache zeppelin
[214] data science with apache zeppelin[214] data science with apache zeppelin
[214] data science with apache zeppelin
 
[222]대화 시스템 서비스 동향 및 개발 방법
[222]대화 시스템 서비스 동향 및 개발 방법[222]대화 시스템 서비스 동향 및 개발 방법
[222]대화 시스템 서비스 동향 및 개발 방법
 
[213] ethereum
[213] ethereum[213] ethereum
[213] ethereum
 
[241] Storm과 Elasticsearch를 활용한 로깅 플랫폼의 실시간 알람 시스템 구현
[241] Storm과 Elasticsearch를 활용한 로깅 플랫폼의 실시간 알람 시스템 구현[241] Storm과 Elasticsearch를 활용한 로깅 플랫폼의 실시간 알람 시스템 구현
[241] Storm과 Elasticsearch를 활용한 로깅 플랫폼의 실시간 알람 시스템 구현
 
[251] implementing deep learning using cu dnn
[251] implementing deep learning using cu dnn[251] implementing deep learning using cu dnn
[251] implementing deep learning using cu dnn
 
[264] large scale deep-learning_on_spark
[264] large scale deep-learning_on_spark[264] large scale deep-learning_on_spark
[264] large scale deep-learning_on_spark
 
[221] docker orchestration
[221] docker orchestration[221] docker orchestration
[221] docker orchestration
 

Similar to [231] the simplicity of cluster apps with circuit

Container Orchestration from Theory to Practice
Container Orchestration from Theory to PracticeContainer Orchestration from Theory to Practice
Container Orchestration from Theory to PracticeDocker, Inc.
 
Java 8 - functional features
Java 8 - functional featuresJava 8 - functional features
Java 8 - functional featuresRafal Rybacki
 
Microservices Communication Patterns with gRPC
Microservices Communication Patterns with gRPCMicroservices Communication Patterns with gRPC
Microservices Communication Patterns with gRPCWSO2
 
Php 5.6 From the Inside Out
Php 5.6 From the Inside OutPhp 5.6 From the Inside Out
Php 5.6 From the Inside OutFerenc Kovács
 
Apache Flink Internals: Stream & Batch Processing in One System – Apache Flin...
Apache Flink Internals: Stream & Batch Processing in One System – Apache Flin...Apache Flink Internals: Stream & Batch Processing in One System – Apache Flin...
Apache Flink Internals: Stream & Batch Processing in One System – Apache Flin...ucelebi
 
Operator overloading2
Operator overloading2Operator overloading2
Operator overloading2zindadili
 
High-speed Database Throughput Using Apache Arrow Flight SQL
High-speed Database Throughput Using Apache Arrow Flight SQLHigh-speed Database Throughput Using Apache Arrow Flight SQL
High-speed Database Throughput Using Apache Arrow Flight SQLScyllaDB
 
如何透過 Go-kit 快速搭建微服務架構應用程式實戰
如何透過 Go-kit 快速搭建微服務架構應用程式實戰如何透過 Go-kit 快速搭建微服務架構應用程式實戰
如何透過 Go-kit 快速搭建微服務架構應用程式實戰KAI CHU CHUNG
 
202107 - Orion introduction - COSCUP
202107 - Orion introduction - COSCUP202107 - Orion introduction - COSCUP
202107 - Orion introduction - COSCUPRonald Hsu
 
GDG Devfest 2019 - Build go kit microservices at kubernetes with ease
GDG Devfest 2019 - Build go kit microservices at kubernetes with easeGDG Devfest 2019 - Build go kit microservices at kubernetes with ease
GDG Devfest 2019 - Build go kit microservices at kubernetes with easeKAI CHU CHUNG
 
Apache httpd reverse proxy and Tomcat
Apache httpd reverse proxy and TomcatApache httpd reverse proxy and Tomcat
Apache httpd reverse proxy and TomcatJean-Frederic Clere
 
用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構Bo-Yi Wu
 
[grcpp] Refactoring for testability c++
[grcpp] Refactoring for testability c++[grcpp] Refactoring for testability c++
[grcpp] Refactoring for testability c++Dimitrios Platis
 
Background Jobs - Com BackgrounDRb
Background Jobs - Com BackgrounDRbBackground Jobs - Com BackgrounDRb
Background Jobs - Com BackgrounDRbJuan Maiz
 
Kubernetes @ Squarespace: Kubernetes in the Datacenter
Kubernetes @ Squarespace: Kubernetes in the DatacenterKubernetes @ Squarespace: Kubernetes in the Datacenter
Kubernetes @ Squarespace: Kubernetes in the DatacenterKevin Lynch
 
Live Streaming & Server Sent Events
Live Streaming & Server Sent EventsLive Streaming & Server Sent Events
Live Streaming & Server Sent Eventstkramar
 

Similar to [231] the simplicity of cluster apps with circuit (20)

gRPC in Go
gRPC in GogRPC in Go
gRPC in Go
 
Container Orchestration from Theory to Practice
Container Orchestration from Theory to PracticeContainer Orchestration from Theory to Practice
Container Orchestration from Theory to Practice
 
Java 8 - functional features
Java 8 - functional featuresJava 8 - functional features
Java 8 - functional features
 
Microservices Communication Patterns with gRPC
Microservices Communication Patterns with gRPCMicroservices Communication Patterns with gRPC
Microservices Communication Patterns with gRPC
 
Php 5.6 From the Inside Out
Php 5.6 From the Inside OutPhp 5.6 From the Inside Out
Php 5.6 From the Inside Out
 
Apache Flink Internals: Stream & Batch Processing in One System – Apache Flin...
Apache Flink Internals: Stream & Batch Processing in One System – Apache Flin...Apache Flink Internals: Stream & Batch Processing in One System – Apache Flin...
Apache Flink Internals: Stream & Batch Processing in One System – Apache Flin...
 
Operator overloading2
Operator overloading2Operator overloading2
Operator overloading2
 
High-speed Database Throughput Using Apache Arrow Flight SQL
High-speed Database Throughput Using Apache Arrow Flight SQLHigh-speed Database Throughput Using Apache Arrow Flight SQL
High-speed Database Throughput Using Apache Arrow Flight SQL
 
如何透過 Go-kit 快速搭建微服務架構應用程式實戰
如何透過 Go-kit 快速搭建微服務架構應用程式實戰如何透過 Go-kit 快速搭建微服務架構應用程式實戰
如何透過 Go-kit 快速搭建微服務架構應用程式實戰
 
TensorFlow XLA RPC
TensorFlow XLA RPCTensorFlow XLA RPC
TensorFlow XLA RPC
 
202107 - Orion introduction - COSCUP
202107 - Orion introduction - COSCUP202107 - Orion introduction - COSCUP
202107 - Orion introduction - COSCUP
 
GDG Devfest 2019 - Build go kit microservices at kubernetes with ease
GDG Devfest 2019 - Build go kit microservices at kubernetes with easeGDG Devfest 2019 - Build go kit microservices at kubernetes with ease
GDG Devfest 2019 - Build go kit microservices at kubernetes with ease
 
GCF
GCFGCF
GCF
 
Apache httpd reverse proxy and Tomcat
Apache httpd reverse proxy and TomcatApache httpd reverse proxy and Tomcat
Apache httpd reverse proxy and Tomcat
 
用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構
 
[grcpp] Refactoring for testability c++
[grcpp] Refactoring for testability c++[grcpp] Refactoring for testability c++
[grcpp] Refactoring for testability c++
 
Background Jobs - Com BackgrounDRb
Background Jobs - Com BackgrounDRbBackground Jobs - Com BackgrounDRb
Background Jobs - Com BackgrounDRb
 
Kubernetes @ Squarespace: Kubernetes in the Datacenter
Kubernetes @ Squarespace: Kubernetes in the DatacenterKubernetes @ Squarespace: Kubernetes in the Datacenter
Kubernetes @ Squarespace: Kubernetes in the Datacenter
 
Rpc mechanism
Rpc mechanismRpc mechanism
Rpc mechanism
 
Live Streaming & Server Sent Events
Live Streaming & Server Sent EventsLive Streaming & Server Sent Events
Live Streaming & Server Sent Events
 

More from NAVER D2

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다NAVER D2
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...NAVER D2
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기NAVER D2
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발NAVER D2
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈NAVER D2
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&ANAVER D2
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기NAVER D2
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep LearningNAVER D2
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applicationsNAVER D2
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingNAVER D2
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지NAVER D2
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기NAVER D2
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화NAVER D2
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)NAVER D2
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기NAVER D2
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual SearchNAVER D2
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화NAVER D2
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지NAVER D2
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터NAVER D2
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?NAVER D2
 

More from NAVER D2 (20)

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual Search
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?
 

Recently uploaded

Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 

Recently uploaded (20)

Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 

[231] the simplicity of cluster apps with circuit

  • 1. The simplicity of implementing a job scheduler with Circuit DEVIEW 2015 Seoul, South Korea Petar Maymounkov
  • 2. Circuit: Light-weight cluster OS ● Real-time API to see and control: ○ Hosts, processes, containers ● System never fails ○ API endpoint on every host ○ Robust master-less, peer-to-peer membership protocol
  • 4. API: Model of cluster Proc 1 Proc 2 Proc 3 Proc 4 Proc 5 Proc 7 Host 1 Host 2 Host 3 Host 4 Proc 8 Proc 6
  • 5. API: Abstraction Proc 1 Proc 2 Proc 3 Proc 4 Proc 5 Proc 7 Host 1 Host 2 Host 3 Host 4 Proc 8 Proc 6 Host 1 Host 2 etc. Cluster DOM operations: ● Traversal ● Manipulation ● Notifications
  • 6. API: Entrypoints ● Command-line tool ● Go client package (more later)
  • 7. API: Command-line example Host A mysql hdfs Host B apache php mem cache fs db cache http X85ec139ad X68a30645c7 $ circuit ls -l /... server /X85ec139ad server /X85ec139ad/fs proc /X85ec139ad/db server /X68a30645c proc /X68a30645c/cache docker /X68a30645c/http
  • 8. API: Command-line example Host A mysql hdfs Host B apache php mem cache fs db cache http X85ec139ad X68a30645c7 $ circuit mkproc /X85ec/test <<EOF {“Path”:”/sbin/lscpu”} EOF $ circuit stdout /X85ec/test Architecture: x86_64 etc. $ circuit wait /X85ec/db $ circuit stderr /X68a3 etc.
  • 10. Host C System architecture: Boot individual hosts Host A Host B circuit server circuit server circuit server $ circuit start
  • 11. Host C System architecture: Discovery Host A Host B circuit server circuit server circuit server $ circuit start --discover=228.8.8.8:8822
  • 12. Host C System architecture: API endpoints Host A Host B circuit server circuit server circuit server API API API $ circuit start circuit://127.0.0.1:7822/17880/Q413a079318a275ca
  • 13. Eng Notebook System architecture: Client connections Host A Host B circuit server circuit server circuit client circuit client $ circuit start circuit://127.0.0.1:7822/17880/Q413a079318a275ca App-to-circuit connection never fails, because of colocation.
  • 15. Go: Entrypoint import . “github.com/gocircuit/circuit/client” func Dial( circuitAddr string, crypto []byte, ) *Client func DialDiscover( udpMulticast string, crypto []byte, ) *Client
  • 16. Go: Error handling ● Physical errors are panics ● Application errors are returned values func Dial( circuitAddr string, crypto []byte, ) *Client
  • 17. Anchor Anchor Anchor Anchor Anchor Anchor Anchor Anchor Anchor /X114cd3eba3423596 /Xfea8b5b798f2fc09 /X45af9c2b9c9ab78b /X114cd3eba3423596/db /X114cd3eba3423596/jobs /X45af9c2b9c9ab78b/nginx /X45af9c2b9c9ab78b/nodej s /X45af9c2b9c9ab78b/dns / Container Process Container DNS Server Server Server Go: Anchor hierarchy An anchor is a node in a unified namespace An anchor is like a “directory”. It can have children anchors An anchor is like a “variable”. It can be empty or hold an object (server, process, container, etc.) Client connection is the root anchor
  • 18. Anchor Anchor Anchor Anchor / Server Server Server Go: Anchor API type Anchor interface{ Walk(path []string) Anchor View() map[string]Anchor MakeProc(Spec) (Proc, error) MakeDocker(Spec) (Container, error) Get() interface{} Scrub() } type Proc interface{ Peek() (State, error) Wait() error … } /Xfea8b5b798f2fc09 /X45af9c2b9c9ab78b /X114cd3eba3423596
  • 19. Go: Anchor residence Anchor Anchor Anchor Anchor Anchor Anchor Anchor Anchor Residing on host: /X114cd3eba3423596 /X114cd3eba3423596 /X45af9c2b9c9ab78b /X114cd3eba3423596/db /X114cd3eba3423596/jobs /X45af9c2b9c9ab78b/nginx /X45af9c2b9c9ab78b/nodejs /X45af9c2b9c9ab78b/dns / Container Process Container DNS Server Server Residing on host: /X45af9c2b9c9ab78b
  • 20. Implementing a job scheduler
  • 21. Scheduler: Design spec ● User specifies: ○ Maximum number of jobs per host ○ Address of circuit server to connect to ● HTTP API server: ○ Add job by name and command spec ○ Show status
  • 22. Scheduler: Service architecture Host CHost B circuit server circuit server circuit server sched Host A HTTP API Job1 Job2 Job3
  • 23. Scheduler: State and logic State ControllerAdd job Show status Job exited Host joined/left USER CIRCUIT schedule Start job H1 J1 J2 J3 H3 J4 J7 H5 J8 Pend J5 J6 Live hosts and the jobs they are running Jobs waiting to be run
  • 24. Scheduler: Main import “github.com/gocircuit/circuit/client” var flagAddr = flag.String(“addr”, “”, “Circuit to connect to”) var flagMaxJobs = flag.Int(“maxjob”, 2, “Max jobs per host”) func main() { flag.Parse() defer func() { if r := recover(); r != nil { log.Fatalf("Could not connect to circuit: %v", r) } }() conn := client.Dial(*flagAddr, nil) controller := NewController(conn, *flagMaxJobs) … // Link controller methods to HTTP requests handlers. log.Fatal(http.ListenAndServe(":8080", nil)) }
  • 25. Scheduler: Controller state type Controller struct { client *client.Client maxJobsPerHost int sync.Mutex // Protects state fields. jobName map[string]struct{} worker map[string]*worker pending []*job } type worker struct { name string job []*job } type job struct { name string cmd client.Cmd } H1 J1 J2 J3 H3 J4 J7 H5 J8 Pend J5 J6 Live hosts and the jobs they are running Jobs waiting to be run
  • 26. func NewController(conn *Client, maxjob int) *Controller { c := &Controller{…} // Initialize fields. // Subscribe to notifications of hosts joining and leaving. c.subscribeToJoin() c.subscribeToLeave() return c } Scheduler: Start controller
  • 27. func (c *Controller) subscribeToJoin() { a := c.client.Walk([]string{c.client.ServerID(), "controller", "join"}) a.Scrub() onJoin, err := a.MakeOnJoin() if err != nil { log.Fatalf("Another controller running on this circuit server.") } go func() { for { x, ok := onJoin.Consume() if !ok { log.Fatal("Circuit disappeared.") } c.workerJoined(x.(string)) // Update state. } }() } Scheduler: Subscribe to host join/leave events Place subscription on server the scheduler is connected to. Pick a namespace for scheduler service.
  • 28. func (c *Controller) workerJoined(name string) { c.Lock() defer c.Unlock() … // Update state structure. Add worker to map with no jobs. go c.schedule() } func (c *Controller) workerLeft(name string) { c.Lock() defer c.Unlock() … // Update state structure. Remove worker from map. go c.schedule() } Scheduler: Handle host join/leave
  • 29. Scheduler: So far ... State ControllerAdd job Show status Job exited Host joined/left USER CIRCUIT schedule Start job
  • 30. func (c *Controller) AddJob(name string, cmd Cmd) { c.Lock() defer c.Unlock() … // Update state structure. Add job to pending queue. go c.schedule() } func (c *Controller) Status() string { c.Lock() defer c.Unlock() … // Print out state to string. } Scheduler: User requests
  • 31. Scheduler: So far ... State ControllerAdd job Show status Job exited Host joined/left USER CIRCUIT schedule Start job
  • 32. Scheduler: Controller state func (c *Controller) schedule() { c.Lock() defer c.Unlock() // Compute job-to-worker matching var match []*match = … for _, m := range match { … // Mark job as running in worker go c.runJob(m.job, m.worker) } } type match struct { *job // Job from pending *worker // Worker below capacity } H1 J1 J2 H3 J4 H5 J8 Pend Live hosts and the jobs they are running Jobs waiting to be run Ja Jb J9 J6J3 J7
  • 33. Scheduler: Run a job func (c *Controller) runJob(job *job, worker *worker) { defer func() { if r := recover(); r != nil { // Worker died before job completed. … // Put job back on pending queue. } }() jobAnchor := c.client.Walk([]string{worker.name, "job", job.name}) proc, err := jobAnchor.MakeProc(job.cmd) … // Handle error, another process already running. proc.Stdin().Close() go func() { // Drain Stdout. Do the same for Stderr. defer func() { recover() }() // In case of worker failure. io.Copy(drain{}, proc.Stdout()) }() _, err = proc.Wait() … // Mark complete or put back on pending queue. } Place process on desired host. Pick namespace for jobs.
  • 34. Scheduler: Demo. State ControllerAdd job Show status Job exited Host joined/left USER CIRCUIT schedule Start job
  • 36. Recursive processes: Execution tree Host CHost B master Host A Job1 sched1 sched2 Job2 Job3 Job4 Job5 user user master sched1 sched2 Job1 Job2 Job4 Job3 Job5
  • 37. Universal distribution master sched job1 job2 One Go binary that takes on different roles master sched job1 job2 circuit server Package binary & circuit in an executable container image Host A Host B Host C Host D Customer runs container alongside other infrastructure with isolation mysql
  • 38. The vision forward ● Easy (only?) way to share any cloud system ○ “Ship with Circuit included” vs “Hadoop required”? ○ Circuit binary + Your binary = Arbitrary complex cloud ○ Like Erlang/OTP but language agnostic
  • 39. Thank you. Circuit website: http://gocircuit.org Source for Job Scheduler demo: http://github.com/gocircuit/talks/deview2015 Twitter: @gocircuit