Saturday, July 8, 2017

Company Airbnb



http://techstacks.io/airbnb
- Ruby, Rails

https://medium.com/airbnb-engineering
http://airbnb.io/events/tech-talks/

https://www.slideshare.net/RohanKhude/technology-stack-behind-airbnb
Airbnb is using Elastic Load Balancing, which automatically distributes incoming traffic between multiple Amazon EC2 instances.

To easily process and analyze 50 Gigabytes of data daily, Airbnb uses Amazon Elastic MapReduce (Amazon EMR)

Airbnb moved its main MySQL database to Amazon Relational Database Service.
Airbnb chose Amazon RDS because it simplifies much of the time-consuming administrative tasks typically associated with databases

Syntactically Awsome Style Sheet
Sass is an extension of CSS3, adding nested rules, variables, mixins, selector inheritance, and more.

Sendgrid – Transactional Email  Delivering your transactional and marketing email through one reliable platform.

MixPanel – Funnel Analysis Analytics • It tracks user interactions with web and mobile applications • Funnel analysis helps you identify where people drop off so you can increase your conversion rates • The funnel analyses "are an effective way to calculate conversion rates on specific user behaviors'

Amazon Route 53 – DNS Management  DNS data is typically deployed on multiple physical servers.  The main purposes of DNS management software are: to reduce human error when editing complex and repetitive DNS data.  Amazon Route 53 is a highly available and scalable cloud Domain Name System (DNS) web service.

BrainTree – Payment Services  Subsidiary of Paypal

Twilio – Voice and SMS • Twilio offers developers a API for phone services to make and receive phone calls, and send and receive text. • Airbnb uses Twilio to build Voice Connect click to call, bridging the communication gap between guests and would be hosts.

Nexmo – Voice and SMS  API for SMS, Voice and Phone Verification.
Urban Airship - Mobile Push Messaging Improve customer engagement with push notifications, location- based marketing and analytics.
The push notifications services enables international users to receive notifications regardless of their location or carrier.  Users then receive push notifications for both new messages received on the platform as well as new reservations, delivered directly to their mobile device

Visual Website Optimizer - A/B Testing Analytics • VWO is the easiest A/B, Split and Multivariate testing tool. • To optimizing your website for increased conversion rate and sales. • A/B testing (sometimes called split testing) is comparing two versions of a web page to see which one performs better. • You compare two web pages by showing the two variants (let's call them A and B) to similar visitors at the same time. The one that gives a better conversion rate, wins!

Aerosolve - A machine learning package built for humans. Created by airbnb Airbnb's Price Tips feature helps users figure out what to charge by using machine learning. n this dynamic pricing feature, we show hosts the probability of getting a booking (green for a higher chance, red for a lower chance), or predicted demand, and allow them to easily price their listings dynamically with a click of a button.

Fig. Learning to rank images. On the left, image ordering trained from professional photographer ratings. On the right, image ordering trained from organic books, clicks and impressions Aerosolve - Image Analysis Algorithms

Scout – Performance Monitoring  Scout is a simple hosted server monitoring service.  Rather than installing and configuring monitoring scripts on servers  Scout features a point-and-click plugin setup  Scout currently monitors the servers of AirBnB and The New York Times.

Sentry - Exception Monitoring  Real-time crash reporting for your web apps, mobile apps, and games.  Sentry notifies you when your users experience errors in your web and mobile apps.

New Relic – Performance Monitor SaaS Application Performance Management for Ruby, PHP, .Net, Java, Python, and Node.js Apps. A tool for building and distributing development environments

Chef - Server Configuration and Automation  Chef enables you to manage and scale cloud infrastructure with no downtime or interruptions.  Freely move applications and configurations from one cloud to another.  Chef is integrated with all major cloud providers including Amazon EC2, VMWare, IBM Smartcloud, Rackspace, OpenStack, Windows Azure, HP Cloud, Google Compute Engine, Joyent Cloud and others.

Mocha - Javascript Testing Framework Simple, flexible, fun javascript test framework for node.js & the browser. Mocha tests run serially, allowing for flexible and accurate reporting, while mapping uncaught exceptions to the correct test cases.

Logstash - Log Management  Logstash is a tool for managing events and logs.  You can use it to collect logs, parse them, and store them for later use.

kibana - Monitoring Tools Kibana is an open source, browser based analytics and search dashboard for Elasticsearch. Airbnb - Collect logs with logstash and visualize them with kibana.
https://fossbytes.com/top-airbnb-open-source-projects-you-must-know/
https://prestodb.io/

Airflow is use to create workflows as directed acyclic graphs (DAGs) of tasks. It is very similar to Apache Oozie for Hadoop. The Airflow scheduler executes your tasks on an array of workers while following the specified dependencies. Rich command line utilities make performing complex surgeries on DAGs a snap. The rich user interface makes it easy to visualize pipelines running in production, monitor progress, and troubleshoot issues when needed.

Aerosolve is a machine learning package/library that enables humans to partner with a machine in a symbiotic way exceeds the capabilities of humans or machines alone. This Airbnb open source project Aerosolves library is meant to be used with sparse, interpretable features such as those that commonly occur in search (search keywords, filters) or pricing (number of rooms, location, price). 

Synapse is Airbnb’s new system for service discovery. Synapse solves the problem of automated fail-over in the cloud, where failover via network re-configuration is impossible. The end result is the ability to connect internal services together in a scalable, fault-tolerant way.
Polyglot.js is a tiny I18n helper library written in JavaScript, made to work both in the browser and in CommonJS environments (Node). It provides a simple solution for interpolation and pluralization, based off of Airbnb’s experience adding I18n functionality to its Backbone.jsand Node apps. Polyglot has zero dependencies.
Nerve is a utility for tracking the status of machines and services. It runs locally on the boxes which make up a distributed system, and reports state information to a distributed key-value store.  The combination of Nerve and Synapse make service discovery in the cloud easy!


https://medium.com/airbnb-engineering/deeplinkdispatch-778bc2fd54b7
https://github.com/airbnb/DeepLinkDispatch
Deep links provide a way to link to specific content on either a website or an application. These links are indexable and searchable, and can provide users direct access to much more relevant information than a typical home page or screen. In the mobile context, the links are URIs that link to specific locations in the application.

At Airbnb, we use these deep links frequently to link to listings, reservations, or search queries. For example, a typical deep link to a listing may look something like this:
airbnb://rooms/8357
This deep link directly bypasses the home screen in the application and opens listing information for the Mushroom Dome cabin.

Android supports deep links through declaration in the Manifest. You can add an intent filters which define a mapping between deep link schemas and Activities. Subsequently, any URI with the registered scheme, host, and path will open up that Activity in the app.
While convenient for simple deep link usage, this traditional method becomes burdensome for more complicated applications. For example, you could use the intent filter to specify the path pattern, but it’s somewhat limiting. You can’t easily indicate the parameters that you would expect in the URI that you are filtering for. For complex deep links, you are likely to have to write a parsing mechanism to extract out the parameters, or worse, have such similar code distributed amongst many Activities.
DeepLinkDispatch is designed to help developers handle deep links easily without having to write a lot of boilerplate code and allows you to supply more complicated parsing logic for deciding what to do with a deep link. You can simply annotate the Activity with a URI in a similar way to other libraries. Looking at the example deep link URI from above, you could annotate an activity like so, and declare an “id” parameter that you want the application to parse:
@DeepLink(“rooms/{id}”)
public class SomeActivity extends Activity {

After annotating a particular Activity with the deep link URI that the activity should handle, DeepLinkDispatch will route the deep link automatically and parse the parameters from the URI. You can then determine whether the intent was fired by a deep link and extract out the parameters declared in the annotation. Here’s an example:
if (getIntent().getBooleanExtra(DeepLink.IS_DEEP_LINK, false)) { 
  Bundle parameters = getIntent().getExtras();
  String someParameter = parameters.getString("id");
  ...
}
At its core, DeepLinkDispatch generates a simple Java class to act as a registry of what Activities are registered with which URIs, and what parameters should be extracted. DeepLinkDispatch also generates a shim Activity which tries to match any deep link with an entry in the registry– if it finds a match, it will extract the parameters and start the appropriate Activity with an Intent populated with the parameters.
Additionally, DeepLinkDispatch is intended to provide greater insight into deep link usage. Android by default does not give much insight into what deep links are being used nor what deep links are failing. DeepLinkDispatch provides callbacks in the Application class for any deep link call, either successful or unsuccessful, allowing developers to track and correct any problematic links firing at the application.

public class SomeApp extends App implements DeepLinkCallback {
  @Override public void onSuccess(String uri) {
    // Handle or track a successful deep link here
  }
  @Override public void onError(DeepLinkError error) {
    // Handle or track and error here
  }
}

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts