SlideShare a Scribd company logo
1 of 41
Download to read offline
LINKEDIN COMMUNICATION ARCHITECTURE


Ruslan Belkin, Sean Dawson

TS-5234
Learn how we at LinkedIn built and evolved scalable
communication platform for the world’s largest
professional network




                                        2008 JavaOneSM Conference | java.sun.com/javaone |   2
Agenda

 Why are we doing this talk
 LinkedIn Communication Platform at a glance
  • Evolution of LinkedIn Communication System
  • Evolution of the Network Updates System
 Scaling the system: from 0 to 22M members
 Q&A




                                        2008 JavaOneSM Conference | java.sun.com/javaone |   3
Why are we doing this talk?

 Share our experience in building the world-largest
 professional network in Java™
 Describe the evolution of the communication platform
 Share lessons we learned so you could benefit from our
 successes, mistakes and experience




                                       2008 JavaOneSM Conference | java.sun.com/javaone |   4
LinkedIn Communication Platform
Quick Tour




                            2008 JavaOneSM Conference | java.sun.com/javaone |   5
LinkedIn Communication Platform
Quick Tour




                            2008 JavaOneSM Conference | java.sun.com/javaone |   6
LinkedIn Communication Platform
Quick Tour




                            2008 JavaOneSM Conference | java.sun.com/javaone |   7
LinkedIn Communication Platform
The Numbers

  22M members
  130M connections
  2M email messages per day
  250K invitations per day




                              2008 JavaOneSM Conference | java.sun.com/javaone |   8
LinkedIn Communication Platform
The Setup

  Sun™ x86 platform and Sparc production hardware
  running Solaris™ Operating System
  100% Java programming language
  Tomcat and Jetty as application servers
  Oracle and MySQL as DBs
  ActiveMQ for JMS
  Lucene as a foundation for search
  Spring as a glue
  Mac for development



                                      2008 JavaOneSM Conference | java.sun.com/javaone |   9
LinkedIn Communication Platform

 The Communication Service         The network updates service
  •   Permanent message storage     • Short-lived notifications (events)
  •   InBox messages                • Distribution across various
  •   Emails                            affiliations and groups
  •   Batching, delayed delivery    •   Time decay
  •   Bounce, cancellation          •   Events grouping and
  •   Actionable content                prioritization
  •   Rich email content




                                                2008 JavaOneSM Conference | java.sun.com/javaone | 10
The Communication Service

 How is it different:
  • Workflow oriented
  • Messages reference other objects in the system
  • Incorporates email delivery
  • Batching of messages
  • Message cancellation
  • Delayed delivery, customer service review queues, abuse controls
  • Supports reminders and bounce notifications to users
 Has undergone continuous improvements throughout life
 of LinkedIn


                                              2008 JavaOneSM Conference | java.sun.com/javaone | 11
Message Creation




                   2008 JavaOneSM Conference | java.sun.com/javaone | 12
Message Delivery




                   2008 JavaOneSM Conference | java.sun.com/javaone | 13
The Communication Service

 Message Creation                        Message Delivery
  • Clients post messages via             • Message delivery is triggered by
    asynchronous Java Communications          clients or by scheduled processes
    API using JMS                         •   Delivery actions are asynchronous
  • Messages then are routed via          •   Messages can be batched for
    routing service to the appropriate        delivery into a single email message
    mailbox or directly for email         •   Message content is processed
    processing                                through the JavaServer Page™ (JSP™)
  • Multiple member or guest                  technology for pretty formatting
    databases are supported               •   The scheduler can take into account
                                              the time, delivery preferences,
                                              system load
                                          •   Bounced messages are processed
                                              and redelivered if needed
                                          •   Reminder system works the same
                                              way as message delivery system



                                                      2008 JavaOneSM Conference | java.sun.com/javaone | 14
The Communication Service

 SOA architecture
 Wireable components build around LinkedIn Spring
 extensions
 Spring HTTP-RPC
 Heavy use of JMS and asynchronous flows




                                      2008 JavaOneSM Conference | java.sun.com/javaone | 15
The Communication Service
Failure Recovery

  Possible failures:
   • Messages can bounce
   • Messages can get lost:
      •   Database problems
      •   Bugs in the code
      •   Bugs in the content processing of emails
      •   Various services may become unavailable
  Avoiding the downtime




                                                     2008 JavaOneSM Conference | java.sun.com/javaone | 16
The Communication Service
How do we scale it?

  Functional partitioning:
   • sent, received, archived, etc.
  Class partitioning:
   • Member mailboxes, guest mailboxes, corporate mailboxes
  Range partitioning:
   • Member ID range
   • Email lexicographical range
  Asynchronous flows




                                             2008 JavaOneSM Conference | java.sun.com/javaone | 17
Network Updates Service

 What is your network up to?
 The goal is to have a flexible service for distributing many
 types of short-lived updates
 Availability across a number of clients (web apps, RSS,
 API, LinkedIn Mobile, third-party…)




                                          2008 JavaOneSM Conference | java.sun.com/javaone | 18
Network Updates Service
Motivation


  Homepage circa 2007
  Poor UI
   • Cluttered
   • Where does new content go?
  Poor Backend Integration
   • Many different service calls
   • Takes a long time to gather all
     of the data




                                       2008 JavaOneSM Conference | java.sun.com/javaone | 19
Network Updates Service
Motivation


  Homepage circa 2008
  Clean UI
   • Eliminates contention for
     homepage real estate
  Clean Backend
   • Single call to fetch updates
   • Consistent update format




                                    2008 JavaOneSM Conference | java.sun.com/javaone | 20
Network Updates Service
Iteration 1

  Move existing homepage logic into a remote service,
  refactor homepage to use the new service
  Advantages
   • No user impact while API is being finalized
   • Improve performance by fetching updates in parallel
   • Reduce complexity of the web app
   • Updates become easily accessible to other clients




                                          2008 JavaOneSM Conference | java.sun.com/javaone | 21
Network Updates Service
Iteration 1 - API




                          2008 JavaOneSM Conference | java.sun.com/javaone | 22
Network Updates Service
Iteration 1 - API

  Pull-based architecture
  Collectors
   • Responsible for gathering data
   • Parallel collection to improve performance
  Resolvers
   • Fetch state, batch lookup queries, etc…
   • Use EHCache to cache global data (e.g., member info)
  Rendering
   • Transform each object into its XML representation



                                               2008 JavaOneSM Conference | java.sun.com/javaone | 23
Network Updates Service
Iteration 1 - Example

UpdateQueryCriteria query =
   UpdateQueryCriteria.createDefaultCriteria()
       .setMemberID(2)
       .setRequestedTypes(NetworkUpdateType.CONNECTION)
       .setCutoffDate(…)
       .setMaxNumberOfUpdates(10);

MyNetworkUpdatesService service =
   getService(MyNetworkUpdatesService.class);

DataTree update =
   service.getNetworkUpdatesSumary(query);


                                       2008 JavaOneSM Conference | java.sun.com/javaone | 24
Network Updates Service
Iteration 1 - Example


                        <updates>
                          <NCON>
                            <connection>
                              <id>2</id>

                          <firstName>Chris</firstNa
                          me>

                           <lastName>Yee</lastName>
                            </connection>
                          </NCON>
                        </updates>

                                2008 JavaOneSM Conference | java.sun.com/javaone | 25
Network Updates Service
Iteration 1

  Lessons learned:
   • Centralizing updates into a single service leaves a single point of
       failure
   •   Be prepared to spend time tuning the HttpConnectionManager
       (timeouts, max connections)
   •   While the system was stabilizing, it was affecting all users; should
       have rolled the new service out to a small subset!
   •   Don’t use “Least Frequently Used” (LFU) in a large EHCache—very
       bad performance!




                                                    2008 JavaOneSM Conference | java.sun.com/javaone | 26
Network Updates Service
Iteration 2

  Hollywood Principle: “Don’t call me, I’ll call you”
  Push update when an event occurs
  Reading is much quicker since we don’t have to search for
  the data!
  Tradeoffs
   • Distributed updates may never be read
   • More storage space needed




                                        2008 JavaOneSM Conference | java.sun.com/javaone | 27
Network Updates Service
Iteration 2 - Pushing Events




                               2008 JavaOneSM Conference | java.sun.com/javaone | 28
Network Updates Service
Iteration 2 - Reading Updates




                                2008 JavaOneSM Conference | java.sun.com/javaone | 29
Network Updates Service
Iteration 2

  Pushing Updates
   • Updates are delivered via JMS
   • Aggregate data stored in 1 CLOB column for each target user
   • Incoming updates are merged into the aggregate structure using
     optimistic locking to avoid lock contention
  Reading Updates
   • Add a new collector that reads from the Update Database
   • Use Digesters to perform arbitrary transformations on the stream
     of updates (e.g, collapse 10 updates from a user into 1)




                                                   2008 JavaOneSM Conference | java.sun.com/javaone | 30
Network Updates Service
Iteration 2

  Lessons learned:
   • Underestimated the volume of updates to be processed
   • CLOB block size was set to 8k, leading to a lot of wasted space
       (which isn’t reclaimed!)
   •   Real-time monitoring/configuration with Java Management
       Extension (JMX™) specification was extremely helpful




                                                  2008 JavaOneSM Conference | java.sun.com/javaone | 31
Network Updates Service
Iteration 3

  Updating a CLOB is expensive
  Goal: Minimize the number of CLOB updates
   • Use an overflow buffer
   • Reduce the size of the updates




                                      2008 JavaOneSM Conference | java.sun.com/javaone | 32
Network Updates Service
Iteration 3 - Overflow Buffer


  Add VARCHAR(4000) column
  that acts as a buffer
  When the buffer is full, dump it
  to the CLOB and reset
  Avoids over 90% of CLOB
  updates (depending on type),
  while still retaining the
  flexibility for more storage




                                     2008 JavaOneSM Conference | java.sun.com/javaone | 33
Scaling the system

 What you learn as you scale:           What to do:
  • A single database does not work     • Partition everything:
  • Referential integrity will not be        • by user groups
      possible                               • by domain
  •   Cost becomes a factor:                 • by function
      databases, hardware, licenses,    • Caching is good even when it’s
      storage, power                        only modestly effective
  •   Any data loss is a problem        •   Give up on 100% data integrity
  •   Data warehousing and analytics    •   Build for asynchronous flows
      becomes a problem                 •   Build with reporting in mind
  •   Your system becomes a target      •   Expect your system to fail at any
      for spamming exploits, data           point
      scraping, etc.
                                        •   Never underestimate growth
                                            trajectory


                                                   2008 JavaOneSM Conference | java.sun.com/javaone | 34
LinkedIn Communication Architecture

 Build with scalability in mind - never know when your
 business will take off
 Expect to do a lot of architecture and code refactoring as
 you learn and appreciate growth challenges




                                         2008 JavaOneSM Conference | java.sun.com/javaone | 35
LinkedIn Communication Architecture
Ruslan Belkin (http://www.linkedin.com/in/rbelkin)
Sean Dawson (http://www.linkedin.com/in/seandawson)

We are hiring!
The Communication Service
LinkedIn Spring Extensions
  Automatic context instantiation   Support for Builder Pattern
  from multiple spring files        Custom property editors:
  LinkedIn Spring Components         • Timespan (30s, 4h34m, etc.)
  Property expansion                 • Memory Size, etc.
  Automatic termination handling




                                              2008 JavaOneSM Conference | java.sun.com/javaone | 37
The Communication Service
LinkedIn Spring Extensions

Comm-server/
   cmpt/
       components/
              ccsServiceExporter.spring
              comm.spring
              jmx.spring
              comm-server.properties
                     corpMboxServiceExporter.spring
              main.spring
              comm-server.spring
              memberMboxServiceExporter.spring
              comm.properties
              guestMboxServiceExporter.spring
       build.xml
    impl/
       …
                                       2008 JavaOneSM Conference | java.sun.com/javaone | 38
The Communication Service
LinkedIn Spring Extensions

…
<bean id=quot;resolver”
class=quot;com.linkedin.comm.pub.impl.MessageAddressResolverquot;>
   <lin:config>
       <property name=quot;resolverDBquot; ref=quot;resolverDBquot;/>
       <property name=quot;eosquot; ref=quot;eosquot;/>
       <property name=quot;elsquot; ref=quot;eosquot;/>
       <property name=quot;memberAccessorquot;
ref=quot;coreMemberAccessorquot;/>
   </lin:config>
</bean>
…




                                      2008 JavaOneSM Conference | java.sun.com/javaone | 39
The Communication Service
LinkedIn Spring Extensions (Builder)

private final MessageAddressResolverDB _resolverDB;
…
MessageAddressResolver(Config config) { … }
…
public static class Config    {
   private MessageAddressResolverDB _resolverDB;

   public MessageAddressResolverDB getResolverDB() {
       return ConfigHelper.getRequired(_resolverDB);
   }
   public void setResolverDB(MessageAddressResolverDB
                              resolverDB) {
              _resolverDB = resolverDB;
   }
}/*Config*/

                                       2008 JavaOneSM Conference | java.sun.com/javaone | 40
The Communication Service
LinkedIn Spring Extensions (Components)

…
<lin:component
   id=quot;remoteContentCommunicationServicequot;
   location=quot;comm-server-client-cmptquot;>
   <lin:wire property-name=quot;activemq.producer.brokerURLquot;
                           property-
value=quot;${activemq.producer.brokerURL}quot;/>
   <lin:wire property-name=quot;comm.server.httpRpc.urlquot;
                           property-
value=quot;${leo.comm.server.httpRpc.url}quot;/>
</lin:component>
…




                                          2008 JavaOneSM Conference | java.sun.com/javaone | 41

More Related Content

What's hot

Explore Microsoft Power Platform Center of Excellence
Explore Microsoft Power Platform Center of ExcellenceExplore Microsoft Power Platform Center of Excellence
Explore Microsoft Power Platform Center of ExcellenceNanddeep Nachan
 
What is REST API? REST API Concepts and Examples | Edureka
What is REST API? REST API Concepts and Examples | EdurekaWhat is REST API? REST API Concepts and Examples | Edureka
What is REST API? REST API Concepts and Examples | EdurekaEdureka!
 
Modern Enterprise integration Strategies
Modern Enterprise integration StrategiesModern Enterprise integration Strategies
Modern Enterprise integration StrategiesJesus Rodriguez
 
REST API Design & Development
REST API Design & DevelopmentREST API Design & Development
REST API Design & DevelopmentAshok Pundit
 
API Strategy Presentation
API Strategy PresentationAPI Strategy Presentation
API Strategy PresentationLawrence Coburn
 
Connecting Applications Everywhere with ActiveMQ
Connecting Applications Everywhere with ActiveMQConnecting Applications Everywhere with ActiveMQ
Connecting Applications Everywhere with ActiveMQRob Davies
 
Introduction to Umbraco
Introduction to UmbracoIntroduction to Umbraco
Introduction to UmbracoRoel
 
Introduction to Drupal Basics
Introduction to Drupal BasicsIntroduction to Drupal Basics
Introduction to Drupal BasicsJuha Niemi
 
WordPress what is Wordpress
WordPress what is WordpressWordPress what is Wordpress
WordPress what is WordpressShahid Husain
 
Decompose your monolith: Six principles for refactoring a monolith to microse...
Decompose your monolith: Six principles for refactoring a monolith to microse...Decompose your monolith: Six principles for refactoring a monolith to microse...
Decompose your monolith: Six principles for refactoring a monolith to microse...Chris Richardson
 
Introduction to REST - API
Introduction to REST - APIIntroduction to REST - API
Introduction to REST - APIChetan Gadodia
 
Serverless Computing: build and run applications without thinking about servers
Serverless Computing: build and run applications without thinking about serversServerless Computing: build and run applications without thinking about servers
Serverless Computing: build and run applications without thinking about serversAmazon Web Services
 
Design patterns for microservice architecture
Design patterns for microservice architectureDesign patterns for microservice architecture
Design patterns for microservice architectureThe Software House
 
LinkedIn and Slideshare
LinkedIn and SlideshareLinkedIn and Slideshare
LinkedIn and SlideshareLinkedIn
 
Power Platform Governance Center of Excellence
Power Platform Governance Center of ExcellencePower Platform Governance Center of Excellence
Power Platform Governance Center of ExcellenceWithum
 

What's hot (20)

Content Management System
Content Management SystemContent Management System
Content Management System
 
LinkedIn presentation
LinkedIn presentationLinkedIn presentation
LinkedIn presentation
 
REST API
REST APIREST API
REST API
 
Explore Microsoft Power Platform Center of Excellence
Explore Microsoft Power Platform Center of ExcellenceExplore Microsoft Power Platform Center of Excellence
Explore Microsoft Power Platform Center of Excellence
 
Client side scripting and server side scripting
Client side scripting and server side scriptingClient side scripting and server side scripting
Client side scripting and server side scripting
 
Spring Security 5
Spring Security 5Spring Security 5
Spring Security 5
 
What is REST API? REST API Concepts and Examples | Edureka
What is REST API? REST API Concepts and Examples | EdurekaWhat is REST API? REST API Concepts and Examples | Edureka
What is REST API? REST API Concepts and Examples | Edureka
 
Modern Enterprise integration Strategies
Modern Enterprise integration StrategiesModern Enterprise integration Strategies
Modern Enterprise integration Strategies
 
REST API Design & Development
REST API Design & DevelopmentREST API Design & Development
REST API Design & Development
 
API Strategy Presentation
API Strategy PresentationAPI Strategy Presentation
API Strategy Presentation
 
Connecting Applications Everywhere with ActiveMQ
Connecting Applications Everywhere with ActiveMQConnecting Applications Everywhere with ActiveMQ
Connecting Applications Everywhere with ActiveMQ
 
Introduction to Umbraco
Introduction to UmbracoIntroduction to Umbraco
Introduction to Umbraco
 
Introduction to Drupal Basics
Introduction to Drupal BasicsIntroduction to Drupal Basics
Introduction to Drupal Basics
 
WordPress what is Wordpress
WordPress what is WordpressWordPress what is Wordpress
WordPress what is Wordpress
 
Decompose your monolith: Six principles for refactoring a monolith to microse...
Decompose your monolith: Six principles for refactoring a monolith to microse...Decompose your monolith: Six principles for refactoring a monolith to microse...
Decompose your monolith: Six principles for refactoring a monolith to microse...
 
Introduction to REST - API
Introduction to REST - APIIntroduction to REST - API
Introduction to REST - API
 
Serverless Computing: build and run applications without thinking about servers
Serverless Computing: build and run applications without thinking about serversServerless Computing: build and run applications without thinking about servers
Serverless Computing: build and run applications without thinking about servers
 
Design patterns for microservice architecture
Design patterns for microservice architectureDesign patterns for microservice architecture
Design patterns for microservice architecture
 
LinkedIn and Slideshare
LinkedIn and SlideshareLinkedIn and Slideshare
LinkedIn and Slideshare
 
Power Platform Governance Center of Excellence
Power Platform Governance Center of ExcellencePower Platform Governance Center of Excellence
Power Platform Governance Center of Excellence
 

Similar to LinkedIn Communication Architecture

JavaOne Conference, 2008
JavaOne Conference, 2008JavaOne Conference, 2008
JavaOne Conference, 2008Sean Dawson
 
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...Nick Dellamaggiore
 
Intro in JavaEE world (TU Olomouc)
Intro in JavaEE world (TU Olomouc)Intro in JavaEE world (TU Olomouc)
Intro in JavaEE world (TU Olomouc)blahap
 
ADDRESSING TOMORROW'S SECURITY REQUIREMENTS IN ENTERPRISE APPLICATIONS
ADDRESSING TOMORROW'S SECURITY REQUIREMENTS IN ENTERPRISE APPLICATIONSADDRESSING TOMORROW'S SECURITY REQUIREMENTS IN ENTERPRISE APPLICATIONS
ADDRESSING TOMORROW'S SECURITY REQUIREMENTS IN ENTERPRISE APPLICATIONSelliando dias
 
Server side push in Aldan 3
Server side push in Aldan 3Server side push in Aldan 3
Server side push in Aldan 3ALDAN3
 
Oracle WebLogic 12c New Multitenancy features
Oracle WebLogic 12c New Multitenancy featuresOracle WebLogic 12c New Multitenancy features
Oracle WebLogic 12c New Multitenancy featuresMichel Schildmeijer
 
Virtualizing a Virtual Machine
Virtualizing a Virtual MachineVirtualizing a Virtual Machine
Virtualizing a Virtual Machineelliando dias
 
Java EE8 - by Kito Mann
Java EE8 - by Kito Mann Java EE8 - by Kito Mann
Java EE8 - by Kito Mann Kile Niklawski
 
Ruslan Belkin And Sean Dawson on LinkedIn's Network Updates Uncovered
Ruslan Belkin And Sean Dawson on LinkedIn's Network Updates UncoveredRuslan Belkin And Sean Dawson on LinkedIn's Network Updates Uncovered
Ruslan Belkin And Sean Dawson on LinkedIn's Network Updates UncoveredLinkedIn
 
Streaming to a New Jakarta EE
Streaming to a New Jakarta EEStreaming to a New Jakarta EE
Streaming to a New Jakarta EEJ On The Beach
 
Streaming to a new Jakarta EE
Streaming to a new Jakarta EEStreaming to a new Jakarta EE
Streaming to a new Jakarta EEMarkus Eisele
 
blueMarine Or Why You Should Really Ship Swing Applications
blueMarine  Or Why You Should Really Ship Swing  Applications blueMarine  Or Why You Should Really Ship Swing  Applications
blueMarine Or Why You Should Really Ship Swing Applications Fabrizio Giudici
 
Glassfish JEE Server Administration - JEE Introduction
Glassfish JEE Server Administration - JEE IntroductionGlassfish JEE Server Administration - JEE Introduction
Glassfish JEE Server Administration - JEE IntroductionDanairat Thanabodithammachari
 
Intorduction to struts
Intorduction to strutsIntorduction to struts
Intorduction to strutsAnup72
 
SPEC INDIA Java Case Study
SPEC INDIA Java Case StudySPEC INDIA Java Case Study
SPEC INDIA Java Case StudySPEC INDIA
 
Streaming to a new Jakarta EE / JOTB19
Streaming to a new Jakarta EE / JOTB19Streaming to a new Jakarta EE / JOTB19
Streaming to a new Jakarta EE / JOTB19Markus Eisele
 
Vikas chanalia_8.4+ EXP-Networker-RESUME
Vikas chanalia_8.4+ EXP-Networker-RESUMEVikas chanalia_8.4+ EXP-Networker-RESUME
Vikas chanalia_8.4+ EXP-Networker-RESUMEVikas Chanalia
 

Similar to LinkedIn Communication Architecture (20)

JavaOne Conference, 2008
JavaOne Conference, 2008JavaOne Conference, 2008
JavaOne Conference, 2008
 
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
 
Intro in JavaEE world (TU Olomouc)
Intro in JavaEE world (TU Olomouc)Intro in JavaEE world (TU Olomouc)
Intro in JavaEE world (TU Olomouc)
 
ADDRESSING TOMORROW'S SECURITY REQUIREMENTS IN ENTERPRISE APPLICATIONS
ADDRESSING TOMORROW'S SECURITY REQUIREMENTS IN ENTERPRISE APPLICATIONSADDRESSING TOMORROW'S SECURITY REQUIREMENTS IN ENTERPRISE APPLICATIONS
ADDRESSING TOMORROW'S SECURITY REQUIREMENTS IN ENTERPRISE APPLICATIONS
 
Server side push in Aldan 3
Server side push in Aldan 3Server side push in Aldan 3
Server side push in Aldan 3
 
Oracle WebLogic 12c New Multitenancy features
Oracle WebLogic 12c New Multitenancy featuresOracle WebLogic 12c New Multitenancy features
Oracle WebLogic 12c New Multitenancy features
 
Java EE 7 - Overview and Status
Java EE 7  - Overview and StatusJava EE 7  - Overview and Status
Java EE 7 - Overview and Status
 
Virtualizing a Virtual Machine
Virtualizing a Virtual MachineVirtualizing a Virtual Machine
Virtualizing a Virtual Machine
 
Java EE8 - by Kito Mann
Java EE8 - by Kito Mann Java EE8 - by Kito Mann
Java EE8 - by Kito Mann
 
Ruslan Belkin And Sean Dawson on LinkedIn's Network Updates Uncovered
Ruslan Belkin And Sean Dawson on LinkedIn's Network Updates UncoveredRuslan Belkin And Sean Dawson on LinkedIn's Network Updates Uncovered
Ruslan Belkin And Sean Dawson on LinkedIn's Network Updates Uncovered
 
Streaming to a New Jakarta EE
Streaming to a New Jakarta EEStreaming to a New Jakarta EE
Streaming to a New Jakarta EE
 
Streaming to a new Jakarta EE
Streaming to a new Jakarta EEStreaming to a new Jakarta EE
Streaming to a new Jakarta EE
 
blueMarine Or Why You Should Really Ship Swing Applications
blueMarine  Or Why You Should Really Ship Swing  Applications blueMarine  Or Why You Should Really Ship Swing  Applications
blueMarine Or Why You Should Really Ship Swing Applications
 
Glassfish JEE Server Administration - JEE Introduction
Glassfish JEE Server Administration - JEE IntroductionGlassfish JEE Server Administration - JEE Introduction
Glassfish JEE Server Administration - JEE Introduction
 
Intorduction to struts
Intorduction to strutsIntorduction to struts
Intorduction to struts
 
SPEC INDIA Java Case Study
SPEC INDIA Java Case StudySPEC INDIA Java Case Study
SPEC INDIA Java Case Study
 
Streaming to a new Jakarta EE / JOTB19
Streaming to a new Jakarta EE / JOTB19Streaming to a new Jakarta EE / JOTB19
Streaming to a new Jakarta EE / JOTB19
 
Nadeem_CV
Nadeem_CVNadeem_CV
Nadeem_CV
 
Vikas chanalia_8.4+ EXP-Networker-RESUME
Vikas chanalia_8.4+ EXP-Networker-RESUMEVikas chanalia_8.4+ EXP-Networker-RESUME
Vikas chanalia_8.4+ EXP-Networker-RESUME
 
New Resume
New ResumeNew Resume
New Resume
 

More from LinkedIn

How LinkedIn is Transforming Businesses
How LinkedIn is Transforming BusinessesHow LinkedIn is Transforming Businesses
How LinkedIn is Transforming BusinessesLinkedIn
 
Networking on LinkedIn 101
Networking on LinkedIn 101Networking on LinkedIn 101
Networking on LinkedIn 101LinkedIn
 
5 تحديثات على ملفك في 5 دقائق
5 تحديثات على ملفك في 5 دقائق5 تحديثات على ملفك في 5 دقائق
5 تحديثات على ملفك في 5 دقائقLinkedIn
 
5 LinkedIn Profile Updates in 5 Minutes
5 LinkedIn Profile Updates in 5 Minutes5 LinkedIn Profile Updates in 5 Minutes
5 LinkedIn Profile Updates in 5 MinutesLinkedIn
 
The Student's Guide to LinkedIn
The Student's Guide to LinkedInThe Student's Guide to LinkedIn
The Student's Guide to LinkedInLinkedIn
 
The Top Skills That Can Get You Hired in 2017
The Top Skills That Can Get You Hired in 2017The Top Skills That Can Get You Hired in 2017
The Top Skills That Can Get You Hired in 2017LinkedIn
 
Accelerating LinkedIn’s Vision Through Innovation
Accelerating LinkedIn’s Vision Through InnovationAccelerating LinkedIn’s Vision Through Innovation
Accelerating LinkedIn’s Vision Through InnovationLinkedIn
 
How To Tell Your #workstory
How To Tell Your #workstoryHow To Tell Your #workstory
How To Tell Your #workstoryLinkedIn
 
LinkedIn Q1 2016 Earnings Call
LinkedIn Q1 2016 Earnings CallLinkedIn Q1 2016 Earnings Call
LinkedIn Q1 2016 Earnings CallLinkedIn
 
The 2016 LinkedIn Job Search Guide
The 2016 LinkedIn Job Search GuideThe 2016 LinkedIn Job Search Guide
The 2016 LinkedIn Job Search GuideLinkedIn
 
LinkedIn Q4 2015 Earnings Call
LinkedIn Q4 2015 Earnings CallLinkedIn Q4 2015 Earnings Call
LinkedIn Q4 2015 Earnings CallLinkedIn
 
Banish The Buzzwords
Banish The BuzzwordsBanish The Buzzwords
Banish The BuzzwordsLinkedIn
 
LinkedIn Bring In Your Parents Day 2015 - Your Parents' Best Career Advice
LinkedIn Bring In Your Parents Day 2015 - Your Parents' Best Career AdviceLinkedIn Bring In Your Parents Day 2015 - Your Parents' Best Career Advice
LinkedIn Bring In Your Parents Day 2015 - Your Parents' Best Career AdviceLinkedIn
 
LinkedIn Q3 2015 Earnings Call
LinkedIn Q3 2015 Earnings CallLinkedIn Q3 2015 Earnings Call
LinkedIn Q3 2015 Earnings CallLinkedIn
 
LinkedIn Economic Graph Research: Toronto
LinkedIn Economic Graph Research: TorontoLinkedIn Economic Graph Research: Toronto
LinkedIn Economic Graph Research: TorontoLinkedIn
 
Freelancers Are LinkedIn Power Users [Infographic]
Freelancers Are LinkedIn Power Users [Infographic]Freelancers Are LinkedIn Power Users [Infographic]
Freelancers Are LinkedIn Power Users [Infographic]LinkedIn
 
Top Industries for Freelancers on LinkedIn [Infographic]
Top Industries for Freelancers on LinkedIn [Infographic]Top Industries for Freelancers on LinkedIn [Infographic]
Top Industries for Freelancers on LinkedIn [Infographic]LinkedIn
 
LinkedIn Quiz: Which Parent Are You When It Comes to Helping Guide Your Child...
LinkedIn Quiz: Which Parent Are You When It Comes to Helping Guide Your Child...LinkedIn Quiz: Which Parent Are You When It Comes to Helping Guide Your Child...
LinkedIn Quiz: Which Parent Are You When It Comes to Helping Guide Your Child...LinkedIn
 
LinkedIn Connect to Opportunity™ -- Stories of Discovery
LinkedIn Connect to Opportunity™ -- Stories of DiscoveryLinkedIn Connect to Opportunity™ -- Stories of Discovery
LinkedIn Connect to Opportunity™ -- Stories of DiscoveryLinkedIn
 
LinkedIn Q2 2015 Earnings Call
LinkedIn Q2 2015 Earnings CallLinkedIn Q2 2015 Earnings Call
LinkedIn Q2 2015 Earnings CallLinkedIn
 

More from LinkedIn (20)

How LinkedIn is Transforming Businesses
How LinkedIn is Transforming BusinessesHow LinkedIn is Transforming Businesses
How LinkedIn is Transforming Businesses
 
Networking on LinkedIn 101
Networking on LinkedIn 101Networking on LinkedIn 101
Networking on LinkedIn 101
 
5 تحديثات على ملفك في 5 دقائق
5 تحديثات على ملفك في 5 دقائق5 تحديثات على ملفك في 5 دقائق
5 تحديثات على ملفك في 5 دقائق
 
5 LinkedIn Profile Updates in 5 Minutes
5 LinkedIn Profile Updates in 5 Minutes5 LinkedIn Profile Updates in 5 Minutes
5 LinkedIn Profile Updates in 5 Minutes
 
The Student's Guide to LinkedIn
The Student's Guide to LinkedInThe Student's Guide to LinkedIn
The Student's Guide to LinkedIn
 
The Top Skills That Can Get You Hired in 2017
The Top Skills That Can Get You Hired in 2017The Top Skills That Can Get You Hired in 2017
The Top Skills That Can Get You Hired in 2017
 
Accelerating LinkedIn’s Vision Through Innovation
Accelerating LinkedIn’s Vision Through InnovationAccelerating LinkedIn’s Vision Through Innovation
Accelerating LinkedIn’s Vision Through Innovation
 
How To Tell Your #workstory
How To Tell Your #workstoryHow To Tell Your #workstory
How To Tell Your #workstory
 
LinkedIn Q1 2016 Earnings Call
LinkedIn Q1 2016 Earnings CallLinkedIn Q1 2016 Earnings Call
LinkedIn Q1 2016 Earnings Call
 
The 2016 LinkedIn Job Search Guide
The 2016 LinkedIn Job Search GuideThe 2016 LinkedIn Job Search Guide
The 2016 LinkedIn Job Search Guide
 
LinkedIn Q4 2015 Earnings Call
LinkedIn Q4 2015 Earnings CallLinkedIn Q4 2015 Earnings Call
LinkedIn Q4 2015 Earnings Call
 
Banish The Buzzwords
Banish The BuzzwordsBanish The Buzzwords
Banish The Buzzwords
 
LinkedIn Bring In Your Parents Day 2015 - Your Parents' Best Career Advice
LinkedIn Bring In Your Parents Day 2015 - Your Parents' Best Career AdviceLinkedIn Bring In Your Parents Day 2015 - Your Parents' Best Career Advice
LinkedIn Bring In Your Parents Day 2015 - Your Parents' Best Career Advice
 
LinkedIn Q3 2015 Earnings Call
LinkedIn Q3 2015 Earnings CallLinkedIn Q3 2015 Earnings Call
LinkedIn Q3 2015 Earnings Call
 
LinkedIn Economic Graph Research: Toronto
LinkedIn Economic Graph Research: TorontoLinkedIn Economic Graph Research: Toronto
LinkedIn Economic Graph Research: Toronto
 
Freelancers Are LinkedIn Power Users [Infographic]
Freelancers Are LinkedIn Power Users [Infographic]Freelancers Are LinkedIn Power Users [Infographic]
Freelancers Are LinkedIn Power Users [Infographic]
 
Top Industries for Freelancers on LinkedIn [Infographic]
Top Industries for Freelancers on LinkedIn [Infographic]Top Industries for Freelancers on LinkedIn [Infographic]
Top Industries for Freelancers on LinkedIn [Infographic]
 
LinkedIn Quiz: Which Parent Are You When It Comes to Helping Guide Your Child...
LinkedIn Quiz: Which Parent Are You When It Comes to Helping Guide Your Child...LinkedIn Quiz: Which Parent Are You When It Comes to Helping Guide Your Child...
LinkedIn Quiz: Which Parent Are You When It Comes to Helping Guide Your Child...
 
LinkedIn Connect to Opportunity™ -- Stories of Discovery
LinkedIn Connect to Opportunity™ -- Stories of DiscoveryLinkedIn Connect to Opportunity™ -- Stories of Discovery
LinkedIn Connect to Opportunity™ -- Stories of Discovery
 
LinkedIn Q2 2015 Earnings Call
LinkedIn Q2 2015 Earnings CallLinkedIn Q2 2015 Earnings Call
LinkedIn Q2 2015 Earnings Call
 

Recently uploaded

2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Nikki Chapple
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...itnewsafrica
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesManik S Magar
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 

Recently uploaded (20)

2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 

LinkedIn Communication Architecture

  • 1. LINKEDIN COMMUNICATION ARCHITECTURE Ruslan Belkin, Sean Dawson TS-5234
  • 2. Learn how we at LinkedIn built and evolved scalable communication platform for the world’s largest professional network 2008 JavaOneSM Conference | java.sun.com/javaone | 2
  • 3. Agenda Why are we doing this talk LinkedIn Communication Platform at a glance • Evolution of LinkedIn Communication System • Evolution of the Network Updates System Scaling the system: from 0 to 22M members Q&A 2008 JavaOneSM Conference | java.sun.com/javaone | 3
  • 4. Why are we doing this talk? Share our experience in building the world-largest professional network in Java™ Describe the evolution of the communication platform Share lessons we learned so you could benefit from our successes, mistakes and experience 2008 JavaOneSM Conference | java.sun.com/javaone | 4
  • 5. LinkedIn Communication Platform Quick Tour 2008 JavaOneSM Conference | java.sun.com/javaone | 5
  • 6. LinkedIn Communication Platform Quick Tour 2008 JavaOneSM Conference | java.sun.com/javaone | 6
  • 7. LinkedIn Communication Platform Quick Tour 2008 JavaOneSM Conference | java.sun.com/javaone | 7
  • 8. LinkedIn Communication Platform The Numbers 22M members 130M connections 2M email messages per day 250K invitations per day 2008 JavaOneSM Conference | java.sun.com/javaone | 8
  • 9. LinkedIn Communication Platform The Setup Sun™ x86 platform and Sparc production hardware running Solaris™ Operating System 100% Java programming language Tomcat and Jetty as application servers Oracle and MySQL as DBs ActiveMQ for JMS Lucene as a foundation for search Spring as a glue Mac for development 2008 JavaOneSM Conference | java.sun.com/javaone | 9
  • 10. LinkedIn Communication Platform The Communication Service The network updates service • Permanent message storage • Short-lived notifications (events) • InBox messages • Distribution across various • Emails affiliations and groups • Batching, delayed delivery • Time decay • Bounce, cancellation • Events grouping and • Actionable content prioritization • Rich email content 2008 JavaOneSM Conference | java.sun.com/javaone | 10
  • 11. The Communication Service How is it different: • Workflow oriented • Messages reference other objects in the system • Incorporates email delivery • Batching of messages • Message cancellation • Delayed delivery, customer service review queues, abuse controls • Supports reminders and bounce notifications to users Has undergone continuous improvements throughout life of LinkedIn 2008 JavaOneSM Conference | java.sun.com/javaone | 11
  • 12. Message Creation 2008 JavaOneSM Conference | java.sun.com/javaone | 12
  • 13. Message Delivery 2008 JavaOneSM Conference | java.sun.com/javaone | 13
  • 14. The Communication Service Message Creation Message Delivery • Clients post messages via • Message delivery is triggered by asynchronous Java Communications clients or by scheduled processes API using JMS • Delivery actions are asynchronous • Messages then are routed via • Messages can be batched for routing service to the appropriate delivery into a single email message mailbox or directly for email • Message content is processed processing through the JavaServer Page™ (JSP™) • Multiple member or guest technology for pretty formatting databases are supported • The scheduler can take into account the time, delivery preferences, system load • Bounced messages are processed and redelivered if needed • Reminder system works the same way as message delivery system 2008 JavaOneSM Conference | java.sun.com/javaone | 14
  • 15. The Communication Service SOA architecture Wireable components build around LinkedIn Spring extensions Spring HTTP-RPC Heavy use of JMS and asynchronous flows 2008 JavaOneSM Conference | java.sun.com/javaone | 15
  • 16. The Communication Service Failure Recovery Possible failures: • Messages can bounce • Messages can get lost: • Database problems • Bugs in the code • Bugs in the content processing of emails • Various services may become unavailable Avoiding the downtime 2008 JavaOneSM Conference | java.sun.com/javaone | 16
  • 17. The Communication Service How do we scale it? Functional partitioning: • sent, received, archived, etc. Class partitioning: • Member mailboxes, guest mailboxes, corporate mailboxes Range partitioning: • Member ID range • Email lexicographical range Asynchronous flows 2008 JavaOneSM Conference | java.sun.com/javaone | 17
  • 18. Network Updates Service What is your network up to? The goal is to have a flexible service for distributing many types of short-lived updates Availability across a number of clients (web apps, RSS, API, LinkedIn Mobile, third-party…) 2008 JavaOneSM Conference | java.sun.com/javaone | 18
  • 19. Network Updates Service Motivation Homepage circa 2007 Poor UI • Cluttered • Where does new content go? Poor Backend Integration • Many different service calls • Takes a long time to gather all of the data 2008 JavaOneSM Conference | java.sun.com/javaone | 19
  • 20. Network Updates Service Motivation Homepage circa 2008 Clean UI • Eliminates contention for homepage real estate Clean Backend • Single call to fetch updates • Consistent update format 2008 JavaOneSM Conference | java.sun.com/javaone | 20
  • 21. Network Updates Service Iteration 1 Move existing homepage logic into a remote service, refactor homepage to use the new service Advantages • No user impact while API is being finalized • Improve performance by fetching updates in parallel • Reduce complexity of the web app • Updates become easily accessible to other clients 2008 JavaOneSM Conference | java.sun.com/javaone | 21
  • 22. Network Updates Service Iteration 1 - API 2008 JavaOneSM Conference | java.sun.com/javaone | 22
  • 23. Network Updates Service Iteration 1 - API Pull-based architecture Collectors • Responsible for gathering data • Parallel collection to improve performance Resolvers • Fetch state, batch lookup queries, etc… • Use EHCache to cache global data (e.g., member info) Rendering • Transform each object into its XML representation 2008 JavaOneSM Conference | java.sun.com/javaone | 23
  • 24. Network Updates Service Iteration 1 - Example UpdateQueryCriteria query = UpdateQueryCriteria.createDefaultCriteria() .setMemberID(2) .setRequestedTypes(NetworkUpdateType.CONNECTION) .setCutoffDate(…) .setMaxNumberOfUpdates(10); MyNetworkUpdatesService service = getService(MyNetworkUpdatesService.class); DataTree update = service.getNetworkUpdatesSumary(query); 2008 JavaOneSM Conference | java.sun.com/javaone | 24
  • 25. Network Updates Service Iteration 1 - Example <updates> <NCON> <connection> <id>2</id> <firstName>Chris</firstNa me> <lastName>Yee</lastName> </connection> </NCON> </updates> 2008 JavaOneSM Conference | java.sun.com/javaone | 25
  • 26. Network Updates Service Iteration 1 Lessons learned: • Centralizing updates into a single service leaves a single point of failure • Be prepared to spend time tuning the HttpConnectionManager (timeouts, max connections) • While the system was stabilizing, it was affecting all users; should have rolled the new service out to a small subset! • Don’t use “Least Frequently Used” (LFU) in a large EHCache—very bad performance! 2008 JavaOneSM Conference | java.sun.com/javaone | 26
  • 27. Network Updates Service Iteration 2 Hollywood Principle: “Don’t call me, I’ll call you” Push update when an event occurs Reading is much quicker since we don’t have to search for the data! Tradeoffs • Distributed updates may never be read • More storage space needed 2008 JavaOneSM Conference | java.sun.com/javaone | 27
  • 28. Network Updates Service Iteration 2 - Pushing Events 2008 JavaOneSM Conference | java.sun.com/javaone | 28
  • 29. Network Updates Service Iteration 2 - Reading Updates 2008 JavaOneSM Conference | java.sun.com/javaone | 29
  • 30. Network Updates Service Iteration 2 Pushing Updates • Updates are delivered via JMS • Aggregate data stored in 1 CLOB column for each target user • Incoming updates are merged into the aggregate structure using optimistic locking to avoid lock contention Reading Updates • Add a new collector that reads from the Update Database • Use Digesters to perform arbitrary transformations on the stream of updates (e.g, collapse 10 updates from a user into 1) 2008 JavaOneSM Conference | java.sun.com/javaone | 30
  • 31. Network Updates Service Iteration 2 Lessons learned: • Underestimated the volume of updates to be processed • CLOB block size was set to 8k, leading to a lot of wasted space (which isn’t reclaimed!) • Real-time monitoring/configuration with Java Management Extension (JMX™) specification was extremely helpful 2008 JavaOneSM Conference | java.sun.com/javaone | 31
  • 32. Network Updates Service Iteration 3 Updating a CLOB is expensive Goal: Minimize the number of CLOB updates • Use an overflow buffer • Reduce the size of the updates 2008 JavaOneSM Conference | java.sun.com/javaone | 32
  • 33. Network Updates Service Iteration 3 - Overflow Buffer Add VARCHAR(4000) column that acts as a buffer When the buffer is full, dump it to the CLOB and reset Avoids over 90% of CLOB updates (depending on type), while still retaining the flexibility for more storage 2008 JavaOneSM Conference | java.sun.com/javaone | 33
  • 34. Scaling the system What you learn as you scale: What to do: • A single database does not work • Partition everything: • Referential integrity will not be • by user groups possible • by domain • Cost becomes a factor: • by function databases, hardware, licenses, • Caching is good even when it’s storage, power only modestly effective • Any data loss is a problem • Give up on 100% data integrity • Data warehousing and analytics • Build for asynchronous flows becomes a problem • Build with reporting in mind • Your system becomes a target • Expect your system to fail at any for spamming exploits, data point scraping, etc. • Never underestimate growth trajectory 2008 JavaOneSM Conference | java.sun.com/javaone | 34
  • 35. LinkedIn Communication Architecture Build with scalability in mind - never know when your business will take off Expect to do a lot of architecture and code refactoring as you learn and appreciate growth challenges 2008 JavaOneSM Conference | java.sun.com/javaone | 35
  • 36. LinkedIn Communication Architecture Ruslan Belkin (http://www.linkedin.com/in/rbelkin) Sean Dawson (http://www.linkedin.com/in/seandawson) We are hiring!
  • 37. The Communication Service LinkedIn Spring Extensions Automatic context instantiation Support for Builder Pattern from multiple spring files Custom property editors: LinkedIn Spring Components • Timespan (30s, 4h34m, etc.) Property expansion • Memory Size, etc. Automatic termination handling 2008 JavaOneSM Conference | java.sun.com/javaone | 37
  • 38. The Communication Service LinkedIn Spring Extensions Comm-server/ cmpt/ components/ ccsServiceExporter.spring comm.spring jmx.spring comm-server.properties corpMboxServiceExporter.spring main.spring comm-server.spring memberMboxServiceExporter.spring comm.properties guestMboxServiceExporter.spring build.xml impl/ … 2008 JavaOneSM Conference | java.sun.com/javaone | 38
  • 39. The Communication Service LinkedIn Spring Extensions … <bean id=quot;resolver” class=quot;com.linkedin.comm.pub.impl.MessageAddressResolverquot;> <lin:config> <property name=quot;resolverDBquot; ref=quot;resolverDBquot;/> <property name=quot;eosquot; ref=quot;eosquot;/> <property name=quot;elsquot; ref=quot;eosquot;/> <property name=quot;memberAccessorquot; ref=quot;coreMemberAccessorquot;/> </lin:config> </bean> … 2008 JavaOneSM Conference | java.sun.com/javaone | 39
  • 40. The Communication Service LinkedIn Spring Extensions (Builder) private final MessageAddressResolverDB _resolverDB; … MessageAddressResolver(Config config) { … } … public static class Config { private MessageAddressResolverDB _resolverDB; public MessageAddressResolverDB getResolverDB() { return ConfigHelper.getRequired(_resolverDB); } public void setResolverDB(MessageAddressResolverDB resolverDB) { _resolverDB = resolverDB; } }/*Config*/ 2008 JavaOneSM Conference | java.sun.com/javaone | 40
  • 41. The Communication Service LinkedIn Spring Extensions (Components) … <lin:component id=quot;remoteContentCommunicationServicequot; location=quot;comm-server-client-cmptquot;> <lin:wire property-name=quot;activemq.producer.brokerURLquot; property- value=quot;${activemq.producer.brokerURL}quot;/> <lin:wire property-name=quot;comm.server.httpRpc.urlquot; property- value=quot;${leo.comm.server.httpRpc.url}quot;/> </lin:component> … 2008 JavaOneSM Conference | java.sun.com/javaone | 41