`

Linkedin网站技术架构简介

 
阅读更多

 

引用说明:原文来自于http://skyuu.blog.163.com/blog/static/9959273920091024111332625,为了方便本人阅读,文本格式略有调整。

 

 

在JavaOne 2008的会议上,著名社交网站LinkedIn的开发者做了2个关于LinkedIn网站的架构技术的演讲

可以看一下LinkedIn网站的基本情况:

1. 2千2百万用户
2. 每个月4百万独立用户访问
3. 每天4千万Page View
4. 每天2百万搜索流量
5. 每天25万邀请发送
6. 每天1百万的回答提交
7. 每天2百万的Email消息发送


这是一个世界顶尖级别流量的网站了,看看LinkedIn的系统架构:

  • 操作系统:Solaris (running on Sun x86 platform and Sparc)
  • 应用服务器:Tomcat and Jetty as application servers
  • 数据库:Oracle and MySQL as DBs
  • 没有ORM,直接用JDBC No ORM (such as Hibernate); th** use straight JDBC
  • 用ActiveMQ在发送JMS. (It"s partitioned by type of messages. Backed by MySQL.)
  • 用lucene做搜索Lucene as a foundation for search
  • Spring做逻辑架构Spring as glue


下面是随着流量增加,LinkedIn的架构演化:

2003~2005

1 一个整体的web程序,
2 一个核心数据库,
3 在Cloud中缓存所有network图,Cloud是用来做缓存的独立server。
4 用Lucene做搜索,也跑在Cloud中。


2006年

1 复制另外一个数据库,减少直接Load核心数据库,另外一个Server来管理非只读数据库的数据更新。
2 把搜索从Cloud中移出来,单独一个Server跑搜索
3 增加Databus数据总线来更新数据,这是通过分布式更新的核心组件,任何组件都需要Databus


2008年

1 Webapp不再任何事情都自己做,把业务逻辑分成很多部分,通过Server群来做。Webapp仍然提供用户界面给用户,但是,通过Server群来管理用户资料,小组等等。
2 每个服务有自己的域数据库
3 新的架构允许其他应用链接LinkedIn,比如增加的招聘和广告业务。



The Cloud

1 Cloud是整个架构最重要的部分,整个LinkedIn的网络图都缓存在Cloud里面
2 Cloud大小:22M nodes, 120M edges
3 需要12GB RAM
4 在生产环境要跑40个实例
5 从硬盘重建Cloud一个实例需要8个小时
6 Cloud通过databus实时更新
7 关闭时持久化到硬盘
8 缓存通过C++实现,用JNI调用,LinkedIn选择C++而不是Java有两个原因:
1)尽可能的减少RAM的使用
2)垃圾收集暂停会杀死整个系统,LinkedIn用了最新的GC程序
9 将所有东西放在缓存里面是一种限制,但是LinkedIn指出,分割业务图将更麻烦
10 Sun提供了2TB的RAM


Communication Architecture交流架构包括:

Communication Service

Communication Service是用来提供永久信息的,比如收件箱里面的消息和email

1 整个系统通过JMS异步通讯
2 客户端用JMS发送消息
3 消息通过路径服务器来到达相应的邮箱或者直接放到email进程中
4 消息发送:同时使用Pull主动寻求信息(如用户需要信息)和Push发送信息(如发email)
5 使用Spring和LinkedIn专业Spring插件完成,使用HTTP-RPC

Scaling Techniques

1 通过功能来划分:发送,接受,文档等。
2 通过类别来划分:用户信箱,访问者信箱等
3 等级划分:用户ID等级,Email等级等
4 所有的操作都是异步的。

PPT分享:

  1. LinkedIn Communication Architecture
  2. A Professional Network built with Java Technologies and Agile Practices

----------------------------------------------------------------------------------------------------------

创建消息:

1 客户端通过 JMS 发帖子

2 消息通过路由服务器发到合适的贴箱或直邮流程

3 支持多会员或访客数据库


传递消息:

1 客户解发或定时任务触发消息传递

2 异步传送

3 批处理合并多个消息到一个收件消息

4 消息内容主体通过 jsp 漂亮展示

5 定时调度可以按照用户热度、延迟时间、系统负载进行调整

6 需要处理退回的消息和再次发送

7 提醒系统也走相同消息路由


 

故障恢复:

1 消息被退回

2 丢失消息的地方:

    数据库问题

    代码bug

    内容传递bug

    服务不可用

3 避免宕机

 

扩容:

1 功能分区:

    发送、收到、归档

2 经典分区:

    会员邮箱

    访客邮箱

    企业邮箱

3 范围分区:

    会员ID 分区

    邮件词典分区

4 异步流

 

 微博:

1 用于大量短期存活的消息分发弹性

2 多种客户端方式都有效(web app,RSS,api,mobile,third-party...)

3 2007年是简单 UI, 2008 年是干净 UI

4 第一个阶段

(1)基于拉架构

(2)收藏:负责收集数据,并发收集提高性能

(3)解决:抓取状态,批查询队列,使用 EHCache 缓存数据

(4)发送:xml 格式

(5)经验教训:单一服务器更新故障,应该花时间调整http最大连接数和超时,不要将最常用的数据放到 EHCache 性能很差。

5 第二阶段

(1)“Don't call me, I'll call you”

(2)当事件发生后,使用推方法更新

(3)不再搜索读取非常快

(4)利弊:发送出去的微博从来没被读取,需要更多的存储空间

(5)推送

 

  • 通过 JMS 推送
  • 总体数据存储在每个目标用户的一个 CLOB 列中
  • 传入的微博合并到总体数据结构时使用乐观锁,避免锁争
(6)读取
  • 增加一个新的收集器用于从数据库中读取数据
  • 使用池执行微博流的任意转换(将10个微博折叠成1个)
(7)经验教训

  • 低估了微博的处理量
  • CLOB 块大小设置为8k,导致大量浪费,这是不可回收的
  • 实时监视、配置 JMX 规范是很有用的。
6 第三阶段
(1)更新 一个 CLOB 代价高
(2)目标是最小的 CLOB 更新
  • 使用一个溢出缓冲区
  • 减小更新的大小
(3)溢出缓冲区
  • 增加一个 varchar(4000)字段担任缓冲区
  • 当缓冲区装满了后,转存到 CLOB ,清空缓冲区
  • 避免  CLOB 的超过 90% 更新(取决于类型),保持更多的存储弹性


 
7 系统扩容
(1)扩容的好处
  • 单一数据库是搞不定的
  • 参照完整性是不可能的
  • 需要考虑成本因素了:数据库、硬件、存储
  • 丢失数据是个问题了
  • 数据仓库和分析成了问题
  • 垃圾数据攻击和数据搜刮
(2)怎样扩容
  • 所有事情都分区:用户群,地域,功能
  • 缓存是好的,即使影响比较温柔
  • 放弃 100% 的数据一致性
  • 建立异步流
  • 建立和报告考虑
  • 预料可能在任意点失败
  • 不要低估成长的轨迹
8 LinkedIn 架构
(1)考虑可扩展性 - 永远不知道业务量何时起飞
(2)面对成长的挑战,做好重构代码的准备

9 Spring 扩展
(1)自动从多个 spring 文件中得到上下文实例
(2)Spring 组件
(3)属性扩展
(4)自动终止处理
(5)支持构建者模式
(6)定制属性编辑器
  • 时间跨度
  • 内存规模

  • 大小: 64 KB
  • 大小: 59.8 KB
  • 大小: 15.9 KB
分享到:
评论

相关推荐

    LinkedIn的数据处理架构

    本分析基于公开的演讲资料及LinkedIn技术架构设计。 首先,LinkedIn产品的数据处理需求表现在几个方面:用户档案、通讯、人脉推荐等,这些服务要求系统能够处理大数据量(Large dataset)、中到高写入(Medium ...

    著名社交网站LinkedIn的Java架构技术.doc

    【LinkedIn的Java架构技术详解】 LinkedIn是全球知名的社交网络平台,尤其在专业领域具有广泛的影响力。该平台在2008年的JavaOne会议上展示了其基于Java技术构建的架构设计。以下是对LinkedIn架构技术的深入解析: ...

    linkedin社交网站的架构

    ### LinkedIn社交网站的架构 #### 一、LinkedIn简介 LinkedIn是一个全球最大的专业社交网络平台,其核心价值在于为用户提供了在网络空间中展示个人职业身份的机会。该网站自2003年上线以来,迅速发展成为业界领先...

    linkedin开发者javaone会议报告

    这篇“LinkedIn开发者JavaOne会议报告”详细揭示了LinkedIn的技术架构路线图,对于理解大规模Web站点的开发策略有着深远的意义。下面将深入探讨报告中的关键知识点。 首先,LinkedIn的技术架构围绕着高可用、可扩展...

    基于ApacheSamza,揭秘LinkedIn架构背后的技术

    Samza是由LinkedIn开源的一个分布式流...近日,LinkedIn资深SRE(网站可靠性工程师)JonBringhurst发表了这篇博文,阐述LinkedIn是如何利用Samza与Yarn、Kafka进行扩展的。ApacheSamza是一个开源框架,可以帮助开发者

    PyPI 官网下载 | linkedin_scraper-2.7.5.tar.gz

    `linkedin_scraper` 是一个Python库,专门用于从LinkedIn网站上抓取数据。在Python的生态系统中,PyPI(Python Package Index)是官方的第三方库分发平台,开发者可以在这里发布他们的开源软件包,方便其他用户下载...

    大型网站架构技术方案集锦

    WikiPedia 技术架构学习分享 Tailrank 网站架构 LinkedIn 架构笔记 Yahoo!社区架构 Craigslist 的数据库架构 Fotolog.com 的技术信息拾零 Digg 网站架构 Amazon 的 Dynamo 架构 财帮子(caibangzi.com)网站架构

    LinkedIn Communication

    总结来说,LinkedIn的通信架构是一个复杂且高度优化的系统,结合了分布式计算、微服务、实时通信、安全性、数据一致性、可扩展性和高可用性等多个方面的技术。这些技术的巧妙组合使得LinkedIn能够为全球用户提供了...

    下一代规划阿里交易型技术架构研究PPT教案.pptx

    阿里交易型技术架构是阿里巴巴集团为了处理海量在线交易而设计的一种高效、稳定、可扩展的架构体系。这个架构的研究涵盖了多个关键领域,包括应用架构、技术架构、运行模型、部署架构以及大数据平台架构。 1. **...

    第五届中国云计算大会讲师PPT:Linkedin商业分析部如何运用大数据实现商业价值-吴继业

    #### 四、LinkedIn的数据及技术架构 LinkedIn能够成功地运用大数据实现商业价值,与其强大的数据和技术架构密不可分。其数据架构主要包括以下几个方面: 1. **数据收集**:通过用户行为追踪、问卷调查等多种方式...

    01+Linkedin商业分析部如何运用大数据实现商业价值-吴继业-可公开

    标题中的“01+Linkedin商业分析部如何运用大数据实现商业价值-吴继业-可公开”揭示了一个关于LinkedIn商业分析部门如何利用大数据来创造商业价值的主题,由吴继业进行分享。这可能是一个演讲、讲座或者报告,讨论了...

    LinkedIn职业网络中的数据挖掘应用.pdf

    LinkedIn是全球最大的职业社交网站,主要关注用户的职业和商业关系(即人脉)。其数据挖掘的意义在于能够通过分析海量用户数据,帮助用户构建和维护社交网络,进而支持职业发展和商业合作。 知识点四:LinkedIn中...

    第五届中国云计算大会吴继业:Linkedin商业分析部如何运用大数据实现商业价值-

    2. LinkedIn数据及技术架构:LinkedIn拥有海量数据,这些数据不仅是社交网络的基石,也是公司商业分析的基础。商业分析部通过集成数据、BI、数据挖掘和分析,支持着LinkedIn内部员工的工作。他们的数据分析覆盖了...

    GMTC2018-《LinkedIn移动应用的性能优化之道》-廖锦幸

    本篇报告《LinkedIn移动应用的性能优化之道》由LinkedIn工程师廖锦幸所撰写,总结了该平台在移动应用性能优化方面的实践经验,涵盖了从架构设计到监控体系,再到具体实施的各个方面。 首先,报告开篇提出了“为什么...

    藏经阁-Storage Infrastructure behind LinkedIn's recommendation-29.p

    LinkedIn 推荐系统存储基础设施...LinkedIn 的推荐系统存储基础设施是基于分布式键值存储系统 Voldemort 和 Hadoop 的大规模数据处理技术的。它具有高性能、高可用性和高扩展性,能够满足 LinkedIn 大规模用户的需求。

    LinkedIn基于Kafka和ElasticSearch的实时日志分析系统

    - ElasticSearch支持分布式架构,可以处理PB级别的数据量。 - 这使得LinkedIn能够应对快速增长的日志数据量,同时保持系统的高响应速度。 #### 四、LinkedIn的实时日志分析流程 **1. 日志收集** - LinkedIn的...

    Building LinkedIn’s Real-time Activity Data Pipeline

    - **未来发展**:随着技术的进步和社会的发展,LinkedIn将继续探索更高效、更稳定的数据处理方案,以支持更加丰富的应用场景和更高水平的服务质量。 #### 六、总结 本文详细介绍了LinkedIn如何构建其实时活动数据...

    PyPI 官网下载 | linkedin_user_scraper-0.0.5-py3-none-any.whl

    在使用"linkedin_user_scraper"库之前,确保遵循LinkedIn的使用条款和政策,因为许多社交媒体网站对爬虫活动有严格的限制。此库可能利用了网络爬虫技术,比如BeautifulSoup或Scrapy,来提取LinkedIn用户公开的个人...

Global site tag (gtag.js) - Google Analytics