SlideShare a Scribd company logo
1 of 28
Download to read offline
+           apcera
                                          next generation cloud platform




                             A Case Study:
                      The Selection of Go at Apcera

Go Conference Japan
April 13, 2013
Quick About

            Derek Collison



Designed and Built CloudFoundry   Founded March 2012
Former Google, VMware, TIBCO      San Francisco, CA
Distributed Systems               Building Next Generation Cloud Platform
Founder of Apcera, Inc.           Investors
                                     Kleiner Perkins
@derekcollison
                                     Andreesen Horowitz
derek@apcera.com                     True Ventures
                                     Data Collective
                                  @apcera
                                  www.apcera.com
How did we get here?
CloudFoundry
Built using Ruby
Ruby the “Good”
  Great Language
  Easy Development
  Synchronous programming model
Ruby the “Not so Good”
  Dependency Management
  Deployment Issues
  No builtin Eventing Model
  Lacks good support for Concurrency
EventMachine
Eventing in Ruby
Asynchronous IO, Timers, etc.
EM + Fibers, CF process scalability model
  Fragile
  Complex
C++ code base, limited community support
Complex code base
Critical to process design patterns for CloudFoundry
Contributed to Dependency management issues
I still <3 Ruby
Choices for Apcera?
Apcera Choice Criteria
Good platform support (Linux, Windows, Mac, SmartOs)
Good dependency model, preferred builtin
Good support for Concurrency primitives
Good support for Large Scale Distributed Systems
Customer neutral
  Not Java
  Not .Net
Go vs Node.js
Node.js
Good
 V8 runtime from Google
 Evented system by design
 Javascript based
   All programmers will know Javascript.
Not so Good
 Runtime Dependency
 Based on Javascript
   Function scoping
   Callback Spaghetti
 Dependency via external NPM (NPM is good)
Go
Good
 Designed by amazing team: Rob Pike, Ken Thompson, Robert Griesemer
 Synchronous programming model
 Concurrency is a first class citizen
 Static executables - No dependencies (Except ARCH)
 Google Goodies - Builtin Testing, Docs, Benchmarks, Flags, etc.
 Good platform support
Not so Good
 New Language
 New Standard Libraries
 Immature GC and Scheduler
 Google starting to kill off projects, would Go be on that list?
Team selected Go in 15 minutes
Never once questioned decision
Go Deeper
Go Routines and Channels
  Well thought out concurrency primitives, based on variant of CSP.
  Can take advantage of Multi-Core (GOMAXPROCS)
Statically Typed, compiled language
  Inference
  Interfaces - Again well thought out design
  Compiles fast
Easy to learn - Don’t need a large talent pool
Decent Standard Library - IO, FS, Network, HTTP, Json
GC, but Go has real STACKS!
Why I Would Choose Go?
Stacks
  This is a big deal
  Relieves pressure from the GC
  Gives back power to the developer
  I spent 3+ months designing this in C in the 90s
  Go also allows interior pointers in structs to also relieve pressure
Statically linked executables
  Deployment is “scp binary <target>”
Easy to learn
  Scale teams with Java, C++, Ruby or Python experience
  Small Standard library, also easy to pick up in a week or so
Go Stacks?
Why should you really care?
Relieves pressure on GC
  Performance
  Stability - GC pauses
Move from GC to stack easily, no GC hit
Yet, can auto-promote
  What do you mean?
My First Go Program
Not all Roses, there are issues
Not all Roses
Import model lacks support for versioning
  import “github.com/apcera/nats” - Which version do you get?
  We test for version constraints in pkg that imports
Crypto is not production ready
  Proclaimed by a Go developer
  We built our own high performance mappings to OpenSSL
Static executables break when linking
  Being Fixed in 1.1 I believe
String <-> Byte causes copies
Garbage Collector and Scheduler still young.
Not all Roses - Cont’d
Logging library
  We wrote our own - Designed by former Twitter Ops team member
SQL
  Lack of error promotion and error handling
  Designed our own Enterprise grade ORM + drivers
HTTP Server
  I think everyone has written their own by now
Maps are slow
  Being fixed in 1.1 I believe
  We wrote our own high performance ones for Go NATS server
There are more.. BUT..
Go was right choice for Apcera
More will make same decision!
Go Summary
Great Systems language from Google
Concurrency is first class citizen
Testing, Docs, Benchmarks are builtin
Standard library is fairly complete and good enough
Easy to Learn - Go to www.golang.org
Static Executables
Stacks - You will thank me later.
And Most Important
  Great velocity as Go moves from 1.0 -> 1.1 and beyond
Thank You!
ありがとう
Questions?
apcera
next generation cloud platform


www.apcera.com
info@apcera.com

More Related Content

What's hot

Lessons from the Trenches - Building Enterprise Applications with RavenDB
Lessons from the Trenches - Building Enterprise Applications with RavenDBLessons from the Trenches - Building Enterprise Applications with RavenDB
Lessons from the Trenches - Building Enterprise Applications with RavenDBOren Eini
 
State of the CLI- Kat Marchan
State of the CLI- Kat MarchanState of the CLI- Kat Marchan
State of the CLI- Kat MarchanNodejsFoundation
 
eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...
eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...
eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...Gaetano Giunta
 
Dbops, DevOps & Ops, by Eduardo Piairo
Dbops, DevOps & Ops, by Eduardo PiairoDbops, DevOps & Ops, by Eduardo Piairo
Dbops, DevOps & Ops, by Eduardo PiairoAgile Connect®
 
CFWheels - Pragmatic, Beautiful Code
CFWheels - Pragmatic, Beautiful CodeCFWheels - Pragmatic, Beautiful Code
CFWheels - Pragmatic, Beautiful Codeindiver
 
Powerful Automation Made Simple
Powerful Automation Made SimplePowerful Automation Made Simple
Powerful Automation Made SimpleGaetano Giunta
 
AWS for the Java Developer
AWS for the Java DeveloperAWS for the Java Developer
AWS for the Java DeveloperRory Preddy
 
Managing changes to eZPublish Database
Managing changes to eZPublish DatabaseManaging changes to eZPublish Database
Managing changes to eZPublish DatabaseGaetano Giunta
 
DownTheRabbitHole.js – How to Stay Sane in an Insane Ecosystem
DownTheRabbitHole.js – How to Stay Sane in an Insane EcosystemDownTheRabbitHole.js – How to Stay Sane in an Insane Ecosystem
DownTheRabbitHole.js – How to Stay Sane in an Insane EcosystemFITC
 
Reactive All the Way Down the Stack
Reactive All the Way Down the StackReactive All the Way Down the Stack
Reactive All the Way Down the StackSteve Pember
 
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript FrameworksBuilding Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript FrameworksFITC
 
NGINX for Application Delivery & Acceleration
NGINX for Application Delivery & AccelerationNGINX for Application Delivery & Acceleration
NGINX for Application Delivery & AccelerationNGINX, Inc.
 
Greach 2018: Surviving Microservices
Greach 2018: Surviving MicroservicesGreach 2018: Surviving Microservices
Greach 2018: Surviving MicroservicesSteve Pember
 
Altitude SF 2017: Reddit - How we built and scaled r/place
Altitude SF 2017: Reddit - How we built and scaled r/placeAltitude SF 2017: Reddit - How we built and scaled r/place
Altitude SF 2017: Reddit - How we built and scaled r/placeFastly
 
How and Why GraalVM is quickly becoming relevant for developers (ACEs@home - ...
How and Why GraalVM is quickly becoming relevant for developers (ACEs@home - ...How and Why GraalVM is quickly becoming relevant for developers (ACEs@home - ...
How and Why GraalVM is quickly becoming relevant for developers (ACEs@home - ...Lucas Jellema
 

What's hot (20)

RavenDB 4.0
RavenDB 4.0RavenDB 4.0
RavenDB 4.0
 
Lessons from the Trenches - Building Enterprise Applications with RavenDB
Lessons from the Trenches - Building Enterprise Applications with RavenDBLessons from the Trenches - Building Enterprise Applications with RavenDB
Lessons from the Trenches - Building Enterprise Applications with RavenDB
 
State of the CLI- Kat Marchan
State of the CLI- Kat MarchanState of the CLI- Kat Marchan
State of the CLI- Kat Marchan
 
Migrating big data
Migrating big dataMigrating big data
Migrating big data
 
eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...
eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...
eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...
 
Dbops, DevOps & Ops, by Eduardo Piairo
Dbops, DevOps & Ops, by Eduardo PiairoDbops, DevOps & Ops, by Eduardo Piairo
Dbops, DevOps & Ops, by Eduardo Piairo
 
CFWheels - Pragmatic, Beautiful Code
CFWheels - Pragmatic, Beautiful CodeCFWheels - Pragmatic, Beautiful Code
CFWheels - Pragmatic, Beautiful Code
 
Powerful Automation Made Simple
Powerful Automation Made SimplePowerful Automation Made Simple
Powerful Automation Made Simple
 
AWS for the Java Developer
AWS for the Java DeveloperAWS for the Java Developer
AWS for the Java Developer
 
Managing changes to eZPublish Database
Managing changes to eZPublish DatabaseManaging changes to eZPublish Database
Managing changes to eZPublish Database
 
DownTheRabbitHole.js – How to Stay Sane in an Insane Ecosystem
DownTheRabbitHole.js – How to Stay Sane in an Insane EcosystemDownTheRabbitHole.js – How to Stay Sane in an Insane Ecosystem
DownTheRabbitHole.js – How to Stay Sane in an Insane Ecosystem
 
Reactive All the Way Down the Stack
Reactive All the Way Down the StackReactive All the Way Down the Stack
Reactive All the Way Down the Stack
 
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript FrameworksBuilding Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
 
NGINX for Application Delivery & Acceleration
NGINX for Application Delivery & AccelerationNGINX for Application Delivery & Acceleration
NGINX for Application Delivery & Acceleration
 
Greach 2018: Surviving Microservices
Greach 2018: Surviving MicroservicesGreach 2018: Surviving Microservices
Greach 2018: Surviving Microservices
 
Be DevOps Ready
Be DevOps ReadyBe DevOps Ready
Be DevOps Ready
 
Dev Ops without the Ops
Dev Ops without the OpsDev Ops without the Ops
Dev Ops without the Ops
 
Altitude SF 2017: Reddit - How we built and scaled r/place
Altitude SF 2017: Reddit - How we built and scaled r/placeAltitude SF 2017: Reddit - How we built and scaled r/place
Altitude SF 2017: Reddit - How we built and scaled r/place
 
Vs java (1)
Vs java (1)Vs java (1)
Vs java (1)
 
How and Why GraalVM is quickly becoming relevant for developers (ACEs@home - ...
How and Why GraalVM is quickly becoming relevant for developers (ACEs@home - ...How and Why GraalVM is quickly becoming relevant for developers (ACEs@home - ...
How and Why GraalVM is quickly becoming relevant for developers (ACEs@home - ...
 

Viewers also liked

MATERIAL SELECTION CASE STUDY FELT REUSABLE SURFACE INSULATION (FRSI) OF S...
MATERIAL SELECTION CASE STUDY FELT REUSABLE SURFACE INSULATION (FRSI) OF S...MATERIAL SELECTION CASE STUDY FELT REUSABLE SURFACE INSULATION (FRSI) OF S...
MATERIAL SELECTION CASE STUDY FELT REUSABLE SURFACE INSULATION (FRSI) OF S...baggiojoset
 
Docker & Apcera Better Together
Docker & Apcera Better TogetherDocker & Apcera Better Together
Docker & Apcera Better TogetherSimone Morellato
 
エンタープライズJava環境におけるマイクロサービス・アーキテクチャーの必要性 #natsumiB4
エンタープライズJava環境におけるマイクロサービス・アーキテクチャーの必要性 #natsumiB4エンタープライズJava環境におけるマイクロサービス・アーキテクチャーの必要性 #natsumiB4
エンタープライズJava環境におけるマイクロサービス・アーキテクチャーの必要性 #natsumiB4Takakiyo Tanaka
 
Case control studies..skp
Case control studies..skpCase control studies..skp
Case control studies..skpsudhiramkcg
 
Selection & Recruitment in HRM
Selection & Recruitment in HRMSelection & Recruitment in HRM
Selection & Recruitment in HRMIshan Parekh
 
Recruitment with case study on bhel
Recruitment with case study on bhelRecruitment with case study on bhel
Recruitment with case study on bhelChhatrapal Surve
 
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときNode.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときRyunosuke SATO
 
Hiring and selection process: HBR case Study
Hiring and selection process: HBR case StudyHiring and selection process: HBR case Study
Hiring and selection process: HBR case StudyImran Ghaznavi
 
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。Takakiyo Tanaka
 
Java?ruby? そろそろgoで行ってみませんか?
Java?ruby? そろそろgoで行ってみませんか? Java?ruby? そろそろgoで行ってみませんか?
Java?ruby? そろそろgoで行ってみませんか? Kenichi Hoshi
 
Hrm case study
Hrm case studyHrm case study
Hrm case studyAmit Kumar
 
Ibm and ias 1
Ibm and ias 1Ibm and ias 1
Ibm and ias 1ravi kant
 
20130316 プログラミング言語Go
20130316 プログラミング言語Go20130316 プログラミング言語Go
20130316 プログラミング言語GoYoshifumi Yamaguchi
 

Viewers also liked (14)

Gocon2013
Gocon2013Gocon2013
Gocon2013
 
MATERIAL SELECTION CASE STUDY FELT REUSABLE SURFACE INSULATION (FRSI) OF S...
MATERIAL SELECTION CASE STUDY FELT REUSABLE SURFACE INSULATION (FRSI) OF S...MATERIAL SELECTION CASE STUDY FELT REUSABLE SURFACE INSULATION (FRSI) OF S...
MATERIAL SELECTION CASE STUDY FELT REUSABLE SURFACE INSULATION (FRSI) OF S...
 
Docker & Apcera Better Together
Docker & Apcera Better TogetherDocker & Apcera Better Together
Docker & Apcera Better Together
 
エンタープライズJava環境におけるマイクロサービス・アーキテクチャーの必要性 #natsumiB4
エンタープライズJava環境におけるマイクロサービス・アーキテクチャーの必要性 #natsumiB4エンタープライズJava環境におけるマイクロサービス・アーキテクチャーの必要性 #natsumiB4
エンタープライズJava環境におけるマイクロサービス・アーキテクチャーの必要性 #natsumiB4
 
Case control studies..skp
Case control studies..skpCase control studies..skp
Case control studies..skp
 
Selection & Recruitment in HRM
Selection & Recruitment in HRMSelection & Recruitment in HRM
Selection & Recruitment in HRM
 
Recruitment with case study on bhel
Recruitment with case study on bhelRecruitment with case study on bhel
Recruitment with case study on bhel
 
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときNode.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないとき
 
Hiring and selection process: HBR case Study
Hiring and selection process: HBR case StudyHiring and selection process: HBR case Study
Hiring and selection process: HBR case Study
 
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
 
Java?ruby? そろそろgoで行ってみませんか?
Java?ruby? そろそろgoで行ってみませんか? Java?ruby? そろそろgoで行ってみませんか?
Java?ruby? そろそろgoで行ってみませんか?
 
Hrm case study
Hrm case studyHrm case study
Hrm case study
 
Ibm and ias 1
Ibm and ias 1Ibm and ias 1
Ibm and ias 1
 
20130316 プログラミング言語Go
20130316 プログラミング言語Go20130316 プログラミング言語Go
20130316 プログラミング言語Go
 

Similar to Apcera Case Study: The selection of the Go language

Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...
Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...
Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...GreeceJS
 
The "Holy Grail" of Dev/Ops
The "Holy Grail" of Dev/OpsThe "Holy Grail" of Dev/Ops
The "Holy Grail" of Dev/OpsErik Osterman
 
Enterprise Architectures with Ruby (and Rails)
Enterprise Architectures with Ruby (and Rails)Enterprise Architectures with Ruby (and Rails)
Enterprise Architectures with Ruby (and Rails)Konstantin Gredeskoul
 
What Web Framework To Use?
What Web Framework To Use?What Web Framework To Use?
What Web Framework To Use?Kasra Khosravi
 
GoLang - Why It Matters
GoLang -  Why It MattersGoLang -  Why It Matters
GoLang - Why It Mattersrahul
 
UnConference for Georgia Southern Computer Science March 31, 2015
UnConference for Georgia Southern Computer Science March 31, 2015UnConference for Georgia Southern Computer Science March 31, 2015
UnConference for Georgia Southern Computer Science March 31, 2015Christopher Curtin
 
Rich Archbold, Senior Director of Engineering, Intercom - Run less software
Rich Archbold,  Senior Director of Engineering, Intercom - Run less softwareRich Archbold,  Senior Director of Engineering, Intercom - Run less software
Rich Archbold, Senior Director of Engineering, Intercom - Run less softwareTechsylvania
 
Latest trends in information technology
Latest trends in information technologyLatest trends in information technology
Latest trends in information technologyEldos Kuriakose
 
Ruby On Rails Presentation
Ruby On Rails PresentationRuby On Rails Presentation
Ruby On Rails PresentationPaul Pajo
 
[Srijan Wednesday Webinars] How to Build a Cloud Native Platform for Enterpri...
[Srijan Wednesday Webinars] How to Build a Cloud Native Platform for Enterpri...[Srijan Wednesday Webinars] How to Build a Cloud Native Platform for Enterpri...
[Srijan Wednesday Webinars] How to Build a Cloud Native Platform for Enterpri...Srijan Technologies
 
Web Development Environments: Choose the best or go with the rest
Web Development Environments:  Choose the best or go with the restWeb Development Environments:  Choose the best or go with the rest
Web Development Environments: Choose the best or go with the restgeorge.james
 
How Gozengo Implemented a Continuous Deployment Culture from Day One
How Gozengo Implemented a Continuous Deployment Culture from Day OneHow Gozengo Implemented a Continuous Deployment Culture from Day One
How Gozengo Implemented a Continuous Deployment Culture from Day OneSauce Labs
 
Gozengo sauce presentation
Gozengo sauce presentationGozengo sauce presentation
Gozengo sauce presentationDaniel Straus
 
Gluecon 2013 - NetflixOSS Cloud Native Tutorial Introduction
Gluecon 2013 - NetflixOSS Cloud Native Tutorial IntroductionGluecon 2013 - NetflixOSS Cloud Native Tutorial Introduction
Gluecon 2013 - NetflixOSS Cloud Native Tutorial IntroductionAdrian Cockcroft
 
Continuous Delivery: The New Normal. London Event.
Continuous Delivery: The New Normal. London Event. Continuous Delivery: The New Normal. London Event.
Continuous Delivery: The New Normal. London Event. Perforce
 
corporateJavascript
corporateJavascriptcorporateJavascript
corporateJavascriptclimboid
 
Go After 4 Years in Production - QCon 2015
Go After 4 Years in Production - QCon 2015Go After 4 Years in Production - QCon 2015
Go After 4 Years in Production - QCon 2015Travis Reeder
 
Extensible dev secops pipelines with Jenkins, Docker, Terraform, and a kitche...
Extensible dev secops pipelines with Jenkins, Docker, Terraform, and a kitche...Extensible dev secops pipelines with Jenkins, Docker, Terraform, and a kitche...
Extensible dev secops pipelines with Jenkins, Docker, Terraform, and a kitche...Richard Bullington-McGuire
 

Similar to Apcera Case Study: The selection of the Go language (20)

Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...
Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...
Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...
 
The "Holy Grail" of Dev/Ops
The "Holy Grail" of Dev/OpsThe "Holy Grail" of Dev/Ops
The "Holy Grail" of Dev/Ops
 
Enterprise Architectures with Ruby (and Rails)
Enterprise Architectures with Ruby (and Rails)Enterprise Architectures with Ruby (and Rails)
Enterprise Architectures with Ruby (and Rails)
 
Dean4j@Njug5
Dean4j@Njug5Dean4j@Njug5
Dean4j@Njug5
 
What Web Framework To Use?
What Web Framework To Use?What Web Framework To Use?
What Web Framework To Use?
 
GoLang - Why It Matters
GoLang -  Why It MattersGoLang -  Why It Matters
GoLang - Why It Matters
 
UnConference for Georgia Southern Computer Science March 31, 2015
UnConference for Georgia Southern Computer Science March 31, 2015UnConference for Georgia Southern Computer Science March 31, 2015
UnConference for Georgia Southern Computer Science March 31, 2015
 
Rich Archbold, Senior Director of Engineering, Intercom - Run less software
Rich Archbold,  Senior Director of Engineering, Intercom - Run less softwareRich Archbold,  Senior Director of Engineering, Intercom - Run less software
Rich Archbold, Senior Director of Engineering, Intercom - Run less software
 
OSGI,
OSGI,OSGI,
OSGI,
 
Latest trends in information technology
Latest trends in information technologyLatest trends in information technology
Latest trends in information technology
 
Ruby On Rails Presentation
Ruby On Rails PresentationRuby On Rails Presentation
Ruby On Rails Presentation
 
[Srijan Wednesday Webinars] How to Build a Cloud Native Platform for Enterpri...
[Srijan Wednesday Webinars] How to Build a Cloud Native Platform for Enterpri...[Srijan Wednesday Webinars] How to Build a Cloud Native Platform for Enterpri...
[Srijan Wednesday Webinars] How to Build a Cloud Native Platform for Enterpri...
 
Web Development Environments: Choose the best or go with the rest
Web Development Environments:  Choose the best or go with the restWeb Development Environments:  Choose the best or go with the rest
Web Development Environments: Choose the best or go with the rest
 
How Gozengo Implemented a Continuous Deployment Culture from Day One
How Gozengo Implemented a Continuous Deployment Culture from Day OneHow Gozengo Implemented a Continuous Deployment Culture from Day One
How Gozengo Implemented a Continuous Deployment Culture from Day One
 
Gozengo sauce presentation
Gozengo sauce presentationGozengo sauce presentation
Gozengo sauce presentation
 
Gluecon 2013 - NetflixOSS Cloud Native Tutorial Introduction
Gluecon 2013 - NetflixOSS Cloud Native Tutorial IntroductionGluecon 2013 - NetflixOSS Cloud Native Tutorial Introduction
Gluecon 2013 - NetflixOSS Cloud Native Tutorial Introduction
 
Continuous Delivery: The New Normal. London Event.
Continuous Delivery: The New Normal. London Event. Continuous Delivery: The New Normal. London Event.
Continuous Delivery: The New Normal. London Event.
 
corporateJavascript
corporateJavascriptcorporateJavascript
corporateJavascript
 
Go After 4 Years in Production - QCon 2015
Go After 4 Years in Production - QCon 2015Go After 4 Years in Production - QCon 2015
Go After 4 Years in Production - QCon 2015
 
Extensible dev secops pipelines with Jenkins, Docker, Terraform, and a kitche...
Extensible dev secops pipelines with Jenkins, Docker, Terraform, and a kitche...Extensible dev secops pipelines with Jenkins, Docker, Terraform, and a kitche...
Extensible dev secops pipelines with Jenkins, Docker, Terraform, and a kitche...
 

More from Derek Collison

Distributed Design and Architecture of Cloud Foundry
Distributed Design and Architecture of Cloud FoundryDistributed Design and Architecture of Cloud Foundry
Distributed Design and Architecture of Cloud FoundryDerek Collison
 
Cloud Foundry: Inside the Machine
Cloud Foundry: Inside the MachineCloud Foundry: Inside the Machine
Cloud Foundry: Inside the MachineDerek Collison
 
Scalable and Available, Patterns for Success
Scalable and Available, Patterns for SuccessScalable and Available, Patterns for Success
Scalable and Available, Patterns for SuccessDerek Collison
 
Ruby conf2010 OpenPaaS
Ruby conf2010 OpenPaaSRuby conf2010 OpenPaaS
Ruby conf2010 OpenPaaSDerek Collison
 

More from Derek Collison (6)

Distributed Design and Architecture of Cloud Foundry
Distributed Design and Architecture of Cloud FoundryDistributed Design and Architecture of Cloud Foundry
Distributed Design and Architecture of Cloud Foundry
 
Cloud Foundry: Inside the Machine
Cloud Foundry: Inside the MachineCloud Foundry: Inside the Machine
Cloud Foundry: Inside the Machine
 
RubyWorld 2011
RubyWorld 2011RubyWorld 2011
RubyWorld 2011
 
OSCON 2011
OSCON 2011OSCON 2011
OSCON 2011
 
Scalable and Available, Patterns for Success
Scalable and Available, Patterns for SuccessScalable and Available, Patterns for Success
Scalable and Available, Patterns for Success
 
Ruby conf2010 OpenPaaS
Ruby conf2010 OpenPaaSRuby conf2010 OpenPaaS
Ruby conf2010 OpenPaaS
 

Recently uploaded

Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 

Recently uploaded (20)

Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 

Apcera Case Study: The selection of the Go language

  • 1. + apcera next generation cloud platform A Case Study: The Selection of Go at Apcera Go Conference Japan April 13, 2013
  • 2. Quick About Derek Collison Designed and Built CloudFoundry Founded March 2012 Former Google, VMware, TIBCO San Francisco, CA Distributed Systems Building Next Generation Cloud Platform Founder of Apcera, Inc. Investors Kleiner Perkins @derekcollison Andreesen Horowitz derek@apcera.com True Ventures Data Collective @apcera www.apcera.com
  • 3. How did we get here?
  • 4. CloudFoundry Built using Ruby Ruby the “Good” Great Language Easy Development Synchronous programming model Ruby the “Not so Good” Dependency Management Deployment Issues No builtin Eventing Model Lacks good support for Concurrency
  • 5. EventMachine Eventing in Ruby Asynchronous IO, Timers, etc. EM + Fibers, CF process scalability model Fragile Complex C++ code base, limited community support Complex code base Critical to process design patterns for CloudFoundry Contributed to Dependency management issues
  • 6. I still <3 Ruby
  • 8. Apcera Choice Criteria Good platform support (Linux, Windows, Mac, SmartOs) Good dependency model, preferred builtin Good support for Concurrency primitives Good support for Large Scale Distributed Systems Customer neutral Not Java Not .Net
  • 10. Node.js Good V8 runtime from Google Evented system by design Javascript based All programmers will know Javascript. Not so Good Runtime Dependency Based on Javascript Function scoping Callback Spaghetti Dependency via external NPM (NPM is good)
  • 11. Go Good Designed by amazing team: Rob Pike, Ken Thompson, Robert Griesemer Synchronous programming model Concurrency is a first class citizen Static executables - No dependencies (Except ARCH) Google Goodies - Builtin Testing, Docs, Benchmarks, Flags, etc. Good platform support Not so Good New Language New Standard Libraries Immature GC and Scheduler Google starting to kill off projects, would Go be on that list?
  • 12. Team selected Go in 15 minutes
  • 14. Go Deeper Go Routines and Channels Well thought out concurrency primitives, based on variant of CSP. Can take advantage of Multi-Core (GOMAXPROCS) Statically Typed, compiled language Inference Interfaces - Again well thought out design Compiles fast Easy to learn - Don’t need a large talent pool Decent Standard Library - IO, FS, Network, HTTP, Json GC, but Go has real STACKS!
  • 15. Why I Would Choose Go? Stacks This is a big deal Relieves pressure from the GC Gives back power to the developer I spent 3+ months designing this in C in the 90s Go also allows interior pointers in structs to also relieve pressure Statically linked executables Deployment is “scp binary <target>” Easy to learn Scale teams with Java, C++, Ruby or Python experience Small Standard library, also easy to pick up in a week or so
  • 16. Go Stacks? Why should you really care? Relieves pressure on GC Performance Stability - GC pauses Move from GC to stack easily, no GC hit Yet, can auto-promote What do you mean?
  • 17. My First Go Program
  • 18. Not all Roses, there are issues
  • 19. Not all Roses Import model lacks support for versioning import “github.com/apcera/nats” - Which version do you get? We test for version constraints in pkg that imports Crypto is not production ready Proclaimed by a Go developer We built our own high performance mappings to OpenSSL Static executables break when linking Being Fixed in 1.1 I believe String <-> Byte causes copies Garbage Collector and Scheduler still young.
  • 20. Not all Roses - Cont’d Logging library We wrote our own - Designed by former Twitter Ops team member SQL Lack of error promotion and error handling Designed our own Enterprise grade ORM + drivers HTTP Server I think everyone has written their own by now Maps are slow Being fixed in 1.1 I believe We wrote our own high performance ones for Go NATS server
  • 22. Go was right choice for Apcera
  • 23. More will make same decision!
  • 24.
  • 25. Go Summary Great Systems language from Google Concurrency is first class citizen Testing, Docs, Benchmarks are builtin Standard library is fairly complete and good enough Easy to Learn - Go to www.golang.org Static Executables Stacks - You will thank me later. And Most Important Great velocity as Go moves from 1.0 -> 1.1 and beyond
  • 28. apcera next generation cloud platform www.apcera.com info@apcera.com