Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/1bJsakO.
Ben Christensen describes how the Netflix API evolved from a typical one-size-fits-all RESTful API designed to support public developers into a web service platform optimized to handle the diversity and variability of each device and user experience. The talk will also address the challenges involving operations, deployment, performance, fault-tolerance, and rate of innovation at massive scale. Filmed at qconsf.com.
Ben Christensen is a software engineer on the Netflix Edge Services Platform team responsible for fault tolerance, performance, architecture and scale while enabling millions of customers to access the Netflix experience across more than 1,000 different device types. Prior to Netflix, Ben was at Apple making iOS apps and media available on the iTunes store.
The session provides a presentation and status update on the IDN Variant TLD Program. Update includes progress made on the implementation of the IDN Root LGR Procedure, status of the Maximal Starting Repertoire, community and Generation Panels' updates.
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/2QcNaOA.
Jessica Yung talks about the foundational concepts about neural networks. She highlights key things to pay attention to: learning rates, how to initialize a network, how the networks are constructed and trained, and understanding why these parameters are so important. She ends the talk with practical takeaways used by state-of-the-art models to help us start building neural networks. Filmed at qconlondon.com.
Jessica Yung is a research masters student in ML at University College London. She was previously at the University of Cambridge and was an NVIDIA Self-Driving Car Engineer Scholar. She applied machine learning to finance at Jump Trading and consults on machine learning. She is keen on sharing knowledge and writes about ML and how to learn effectively on her blog at JessicaYung.com.
The session provides a presentation and status update on the IDN Variant TLD Program. Update includes progress made on the implementation of the IDN Root LGR Procedure, status of the Maximal Starting Repertoire, community and Generation Panels' updates.
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/2QcNaOA.
Jessica Yung talks about the foundational concepts about neural networks. She highlights key things to pay attention to: learning rates, how to initialize a network, how the networks are constructed and trained, and understanding why these parameters are so important. She ends the talk with practical takeaways used by state-of-the-art models to help us start building neural networks. Filmed at qconlondon.com.
Jessica Yung is a research masters student in ML at University College London. She was previously at the University of Cambridge and was an NVIDIA Self-Driving Car Engineer Scholar. She applied machine learning to finance at Jump Trading and consults on machine learning. She is keen on sharing knowledge and writes about ML and how to learn effectively on her blog at JessicaYung.com.
Stranger Things: The Forces that Disrupt NetflixC4Media
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/2h3bAvP.
Haley Tucker discusses how other systems may affect Netflix' services, strategies to protect their systems and make sure they won't fail even if things go wrong. Filmed at qconsf.com.
Haley Tucker works on the Playback Features team at Netflix, responsible for ensuring that customers receive the best possible viewing experience every time they click play. Her services fill a key role in enabling Netflix to stream amazing content to 65M+ members on 1000+ devices.
Pros and Cons of a MicroServices Architecture talk at AWS ReInventSudhir Tonse
Netflix morphed from a private datacenter based monolithic application into a cloud based Microservices architecture. This talk highlights the pros and cons of building software applications as suites of independently deployable services, as well as practical approaches for overcoming challenges - especially in the context of an elastic but ephemeral cloud ecosystem. What were the lessons learned while building and managing these services? What are the best practices and anti-patterns?
Mastering Chaos - A Netflix Guide to MicroservicesC4Media
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/2hkPH7v.
Josh Evans talks about the chaotic and vibrant world of microservices at Netflix. He starts with the basics, - the anatomy of a microservice, the challenges around distributed systems, and the benefits. Then he builds on that foundation exploring the cultural, architectural, and operational methods that lead to microservice mastery. Filmed at qconsf.com.
Josh Evans is Director of Operations Engineering at Netflix, with experience in e-commerce, tools, testing, and operations. For the past three years he has led an organization that creates, integrates, and evangelizes proven technical solutions and practices like continuous delivery, real-time operational insight, and chaos engineering to achieve operational excellence at scale.
Generating Unified APIs with Protocol Buffers and gRPCC4Media
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/2k1eZ00.
Chris Roche and Christopher Burnett discuss how they extended the Protocol Buffer (PB) IDL to create unified APIs and data models. From validation logic to automatic logging and statistics, PBs allows them to speed up development across Go, Python, and PHP stacks. They also show how they leverage the Envoy proxy to transparently upgrade HTTP/1.1 services to speak gRPC on the wire. Filmed at qconnewyork.com.
Chris Roche is a Core Libraries Engineer at Lyft focused on enriching the tools to create distributed systems. Christopher Burnett is Lead Core Libraries Engineer at Lyft, where he designs software for distributed systems.
Netflix Edge Engineering Open House Presentations - June 9, 2016Daniel Jacobson
Netflix's Edge Engineering team is responsible for handling all device traffic for to support the user experience, including sign-up, discovery and the triggering of the playback experience. Developing and maintaining this set of massive scale services is no small task and its success is the difference between millions of happy streamers or millions of missed opportunities.
This video captures the presentations delivered at the first ever Edge Engineering Open House at Netflix. This video covers the primary aspects of our charter, including the evolution of our API and Playback services as well as building a robust developer experience for the internal consumers of our APIs.
Next Generation Client APIs in Envoy MobileC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2x0Fav8.
Jose Nino guides the audience through the journey of Mobile APIs at Lyft. He focuses on how the team has reaped the benefits of API generation to experiment with the network transport layer. He also discusses recent developments the team has made with Envoy Mobile and the roadmap ahead. Filmed at qconlondon.com.
Jose Nino works as a Software Engineer at Lyft.
Netflix Play API: Why we built an evolutionary architectureSuudhan Rangarajan
For your next re-architecture, consider building a Evolutionary Architecture, with strong focus on Identity, Type1/Type2 Decisions and Fitness Functions.
This talk goes through the journey of re-architecting one of the most critical services at Netflix.
Scalable Microservices at Netflix. Challenges and Tools of the TradeC4Media
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/1A8mYn2.
Sudhir Tonse discusses about the robust interprocess communications (IPC) framework that Netflix built (Ribbon). Filmed at qconsf.com.
Sudhir Tonse manages the Cloud Platform Infrastructure team at Netflix and is responsible for many of the services and components that form the Netflix Cloud Platform as a Service.
Mastering Chaos - A Netflix Guide to MicroservicesJosh Evans
QConSF 2016 Abstract:
By embracing the tension between order and chaos and applying a healthy mix of discipline and surrender Netflix reliably operates microservices in the cloud at scale. But every lesson learned and solution developed over the last seven years was born out of pain for us and our customers. Even today we remain vigilant as we evolve our service architecture. For those just starting the microservices journey these lessons and solutions provide a blueprint for success.
In this talk we’ll explore the chaotic and vibrant world of microservices at Netflix. We’ll start with the basics - the anatomy of a microservice, the challenges around distributed systems, and the benefits realized when integrated operational practices and technical solutions are properly leveraged. Then we’ll build on that foundation exploring the cultural, architectural, and operational methods that lead to microservice mastery.
(PFC304) Effective Interprocess Communications in the Cloud: The Pros and Con...Amazon Web Services
You can't (yet) bend the law of Physics, but you can use the power of the cloud to design applications that run as fast as the speed of light! This session will focus on the best practices for optimizing performance to the very last millisecond. We'll dive into topics such as caching at every layer of your application, TCP optimizations, SSL optimizations, latency based routing, and much more. These best practices can help you to streamline your infrastructure utilization, improve performance and allow you to scale economically.
Have Your Cake and Eat It Too -- Further Dispelling the Myths of the Lambda A...C4Media
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/15ACXCw.
Tyler Akidau from Google demonstrates Google's Millwheel, a streaming system that promises low latency, strong consistency, and flexibility without relying on Lambda Architecture. Filmed at qconsf.com.
Tyler Akidau is a Senior Software Engineer at Google. The current Tech Lead for the MillWheel team, he’s spent five years working on massive-scale streaming data processing systems.
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/2mcpD5B.
Oliver Gould talks about the Linkerd project, a service mesh hosted by the Cloud Native Computing Foundation, to give operators control over the traffic between their microservices. He shares the lessons they've learned helping dozens of organizations get to production with Linkerd and how they've applied these lessons to tackle complexity with Linkerd. Filmed at qconnewyork.com.
Oliver Gould is co-founder and CTO at Buoyant, Inc.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/36epVKg.
Todd Montgomery discusses the techniques and lessons learned from implementing Aeron Cluster. His focus is on how Raft can be implemented on Aeron, minimizing the network round trip overhead, and comparing single process to a fully distributed cluster. Filmed at qconsf.com.
Todd Montgomery is a networking hacker who has researched, designed, and built numerous protocols, messaging-oriented middleware systems, and real-time data systems, done research for NASA, contributed to the IETF and IEEE, and co-founded two startups. He currently works as an independent consultant and is active in several open source projects.
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/29ZQmIx.
Adrian Cockcroft discusses success/failure stories of adopting microservices, overviews what’s next with microservices and presents some of the techniques that have led to successful deployments. Filmed at qconnewyork.com.
Adrian Cockcroft works at Battery where he advises the firm and its portfolio companies about technology issues and also assists with deal sourcing and due diligence. He was a founding member of eBay Research Labs, developing advanced mobile applications and even building his own homebrew phone, years before iPhone and Android launched.
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/2ohJwnX.
Matt Heath discusses why Go is suited for a microservices architecture, the language features that make it particularly attractive to high volume, low latency, distributed applications, and how easy it is to adopt into existing systems and organisations. Filmed at qconlondon.com.
Matt Heath works as a Distributed Systems Engineer at Monzo.
Video and slides synchronized, mp3 and slide download available at http://bit.ly/10iPQbf.
Rickard Oberg explains how to expose use-cases to solve the linking problem in RESTful APIs, and how this will simplify both API development, documentation, as well as client development. Filmed at qconlondon.com.
Rickard Oberg has worked on several OpenSource projects that involve J2EE development, such as JBoss, XDoclet and WebWork. He has also been Principal Architect of the SiteVision CMS/portal platform, where he used AOP as the foundation. Now he works for Neo Technology, building the leading graph database Neo4j. Twitter: @rickardoberg
Scaling Push Messaging for Millions of Devices @NetflixC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2oA2uI5.
Susheel Aroskar talks about Zuul Push, a scalable push notification service that handles millions of "always-on" persistent connections from all the Netflix apps running. He covers the design of the Zuul Push server and reviews the design details of the back-end message routing infrastructure that lets any Netflix microservice push notifications to any connected client. Filmed at qconnewyork.com.
Susheel Aroskar works as a software engineer on the Cloud Gateway team at Netflix, which develops and operates Zuul, an API gateway that fronts all of the Netflix cloud traffic and handles more than 100 billion requests/day. Prior to Zuul, he worked on Netflix CDN's control plane in the cloud, which is responsible for steering more than a third of all North American peak evening internet traffic.
An overview of project Skyfall. A globally distributed fault tolerant event consumption framework used by AddThis.com to consume billions of events per day.
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/39NIjLV.
Akhilesh Gupta does a technical deep-dive into how Linkedin uses the Play/Akka Framework and a scalable distributed system to enable live interactions like likes/comments at massive scale at extremely low costs across multiple data centers. Filmed at qconlondon.com.
Akhilesh Gupta is the technical lead for LinkedIn's Real-time delivery infrastructure and LinkedIn Messaging. He has been working on the revamp of LinkedIn’s offerings to instant, real-time experiences. Before this, he was the head of engineering for the Ride Experience program at Uber Technologies in San Francisco.
Software Teams and Teamwork Trends Report Q1 2020C4Media
How do we cope with an environment that has been radically disrupted, where people are suddenly thrust into remote work in a chaotic state? What are the emerging good practices and new ideas that are shaping the way in which software development teams work? What can we do to make the workplace a more secure and diverse one while increasing the productivity of our teams? This report aims to assist technical leaders in making mid- to long-term decisions that will have a positive impact on their organisations and teams and help individual contributors find the practices, approaches, tools, techniques, and frameworks that can help them get a better experience at work - irrespective of where they are working from.
Stranger Things: The Forces that Disrupt NetflixC4Media
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/2h3bAvP.
Haley Tucker discusses how other systems may affect Netflix' services, strategies to protect their systems and make sure they won't fail even if things go wrong. Filmed at qconsf.com.
Haley Tucker works on the Playback Features team at Netflix, responsible for ensuring that customers receive the best possible viewing experience every time they click play. Her services fill a key role in enabling Netflix to stream amazing content to 65M+ members on 1000+ devices.
Pros and Cons of a MicroServices Architecture talk at AWS ReInventSudhir Tonse
Netflix morphed from a private datacenter based monolithic application into a cloud based Microservices architecture. This talk highlights the pros and cons of building software applications as suites of independently deployable services, as well as practical approaches for overcoming challenges - especially in the context of an elastic but ephemeral cloud ecosystem. What were the lessons learned while building and managing these services? What are the best practices and anti-patterns?
Mastering Chaos - A Netflix Guide to MicroservicesC4Media
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/2hkPH7v.
Josh Evans talks about the chaotic and vibrant world of microservices at Netflix. He starts with the basics, - the anatomy of a microservice, the challenges around distributed systems, and the benefits. Then he builds on that foundation exploring the cultural, architectural, and operational methods that lead to microservice mastery. Filmed at qconsf.com.
Josh Evans is Director of Operations Engineering at Netflix, with experience in e-commerce, tools, testing, and operations. For the past three years he has led an organization that creates, integrates, and evangelizes proven technical solutions and practices like continuous delivery, real-time operational insight, and chaos engineering to achieve operational excellence at scale.
Generating Unified APIs with Protocol Buffers and gRPCC4Media
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/2k1eZ00.
Chris Roche and Christopher Burnett discuss how they extended the Protocol Buffer (PB) IDL to create unified APIs and data models. From validation logic to automatic logging and statistics, PBs allows them to speed up development across Go, Python, and PHP stacks. They also show how they leverage the Envoy proxy to transparently upgrade HTTP/1.1 services to speak gRPC on the wire. Filmed at qconnewyork.com.
Chris Roche is a Core Libraries Engineer at Lyft focused on enriching the tools to create distributed systems. Christopher Burnett is Lead Core Libraries Engineer at Lyft, where he designs software for distributed systems.
Netflix Edge Engineering Open House Presentations - June 9, 2016Daniel Jacobson
Netflix's Edge Engineering team is responsible for handling all device traffic for to support the user experience, including sign-up, discovery and the triggering of the playback experience. Developing and maintaining this set of massive scale services is no small task and its success is the difference between millions of happy streamers or millions of missed opportunities.
This video captures the presentations delivered at the first ever Edge Engineering Open House at Netflix. This video covers the primary aspects of our charter, including the evolution of our API and Playback services as well as building a robust developer experience for the internal consumers of our APIs.
Next Generation Client APIs in Envoy MobileC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2x0Fav8.
Jose Nino guides the audience through the journey of Mobile APIs at Lyft. He focuses on how the team has reaped the benefits of API generation to experiment with the network transport layer. He also discusses recent developments the team has made with Envoy Mobile and the roadmap ahead. Filmed at qconlondon.com.
Jose Nino works as a Software Engineer at Lyft.
Netflix Play API: Why we built an evolutionary architectureSuudhan Rangarajan
For your next re-architecture, consider building a Evolutionary Architecture, with strong focus on Identity, Type1/Type2 Decisions and Fitness Functions.
This talk goes through the journey of re-architecting one of the most critical services at Netflix.
Scalable Microservices at Netflix. Challenges and Tools of the TradeC4Media
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/1A8mYn2.
Sudhir Tonse discusses about the robust interprocess communications (IPC) framework that Netflix built (Ribbon). Filmed at qconsf.com.
Sudhir Tonse manages the Cloud Platform Infrastructure team at Netflix and is responsible for many of the services and components that form the Netflix Cloud Platform as a Service.
Mastering Chaos - A Netflix Guide to MicroservicesJosh Evans
QConSF 2016 Abstract:
By embracing the tension between order and chaos and applying a healthy mix of discipline and surrender Netflix reliably operates microservices in the cloud at scale. But every lesson learned and solution developed over the last seven years was born out of pain for us and our customers. Even today we remain vigilant as we evolve our service architecture. For those just starting the microservices journey these lessons and solutions provide a blueprint for success.
In this talk we’ll explore the chaotic and vibrant world of microservices at Netflix. We’ll start with the basics - the anatomy of a microservice, the challenges around distributed systems, and the benefits realized when integrated operational practices and technical solutions are properly leveraged. Then we’ll build on that foundation exploring the cultural, architectural, and operational methods that lead to microservice mastery.
(PFC304) Effective Interprocess Communications in the Cloud: The Pros and Con...Amazon Web Services
You can't (yet) bend the law of Physics, but you can use the power of the cloud to design applications that run as fast as the speed of light! This session will focus on the best practices for optimizing performance to the very last millisecond. We'll dive into topics such as caching at every layer of your application, TCP optimizations, SSL optimizations, latency based routing, and much more. These best practices can help you to streamline your infrastructure utilization, improve performance and allow you to scale economically.
Have Your Cake and Eat It Too -- Further Dispelling the Myths of the Lambda A...C4Media
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/15ACXCw.
Tyler Akidau from Google demonstrates Google's Millwheel, a streaming system that promises low latency, strong consistency, and flexibility without relying on Lambda Architecture. Filmed at qconsf.com.
Tyler Akidau is a Senior Software Engineer at Google. The current Tech Lead for the MillWheel team, he’s spent five years working on massive-scale streaming data processing systems.
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/2mcpD5B.
Oliver Gould talks about the Linkerd project, a service mesh hosted by the Cloud Native Computing Foundation, to give operators control over the traffic between their microservices. He shares the lessons they've learned helping dozens of organizations get to production with Linkerd and how they've applied these lessons to tackle complexity with Linkerd. Filmed at qconnewyork.com.
Oliver Gould is co-founder and CTO at Buoyant, Inc.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/36epVKg.
Todd Montgomery discusses the techniques and lessons learned from implementing Aeron Cluster. His focus is on how Raft can be implemented on Aeron, minimizing the network round trip overhead, and comparing single process to a fully distributed cluster. Filmed at qconsf.com.
Todd Montgomery is a networking hacker who has researched, designed, and built numerous protocols, messaging-oriented middleware systems, and real-time data systems, done research for NASA, contributed to the IETF and IEEE, and co-founded two startups. He currently works as an independent consultant and is active in several open source projects.
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/29ZQmIx.
Adrian Cockcroft discusses success/failure stories of adopting microservices, overviews what’s next with microservices and presents some of the techniques that have led to successful deployments. Filmed at qconnewyork.com.
Adrian Cockcroft works at Battery where he advises the firm and its portfolio companies about technology issues and also assists with deal sourcing and due diligence. He was a founding member of eBay Research Labs, developing advanced mobile applications and even building his own homebrew phone, years before iPhone and Android launched.
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/2ohJwnX.
Matt Heath discusses why Go is suited for a microservices architecture, the language features that make it particularly attractive to high volume, low latency, distributed applications, and how easy it is to adopt into existing systems and organisations. Filmed at qconlondon.com.
Matt Heath works as a Distributed Systems Engineer at Monzo.
Video and slides synchronized, mp3 and slide download available at http://bit.ly/10iPQbf.
Rickard Oberg explains how to expose use-cases to solve the linking problem in RESTful APIs, and how this will simplify both API development, documentation, as well as client development. Filmed at qconlondon.com.
Rickard Oberg has worked on several OpenSource projects that involve J2EE development, such as JBoss, XDoclet and WebWork. He has also been Principal Architect of the SiteVision CMS/portal platform, where he used AOP as the foundation. Now he works for Neo Technology, building the leading graph database Neo4j. Twitter: @rickardoberg
Scaling Push Messaging for Millions of Devices @NetflixC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2oA2uI5.
Susheel Aroskar talks about Zuul Push, a scalable push notification service that handles millions of "always-on" persistent connections from all the Netflix apps running. He covers the design of the Zuul Push server and reviews the design details of the back-end message routing infrastructure that lets any Netflix microservice push notifications to any connected client. Filmed at qconnewyork.com.
Susheel Aroskar works as a software engineer on the Cloud Gateway team at Netflix, which develops and operates Zuul, an API gateway that fronts all of the Netflix cloud traffic and handles more than 100 billion requests/day. Prior to Zuul, he worked on Netflix CDN's control plane in the cloud, which is responsible for steering more than a third of all North American peak evening internet traffic.
An overview of project Skyfall. A globally distributed fault tolerant event consumption framework used by AddThis.com to consume billions of events per day.
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/39NIjLV.
Akhilesh Gupta does a technical deep-dive into how Linkedin uses the Play/Akka Framework and a scalable distributed system to enable live interactions like likes/comments at massive scale at extremely low costs across multiple data centers. Filmed at qconlondon.com.
Akhilesh Gupta is the technical lead for LinkedIn's Real-time delivery infrastructure and LinkedIn Messaging. He has been working on the revamp of LinkedIn’s offerings to instant, real-time experiences. Before this, he was the head of engineering for the Ride Experience program at Uber Technologies in San Francisco.
Software Teams and Teamwork Trends Report Q1 2020C4Media
How do we cope with an environment that has been radically disrupted, where people are suddenly thrust into remote work in a chaotic state? What are the emerging good practices and new ideas that are shaping the way in which software development teams work? What can we do to make the workplace a more secure and diverse one while increasing the productivity of our teams? This report aims to assist technical leaders in making mid- to long-term decisions that will have a positive impact on their organisations and teams and help individual contributors find the practices, approaches, tools, techniques, and frameworks that can help them get a better experience at work - irrespective of where they are working from.
Understand the Trade-offs Using Compilers for Java ApplicationsC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2QCmmJ0.
Mark Stoodley examines some of the strengths and weaknesses of the different Java compilation technologies, if one was to apply them in isolation. Stoodley discusses how production JVMs are assembling a combination of these tools that work together to provide excellent performance across the large spectrum of applications written in Java and JVM based languages. Filmed at qconsf.com.
Mark Stoodley joined IBM Canada to build Java JIT compilers for production use and led the team that delivered AOT compilation in the IBM SDK for Java 6. He spent the last five years leading the effort to open source nearly 4.3 million lines of source code from the IBM J9 Java Virtual Machine to create the two open source projects Eclipse OMR and Eclipse OpenJ9, and now co-leads both projects.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2y2yPiS.
Colin McCabe talks about the ongoing effort to replace the use of Zookeeper in Kafka: why they want to do it and how it will work. He discusses the limitations they have found and how Kafka benefits both in terms of stability and scalability by bringing consensus in house. He talks about their progress, what work is remaining, and how contributors can help. Filmed at qconsf.com.
Colin McCabe is a Kafka committer at Confluent, working on the scalability and extensibility of Kafka. Previously, he worked on the Hadoop Distributed Filesystem and the Ceph Filesystem.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2SXXXiD.
Katharina Probst talks about what it means to act like an owner and why teams need ownership to be high-performing. When team members, regardless of whether they have a formal leadership role or not, act like owners, magical things can happen. She shares ideas that we can apply to our own work, and talks about how to recognize when we don’t live up to our own expectations of acting like an owner. Filmed at qconsf.com.
Katharina Probst is a Senior Engineering Leader, Kubernetes & SaaS at Google. Before this, she was leading engineering teams at Netflix, being responsible for the Netflix API, which helps bring Netflix streaming to millions of people around the world. Prior to joining Netflix, she was in the cloud computing team at Google, where she saw cloud computing from the provider side.
Does Java Need Inline Types? What Project Valhalla Can Bring to JavaC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2T04Lw4.
Sergey Kuksenko talks about the performance benefits inline types bring to Java and how to exploit them. Inline/value types are the key part of experimental project Valhalla, which should bring new abilities to the Java language. Filmed at qconsf.com.
Sergey Kuksenko is a Java Performance Engineer at Oracle working on a variety of Java and JVM performance enhancements. He started working as Java Engineer in 1996 and as Java Performance Engineer in 2005. He has had a passion for exploring how Java works on modern hardware.
Do you need service meshes in your tech stack?
This on-line guide aims to answer pertinent questions for software architects and technical leaders, such as: what is a service mesh?, do I need a service mesh?, how do I evaluate the different service mesh offerings? In software architecture, a service mesh is a dedicated infrastructure layer for facilitating service-to-service communications between microservices, often using a sidecar proxy.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2UgQ3BU.
Christie Wilson describes what to expect from CI/CD in 2019, and how Tekton is helping bring that to as many tools as possible, such as Jenkins X and Prow. Wilson talks about Tekton itself and performs a live demo that shows how cloud native CI/CD can help debug, surface and fix mistakes faster. Filmed at qconsf.com.
Christie Wilson is a software engineer at Google, currently leading the Tekton project. Over the past decade, she has worked in the mobile, financial and video game industries. Prior to working at Google she led a team of software developers to build load testing tools for AAA video game titles, and founded the Vancouver chapter of PyLadies.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2S7lDiS.
Sasha Rosenbaum shows how a CI/CD pipeline for Machine Learning can greatly improve both productivity and reliability. Filmed at qconsf.com.
Sasha Rosenbaum is a Program Manager on the Azure DevOps engineering team, focused on improving the alignment of the product with open source software. She is a co-organizer of the DevOps Days Chicago and the DeliveryConf conferences, and recently published a book on Serverless computing in Azure with .NET.
Architectures That Scale Deep - Regaining Control in Deep SystemsC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2FWc5Sk.
Ben Sigelman talks about "Deep Systems", their common properties and re-introduces the fundamentals of control theory from the 1960s, including the original conceptualizations of Observability & Controllability. He uses examples from Google & other companies to illustrate how deep systems have damaged people's ability to observe software, and what needs to be done in order to regain control. Filmed at qconsf.com.
Ben Sigelman is a co-founder and the CEO at LightStep, a co-creator of Dapper (Google’s distributed tracing system), and co-creator of the OpenTracing and OpenTelemetry projects (both part of the CNCF). His work and interests gravitate towards observability, especially where microservices, high transaction volumes, and large engineering organizations are involved.
ML in the Browser: Interactive Experiences with Tensorflow.jsC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/39SddUL.
Victor Dibia provides a friendly introduction to machine learning, covers concrete steps on how front-end developers can create their own ML models and deploy them as part of web applications. He discusses his experience building Handtrack.js - a library for prototyping real time hand tracking interactions in the browser. Filmed at qconsf.com.
Victor Dibia is a Research Engineer with Cloudera’s Fast Forward Labs. Prior to this, he was a Research Staff Member at the IBM TJ Watson Research Center, New York. His research interests are at the intersection of human computer interaction, computational social science, and applied AI.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2s9T3Vl.
Colin Eberhardt looks at some of the internals of WebAssembly, explores how it works “under the hood”, and looks at how to create a (simple) compiler that targets this runtime. Filmed at qconsf.com.
Colin Eberhardt is the Technology Director at Scott Logic, a UK-based software consultancy where they create complex application for their financial services clients. He is an avid technology enthusiast, spending his evenings contributing to open source projects, writing blog posts and learning as much as he can.
User & Device Identity for Microservices @ Netflix ScaleC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2S9tOgy.
Satyajit Thadeshwar provides useful insights on how Netflix implemented a secure, token-agnostic, identity solution that works with services operating at a massive scale. He shares some of the lessons learned from this process, both from architectural diagrams and code. Filmed at qconsf.com.
Satyajit Thadeshwar is an engineer on the Product Edge Access Services team at Netflix, where he works on some of the most critical services focusing on user and device authentication. He has more than a decade of experience building fault-tolerant and highly scalable, distributed systems.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2Ezs08q.
Justin Ryan talks about Netflix’ scalability issues and some of the ways they addressed it. He shares successes they’ve had from unintuitively partitioning computation into multiple services to get better runtime characteristics. He introduces us to useful probabilistic data structures, innovative bi-directional data passing, open-source projects available from Netflix that make this all possible. Filmed at qconsf.com.
Justin Ryan is Playback Edge Engineering at Netflix. He works on some of the most critical services at Netflix, specifically focusing on user and device authentication. Years of building developer tools has also given him a healthy set of opinions on developer productivity.
Make Your Electron App Feel at Home EverywhereC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2Z4ZJjn.
Kilian Valkhof discusses the process of making an Electron app feel at home on all three platforms: Windows, MacOS and Linux, making devs aware of the pitfalls and how to avoid them. Filmed at qconsf.com.
Kilian Valkhof is a Front-end Developer & User-experience Designer at Firstversionist. He writes about various topics, from design to machine learning, on his personal website, kilianvalkhof.com and is a frequent contributer to open source software. He is part of the Electron governance team that oversees the development of the Electron framework.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/344PnB1.
Steve Klabnik goes over the deep details of how async/await works in Rust, covering concepts like coroutines, generators, stack-less vs stack-ful, "pinning", and more. Filmed at qconsf.com.
Steve Klabnik is on the core team of Rust, leads the documentation team, and is an author of "The Rust Programming Language." He is a frequent speaker at conferences and is a prolific open source contributor, previously working on projects such as Ruby and Ruby on Rails.
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2OUz6dt.
Chris Riccomini talks about the current state-of-the-art in data pipelines and data warehousing, and shares some of the solutions to current problems dealing with data streaming and warehousing. Filmed at qconsf.com.
Chris Riccomini works as a Software Engineer at WePay.
Automated Testing for Terraform, Docker, Packer, Kubernetes, and MoreC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2rm4hFD.
Yevgeniy Brikman talks about how to write automated tests for infrastructure code, including the code written for use with tools such as Terraform, Docker, Packer, and Kubernetes. Topics covered include: unit tests, integration tests, end-to-end tests, dependency injection, test parallelism, retries and error handling, static analysis, property testing and CI / CD for infrastructure code. Filmed at qconsf.com.
Yevgeniy Brikman is the co-founder of Gruntwork, a company that provides DevOps as a Service. He is the author of two books published by O'Reilly Media: Hello, Startup and Terraform: Up & Running. Previously, he worked as a software engineer at LinkedIn, TripAdvisor, Cisco Systems, and Thomson Financial.
Navigating Complexity: High-performance Delivery and Discovery TeamsC4Media
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/2NzKMjY.
Conal Scanlon talks about why traditional tactics - ones that have been around since the 19th century - don't always help build a better product, and explores what characteristics are common to both delivery and discovery teams. He talks about his experiences in fledgling startups, successful companies, and larger enterprises, and uses these examples to introduce dual-track development. Filmed at qconnewyork.com.
Conal Scanlon is a Product Manager at Handshake, helping B2B distributors and manufacturers get their products to every shelf, everywhere. He has several years of experience in software development (mainly Ruby on Rails) and Agile leadership roles in private sector and government contracting, as well a brief foray in management consulting.
High Performance Cooperative Distributed Systems in AdtechC4Media
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/34ipw9f.
Stan Rosenberg explores a set of core building blocks exhibited by Adtech platforms and applies them towards building a fraud detection platform. After addressing performance, he touches on the key attributes of system reliability and quality in an Adtech system. He concludes with many insights learned from building one of the leading fraud detection platforms from the ground up. Filmed at qconnewyork.com.
Stan Rosenberg currently heads up engineering at Forensiq - a leading fraud detection platform for online advertising. Prior to Forensiq, he built distributed platforms for startups.
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfPeter Spielvogel
Building better applications for business users with SAP Fiori.
• What is SAP Fiori and why it matters to you
• How a better user experience drives measurable business benefits
• How to get started with SAP Fiori today
• How SAP Fiori elements accelerates application development
• How SAP Build Code includes SAP Fiori tools and other generative artificial intelligence capabilities
• How SAP Fiori paves the way for using AI in SAP apps
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionAggregage
Join Maher Hanafi, VP of Engineering at Betterworks, in this new session where he'll share a practical framework to transform Gen AI prototypes into impactful products! He'll delve into the complexities of data collection and management, model selection and optimization, and ensuring security, scalability, and responsible use.
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfPaige Cruz
Monitoring and observability aren’t traditionally found in software curriculums and many of us cobble this knowledge together from whatever vendor or ecosystem we were first introduced to and whatever is a part of your current company’s observability stack.
While the dev and ops silo continues to crumble….many organizations still relegate monitoring & observability as the purview of ops, infra and SRE teams. This is a mistake - achieving a highly observable system requires collaboration up and down the stack.
I, a former op, would like to extend an invitation to all application developers to join the observability party will share these foundational concepts to build on:
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Albert Hoitingh
In this session I delve into the encryption technology used in Microsoft 365 and Microsoft Purview. Including the concepts of Customer Key and Double Key Encryption.
UiPath Test Automation using UiPath Test Suite series, part 4DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 4. In this session, we will cover Test Manager overview along with SAP heatmap.
The UiPath Test Manager overview with SAP heatmap webinar offers a concise yet comprehensive exploration of the role of a Test Manager within SAP environments, coupled with the utilization of heatmaps for effective testing strategies.
Participants will gain insights into the responsibilities, challenges, and best practices associated with test management in SAP projects. Additionally, the webinar delves into the significance of heatmaps as a visual aid for identifying testing priorities, areas of risk, and resource allocation within SAP landscapes. Through this session, attendees can expect to enhance their understanding of test management principles while learning practical approaches to optimize testing processes in SAP environments using heatmap visualization techniques
What will you get from this session?
1. Insights into SAP testing best practices
2. Heatmap utilization for testing
3. Optimization of testing processes
4. Demo
Topics covered:
Execution from the test manager
Orchestrator execution result
Defect reporting
SAP heatmap example with demo
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...James Anderson
Effective Application Security in Software Delivery lifecycle using Deployment Firewall and DBOM
The modern software delivery process (or the CI/CD process) includes many tools, distributed teams, open-source code, and cloud platforms. Constant focus on speed to release software to market, along with the traditional slow and manual security checks has caused gaps in continuous security as an important piece in the software supply chain. Today organizations feel more susceptible to external and internal cyber threats due to the vast attack surface in their applications supply chain and the lack of end-to-end governance and risk management.
The software team must secure its software delivery process to avoid vulnerability and security breaches. This needs to be achieved with existing tool chains and without extensive rework of the delivery processes. This talk will present strategies and techniques for providing visibility into the true risk of the existing vulnerabilities, preventing the introduction of security issues in the software, resolving vulnerabilities in production environments quickly, and capturing the deployment bill of materials (DBOM).
Speakers:
Bob Boule
Robert Boule is a technology enthusiast with PASSION for technology and making things work along with a knack for helping others understand how things work. He comes with around 20 years of solution engineering experience in application security, software continuous delivery, and SaaS platforms. He is known for his dynamic presentations in CI/CD and application security integrated in software delivery lifecycle.
Gopinath Rebala
Gopinath Rebala is the CTO of OpsMx, where he has overall responsibility for the machine learning and data processing architectures for Secure Software Delivery. Gopi also has a strong connection with our customers, leading design and architecture for strategic implementations. Gopi is a frequent speaker and well-known leader in continuous delivery and integrating security into software delivery.
A tale of scale & speed: How the US Navy is enabling software delivery from l...sonjaschweigert1
Rapid and secure feature delivery is a goal across every application team and every branch of the DoD. The Navy’s DevSecOps platform, Party Barge, has achieved:
- Reduction in onboarding time from 5 weeks to 1 day
- Improved developer experience and productivity through actionable findings and reduction of false positives
- Maintenance of superior security standards and inherent policy enforcement with Authorization to Operate (ATO)
Development teams can ship efficiently and ensure applications are cyber ready for Navy Authorizing Officials (AOs). In this webinar, Sigma Defense and Anchore will give attendees a look behind the scenes and demo secure pipeline automation and security artifacts that speed up application ATO and time to production.
We will cover:
- How to remove silos in DevSecOps
- How to build efficient development pipeline roles and component templates
- How to deliver security artifacts that matter for ATO’s (SBOMs, vulnerability reports, and policy evidence)
- How to streamline operations with automated policy checks on container images
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Evolution of the Netflix API
1. Evolution of the Netflix API
QCon San Francisco - November 2013
Ben Christensen
Software Engineer – Edge & Playback Services at Netflix
@benjchristensen
!
!
!
!
http://techblog.netflix.com/
2. Watch the video with slide
synchronization on InfoQ.com!
http://www.infoq.com/presentations
/netflix-api-evolution
InfoQ.com: News & Community Site
• 750,000 unique visitors/month
• Published in 4 languages (English, Chinese, Japanese and Brazilian
Portuguese)
• Post content from our QCon conferences
• News 15-20 / week
• Articles 3-4 / week
• Presentations (videos) 12-15 / week
• Interviews 2-3 / week
• Books 1 / month
3. Presented at QCon San Francisco
www.qconsf.com
Purpose of QCon
- to empower software development by facilitating the spread of
knowledge and innovation
Strategy
- practitioner-driven conference designed for YOU: influencers of
change and innovation in your teams
- speakers and topics driving the evolution and innovation
- connecting and catalyzing the influencers and innovators
Highlights
- attended by more than 12,000 delegates since 2007
- held in 9 cities worldwide
4.
5. More than 40 million Subscribers
in 50+ Countries and Territories
6. Netflix accounts for 33% of Peak Downstream
Internet Traffic in North America
Netflix subscribers are watching
more than 1 billion hours a month
7. API traffic has grown from
~20 million/day in 2010 to >2 billion/day
millions of API requests per day
2000
1500
1000
500
0
2010
2011
2012
Today
21. Netflix API
Dependency A
Dependency B
Dependency D
Dependency C
Dependency E
Dependency G
Dependency F
Dependency H
Dependency J
Dependency M
Dependency P
Dependency I
Dependency K
Dependency N
Dependency Q
Dependency L
Dependency O
Dependency R
22. Netflix API
Dependency A
Dependency B
Dependency D
Dependency C
Dependency E
Dependency G
Dependency F
Dependency H
Dependency J
Dependency M
Dependency P
Dependency I
Dependency K
Dependency N
Dependency Q
Dependency L
Dependency O
Dependency R
32. User Request
Dependency A
Dependency B
Dependency D
Dependency C
Dependency E
Dependency G
Dependency F
Dependency H
Dependency J
Dependency M
Dependency P
Dependency I
Dependency K
Dependency N
Dependency Q
Dependency L
Dependency O
Dependency R
33. User Request
Dependency A
Dependency B
Dependency D
Dependency C
Dependency E
Dependency G
Dependency F
Dependency H
Dependency J
Dependency M
Dependency P
Dependency I
Dependency K
Dependency N
Dependency Q
Dependency L
Dependency O
Dependency R
User request
blocked by
latency in
single
network call
34. Dependency A
Dependency B
Dependency D
Dependency C
Dependency E
Dependency G
Dependency F
Dependency H
Dependency J
Dependency M
Dependency P
Dependency I
Dependency K
Dependency N
Dependency Q
Dependency L
Dependency O
Dependency R
User Request
User Request
User Request
User Request
User Request
User Request
User Request
.............................................
At high
volume
all request
threads can
block in
seconds
35. !
Dozens of dependencies.
!
One going bad takes everything down.
!
30
99.99%
= 99.7% uptime
!
0.3% of 1 billion = 3,000,000 failures
!
2+ hours downtime/month
!
!
!
Reality is generally worse.
40. Dependency A
Dependency B
Dependency D
Dependency C
Dependency E
Dependency G
Dependency F
Dependency H
Dependency J
Dependency M
Dependency P
Dependency I
Dependency K
Dependency N
Dependency Q
Dependency L
Dependency O
Dependency R
User Request
User Request
User Request
User Request
User Request
User Request
User Request
.............................................
41. User Request
User Request
User Request
Logic - argument validation, caches, metrics, logging,
multivariate testing, routing, etc
Serialization - URL and/or body generation
Network Request - TCP/HTTP, latency, 4xx, 5xx, etc
.............................................
Deserialization - JSON/XML/Thrift/Protobuf/etc
Dependency B
cy D
Dependency C
Dependency E
dency G
ependency J
Dependency M
Logic - validation, decoration, object model, caching,
metrics, logging, etc
Dependency F
Dependency H
Dependency K
Dependency N
Dependency I
Dependency L
Dependency O
42. > 80% of requests rejected
Median
Latency
[Sat Jun 30 04:01:37 2012] [error] proxy: HTTP: disabled connection for (127.0.0.1)
"Timeout guard" daemon prio=10 tid=0x00002aaacd5e5000 nid=0x3aac runnable [0x00002aaac388f000] java.lang.Thread.State: RUNNABLE!
at java.net.PlainSocketImpl.socketConnect(Native Method)!
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)!
- locked <0x000000055c7e8bd8> (a java.net.SocksSocketImpl)!
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)!
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)!
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)!
at java.net.Socket.connect(Socket.java:579)!
at java.net.Socket.connect(Socket.java:528)!
at java.net.Socket.(Socket.java:425)!
at java.net.Socket.(Socket.java:280)!
at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:80)!
at org.apache.commons.httpclient.protocol.ControllerThreadSocketFactory$1.doit(ControllerThreadSocketFactory.java:91)!
at org.apache.commons.httpclient.protocol.ControllerThreadSocketFactory$SocketTask.run(ControllerThreadSocketFactory.java:158) at java.lang.Thread.run(Thread.java:722)
43. User Request
Dependency A
Dependency B
Dependency D
Dependency C
Dependency E
Dependency G
Dependency F
Dependency H
Dependency J
Dependency M
Dependency P
Dependency I
Dependency K
Dependency N
Dependency Q
Dependency L
Dependency O
Dependency R
44. User Request
Dependency A
Dependency B
Dependency D
Dependency C
Dependency E
Dependency G
Dependency F
Dependency H
Dependency J
Dependency M
Dependency P
Dependency I
Dependency K
Dependency N
Dependency Q
Dependency L
Dependency O
Dependency R
45. User Request
Dependency A
Dependency B
Dependency D
Dependency C
Dependency E
Dependency G
Dependency F
Dependency H
Dependency J
Dependency M
Dependency P
Dependency I
Dependency K
Dependency N
Dependency Q
Dependency L
Dependency O
Dependency R
46. User Request
Dependency A
Dependency B
Dependency D
Dependency C
Dependency E
Dependency G
Dependency F
Dependency H
Dependency J
Dependency M
Dependency P
Dependency I
Dependency K
Dependency N
Dependency Q
Dependency L
Dependency O
Dependency R
51. circle color and size represent
health and traffic volume
2 minutes of request rate to
show relative changes in traffic
52. circle color and size represent
health and traffic volume
2 minutes of request rate to
show relative changes in traffic
hosts reporting from cluster
53. circle color and size represent
health and traffic volume
2 minutes of request rate to
show relative changes in traffic
hosts reporting from cluster
last minute latency percentiles
54. circle color and size represent
health and traffic volume
2 minutes of request rate to
show relative changes in traffic
hosts reporting from cluster
Circuit-breaker
status
last minute latency percentiles
55. circle color and size represent
health and traffic volume
Request rate
2 minutes of request rate to
show relative changes in traffic
hosts reporting from cluster
Circuit-breaker
status
last minute latency percentiles
56. circle color and size represent
health and traffic volume
Error percentage of
last 10 seconds
Request rate
2 minutes of request rate to
show relative changes in traffic
hosts reporting from cluster
Circuit-breaker
status
last minute latency percentiles
57. Error percentage of
last 10 seconds
circle color and size represent
health and traffic volume
Request rate
2 minutes of request rate to
show relative changes in traffic
Circuit-breaker
status
hosts reporting from cluster
last minute latency percentiles
Rolling 10 second counters
with 1 second granularity
Successes
Short-circuited (rejected)
Thread timeouts
Thread-pool Rejections
Failures/Exceptions
58. User Request
Dependency A
Dependency B
Dependency D
Dependency C
Dependency E
Dependency G
Dependency F
Dependency H
Dependency J
Dependency M
Dependency P
Dependency I
Dependency K
Dependency N
Dependency Q
Dependency L
Dependency O
Dependency R
65. User Request
Dependency A
Dependency B
Dependency D
Dependency C
Dependency E
Dependency G
Dependency F
Dependency H
Dependency J
Dependency M
Dependency P
Dependency I
Dependency K
Dependency N
Dependency Q
Dependency L
Dependency O
Dependency R
System
Relationship
Over
Network
without
Bulkhead
86. Netflix API
Dependency A
Dependency B
Dependency D
Dependency C
Dependency E
Dependency G
Dependency F
Dependency H
Dependency J
Dependency M
Dependency P
Dependency I
Dependency K
Dependency N
Dependency Q
Dependency L
Dependency O
Dependency R
87. Netflix API
Dependency A
Dependency B
Dependency D
Dependency C
Dependency E
Dependency G
Dependency F
Dependency H
Dependency J
Dependency M
Dependency P
Dependency I
Dependency K
Dependency N
Dependency Q
Dependency L
Dependency O
Dependency R
88. One Size Fits All RESTful API
millions of API requests per day
2000
1500
1000
500
0
2010
2011
2012
Today
89. One Size Fits All RESTful API
millions of API requests per day
2000
1500
1000
500
0
2010
2011
2012
Today
90. One Size Fits All RESTful API
1000+ Devices
millions of API requests per day
2000
1500
1000
500
0
2010
2011
2012
Today
91. We wanted to re-architecture our call patterns ...
92. ... to collapse network traffic into coarse API calls ...
nested, conditional, concurrent execution
93. ... and we wanted to allow
anybody to create
endpoints, not just the
“API Team”
94.
95. Concurrency without each engineer
reading and re-reading this →
!
(awesome book ... everybody isn’t going to - or
should have to - read it though, that’s the point)
96. Owner of api should retain control
of concurrency behavior.
97. Owner of api should retain control
of concurrency behavior.
public
Data
getData();
What if the implementation needs to change
from synchronous to asynchronous?
!
How should the client execute that method
without blocking? spawn a thread?
98. public
Data
getData();
public
void
getData(Callback<T>
c);
!
public
Future<T>
getData();
!
public
Future<List<Future<T>>>
getData();
!
!
other options ... ?
99. Reactive Programming with Rx
Iterable
pull
T next()
throws Exception
returns;
Observable
push
onNext(T)
onError(Exception)
onCompleted()
100. (Functional) Reactive Programming with RxJava
Iterable
pull
T next()
throws Exception
returns;
Observable
push
onNext(T)
onError(Exception)
onCompleted()
101. (Functional) Reactive Programming with RxJava
Iterable
pull
T next()
throws Exception
returns;
Observable
push
onNext(T)
onError(Exception)
onCompleted()
102. (Functional) Reactive Programming with RxJava
Iterable
pull
T next()
throws Exception
returns;
Observable
push
onNext(T)
onError(Exception)
onCompleted()
103. Iterable
pull
T next()
throws Exception
returns;
!
//
Iterable<String>
//
that
contains
75
Strings
getDataFromLocalMemory()
.skip(10)
.take(5)
.map({
s
-‐>
return
s
+
"_transformed"})
.forEach(
{
println
"next
=>
"
+
it})
Observable
push
onNext(T)
onError(Exception)
onCompleted()
!
//
Observable<String>
//
that
emits
75
Strings
getDataFromNetwork()
.skip(10)
.take(5)
.map({
s
-‐>
return
s
+
"_transformed"})
.subscribe(
{
println
"onNext
=>
"
+
it})
104. Iterable
pull
T next()
throws Exception
returns;
!
//
Iterable<String>
//
that
contains
75
Strings
getDataFromLocalMemory()
.skip(10)
.take(5)
.map({
s
-‐>
return
s
+
"_transformed"})
.forEach(
{
println
"onNext
=>
"
+
it})
Observable
push
onNext(T)
onError(Exception)
onCompleted()
!
//
Observable<String>
//
that
emits
75
Strings
getDataFromNetwork()
.skip(10)
.take(5)
.map({
s
-‐>
return
s
+
"_transformed"})
.subscribe(
{
println
"onNext
=>
"
+
it})
121. instead of a blocking api ...
class
VideoService
{
def
VideoList
getPersonalizedListOfMovies(userId);
def
VideoBookmark
getBookmark(userId,
videoId);
def
VideoRating
getRating(userId,
videoId);
def
VideoMetadata
getMetadata(videoId);
}
... create an observable api:
class
VideoService
{
def
Observable<VideoList>
getPersonalizedListOfMovies(userId);
def
Observable<VideoBookmark>
getBookmark(userId,
videoId);
def
Observable<VideoRating>
getRating(userId,
videoId);
def
Observable<VideoMetadata>
getMetadata(videoId);
}
122. RxJava
http://github.com/Netflix/RxJava
“a library for composing
asynchronous and event-based
programs using observable
sequences for the Java VM”
A Java port of Rx (Reactive Extensions)
https://rx.codeplex.com (.Net and Javascript by Microsoft)
123. client code treats all interactions
with the api as asynchronous
!
!
the api implementation chooses
whether something is
blocking or non-blocking
and
what resources it uses
142. public class HelloEndpoint extends APIEndpoint {
@Override
public void execute(APIRequest api) throws Throwable {
// get a request parameter from servlet request
String alias = api.servletRequest.getParameter("name");
!
// set content type and write something to servlet response
api.servletResponse.setContentType("application/json");
api.servletResponse.writer.print(
JsonUtility.toJson(
[ alias : alias, name : api.user.firstName ]
)
)
!
}
}
143. public class HelloEndpoint extends APIEndpoint {
@Override
public void execute(APIRequest api) throws Throwable {
// get a request parameter from servlet request
String alias = api.servletRequest.getParameter("name");
!
// set content type and write something to servlet response
api.servletResponse.setContentType("application/json");
api.servletResponse.writer.print(
JsonUtility.toJson(
[ alias : alias, name : api.user.firstName ]
)
)
!
}
}
runScript.py -e TEST --userId 1189658154 --args "name=bob" HelloEndpoint.groovy
144. public class HelloEndpoint extends APIEndpoint {
@Override
public void execute(APIRequest api) throws Throwable {
// get a request parameter from servlet request
String alias = api.servletRequest.getParameter("name");
!
// set content type and write something to servlet response
api.servletResponse.setContentType("application/json");
api.servletResponse.writer.print(
JsonUtility.toJson(
[ alias : alias, name : api.user.firstName ]
)
)
!
}
}
runScript.py -e TEST --userId 1189658154 --args "name=bob" HelloEndpoint.groovy
{"alias":"bob","name":"Old"}
145. public class HelloEndpoint extends APIEndpoint {
@Override
public void execute(APIRequest api) throws Throwable {
// get a request parameter from servlet request
String alias = api.servletRequest.getParameter("name");
!
// set content type and write something to servlet response
api.servletResponse.setContentType("application/json");
api.servletResponse.writer.print(
JsonUtility.toJson(
[ alias : alias, name : api.user.firstName ]
)
)
!
}
}
runScript.py -e TEST --userId 1189658154 --args "name=bob" HelloEndpoint.groovy
{"alias":"bob","name":"Old"}
146. public class HelloEndpoint extends APIEndpoint {
@Override
public void execute(APIRequest api) throws Throwable {
// get a request parameter from servlet request
String alias = api.servletRequest.getParameter("name");
!
// set content type and write something to servlet response
api.servletResponse.setContentType("application/json");
api.servletResponse.writer.print(
JsonUtility.toJson(
[ alias : alias, name : api.user.firstName ]
)
)
!
}
}
runScript.py -e TEST --userId 1189658154 --args "name=bob" HelloEndpoint.groovy
{"alias":"bob","name":"Old"}
147. public class HelloEndpoint extends APIEndpoint {
@Override
public void execute(APIRequest api) throws Throwable {
// get a request parameter from servlet request
String alias = api.servletRequest.getParameter("name");
!
// set content type and write something to servlet response
api.servletResponse.setContentType("application/json");
api.servletResponse.writer.print(
JsonUtility.toJson(
[ alias : alias, name : api.user.firstName ]
)
)
!
}
}
runScript.py -e TEST --userId 1189658154 --args "name=bob" HelloEndpoint.groovy
{"alias":"bob","name":"Old"}
148. public class HelloEndpoint extends APIEndpoint {
@Override
public void execute(APIRequest api) throws Throwable {
// get a request parameter from servlet request
String alias = api.servletRequest.getParameter("name");
!
// set content type and write something to servlet response
api.servletResponse.setContentType("application/json");
api.servletResponse.writer.print(
JsonUtility.toJson(
[ alias : alias, name : api.user.firstName ]
)
)
!
}
}
runScript.py -e TEST --userId 1189658154 --args "name=bob" HelloEndpoint.groovy
{"alias":"bob","name":"Old"}
149. public class HelloEndpoint extends APIEndpoint {
@Override
public void execute(APIRequest api) throws Throwable {
// get a request parameter from servlet request
String alias = api.servletRequest.getParameter("name");
!
// set content type and write something to servlet response
api.servletResponse.setContentType("application/json");
api.servletResponse.writer.print(
JsonUtility.toJson(
[ alias : alias, name : api.user.firstName ]
)
)
!
}
}
runScript.py -e TEST --userId 1189658154 --args "name=bob" HelloEndpoint.groovy
{"alias":"bob","name":"Old"}
150. public Observable getVideoSummary(APIVideo video) {
// get id, title
def seed = [id: video.id, title : video.getTitle(APIVideo.TitleType.REGULAR)]
!
// get bookmark
def bookmarkObservable = getBookmark(video)
!
// get artwork
def artworkObservable = getArtworkImageUrl(video)
!
// merge them and accumulate into the seed.
return Observable.merge(bookmarkObservable, artworkObservable)
.reduce(seed, { aggregate, current -> aggregate << current})
.map({ [ (video.id.toString()) : it]})
}
151. public Observable getVideoSummary(APIVideo video) {
// get id, title
def seed = [id: video.id, title : video.getTitle(APIVideo.TitleType.REGULAR)]
!
// get bookmark
def bookmarkObservable = getBookmark(video)
!
// get artwork
def artworkObservable = getArtworkImageUrl(video)
!
// merge them and accumulate into the seed.
return Observable.merge(bookmarkObservable, artworkObservable)
.reduce(seed, { aggregate, current -> aggregate << current})
.map({ [ (video.id.toString()) : it]})
}
152. public Observable getVideoSummary(APIVideo video) {
// get id, title
def seed = [id: video.id, title : video.getTitle(APIVideo.TitleType.REGULAR)]
!
// get bookmark
def bookmarkObservable = getBookmark(video)
!
// get artwork
def artworkObservable = getArtworkImageUrl(video)
!
// merge them and accumulate into the seed.
return Observable.merge(bookmarkObservable, artworkObservable)
.reduce(seed, { aggregate, current -> aggregate << current})
.map({ [ (video.id.toString()) : it]})
}
153. public Observable getVideoSummary(APIVideo video) {
// get id, title
def seed = [id: video.id, title : video.getTitle(APIVideo.TitleType.REGULAR)]
!
// get bookmark
def bookmarkObservable = getBookmark(video)
!
// get artwork
def artworkObservable = getArtworkImageUrl(video)
!
// merge them and accumulate into the seed.
return Observable.merge(bookmarkObservable, artworkObservable)
.reduce(seed, { aggregate, current -> aggregate << current})
.map({ [ (video.id.toString()) : it]})
}
154. public Observable getVideoSummary(APIVideo video) {
// get id, title
def seed = [id: video.id, title : video.getTitle(APIVideo.TitleType.REGULAR)]
!
// get bookmark
def bookmarkObservable = getBookmark(video)
!
// get artwork
def artworkObservable = getArtworkImageUrl(video)
!
// merge them and accumulate into the seed.
return Observable.merge(bookmarkObservable, artworkObservable)
.reduce(seed, { aggregate, current -> aggregate << current})
.map({ [ (video.id.toString()) : it]})
}
155. public Observable getVideoSummary(APIVideo video) {
// get id, title
def seed = [id: video.id, title : video.getTitle(APIVideo.TitleType.REGULAR)]
!
// get bookmark
def bookmarkObservable = getBookmark(video)
!
// get artwork
def artworkObservable = getArtworkImageUrl(video)
!
// merge them and accumulate into the seed.
return Observable.merge(bookmarkObservable, artworkObservable)
.reduce(seed, { aggregate, current -> aggregate << current})
.map({ [ (video.id.toString()) : it]})
}
156. public Observable getVideoSummary(APIVideo video) {
// get id, title
def seed = [id: video.id, title : video.getTitle(APIVideo.TitleType.REGULAR)]
!
// get bookmark
def bookmarkObservable = getBookmark(video)
!
// get artwork
def artworkObservable = getArtworkImageUrl(video)
!
// merge them and accumulate into the seed.
return Observable.merge(bookmarkObservable, artworkObservable)
.reduce(seed, { aggregate, current -> aggregate << current})
.map({ [ (video.id.toString()) : it]})
}
157. $ uploadScript.py -e TEST /test/hello sample.groovy
{
"active": false,
"allocationPercentage": 0,
"creationDate": "Mon Nov 11 05:38:51 UTC 2013",
"revision": 1,
"userAuthorizationRequired": true,
"userAuthorizationType": "https"
}
158. $ uploadScript.py -e TEST /test/hello sample.groovy
{
"active": false,
"allocationPercentage": 0,
"creationDate": "Mon Nov 11 05:38:51 UTC 2013",
"revision": 1,
"userAuthorizationRequired": true,
"userAuthorizationType": "https"
}
159. $ uploadScript.py -e TEST /test/hello sample.groovy
{
"active": false,
"allocationPercentage": 0,
"creationDate": "Mon Nov 11 05:40:26 UTC 2013",
"revision": 2,
"userAuthorizationRequired": true,
"userAuthorizationType": "https"
}
160. $ uploadScript.py -e TEST /test/hello sample.groovy
{
"active": false,
"allocationPercentage": 0,
"creationDate": "Mon Nov 11 05:40:26 UTC 2013",
"revision": 2,
"userAuthorizationRequired": true,
"userAuthorizationType": "https"
}
$ activateScript.py -e TEST --revision 2 /test/hello
{
"active": true,
"allocationPercentage": 100,
"creationDate": "Mon Nov 11 05:40:26 UTC 2013",
"previousRevision": null,
"revision": 2,
"userAuthorizationRequired": true,
"userAuthorizationType": "https"
}
161. $ uploadScript.py -e TEST /test/hello sample.groovy
{
"active": false,
"allocationPercentage": 0,
"creationDate": "Mon Nov 11 05:40:26 UTC 2013",
"revision": 2,
"userAuthorizationRequired": true,
"userAuthorizationType": "https"
}
$ activateScript.py -e TEST --revision 2 /test/hello
{
"active": true,
"allocationPercentage": 100,
"creationDate": "Mon Nov 11 05:40:26 UTC 2013",
"previousRevision": null,
"revision": 2,
"userAuthorizationRequired": true,
"userAuthorizationType": "https"
}
162. $ uploadScript.py -e TEST /test/hello sample.groovy
{
"active": false,
"allocationPercentage": 0,
"creationDate": "Mon Nov 11 05:40:26 UTC 2013",
"revision": 2,
"userAuthorizationRequired": true,
"userAuthorizationType": "https"
}
$ activateScript.py -e TEST --revision 2 /test/hello
{
"active": true,
"allocationPercentage": 100,
"creationDate": "Mon Nov 11 05:40:26 UTC 2013",
"previousRevision": null,
"revision": 2,
"userAuthorizationRequired": true,
"userAuthorizationType": "https"
}
163. $ uploadScript.py -e TEST /test/hello sample.groovy
{
"active": false,
"allocationPercentage": 0,
"creationDate": "Mon Nov 11 05:40:26 UTC 2013",
"revision": 2,
"userAuthorizationRequired": true,
"userAuthorizationType": "https"
}
$ activateScript.py -e TEST --revision 2 /test/hello
{
"active": true,
"allocationPercentage": 100,
"creationDate": "Mon Nov 11 05:40:26 UTC 2013",
"previousRevision": null,
"revision": 2,
"userAuthorizationRequired": true,
"userAuthorizationType": "https"
}
164. $ uploadScript.py -e TEST /test/hello sample.groovy
{
"active": false,
"allocationPercentage": 0,
"creationDate": "Mon Nov 11 05:40:26 UTC 2013",
"revision": 2,
"userAuthorizationRequired": true,
"userAuthorizationType": "https"
}
$ activateScript.py -e TEST --revision 3 /test/hello
{
"active": true,
"allocationPercentage": 100,
"creationDate": "Mon Nov 11 05:42:05 UTC 2013",
"previousRevision": 2,
"revision": 3,
"userAuthorizationRequired": true,
"userAuthorizationType": "https"
}
166. millions of API requests per day
2000
1500
1000
500
0
2008
2009
2010
2011
2012
Today
167.
168.
169.
170.
171.
172.
173.
174. /tv/home
/android/home
/ps3/home
Functional Reactive Dynamic Endpoints
Asynchronous Java API
Dependency A
10 Threads
Dependency F
10 Threads
Dependency K
15 Threads
Dependency P
10 Threads
Dependency B
8 Threads
Dependency G
10 Threads
Dependency L
4 Threads
Dependency Q
8 Threads
Dependency C
10 Threads
Dependency H
10 Threads
Dependency M
5 Threads
Dependency R
10 Threads
Dependency D
15 Threads
Dependency I
5 Threads
Dependency N
10 Threads
Dependency S
8 Threads
Dependency E
5 Threads
Dependency J
8 Threads
Dependency O
10 Threads
Dependency T
10 Threads
175. /tv/home
/android/home
/ps3/home
Hystrix
Functional Reactive Dynamic Endpoints
fault-isolation layer
Asynchronous Java API
Dependency A
10 Threads
Dependency F
10 Threads
Dependency K
15 Threads
Dependency P
10 Threads
Dependency B
8 Threads
Dependency G
10 Threads
Dependency L
4 Threads
Dependency Q
8 Threads
Dependency C
10 Threads
Dependency H
10 Threads
Dependency M
5 Threads
Dependency R
10 Threads
Dependency D
15 Threads
Dependency I
5 Threads
Dependency N
10 Threads
Dependency S
8 Threads
Dependency E
5 Threads
Dependency J
8 Threads
Dependency O
10 Threads
Dependency T
10 Threads
176. +
Observable<User>
u
=
new
GetUserCommand(id).observe();
Observable<Geo>
g
=
new
GetGeoCommand(request).observe();
!
Observable.zip(u,
g,
{user,
geo
-‐>
return
[username:
user.getUsername(),
currentLocation:
geo.getCounty()]
})
RxJava in Hystrix 1.3+
https://github.com/Netflix/Hystrix
177.
178.
179. Ben Christensen
@benjchristensen
http://www.linkedin.com/in/benjchristensen
jobs.netflix.com
!
Functional Reactive in the Netflix API with RxJava
http://techblog.netflix.com/2013/02/rxjava-netflix-api.html
!
Optimizing the Netflix API
http://techblog.netflix.com/2013/01/optimizing-netflix-api.html
!
Application Resilience in a Service-oriented Architecture
http://programming.oreilly.com/2013/06/application-resilience-in-a-service-oriented-architecture.html
!
Fault Tolerance in a High Volume, Distributed System
http://techblog.netflix.com/2012/02/fault-tolerance-in-high-volume.html
!
Making the Netflix API More Resilient
http://techblog.netflix.com/2011/12/making-netflix-api-more-resilient.html
180. Watch the video with slide synchronization on
InfoQ.com!
http://www.infoq.com/presentations/netflixapi-evolution