This is an automated email from the ASF dual-hosted git repository.
aizhamal pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git
The following commit(s) were added to refs/heads/master by this push:
new ed900737d0a [Website] add new case-study, fix styles, add related
images (#21891)
ed900737d0a is described below
commit ed900737d0aff69d758c686c3c8175c6b41441d7
Author: bullet03 <[email protected]>
AuthorDate: Sat Jun 18 03:13:47 2022 +0600
[Website] add new case-study, fix styles, add related images (#21891)
---
website/www/site/assets/scss/_case_study.scss | 11 +-
website/www/site/content/en/case-studies/lyft.md | 158 +++++++++++++++++++++
.../lyft/apache_beam_ml_features_generation.svg | 102 +++++++++++++
.../images/case-study/lyft/ravi_kiran_magham.png | Bin 0 -> 155159 bytes
.../site/static/images/logos/powered-by/lyft.png | Bin 0 -> 50028 bytes
5 files changed, 270 insertions(+), 1 deletion(-)
diff --git a/website/www/site/assets/scss/_case_study.scss
b/website/www/site/assets/scss/_case_study.scss
index 21d881a3031..d254473eb77 100644
--- a/website/www/site/assets/scss/_case_study.scss
+++ b/website/www/site/assets/scss/_case_study.scss
@@ -99,6 +99,7 @@
}
.case-study-card-title {
+ min-height: 45px;
margin: 12px 0;
font-size: 18px;
}
@@ -228,7 +229,7 @@ h2.case-study-h2 {
height: 37px;
width: 46px;
right: 12px;
- bottom: 16px;
+ bottom: 12px;
position: absolute;
font-size: 96px;
color: #E5E5E5;
@@ -298,6 +299,12 @@ h2.case-study-h2 {
width: 100%;
max-height: 100px;
}
+
+ .case-study-opinion-img-cropped {
+ display: block;
+ margin: 0 auto;
+ width: 40%;
+ }
}
}
@@ -308,6 +315,8 @@ h2.case-study-h2 {
.post-scheme {
margin-bottom: 16px;
+ text-align: center;
+ font-style: italic;
img {
width: 100%;
diff --git a/website/www/site/content/en/case-studies/lyft.md
b/website/www/site/content/en/case-studies/lyft.md
new file mode 100644
index 00000000000..5559244b1b8
--- /dev/null
+++ b/website/www/site/content/en/case-studies/lyft.md
@@ -0,0 +1,158 @@
+---
+title: "Real-time ML with Beam at Lyft"
+name: "Lyft"
+icon: "/images/logos/powered-by/lyft.png"
+category: "study"
+cardTitle: "Real-time ML with Beam at Lyft"
+cardDescription: "Lyft Marketplace team aims to improve our business
efficiency by being nimble to real-world dynamics. Apache Beam has enabled us
to meet the goal of having a robust and scalable ML infrastructure for
improving model accuracy with features in real-time. These real-time features
support critical functions like Forecasting, Primetime, Dispatch."
+authorName: "Ravi Kiran Magham"
+authorPosition: "Software Engineer @ Lyft"
+authorImg: /images/case-study/lyft/ravi_kiran_magham.png
+publishDate: 2022-06-17T00:12:00+00:00
+---
+<!--
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<div class="case-study-opinion">
+ <div class="case-study-opinion-img">
+ <img class="case-study-opinion-img-cropped"
src="/images/logos/powered-by/lyft.png"/>
+ </div>
+ <blockquote class="case-study-quote-block">
+ <p class="case-study-quote-text">
+ “Lyft Marketplace team aims to improve our business efficiency by
being nimble to real-world dynamics. Apache Beam has enabled us to meet the
goal of having a robust and scalable ML infrastructure for improving model
accuracy with features in real-time. These real-time features support critical
functions like Forecasting, Primetime, Dispatch.”
+ </p>
+ <div class="case-study-quote-author">
+ <div class="case-study-quote-author-img">
+ <img src="/images/case-study/lyft/ravi_kiran_magham.png">
+ </div>
+ <div class="case-study-quote-author-info">
+ <div class="case-study-quote-author-name">
+ Ravi Kiran Magham
+ </div>
+ <div class="case-study-quote-author-position">
+ Software Engineer @ Lyft
+ </div>
+ </div>
+ </div>
+ </blockquote>
+</div>
+<div class="case-study-post">
+
+# Real-time ML with Beam at Lyft
+
+## Background
+
+[Lyft, Inc.](https://www.lyft.com/) is an American mobility-as-a-service
provider that offers ride-hailing, car and motorized scooter rentals,
bicycle-sharing, food delivery, and business transportation solutions. Lyft is
based in San Francisco, California, and [operates
in](https://www.lyft.com/rider/cities) 644 cities in the United States and 12
cities in Canada.
+
+As you might expect from a company as large as Lyft, connecting drivers and
riders in space and time at such a scale requires a powerful real-time
streaming infrastructure. Ravi Kiran Magham, Software Engineer at Lyft, shared
the story of how Apache Beam has become a mission-critical and integral
real-time data processing technology for Lyft by enabling large-scale streaming
data processing and machine learning pipelines.
+
+## Democratizing Stream Processing
+
+Lyft originally built streaming ETL pipelines to transform, enrich, and sink
events generated by application services to their data lake in [AWS S3
](https://aws.amazon.com/s3/) using [Amazon
Kinesis](https://aws.amazon.com/kinesis/) and [Apache
Flink](https://flink.apache.org/). Apache Flink is the foundation of Lyft’s
streaming architecture and was chosen over Apache Spark due to its robust,
fault-tolerant, and intuitive API for distributed stateful stream processing,
exactly-once proc [...]
+
+Lyft’s popularity and growth were bringing new demands to data streaming
infrastructure: more teams with diverse programming language preferences wanted
to explore event-driven streaming applications, and build streaming features
for real-time machine learning models to make business more efficient, enhance
customer experiences, and provide time-sensitive compliance operations. The
Data Platform team looked into improving the prime time (surge pricing)
computation for the Marketplace tea [...]
+
+<blockquote class="case-study-quote-block case-study-quote-wrapped">
+ <p class="case-study-quote-text">
+ The Apache Beam portability and multi-language capabilities were the key
pique and the primary reason for us to start exploring Beam in a bigger way.
+ </p>
+ <div class="case-study-quote-author">
+ <div class="case-study-quote-author-img">
+ <img src="/images/case-study/lyft/ravi_kiran_magham.png">
+ </div>
+ <div class="case-study-quote-author-info">
+ <div class="case-study-quote-author-name">
+ Ravi Kiran Magham
+ </div>
+ <div class="case-study-quote-author-position">
+ Software Engineer @ Lyft
+ </div>
+ </div>
+ </div>
+</blockquote>
+
+Apache Beam provides a solution to the programming language and data
processing engine dilemma, as it offers a variety of
[runners](/documentation/basics/#runner) (including the [Beam Flink
runner](/documentation/runners/flink/) for Apache Flink) and a [variety of
programming language SDKs](/documentation/sdks/java/). Apache Beam offers an
ultimate level of portability with its concept of “write once, run anywhere”
and its ability to create [multi-language pipelines - data pipelines](/do [...]
+
+<blockquote class="case-study-quote-block case-study-quote-wrapped">
+ <p class="case-study-quote-text">
+ Leveraging Apache Beam has been a “win-win” decision for us because our
data infra teams use Java but we are able to offer Python SDK for our product
teams, as it has been the de-facto language that they prefer. We write
streaming pipelines with ease and comfort and run them on the Beam Flink runner.
+ </p>
+ <div class="case-study-quote-author">
+ <div class="case-study-quote-author-img">
+ <img src="/images/case-study/lyft/ravi_kiran_magham.png">
+ </div>
+ <div class="case-study-quote-author-info">
+ <div class="case-study-quote-author-name">
+ Ravi Kiran Magham
+ </div>
+ <div class="case-study-quote-author-position">
+ Software Engineer @ Lyft
+ </div>
+ </div>
+ </div>
+</blockquote>
+
+The Data Platform team built a control plane of in-house services and
[FlinkK8sOperator](https://github.com/lyft/flinkk8soperator) to manage Flink
applications on a Kubernetes cluster and deploy streaming Apache Beam and
Apache Flink jobs. Lyft uses a blue/green deployment strategy on critical
pipelines to minimize any downtime and uses custom macros for improved
observability and seamless integration of the CI/CD deployments. To improve
developer productivity, the Data Platform team o [...]
+
+## Powering Real-time Machine Learning Pipelines
+
+Lyft Marketplace plays a pivotal role in optimizing fleet demand and supply
prediction, dynamic pricing, ETA calculation, and more. The Apache Beam Python
SDK and Flink Runner enable the team to be nimble to change and support the
demands for real-time ML – streaming feature generation and model execution.
The Data Platform team has extended the streaming infrastructure to support
Continual Learning use cases. Apache Beam powers continuous training of ML
models with real-time data over l [...]
+
+<div class="post-scheme">
+ <img src="/images/case-study/lyft/apache_beam_ml_features_generation.svg"
alt="Apache Beam Feature Generation and ML Model Execution">
+ <span>Apache Beam Feature Generation and ML Model Execution </span>
+</div>
+
+Lyft separated Feature Generation and ML Model Execution into multiple
streaming pipelines. The streaming Apache Beam pipeline generates features in
real-time and writes them to a Kafka topic to be consumed by the model
execution pipeline. Based on user configuration, the features are replicated
and keyed out by model ID to [stateful](/blog/stateful-processing/) ParDo
transforms, which leverage [timers](/documentation/programming-guide/#timers)
and/or data (feature) availability to invok [...]
+
+The complex real-time Feature Generation involves processing ~4 million events
of 1KB per minute with sub-second latency, generating ~100 features on multiple
event attributes across space and time granularities (1 and 5 minutes). Apache
Beam allowed the Lyft Marketplace team to reduce latency by
[60%](https://conferences.oreilly.com/strata/strata-ca-2019/cdn.oreillystatic.com/en/assets/1/event/290/The%20magic%20behind%20your%20Lyft%20ride%20prices_%20A%20case%20study%20on%20machine%20le
[...]
+
+<blockquote class="case-study-quote-block case-study-quote-wrapped">
+ <p class="case-study-quote-text">
+ The Marketplace team are <a
href="https://eng.lyft.com/gotchas-of-stream-processing-data-skewness-cfba58eb45d4">heavy
users of Apache Beam</a> for real-time feature computation and model
executions. Processing events in real-time with a sub-second latency allows our
ML models to understand marketplace dynamics early and make informed decisions.
+ </p>
+ <div class="case-study-quote-author">
+ <div class="case-study-quote-author-img">
+ <img src="/images/case-study/lyft/ravi_kiran_magham.png">
+ </div>
+ <div class="case-study-quote-author-info">
+ <div class="case-study-quote-author-name">
+ Ravi Kiran Magham
+ </div>
+ <div class="case-study-quote-author-position">
+ Software Engineer @ Lyft
+ </div>
+ </div>
+ </div>
+</blockquote>
+
+## Amplifying Use Cases
+
+Lyft has leveraged Apache Beam for more than 60 use cases and enabled them to
complete critical business commitments and improve real-time user experiences.
+
+For example, Lyft's Map Data Delivery team moved from a batch process to a
streaming pipeline for identifying road closures in real-time. Their Routing
Engine uses this information to determine the best routes, improve ETA and
provide a better driver and customer experience. The job processes ~400k
events per second, conflates streams of data coming from 3rd party road
closures and real-time traffic data to determine actual closures and publish
them as events to Kafka. A custom S3 PTran [...]
+
+Apache Beam enabled Lyft to optimize a very specific use case that relates to
reporting pick-ups and drop-offs at airports. Airports require mobility
applications to report every pick-up and drop-off and match them with the time
of fleet entry and exit. Failing to do so results in a lower compliance score
and even risk of being penalized. Originally, Lyft had a complicated
implementation using the [KCL
library](https://docs.aws.amazon.com/streams/latest/dev/kinesis-record-processor-imple
[...]
+
+Like many companies shaking up standard business models, Lyft relies on
open-source software and likes to give back to the community. Many of the big
data frameworks, tools, and implementations developed by Lyft are open-sourced
on their [GitHub](https://github.com/orgs/lyft/repositories). Lyft has been an
ample Apache Beam contributor since 2018, and Lyft engineers have presented
their Apache Beam integrations at various events, such as [Beam Summit North
America](https://www.youtube.co [...]
+
+## Results
+
+The portability of the Apache Beam model is the key to distributed execution.
It enabled Lyft to run mission-critical data pipelines written in a non-JVM
language on a JVM-based runner. Thus, they avoided code rewrites and
sidestepped the potential cost of many API styles and runtime environments,
reducing pipeline development time from multiple days to just hours. Full
isolation of user code and native CPython execution without library
restrictions resulted in easy onboarding and adopti [...]
+
+Apache Beam enabled Lyft to switch from batch ML model training to real-time
ML training with granular control of data freshness using windowing. Their data
engineering and product teams can use both Python and Java, based on the
appropriateness for a particular task or their preference. Apache Beam has
helped Lyft successfully build and scale 60+ streaming pipelines processing
events at very low latencies in near-real-time. New use cases keep coming, and
Lyft is planning on leveraging [...]
+
+{{< case_study_feedback "Lyft" >}}
+
+</div>
+<div class="clear-nav"></div>
diff --git
a/website/www/site/static/images/case-study/lyft/apache_beam_ml_features_generation.svg
b/website/www/site/static/images/case-study/lyft/apache_beam_ml_features_generation.svg
new file mode 100644
index 00000000000..b86b3fdbe9e
--- /dev/null
+++
b/website/www/site/static/images/case-study/lyft/apache_beam_ml_features_generation.svg
@@ -0,0 +1,102 @@
+<!--
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+<svg width="1331" height="457" viewBox="0 0 1331 457" fill="none"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<rect width="1331" height="457" fill="white"/>
+<rect x="10" y="154" width="66" height="36" rx="5" fill="#D7EDD8"/>
+<path d="M21.5033
178V167.536H27.8073V169.104H23.3593V171.776H27.1193V173.344H23.3593V176.432H27.9673V178H21.5033ZM31.5144
178L28.7784 170.144H30.6504L31.8984 174.224C32.0051 174.608 32.1118 174.997
32.2184 175.392C32.3358 175.787 32.4478 176.187 32.5544 176.592H32.6184C32.7358
176.187 32.8478 175.787 32.9544 175.392C33.0718 174.997 33.1838 174.608 33.2904
174.224L34.5384 170.144H36.3144L33.6424 178H31.5144ZM40.9006 178.192C40.1752
178.192 39.5192 178.032 38.9326 177.712C38.3459 177.381 [...]
+<rect x="124" y="154" width="69" height="36" rx="5" fill="#D7DEED"/>
+<path d="M135.571 178V167.536H137.427V172.288H137.475L141.203
167.536H143.267L140.051 171.616L143.811 178H141.763L138.931 173.072L137.427
174.944V178H135.571ZM144.916 178V170.144H146.756V178H144.916ZM145.844
168.768C145.513 168.768 145.247 168.672 145.044 168.48C144.841 168.288 144.74
168.032 144.74 167.712C144.74 167.403 144.841 167.152 145.044 166.96C145.247
166.768 145.513 166.672 145.844 166.672C146.175 166.672 146.441 166.768 146.644
166.96C146.847 167.152 146.948 167.403 146.948 16 [...]
+<rect x="10" y="247" width="66" height="36" rx="5" fill="#D7EDD8"/>
+<path d="M21.5033
271V260.536H27.8073V262.104H23.3593V264.776H27.1193V266.344H23.3593V269.432H27.9673V271H21.5033ZM31.5144
271L28.7784 263.144H30.6504L31.8984 267.224C32.0051 267.608 32.1118 267.997
32.2184 268.392C32.3358 268.787 32.4478 269.187 32.5544 269.592H32.6184C32.7358
269.187 32.8478 268.787 32.9544 268.392C33.0718 267.997 33.1838 267.608 33.2904
267.224L34.5384 263.144H36.3144L33.6424 271H31.5144ZM40.9006 271.192C40.1752
271.192 39.5192 271.032 38.9326 270.712C38.3459 270.381 [...]
+<rect x="124" y="247" width="69" height="36" rx="5" fill="#D7DEED"/>
+<path d="M140.248 271V260.536H142.104V265.288H142.152L145.88
260.536H147.944L144.728 264.616L148.488 271H146.44L143.608 266.072L142.104
267.944V271H140.248ZM151.497 271.192C150.814 271.192 150.254 270.979 149.817
270.552C149.39 270.125 149.177 269.571 149.177 268.888C149.177 268.045 149.545
267.395 150.281 266.936C151.017 266.467 152.19 266.147 153.801 265.976C153.79
265.56 153.678 265.203 153.465 264.904C153.262 264.595 152.894 264.44 152.361
264.44C151.977 264.44 151.598 264.515 151.22 [...]
+<rect x="725" y="199" width="69" height="36" rx="5" fill="#D7DEED"/>
+<path d="M741.248 223V212.536H743.104V217.288H743.152L746.88
212.536H748.944L745.728 216.616L749.488 223H747.44L744.608 218.072L743.104
219.944V223H741.248ZM752.497 223.192C751.814 223.192 751.254 222.979 750.817
222.552C750.39 222.125 750.177 221.571 750.177 220.888C750.177 220.045 750.545
219.395 751.281 218.936C752.017 218.467 753.19 218.147 754.801 217.976C754.79
217.56 754.678 217.203 754.465 216.904C754.262 216.595 753.894 216.44 753.361
216.44C752.977 216.44 752.598 216.515 752.22 [...]
+<rect x="261" y="200" width="100" height="36" rx="5" fill="#ECECEC"/>
+<path d="M294.285
224V213.536H300.605V215.104H296.141V218.064H299.949V219.632H296.141V224H294.285ZM302.239
224V216.144H304.079V224H302.239ZM303.167 214.768C302.836 214.768 302.569
214.672 302.367 214.48C302.164 214.288 302.063 214.032 302.063 213.712C302.063
213.403 302.164 213.152 302.367 212.96C302.569 212.768 302.836 212.672 303.167
212.672C303.497 212.672 303.764 212.768 303.967 212.96C304.169 213.152 304.271
213.403 304.271 213.712C304.271 214.032 304.169 214.288 303.967 214.48C303.
[...]
+<rect x="927" y="199" width="120" height="36" rx="5" fill="#ECECEC"/>
+<path d="M942.957 223V212.536H944.813V217.288H944.861L948.589
212.536H950.653L947.437 216.616L951.197 223H949.149L946.317 218.072L944.813
219.944V223H942.957ZM955.475 223.192C954.749 223.192 954.093 223.032 953.507
222.712C952.92 222.381 952.456 221.912 952.115 221.304C951.773 220.685 951.603
219.944 951.603 219.08C951.603 218.227 951.773 217.491 952.115 216.872C952.467
216.253 952.92 215.779 953.475 215.448C954.029 215.117 954.611 214.952 955.219
214.952C955.933 214.952 956.531 215.112 [...]
+<rect x="409" y="200" width="100" height="36" rx="5" fill="#ECECEC"/>
+<path d="M420.337
224V213.536H426.641V215.104H422.193V217.776H425.953V219.344H422.193V222.432H426.801V224H420.337ZM428.745
224V216.144H430.265L430.393 217.2H430.457C430.809 216.859 431.193 216.565
431.609 216.32C432.025 216.075 432.499 215.952 433.033 215.952C433.875 215.952
434.489 216.224 434.873 216.768C435.257 217.312 435.449 218.08 435.449
219.072V224H433.609V219.312C433.609 218.661 433.513 218.203 433.321
217.936C433.129 217.669 432.814 217.536 432.377 217.536C432.035 217.536 431.7
[...]
+<rect x="1095" y="199" width="79" height="36" rx="5" fill="#ECECEC"/>
+<path d="M1106.62 223V212.536H1108.72L1110.58 217.656C1110.69 217.987 1110.8
218.328 1110.91 218.68C1111.03 219.021 1111.14 219.363 1111.25
219.704H1111.31C1111.43 219.363 1111.54 219.021 1111.65 218.68C1111.75 218.328
1111.86 217.987 1111.97 217.656L1113.78
212.536H1115.89V223H1114.18V218.216C1114.18 217.885 1114.19 217.528 1114.21
217.144C1114.24 216.749 1114.27 216.355 1114.3 215.96C1114.35 215.565 1114.38
215.208 1114.42 214.888H1114.35L1113.5 217.32L1111.79 222.024H1110.69L1108.96 2
[...]
+<rect x="1254" y="199" width="41" height="36" rx="5" fill="#ECECEC"/>
+<path d="M1265.79 223V212.536H1267.88L1269.74 217.656C1269.86 217.987 1269.97
218.328 1270.07 218.68C1270.19 219.021 1270.3 219.363 1270.41
219.704H1270.47C1270.59 219.363 1270.7 219.021 1270.81 218.68C1270.92 218.328
1271.02 217.987 1271.13 217.656L1272.94
212.536H1275.05V223H1273.34V218.216C1273.34 217.885 1273.35 217.528 1273.37
217.144C1273.4 216.749 1273.43 216.355 1273.47 215.96C1273.51 215.565 1273.55
215.208 1273.58 214.888H1273.51L1272.67 217.32L1270.95 222.024H1269.85L1268.12
2 [...]
+<rect x="1095" y="146" width="79" height="36" rx="5" fill="#ECECEC"/>
+<path d="M1106.62 170V159.536H1108.72L1110.58 164.656C1110.69 164.987 1110.8
165.328 1110.91 165.68C1111.03 166.021 1111.14 166.363 1111.25
166.704H1111.31C1111.43 166.363 1111.54 166.021 1111.65 165.68C1111.75 165.328
1111.86 164.987 1111.97 164.656L1113.78
159.536H1115.89V170H1114.18V165.216C1114.18 164.885 1114.19 164.528 1114.21
164.144C1114.24 163.749 1114.27 163.355 1114.3 162.96C1114.35 162.565 1114.38
162.208 1114.42 161.888H1114.35L1113.5 164.32L1111.79 169.024H1110.69L1108.96 1
[...]
+<rect x="1254" y="146" width="41" height="36" rx="5" fill="#ECECEC"/>
+<path d="M1265.79 170V159.536H1267.88L1269.74 164.656C1269.86 164.987 1269.97
165.328 1270.07 165.68C1270.19 166.021 1270.3 166.363 1270.41
166.704H1270.47C1270.59 166.363 1270.7 166.021 1270.81 165.68C1270.92 165.328
1271.02 164.987 1271.13 164.656L1272.94
159.536H1275.05V170H1273.34V165.216C1273.34 164.885 1273.35 164.528 1273.37
164.144C1273.4 163.749 1273.43 163.355 1273.47 162.96C1273.51 162.565 1273.55
162.208 1273.58 161.888H1273.51L1272.67 164.32L1270.95 169.024H1269.85L1268.12
1 [...]
+<rect x="1095" y="252" width="79" height="36" rx="5" fill="#ECECEC"/>
+<path d="M1106.62 276V265.536H1108.72L1110.58 270.656C1110.69 270.987 1110.8
271.328 1110.91 271.68C1111.03 272.021 1111.14 272.363 1111.25
272.704H1111.31C1111.43 272.363 1111.54 272.021 1111.65 271.68C1111.75 271.328
1111.86 270.987 1111.97 270.656L1113.78
265.536H1115.89V276H1114.18V271.216C1114.18 270.885 1114.19 270.528 1114.21
270.144C1114.24 269.749 1114.27 269.355 1114.3 268.96C1114.35 268.565 1114.38
268.208 1114.42 267.888H1114.35L1113.5 270.32L1111.79 275.024H1110.69L1108.96 2
[...]
+<rect x="1254" y="252" width="41" height="36" rx="5" fill="#ECECEC"/>
+<path d="M1265.79 276V265.536H1267.88L1269.74 270.656C1269.86 270.987 1269.97
271.328 1270.07 271.68C1270.19 272.021 1270.3 272.363 1270.41
272.704H1270.47C1270.59 272.363 1270.7 272.021 1270.81 271.68C1270.92 271.328
1271.02 270.987 1271.13 270.656L1272.94
265.536H1275.05V276H1273.34V271.216C1273.34 270.885 1273.35 270.528 1273.37
270.144C1273.4 269.749 1273.43 269.355 1273.47 268.96C1273.51 268.565 1273.55
268.208 1273.58 267.888H1273.51L1272.67 270.32L1270.95 275.024H1269.85L1268.12
2 [...]
+<rect x="557" y="200" width="100" height="36" rx="5" fill="#ECECEC"/>
+<path d="M569.497 224L567.417 213.536H569.321L570.233 218.816C570.318 219.371
570.404 219.931 570.489 220.496C570.585 221.051 570.67 221.605 570.745
222.16H570.809C570.926 221.605 571.038 221.051 571.145 220.496C571.262 219.931
571.38 219.371 571.497 218.816L572.777 213.536H574.393L575.673 218.816C575.79
219.36 575.908 219.915 576.025 220.48C576.142 221.035 576.26 221.595 576.377
222.16H576.441C576.526 221.595 576.612 221.035 576.697 220.48C576.782 219.925
576.862 219.371 576.937 218.816 [...]
+<rect x="423" y="322" width="71" height="36" rx="5" fill="#FCEACF"/>
+<path d="M437.877 346.192C437.173 346.192 436.491 346.059 435.829
345.792C435.179 345.525 434.603 345.147 434.101 344.656L435.189 343.392C435.563
343.744 435.989 344.032 436.469 344.256C436.949 344.469 437.429 344.576 437.909
344.576C438.507 344.576 438.96 344.453 439.269 344.208C439.579 343.963 439.733
343.637 439.733 343.232C439.733 342.795 439.579 342.48 439.269 342.288C438.971
342.096 438.587 341.899 438.117 341.696L436.677 341.072C436.336 340.923 436
340.731 435.669 340.496C435.349 [...]
+<path d="M88 265H108" stroke="#B3B3B3" stroke-width="2"
stroke-linecap="round"/>
+<path d="M114 265L108 269L108 261L114 265Z" fill="#B2B2B2" stroke="#B2B2B2"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M205 265H225" stroke="#B3B3B3" stroke-width="2"
stroke-linecap="round"/>
+<path d="M231 265L225 269L225 261L231 265Z" fill="#B2B2B2" stroke="#B2B2B2"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M88 172H108" stroke="#B3B3B3" stroke-width="2"
stroke-linecap="round"/>
+<path d="M114 172L108 176L108 168L114 172Z" fill="#B2B2B2" stroke="#B2B2B2"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M205 172H225" stroke="#B3B3B3" stroke-width="2"
stroke-linecap="round"/>
+<path d="M231 172L225 176L225 168L231 172Z" fill="#B2B2B2" stroke="#B2B2B2"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M373 218H393" stroke="#B3B3B3" stroke-width="2"
stroke-linecap="round"/>
+<path d="M399 218L393 222L393 214L399 218Z" fill="#B2B2B2" stroke="#B2B2B2"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M521 218H541" stroke="#B3B3B3" stroke-width="2"
stroke-linecap="round"/>
+<path d="M547 218L541 222L541 214L547 218Z" fill="#B2B2B2" stroke="#B2B2B2"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M689 218H709" stroke="#B3B3B3" stroke-width="2"
stroke-linecap="round"/>
+<path d="M715 218L709 222L709 214L715 218Z" fill="#B2B2B2" stroke="#B2B2B2"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M1059 218H1079" stroke="#B3B3B3" stroke-width="2"
stroke-linecap="round"/>
+<path d="M1085 218L1079 222L1079 214L1085 218Z" fill="#B2B2B2"
stroke="#B2B2B2" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round"/>
+<path d="M804 217H889" stroke="#B3B3B3" stroke-width="2"
stroke-linecap="round"/>
+<path d="M895 217L889 221L889 213L895 217Z" fill="#B2B2B2" stroke="#B2B2B2"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M1184 164H1245" stroke="#B3B3B3" stroke-width="2"
stroke-linecap="round"/>
+<path d="M1245 164L1239 168L1239 160L1245 164Z" fill="#B2B2B2"
stroke="#B2B2B2" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round"/>
+<path d="M1184 217H1245" stroke="#B3B3B3" stroke-width="2"
stroke-linecap="round"/>
+<path d="M1245 217L1239 221L1239 213L1245 217Z" fill="#B2B2B2"
stroke="#B2B2B2" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round"/>
+<path d="M1184 271H1245" stroke="#B3B3B3" stroke-width="2"
stroke-linecap="round"/>
+<path d="M1245 271L1239 275L1239 267L1245 271Z" fill="#B2B2B2"
stroke="#B2B2B2" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round"/>
+<path d="M458 310L458 255" stroke="#B3B3B3" stroke-width="2"
stroke-linecap="round"/>
+<path d="M458 249L454 255L462 255L458 249Z" fill="#B2B2B2" stroke="#B2B2B2"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M383.623 121V110.536H385.719L387.575 115.656C387.692 115.987 387.804
116.328 387.911 116.68C388.028 117.021 388.14 117.363 388.247
117.704H388.311C388.428 117.363 388.54 117.021 388.647 116.68C388.754 116.328
388.86 115.987 388.967 115.656L390.775
110.536H392.887V121H391.175V116.216C391.175 115.885 391.186 115.528 391.207
115.144C391.239 114.749 391.271 114.355 391.303 113.96C391.346 113.565 391.383
113.208 391.415 112.888H391.351L390.503 115.32L388.791 120.024H387.687L385.959
1 [...]
+<path d="M984.714 70V59.536H986.81L988.666 64.656C988.783 64.9867 988.895
65.328 989.002 65.68C989.119 66.0213 989.231 66.3627 989.338
66.704H989.402C989.519 66.3627 989.631 66.0213 989.738 65.68C989.844 65.328
989.951 64.9867 990.058 64.656L991.866 59.536H993.978V70H992.266V65.216C992.266
64.8853 992.276 64.528 992.298 64.144C992.33 63.7493 992.362 63.3547 992.394
62.96C992.436 62.5653 992.474 62.208 992.506 61.888H992.442L991.594
64.32L989.882 69.024H988.778L987.05 64.32L986.218 61.888 [...]
+<path d="M1222.69 70V59.536H1224.78L1226.64 64.656C1226.76 64.9867 1226.87
65.328 1226.97 65.68C1227.09 66.0213 1227.2 66.3627 1227.31
66.704H1227.37C1227.49 66.3627 1227.6 66.0213 1227.71 65.68C1227.82 65.328
1227.92 64.9867 1228.03 64.656L1229.84 59.536H1231.95V70H1230.24V65.216C1230.24
64.8853 1230.25 64.528 1230.27 64.144C1230.3 63.7493 1230.33 63.3547 1230.37
62.96C1230.41 62.5653 1230.45 62.208 1230.48 61.888H1230.41L1229.57
64.32L1227.85 69.024H1226.75L1225.02 64.32L1224.19 61.888 [...]
+<path d="M677 279L677 155C677 147.268 670.732 141 663 141L255 141C247.268 141
241 147.268 241 155L241 279C241 286.732 247.268 293 255 293L663 293C670.732 293
677 286.732 677 279Z" stroke="#B3B3B3" stroke-width="2" stroke-linecap="round"
stroke-dasharray="1 6"/>
+<path d="M1194 326L1194 100C1194 92.268 1187.73 86 1180 86L921 86C913.268 86
907 92.268 907 100L907 326C907 333.732 913.268 340 921 340L1180 340C1187.73 340
1194 333.732 1194 326Z" stroke="#B3B3B3" stroke-width="2"
stroke-linecap="round" stroke-dasharray="1 6"/>
+<path d="M1315 326L1315 100C1315 92.268 1308.73 86 1301 86L1248 86C1240.27 86
1234 92.268 1234 100L1234 326C1234 333.732 1240.27 340 1248 340L1301
340C1308.73 340 1315 333.732 1315 326Z" stroke="#B3B3B3" stroke-width="2"
stroke-linecap="round" stroke-dasharray="1 6"/>
+<path d="M1085.16 163.393L1039 163.393C1035.13 163.393 1032 166.526 1032
170.392L1032 187" stroke="#B3B3B3" stroke-width="2" stroke-linecap="round"/>
+<path d="M1085 163.393L1079 167.393L1079 159.393L1085 163.393Z" fill="#B2B2B2"
stroke="#B2B2B2" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round"/>
+<path d="M1085.16 270.607L1039 270.607C1035.13 270.607 1032 267.474 1032
263.608L1032 247" stroke="#B3B3B3" stroke-width="2" stroke-linecap="round"/>
+<path d="M1085 270.607L1079 266.607L1079 274.607L1085 270.607Z" fill="#B2B2B2"
stroke="#B2B2B2" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round"/>
+<path d="M757 245.404L757 365.23C757 369.096 760.134 372.23 764 372.23L1267
372.204C1270.87 372.204 1274 369.07 1274 365.204L1274 353.504" stroke="#B3B3B3"
stroke-width="2" stroke-linecap="round"/>
+<path d="M757 245L761 251L753 251L757 245Z" fill="#B2B2B2" stroke="#B2B2B2"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M964 395L970 391L970 399L964 395Z" fill="black" stroke="black"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M970 395L976 391L976 399L970 395Z" fill="black" stroke="black"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M984.397 400V389.536H987.693C988.472 389.536 989.165 389.637 989.773
389.84C990.381 390.043 990.861 390.379 991.213 390.848C991.565 391.317 991.741
391.957 991.741 392.768C991.741 393.536 991.565 394.171 991.213 394.672C990.861
395.173 990.387 395.547 989.789 395.792C989.192 396.037 988.515 396.16 987.757
396.16H986.253V400H984.397ZM986.253 394.672H987.613C989.149 394.672 989.917
394.037 989.917 392.768C989.917 392.107 989.715 391.653 989.309 391.408C988.915
391.152 988.328 391. [...]
+<path d="M819.892
209V198.504H825.94V199.624H821.22V203.176H825.22V204.296H821.22V209H819.892ZM830.561
209.192C829.868 209.192 829.239 209.032 828.673 208.712C828.108 208.381 827.66
207.912 827.329 207.304C826.999 206.696 826.833 205.971 826.833 205.128C826.833
204.275 826.999 203.544 827.329 202.936C827.671 202.328 828.108 201.859 828.641
201.528C829.175 201.197 829.735 201.032 830.321 201.032C831.313 201.032 832.076
201.363 832.609 202.024C833.153 202.685 833.425 203.571 833.425 204.68 [...]
+<rect x="261" y="250" width="63" height="23" fill="url(#pattern0)"/>
+<rect x="927" y="297" width="63" height="23" fill="url(#pattern1)"/>
+<defs>
+<pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1"
height="1">
+<use xlink:href="#image0_2353_14361" transform="translate(-0.388373 -0.703433)
scale(0.00250907 0.00678042)"/>
+</pattern>
+<pattern id="pattern1" patternContentUnits="objectBoundingBox" width="1"
height="1">
+<use xlink:href="#image0_2353_14361" transform="translate(-0.388373 -0.703433)
scale(0.00250907 0.00678042)"/>
+</pattern>
+<image id="image0_2353_14361" width="678" height="368"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAqYAAAFwCAYAAABq9LkwAAA1KElEQVR4Xu3da7Ak110Y8Ll3X149sGQweq2SODhWKIpHbGwItiWRVL4nHxKKD3lU4fCSvLYxgoCCHgYVBmNjyRIGx/lAKqBQFKHyPYktWbbxA3DIh5SIESSWVpJFrJVkvVZ7783/Pzu9nr23Z6Znpnu6e+Y3Vbf2Md2nz/mdM3f+fV49GHgRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAE
[...]
+</defs>
+</svg>
diff --git
a/website/www/site/static/images/case-study/lyft/ravi_kiran_magham.png
b/website/www/site/static/images/case-study/lyft/ravi_kiran_magham.png
new file mode 100644
index 00000000000..5880faa39b3
Binary files /dev/null and
b/website/www/site/static/images/case-study/lyft/ravi_kiran_magham.png differ
diff --git a/website/www/site/static/images/logos/powered-by/lyft.png
b/website/www/site/static/images/logos/powered-by/lyft.png
new file mode 100644
index 00000000000..c1ec582e809
Binary files /dev/null and
b/website/www/site/static/images/logos/powered-by/lyft.png differ