Avatar of Conor Myhrvold

Conor Myhrvold

Tech Brand Mgr, Office of CTO at Uber
Tech Brand Mgr, Office of CTO at Uber·

How Uber developed the open source, end-to-end distributed tracing Jaeger , now a CNCF project:

Distributed tracing is quickly becoming a must-have component in the tools that organizations use to monitor their complex, microservice-based architectures. At Uber, our open source distributed tracing system Jaeger saw large-scale internal adoption throughout 2016, integrated into hundreds of microservices and now recording thousands of traces every second.

Here is the story of how we got here, from investigating off-the-shelf solutions like Zipkin, to why we switched from pull to push architecture, and how distributed tracing will continue to evolve:

https://eng.uber.com/distributed-tracing/

(GitHub Pages : https://www.jaegertracing.io/, GitHub: https://github.com/jaegertracing/jaeger)

Bindings/Operator: Python Java Node.js Go C++ Kubernetes JavaScript OpenShift C# Apache Spark

READ MORE
Evolving Distributed Tracing at Uber Engineering | Uber Engineering Blog (eng.uber.com)
44 upvotes·5 comments·9.7M views
SLboat
SLboat
·
January 30th 2019 at 12:47AM

nice tool

·
Reply
VASANTHKUMAR SR
VASANTHKUMAR SR
·
March 2nd 2024 at 1:16PM

techmotive7.blogspot.com

·
Reply
Isabelle Foster
Isabelle Foster
·
January 20th 2020 at 2:42PM

ok, thanks!

·
Reply
Eric Plaster
Eric Plaster
·
February 26th 2020 at 9:56PM

Thank you for pointing out this tool! I didn't know it even existed, and I could have used it several times over. Thanks!

·
Reply
Harry K Williams
Harry K Williams
·
March 6th 2020 at 10:02AM

very very useful!!

·
Reply
Tech Brand Mgr, Office of CTO at Uber·

Our most popular (& controversial!) article to date on the Uber Engineering blog in 3+ yrs. Why we moved from PostgreSQL to MySQL. In essence, it was due to a variety of limitations of Postgres at the time. Fun fact -- earlier in Uber's history we'd actually moved from MySQL to Postgres before switching back for good, & though we published the article in Summer 2016 we haven't looked back since:

The early architecture of Uber consisted of a monolithic backend application written in Python that used Postgres for data persistence. Since that time, the architecture of Uber has changed significantly, to a model of microservices and new data platforms. Specifically, in many of the cases where we previously used Postgres, we now use Schemaless, a novel database sharding layer built on top of MySQL (https://eng.uber.com/schemaless-part-one/). In this article, we’ll explore some of the drawbacks we found with Postgres and explain the decision to build Schemaless and other backend services on top of MySQL:

https://eng.uber.com/mysql-migration/

READ MORE
Why Uber Engineering Switched from Postgres to MySQL | Uber Engineering Blog (eng.uber.com)
23 upvotes·2 comments·2.3M views
Adrien Nayrat
Adrien Nayrat
·
December 21st 2018 at 5:47PM

https://thebuild.com/presentations/uber-perconalive-2017.pdf

https://blog.2ndquadrant.com/thoughts-on-ubers-list-of-postgres-limitations/

https://use-the-index-luke.com/blog/2016-07-29/on-ubers-choice-of-databases

·
Reply
Isabelle Foster
Isabelle Foster
·
January 20th 2020 at 2:41PM

it` s interesting question!

·
Reply
Tech Brand Mgr, Office of CTO at Uber·

Why Uber developed H3, our open source grid system to make geospatial data visualization and exploration easier and more efficient:

We decided to create H3 to combine the benefits of a hexagonal global grid system with a hierarchical indexing system. A global grid system usually requires at least two things: a map projection and a grid laid on top of the map. For map projection, we chose to use gnomonic projections centered on icosahedron faces. This projects from Earth as a sphere to an icosahedron, a twenty-sided platonic solid. The H3 grid is constructed by laying out 122 base cells over the Earth, with ten cells per face. H3 supports sixteen resolutions: https://eng.uber.com/h3/

(GitHub Pages : https://uber.github.io/h3/#/ Written in C w/ bindings in Java & JavaScript )

READ MORE
H3: Uber’s Hexagonal Hierarchical Spatial Index (eng.uber.com)
17 upvotes·1.6M views
Tech Brand Mgr, Office of CTO at Uber·

Why we spent several years building an open source, large-scale metrics alerting system, M3, built for Prometheus:

By late 2014, all services, infrastructure, and servers at Uber emitted metrics to a Graphite stack that stored them using the Whisper file format in a sharded Carbon cluster. We used Grafana for dashboarding and Nagios for alerting, issuing Graphite threshold checks via source-controlled scripts. While this worked for a while, expanding the Carbon cluster required a manual resharding process and, due to lack of replication, any single node’s disk failure caused permanent loss of its associated metrics. In short, this solution was not able to meet our needs as the company continued to grow.

To ensure the scalability of Uber’s metrics backend, we decided to build out a system that provided fault tolerant metrics ingestion, storage, and querying as a managed platform...

https://eng.uber.com/m3/

(GitHub : https://github.com/m3db/m3)

READ MORE
M3: Uber’s Open Source, Large-scale Metrics Platform for Prometheus (eng.uber.com)
15 upvotes·4.5M views
Tech Brand Mgr, Office of CTO at Uber·

Excerpts from how we developed (and subsequently open sourced) Uber's cross-platform mobile architecture framework, RIBs , going from Objective-C to Swift in the process for iOS: https://github.com/uber/RIBs

Uber’s new application architecture (RIBs) extensively uses protocols to keep its various components decoupled and testable. We used this architecture for the first time in our new rider application and moved our primary language from Objective-C to Swift. Since Swift is a very static language, unit testing became problematic. Dynamic languages have good frameworks to build test mocks, stubs, or stand-ins by dynamically creating or modifying existing concrete classes.

Needless to say, we were not very excited about the additional complexity of manually writing and maintaining mock implementations for each of our thousands of protocols.

The information required to generate mock classes already exists in the Swift protocol. For Uber’s use case, we set out to create tooling that would let engineers automatically generate test mocks for any protocol they wanted by simply annotating them.

The iOS codebase for our rider application alone incorporates around 1,500 of these generated mocks. Without our code generation tool, all of these would have to be written and maintained by hand, which would have made testing much more time-intensive. Auto-generated mocks have contributed a lot to the unit test coverage that we have today.

We built these code generation tools ourselves for a number of reasons, including that there weren’t many open source tools available at the time we started our effort. Today, there are some great open source tools to generate resource accessors, like SwiftGen. And Sourcery can help you with generic code generation needs:

https://eng.uber.com/code-generation/ https://eng.uber.com/driver-app-ribs-architecture/

(GitHub : https://github.com/uber/RIBs )

READ MORE
Harnessing Code Generation to Increase Reliability & Productivity on iOS at Uber (eng.uber.com)
13 upvotes·1.6M views
Tech Brand Mgr, Office of CTO at Uber·

Why we built an open source, distributed training framework for TensorFlow , Keras , and PyTorch:

At Uber, we apply deep learning across our business; from self-driving research to trip forecasting and fraud prevention, deep learning enables our engineers and data scientists to create better experiences for our users.

TensorFlow has become a preferred deep learning library at Uber for a variety of reasons. To start, the framework is one of the most widely used open source frameworks for deep learning, which makes it easy to onboard new users. It also combines high performance with an ability to tinker with low-level model details—for instance, we can use both high-level APIs, such as Keras, and implement our own custom operators using NVIDIA’s CUDA toolkit.

Uber has introduced Michelangelo (https://eng.uber.com/michelangelo/), an internal ML-as-a-service platform that democratizes machine learning and makes it easy to build and deploy these systems at scale. In this article, we pull back the curtain on Horovod, an open source component of Michelangelo’s deep learning toolkit which makes it easier to start—and speed up—distributed deep learning projects with TensorFlow:

https://eng.uber.com/horovod/

(Direct GitHub repo: https://github.com/uber/horovod)

READ MORE
Meet Horovod: Uber's Open Source Distributed Deep Learning Framework (eng.uber.com)
8 upvotes·2.8M views
Tech Brand Mgr, Office of CTO at Uber·

Why we built Marmaray, an open source generic data ingestion and dispersal framework and library for Apache Hadoop :

Built and designed by our Hadoop Platform team, Marmaray is a plug-in-based framework built on top of the Hadoop ecosystem. Users can add support to ingest data from any source and disperse to any sink leveraging the use of Apache Spark . The name, Marmaray, comes from a tunnel in Turkey connecting Europe and Asia. Similarly, we envisioned Marmaray within Uber as a pipeline connecting data from any source to any sink depending on customer preference:

https://eng.uber.com/marmaray-hadoop-ingestion-open-source/

(Direct GitHub repo: https://github.com/uber/marmaray Kafka Kafka Manager )

READ MORE
Marmaray: An Open Source Generic Data Ingestion and Dispersal Framework and Library for Apache Hadoop | Uber Engineering Blog (eng.uber.com)
7 upvotes·2.9M views
Tech Brand Mgr, Office of CTO at Uber·

Why we piggybacked on the open source Mattermost for Uber's chat needs, which we open sourced as uChat ( GitHub : https://github.com/uber-uchat/ -- contributing some of our changes back to Mattermost as well in the process.)

With operations in over 620 cities, it was paramount for us to identify a chat solution that would enable Uber employees to reliably communicate on desktop and mobile regardless of where they were in the world. To accomplish this, we established a few core requirements. To start, we needed something that could scale to support our growing employee population and, as a byproduct, control costs. We also needed a platform that could easily integrate with a variety of internal engineering, business, and operational tools.

While we evaluated Internet Relay Chat (IRC) and many other popular chat clients, it became clear that there was no turnkey third-party solution able to meet Uber’s core requirements.

So after testing multiple off-the-shelf alternatives, we built uChat, our custom in-house messaging platform, by leveraging open source platform Mattermost and Puppet Labs , the Uber standard for deployment configuration management. In this article, we discuss how in just three months our team transitioned the company to a new solution capable of reliably delivering over one million messages per day to tens of thousands of users, all in one unified chat environment:

https://eng.uber.com/uchat/

READ MORE
The Road to uChat: Building Uber’s Internal Chat Solution (eng.uber.com)
5 upvotes·71.2K views