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

Alexandru Popescu谈InfoQ.com网站架构

    博客分类:
  • java
阅读更多

 概要
在QCon伦敦2008会议的采访中,InfoQ首席架构师Alexandru Popescu谈论了InfoQ的架构、WebWork与DWR的集成、Hibernate与JCR、Hibernate可扩展性、MySQL拷贝、最新 InfoQ视频流系统、视频编码过程、网站搜索和InfoQ未来规划。

个人简介
Alexandru Popescu是InfoQ.com的首席架构师和联合创始人。同时,他作为TestNG框架的联合创始人、WebWork和Magnolia项目的提交者,参与了许多开源工程和前沿技术。在AspectWerkz项目合并到AspectJ之前,Alexandru曾经是三个提交者之一。他的博客地址是 http://themindstorms.blogspot.com/

大家好,我是Ryan Slobojan,坐在我旁边的是InfoQ.com的首席架构师Alexandru Popescu。Alexandru,能否告诉我们InfoQ网站的一些架构信息—它是什么样子的?又是如何构建的? 

你可以从两种不同角度审视InfoQ的架构:从我们读者的角度看,InfoQ就像是一个普通的网站;但是对于我们的编辑和在后台工作的人员来说,它则是一个地地道道的CMS(内容管理系统)。因此,你所看到的InfoQ建立在一个自制的CMS的基础之上,它把内容与用户账号、跟踪系统、广告机制等等集成。我们可以从一个更易于理解的角度来描述 InfoQ网站—它是一个Web应用,即使是CMS,你也可以看作是一个Web应用,它有通常的分层结构:表现层、服务层和持久化层。

两年半之前,当我启动这个项目的时候,面临着很多有趣的选择。例如,持久化方面不但基于关系型数据库,而且使用JCR API存储内容。同时,我们不得不在基于组件的Web框架和基于动作的框架中二者选其一,并最终选择了后者。我们认为它更贴近我们解决方案的设计,即使我们可能需要一些基于portlet的东西……我想说那时侯portlet规范非常差,希望以后我不会让大家太失望。你可以想象作为一个三层结构是多么的简单,你应该能够猜到:一点Spring、一点WebWork、一点Hibernate和JCR API。
当然,希望我没有记错一些细节。让我们从浏览器开始。通常有两种方式访问我们的应用,要么是通过浏览器正常访问,要么是通过AJAX请求,如 XMLHTTPRequest,然后请求进入WebWork或者DWR。如果是普通请求,则它会经过WebWork处理。如果是AJAX请求,则进入 DWR,然后分派到服务层,这层的全部家当只不过是Spring和一些采用AspectJ的AOP,目的是增强我们的模型。然后,请求会进入持久化层,我刚才已经提到这层被分割为Hibernate和JCR。

因此,最后我们拥有两种不同的存储。此时你可能会问为什么我们选择了两种解决方案来存储信息,这些信息本可以采用同一种存储方式。问题是,当我们设计 InfoQ的时候,我们并不确定模型会是什么样子的,也不确定我们的内容随着时间会如何变化。同时,在关系型模式下处理这些变化非常困难,在不同版本之间迁移和维护数据等等是非常复杂的。而JCR API明确支持非结构的内容和很多其他特性,比如版本化、全文索引,我们充分利用了这些功能。

同时,对于编辑工具,它与你看到的InfoQ.com几乎完全一样,除了不太花哨。因为我们设计的是同一个应用,所以使用相同的栈、几乎相同的API,在构建时我们把API分为两部分,对外开放的部分使用只读API,而对于编辑工具,我们使用可读/写存取API,不过本质上它们都是基于同一份源代码。
我们一个问题一个问题的看。到目前为止,我还没有在Hinernate的层面上发现任何问题。我是说我们甚至都没有优化查询。我们使用的就是 Hibernate自动生成的东西,性能也非常非常好。其次,由于性能不错目前我们还没有对数据分区,即使我们需要在后台处理海量的数据。我们一直在关注网站的性能,但是现在还不需要做些什么。另外一件关于架构的趣事是,唯一可能的瓶颈是我们使用的关系型数据库,因为其他存储内容的数据库位于外部服务器上,所以在内容存储方面可以线性扩展。如果我们遇到与关系型数据库相关的性能问题,我们可以很容易的创建一个MySQL数据库集群。
最初我们使用了基于流的解决方案并由第三方实现。不幸的是,在方案设计完并开始动工之后不久,我们就发现第三方提供的服务要求我们和客户开放特定端口来访问Flash流。这对我们的大客户来说是一个很大的问题,例如像IBM这样的大公司,完全处在防火墙后面,他们绝不会为你打开特定的端口,而只是为了收看 InfoQ上的视频,哪怕这些视频很有价值。因此,我们开始考虑替代方案。

那时,我们注意到YouTube和其他视频服务提供商正在迁移到基于下载的视频方案上。与此同时,Amazon启动了目前很有名的服务,如S3和EC2。我们考虑使用这些开放服务(希望它们真的可靠)建立一个解决方案,新的架构就是基于Amazon S3和EC2服务。部署非常简单—你只需要一个web服务器让你能够访问被索引的视频,和一些存储,仅此而已。如果你开始考虑这样一个解决方案,你可能几天之内就能创建。现在就是这么简单。确信Amazon服务可靠对我们非常重要,它们为S3服务提供的SLA让我们决定采用S3。现在我们正在等待EC2的相同服务。
我们有S3存储还有EC2服务器。为了能够提供视频服务,我们需要从S3上获取视频。因此,我们在S3容器和本地存储之间建立了一个同步机制,然后一切都通过此处访问。现在,解释一下如何获取资源。我们的内容数据库会提供资源的名字,因此所有我们存储在JCR中的元数据和与内容相关的信息都存在该数据库中。然后,我们提供一个ID,数据库里给出获取该视频的映射关系。即使是S3或者VitalStream第三方支持,都是一样的。说到底,就是基于ID的资源查找。
考虑到我们公司非常虚拟化,我是说全球的工作人员,分布在不同的地点和时区,我们围绕着需求清单建立了一个定制过程,清单上按照优先级列举了未来几年内我们需要实现的事情,然后推动几个迭代过程,我们会讨论细节。针对你的问题,我的需求清单有七页之长。这些新功能迟早都会实现。我们还有一些新的想法没有写在清单上,但是我想给大家一个惊喜,我们现在有很多竞争者,所以我们将保守秘密。上一次,视频系统的重新实现,我们做了初稿并邀请用户浏览和评论,给我们反馈,以后主要的功能我们都会采用相同的流程。如果你在InfoQ上注册,就有机会帮助我们在未来实现新特性。欢迎注册。
评论

相关推荐

    Learning Embedded Linux Using the Yocto Project - Alexandru Vaduva.rar

    《Learning Embedded Linux Using the Yocto Project》是Alexandru Vaduva撰写的一本深入探讨嵌入式Linux系统开发的著作。这本书通过介绍Yocto项目,为读者提供了构建定制化Linux系统的全面指导。Yocto项目是一个...

    Data Visualization - Principles & Practice - Telea, Alexandru C.

    Alexandru C. Telea所著的《数据可视化:原则与实践》第二版提供了一个精简的入门指南,介绍了各种可视化技术,并强调了与相关学科如图像处理和计算机图形学之间的强烈联系。 该书覆盖了数据可视化的多个子主题,...

    Alexandru_Ionescu-OpenSIPS_Summit2015-ControlPanel

    ### 关于Alexandru Ionescu在2015年OpenSIPS Summit的演讲:OpenSIPS Control Panel #### 演讲概述 本次演讲由Alexandru Ionescu在2015年的OpenSIPS Summit上进行,地点位于荷兰阿姆斯特丹。演讲的主题是关于...

    图像填补的telea方法

    Telea算法是由Alexandru Telea在2004年提出的一种高效且高质量的图像填补方法,它主要依赖于局部上下文信息来恢复图像的缺失区域。这种算法在数字图像处理和计算机视觉领域具有广泛的应用,如去除图像中的不想要对象...

    myIMDB_17.3

    myIMDB_17.3球队: 弗拉基米尔(Vladimir Cimpeanu) Lavinia Amalia流行音乐 丽贝卡·安娜· 罗伯丹·米哈埃拉(Lobodan Mihaela)Liliana Spaiuc Dumitru-Alexandru 文件夹结构: style.css(全局) 资产/ img ...

    Lab6dotnet:TS .NET学科的学生Mendela Alexandru-Abel的实验室6

    标题中的“Lab6dotnet”很可能是指一个关于.NET技术的学习项目或者实验,而“TS .NET学科的学生Mendela Alexandru-Abel的实验室6”则表明这是一个针对.NET技术的课程,具体到第六个实验室任务,由学生Mendela ...

    interview_project_alexandru_tomuta

    专访_project_alexandru_tomuta 位置经理 我们在客户端使用Google的Autocomplete js框架来获取位置的坐标。 这些坐标被发送到后端服务器,该服务器依次查询Google place API,以获取有关该位置附近场所的详细信息。 ...

    typelevel-library.g8:用于启动准备发布的FP库的模板

    cd $project -folder/git initgit branch -m master maingit commit -am ' Initial commit ' 在GitHub上创建一个新的存储库,请访问并将其添加为您的来源: git remote add origin https : // github.com/$GITHUB_...

    Boost.Asio.C++.Network.Programming

    这些朋友包括Alexandru Chis、Aurelian Hale、Béla Tibor Bartha、Cristian Fatu、Horia Uifaleanu 和 Nicolae,这些都表明了本书是作者与多位专业人士合作的结晶。 对于希望深入学习C++网络编程的读者而言,Boost...

    Pillow-8.3.0.tar.gz

    Pillow库是Python中广泛使用的图像处理库,它是PIL(Python Imaging Library)的一个分支,由Alexandru Marasteanu维护,旨在提供更简单、易用的图像处理接口。Pillow-8.3.0.tar.gz是一个压缩包文件,其中包含了...

    alexsomai.github.io:我的个人网站空间

    亚历山德鲁·索迈(Alexandru Somai) 我的个人网站空间 在本地运行 bundle exec jekyll serve

    Mastering Web Application Development with Express.pdf

    在《Mastering Web Application Development with Express》这本书中,作者Alexandru Vlăduțu深入探讨了如何使用Express框架构建稳定可靠的生产级别Web应用。本书不仅涵盖了Express的基本概念和技术细节,还提供了...

    tr0yyy

    email = 'alexandrunicoi@gmail.com' bachelor_degree = 'Computers and Information Technology' prog_skills = 'c++' + 'python' + 'java' + 'c' + 'sql' + 'matlab' + 'verilog vhdl' passions = '...

    Pillow-2.3.0.zip

    Pillow库源自PIL(Python Imaging Library),由Alexandru Marusiuc在2010年创建,目的是解决PIL对Python新版本支持的问题。Pillow不仅修复了PIL的一些已知问题,还引入了对Python 3的支持,以及自动安装依赖项的...

    40多个漂亮的网页表单设计实例

    如Created 201.com的立体联系表单利用Flash创造出独特的视觉效果,而Edward Pistachio的网站则通过解谜游戏来增加互动性。Chemistry Recruitments的文件夹和便签设计,以及Alexandru Cohaniuc的草纸与邮票组合,为...

    java-9-modularity-revealed:Alexandru Jecan的“揭示了Java 9模块化”的源代码-java source code

    该存储库随附Alexandru Jecan(Apress,2017)的 。 使用绿色按钮将文件下载为zip格式,或使用Git将存储库克隆到您的计算机上。 发行版 版本v1.0对应于已出版书籍中的代码,没有更正或更新。 会费 请参阅文件...

    spark翻译_译文发布版

    该标题直接指向了文章的主要内容,即提出了一种在大型集群上实现快速和通用数据处理的架构。 3. 标签只有一个:“spark翻译”,这进一步确认了文章与Apache Spark(一个开源的大数据处理框架)相关。 4. 提供的...

    Pinboard Popup-crx插件

    语言:English 打开标准的Pinboard弹出窗口以将当前页面添加为书签 一个简单的扩展程序,仅打开Pinboard“带有标签的弹出窗口”,即可...该代码是开源的,可以轻松检查:https://github.com/alexandru/pinboard-popup

    插板弹出「Pinboard Popup」-crx插件

    打开用于为当前页面添加书签的标准插页板弹出窗口 一个简单的扩展程序,仅打开Pinboard“带有标签的弹出窗口”,即可...该代码是开源的,可以轻松检查:https://github.com/alexandru/pinboard-popup 支持语言:English

    Python库 | Pillow-2.2.1.win-amd64-py3.2.exe

    Python库Pillow是Python编程语言中的一个图像处理库,它是PIL(Python Imaging Library)的一个分支,由Alexandru Mariniuk维护,并且在社区的支持下持续发展。Pillow库在PIL的基础上进行了许多改进,使得它更加易用...

Global site tag (gtag.js) - Google Analytics