`
jusescn
  • 浏览: 125261 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

LinkedIn架构图:99%都是用Java写的

阅读更多

著名社交网站LinkedIn的Java架构技术,在JavaOne大会上,LinkIn开发者做了介绍,并有PPT下载,现在有更详细的架构图下载,LinkIn开发者透露LinkedIn 99%都是用java写的,除了缓存通过C++实现。

下面是详细架构图:

 


JavaOne 2008的会议上,著名社交网站LinkedIn的开发者做了2个关于LinkedIn

网站的架构技术的演讲,目前这两个演讲的PPT已经可以下载了。下载地址如下:

需要注册才可以下载,能下载PDF版本。

可以看一下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); they 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程序,也就是就是说java的的垃圾搜集性能不太好
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。所有的操作都是异步的。

 

 

分享到:
评论
2 楼 saharabear 2008-06-24  
不管怎么说,人家承受住这种业务,并且可扩展就是一种优势。
1 楼 manmoon 2008-06-15  
没看出咋地,比起一些web2.0的llmp体系,弱多了。

相关推荐

    linkedin-java:LinkedIn Java 库

    这个库的目标是用一个更小、更快、更高效的 javalinkedin 库替换linkedin-j。 使用 scribe 进行 oauth-heavy 提升和 gson 进行 json 解析。 另一个目标是避免大多数这些库的一个常见问题,即它们关闭或使自定义类或...

    LinkedIn的数据处理架构

    为了支持其复杂的数据处理需求,LinkedIn必须设计出能够高效处理、存储和分析大数据的架构。本分析基于公开的演讲资料及LinkedIn技术架构设计。 首先,LinkedIn产品的数据处理需求表现在几个方面:用户档案、通讯、...

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

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

    linkedin社交网站的架构

    3. **微服务架构**:随着业务的不断发展,LinkedIn逐步转向微服务架构,这使得每个服务都能够独立部署和扩展,从而更好地适应业务需求的变化。 通过采用这些先进的开发流程和技术手段,LinkedIn成功地构建了一个...

    angular-linkedin-connect:一个非常简单的 angular 模块,它使用linkedin 处理登录

    angular-linkedin-connect : 一个非常简单的 angular 模块,它使用linkedin 处理登录 安装 1)下载包:使用zip文件下载 2) 在你的应用中添加 angular-the-linkedin.js 并更改 api_key // Initialization of ...

    No Feed For LinkedIn:registered:-crx插件

    使用此扩展程序,您只需单击一下即可隐藏/显示您的LinkedIn Feed。 LinkedIn:registered:(nffls)的任何供稿都不会关心您的隐私:不会收集,存储或发送任何数据到外部服务器。 ___________________________________...

    LinkedIn数据地图

    他需要审视美国的经济史(从1970到2000年,跳槽率增加了将近一倍,平均每十年换3.1个工作)、简历小贴士(求职者过度使用“经证实的工作记录”一句)以及关于命运的冥思(高管名字一般都很简短,如杰克(Jack)、...

    LinkedinSpider, Linkedin爬虫,根据公司名字抓取员工的linkedin信息.zip

    然而,值得注意的是,任何网络爬虫都必须遵守LinkedIn的服务条款,尊重用户隐私,不得用于非法目的。此外,频繁的爬取可能会影响个人账号的正常使用,因此在实际操作时需谨慎。 在应用场景上,LinkedIn Spider 可能...

    Linkedin-Automation:Linkedin自动发送消息

    在IT行业中,LinkedIn是一个重要的职业社交平台,许多专业人士利用它来建立网络,寻找工作机会,或者推广他们的服务。为了提高效率,人们有时会寻求自动化工具,例如“LinkedIn Automation”。这个项目,"Linkedin-...

    scrape-linkedin-selenium:scrape_linkedin是一个Python软件包,可让您抓取个人LinkedIn个人资料和公司页面-将数据转换为结构化json

    它们可能会将发出未经身份验证或异常请求的ip列入黑名单目录Python包个人资料公司介绍配置平行刮例子配置问题 安装 用pip安装运行pip install git+git://github.com/austinoboyle/scrape-linkedin-selenium.git ...

    linkedin-gatherer:Linkedin工具收集配置文件数据,重点是网络连接

    9. **合规性与隐私**:在使用类似`linkedin-gatherer`的工具时,开发者和使用者必须遵守LinkedIn的服务条款和数据使用政策,尊重用户隐私,不进行非法数据采集。 10. **持续集成与部署**:对于一个专业项目,持续...

    linkedin2username:OSINT工具:为LinkedIn上的公司生成用户名列表

    使用拥有很多联系的帐户,否则您将获得糟糕的结果。 在目标公司添加几个连接应该会有所帮助-此工具将可以用于三级连接。 请注意, 最多可为1000名员工。 您可以使用功能--geoblast或--keywords来绕过此限制。 有关...

    linkedin_scraper:收集Linkedin的领取用户数据的库

    Linkedin刮板机 清除Linkedin用户数据 安装 pip3 install --user linkedin_scraper 2.0.0版及pip3 install --user linkedin_user_scraper版本称为linkedin_user_scraper ,可通过pip3 install --user linkedin_user...

    linkedin-clone:https

    开发者可能使用了React、Vue.js或Angular等现代JavaScript框架来构建LinkedIn克隆的用户界面,这些框架提供了组件化开发、状态管理以及性能优化等功能。 2. **HTTPS安全**:HTTPS不仅仅是添加一个“s”那么简单,它...

    linkedin-crawler:用于LinkedIn个人资料页面的网络爬虫

    【标题】:“linkedin-crawler: LinkedIn个人资料页面的网络爬虫” 这个项目是一个专门用于抓取LinkedIn个人资料页面数据的网络爬虫工具。它利用JavaScript编程语言实现,旨在帮助用户自动化收集LinkedIn上的职业...

    linkedin-oauth:在Express中使用oauth2

    **标题解析:** "linkedin-oauth:在Express中使用oauth2" 指的是一个使用OAuth2协议在Express.js框架下实现与LinkedIn进行身份验证的应用程序。OAuth2是一种授权框架,允许第三方应用在用户许可的情况下访问其在特定...

    linkedin_login:Flutter的OAuth登录

    linkedin_login 用于 OAuth 2.0 API的Flutter库。 该库正在上使用新的授权方式 :star: :star: :star: :star: 星星 :star: :star: :star: :star: 如果您喜欢项目,请进行回购。 您的支持对我们很重要。 :star: :...

    linkedin2md:(已弃用)将公开的LinkedIn个人资料导出为Markdown格式

    您可以使用此工具从您的LinkedIn个人资料生成Markdown格式的简历。 编辑输出的Markdown文件并将其转换为PDF, 因此您可以使用纯文本简历(也许将其放在支持Markdown格式的个人网站上) 和PDF CV同时显示。为什么要...

    linkedin-voyager:围绕linkedin旅行者私有API的小包装

    LinkedIn Voyager是LinkedIn内部开发的一个私有API工具,主要用于帮助LinkedIn的开发者更加便捷地访问和处理LinkedIn的数据。这个工具包提供了一个简洁的接口,使得开发人员能够更高效地与LinkedIn的后端系统进行...

Global site tag (gtag.js) - Google Analytics