告诉我们一些关于您自己的信息
我是 Joomla 项目多年的支持者,自从 2003 年初的 Mambo 时代开始就参与了项目的贡献。我敢肯定,我是唯一一个硬闯进核心团队的人 :-) 我深深参与了将项目品牌重塑为 Open Source Matters 和 Joomla 的努力;我还有一个独特的荣誉,就是作为项目的“John Hancock”,因为我是唯一一个在 OSM 初始公司文件上签字时亲自在场的人。目前,我不再是项目的官方成员,但当然,我仍然是项目的积极推广者和支持者。我也是 MongoDB 的贡献者,并开始参与 Lithium PHP 框架的开发,我是新兴技术的狂热爱好者。我是一个毫无歉意、毫不掩饰的自由开源软件迷。
在职业方面,我是 Totsy 的 CTO,这是一个专注于为妈妈们和她们的小孩提供酷炫和独特商品的私人销售网站。
我是个家庭主义者,所以除了 Joomla(以及一般的技术/职业)之外,我更喜欢花时间与妻子和孩子们在一起。我还指导足球(布鲁克林爱国者队加油!)和盖尔语足球(布鲁克林小红萝卜队加油!),而且很高兴又能滑板了。我正在写几本书,这出奇地困难和耗时。
您构建并部署过哪些大型 Joomla 网站?您能为我们提供这些网站的流量数据吗?
Viacom:我是Quizilla.com的首席架构师和开发者,这是Viacom的一个资产,每周页面浏览量峰值约为5800万。这个网站是使用框架完成的,而不是CMS堆栈。效率提升非常惊人,因为我们不需要担心语言、时区或这个网站的动态导航。完整的CMS堆栈的开销将会非常难以克服,我对Joomla框架的性能非常满意。我们的代码库最终进入了Viacom平台标准组,我希望其他人也能利用它。我猜Quizilla的最高月访问量接近2.5亿页面浏览量。我最初是被雇佣为顾问,以验证他们相信现有平台的完全重新实现是合理的,然后领导了评估和替代技术的提案。
Gilt Groupe:我同时也是Jetsetter的系统架构师和创始CTO,这是Gilt Groupe的一个资产,它是一个非常创新的实现,流量也堪比Quizilla。我们使用了完整的CMS堆栈,还利用了MongoDB文档数据库存储所有非核心数据,以及Zeus流量管理和CD Networks的CDN。
Food Networks:在KickApps担任副总裁期间,我是Food2项目的负责人,KickApps是一家托管式白标社交媒体公司。KickApps被雇佣来制作Food2.com网站,这基本上是社交媒体技术和丰富媒体体验的混合。基础平台是Joomla,KickApps提供了一些非常强大的富客户端媒体播放器,与Facebook和MySpace的集成,以及通过REST API与KickApps服务的集成。真正使这个项目成为一个非常了不起的成就的是,在非常短的开发周期内实现了非常激进的功能。好吧,其实没有开发周期,这更像是在两个月内的冲刺和死亡行军。我为这个网站和完成它的团队感到非常自豪 - 每个参与的人都是我心中的佼佼者。我认为这是一个“大规模”的网站,因为有很多系统集成和服务,在新剧集上传和比赛进行时会有很大的流量爆发。可能不如Quizilla和Jetsetter,但在我眼中仍然是一个重大的成就。
在规划这些网站时,你还考虑了哪些其他平台(如果有)?
我简要考虑过在Quizilla项目中使用Drupal,以及许多PHP框架。Drupal当时正在被淘汰,因为当时的版本过于繁琐,容易因为额外的流量而压垮数据库。
对于Jetsetter和Food2,Joomla提供的丰富的管理界面和完整的核心功能是最大的时间节省;对于Quizilla,框架级别的自定义能力为解决极端规模和性能挑战提供了灵活性。
选择这些网站的平台/CMS时,你考虑了哪些标准?
- API丰富性
- MVC
- 面向对象方法
- 模块化、灵活的框架
- 缓存、会话和数据库类
- 支持多种数据库类型的多个连接
- 管理UI的脚手架
- 社区规模、安装基数
- 平台的性能
为什么选择Joomla?
参见对上一个问题的回应。:-)
你能描述一下规划和构建大规模网站的过程吗?
- “大规模”可以意味着很多事情 - 有时候是海量的内容和数据,有时候是海量的流量。规模和性能并不总是一回事,所以这是首要考虑的。
- 此外,许可问题也会出现 - 如果你想要构建自己的平台并拥有它(因此在出售平台的情况下,可以控制分发的许可),那么底层技术的许可将是主要因素 - 但到目前为止这对我来说 hasn't been an issue.
- 管理员界面需要多么丰富?这是一个可以自我运行的网站,还是需要许多人来管理许多事情?
- 需要什么级别的定制?有时完整的CMS堆栈能让你最快到达终点,而在其他时候,使用框架并仅构建所需的内容可能更适合你。
- 开发周期是什么?大多数开发者在开发过程中只关心他们的工具;那么网站上线后会发生什么?一个实时网站的操作问题可能是一个沉重的负担,这种额外费用总是长期计划的一个因素。
- 有哪些运营资源可用,从管理角度来看,基础设施复杂程度如何?
- 与外部系统集成的需求是什么,有没有任何这些需求强制使用特定的工具集?
这些网站是如何/在哪里托管的?你能描述一下处理大型网站所需的服务器和网络配置吗?
一些高流量网站只需要三台Web服务器和一台数据库服务器,其他的则需要一排又一排的设备,因为它们需要进行更多的计算工作。还有一些网站每天在Amazon的EC2云服务中启动数百个节点几个小时,因为由于网站使用的性质,它们的流量使用有极端的爆发。
你是否不得不对Joomla进行核心修改,以适应这些网站预期的流量?
当然。这里我必须摘下手套。JSession非常糟糕。请大声说出这句话,并重复三次。每天。JDatabase稍微好一点,但好不了多少。JSession和JDatabase都需要调整以满足性能要求,但JSession需要做大量工作,这也需要对许多其他子系统和模块进行黑客攻击,甚至包括JApplication!JUser同样不灵活,我曾经有一个远程认证源,用户数据通过REST调用返回 - 并不得不在jos_users表中存储不想要的数据副本,以使Joomla安静。1.5系列的ACL是一个混乱;我总是为每个项目开发自己的ACL,并根据这些特定需求调整我的实现。
最后,这是一个所有主要平台都面临的挑战,所以这不是针对Joomla的具体攻击,而是PHP5与PHP4支持的问题。我现在大部分时间都在使用Lithium框架,它至少要求PHP 5.3,命名空间和闭包(只是略述一下)对我来说非常方便。Joomla永远不能在其实现中那么前卫,因为他们还必须考虑所有主要的托管服务提供商所支持的内容。而你知道他们支持得多么糟糕。嘿,大型的ISP们,快点进入新千年吧。这是所有主要的CMS团队都必须回答的一刀切难题的诅咒。
Joomla内置的缓存系统是否足够?
对我来说,Joomla的缓存没问题,只是有太多的部分(和第三方扩展)没有利用JCache。现在,别误会我的意思,JCache有很多可以改进的地方,但总的来说,足够完成工作。我非常希望看到更自动化的写入穿透和缓存失效,以及更直接的缓存对象访问。拥有一个足够智能的缓存,能够自主刷新缓存对象将是一个巨大的优势。
MongoDB在您开发的网站中扮演什么角色,特别是在大规模网站中?
简而言之,我无法想象在没有类似MongoDB这样的数据库支持下,承担一个高流量、高负载的网页项目。除非我需要处理关系型数据,否则我不再使用关系型数据库进行开发 - 老实说,这在大多数Web应用中并不常见。Web开发人员曾经使用当时最好的工具(关系型数据库),但现在时机已经成熟,有了更适合工作的工具。
MongoDB是Jetsetter项目的转折点。那时我已经基本转向非关系型数据库,仅使用足够的SQL来满足Joomla的需求。所有Jetsetter特定的扩展都是用Joomla的MongoDB辅助库编写的。分片、副本集以及极其稳健的并发性是MongoDB相对于关系型系统的几个显著优势。代码变得更简单,减少了错误,并进一步提供了性能提升。
Joomla 1.6开始使用一个正确的查询类 - 有一个新颖独特的名字 :-)- 这样我们就可以开始将MySQL从底层中移除,这将是一个巨大的性能和规模提升。接下来的窍门是找到方法利用MongoDB特有的功能,同时又不过于依赖这个特定的数据库;我认为Joomla最大的弱点是永远依赖MySQL,我们需要将Joomla带到一个数据只是数据的地方,让驱动程序来做工作 - 请不要在代码中再使用SQL!如果有一个基础的数据API调用集,比如获取器和设置器,然后每个驱动程序也暴露出平台的独特能力供开发者利用,那就太棒了。喜欢CouchDB或Cassandra的人可能也会有和我相同的感觉,他们各自可能想要利用他们选择的数据库的不同特性。
关于使用Joomla构建和部署大规模网站,您还有其他想分享的吗?
最终,这一切都是关于平衡,了解使用完整的CMS堆栈是否带来的好处多于障碍。Joomla的功能集是否能让你超过50%地接近终点?或者是否需要进行比实际使用Joomla更多的定制?每个工作都有合适的工具,它们的需求和需要永远不是一成不变的。
我确实相信Joomla底层的框架使它比其他单体CMS平台更加模块化和灵活,我顽固地坚持Joomla是真正可以声称是企业级的最佳FOSS PHP基础CMS。
关于这次采访
感谢来自CoryWebbMedia.com的Cory Webb,最初在HowToJoomla.net上发表了这次采访。