SegmentFault 是一个面向国内 IT 行业开发者的问答社区,经过两个月的设计和开发 SegmentFault 团队于 8 月对网站进行了升级,不仅 UI 整体改版,交互流程和网站功能也有了很大的不同。InfoQ 就SegmentFault 的这次升级对团队成员进行了采访。
InfoQ:SegmentFault 于近日进行了升级,能介绍一下升级的背景吗?
祁宁:如果说 SegmentFault 以前只是一个心血来潮的结果,那么现在已经算我们比较正式的事业了,毕竟各位参与者都放弃了手中现成的工作来到了杭州,一起共谋这个在他人眼里注定艰难的事业。这次升级其实也是这么一个背景,以前的网站只能算是一个个人作品,但是现在我们要把它变成一个产品了,这两者的差距我相信做过项目的人心里都清楚。相比较来说,技术架构上的升级都是顺其自然的,因为一切都已经有了这个前提。
InfoQ:当前的网站和之前在架构上有哪些不同?
祁宁:网站的框架已经全部重写了,层次更加分明,不过重构这东西对技术人员来说就跟家常便饭一样。要说真正的不同其实有几个方面。在框架上来说我们在 PHP 里引入了 Java 中注入变量的概念,虽然不是完全相同,但也已经到了神似。实现起来其实很简单,只是几个 PHP 的小技巧,但是却解决了 PHP 项目中一个让人头疼的问题,就是模块的自由引用。
另外一点升级就是我们对 Redis 使用更加成熟,如果说以前我们看 Redis 只是一个见猎心喜的小孩,什么数据都要一股脑的往里面放,现在我们就更加理智了,因为我们已经知道 Redis 什么能做什么不能做,使用的时候也更加有的放矢。
在数据层次上,可以看到我们已经统一了所有对象的 id,也就是说在 SegmentFault 中所有资源都有一个各自对应的完全独立的 id。这为以后功能的扩展提供了极大的方便。
高嘉峻:祁宁描述了技术架构上的变化,我说一下这次升级在产品架构上的变化。之前 SegmentFault 的产品和设计很大程度上借鉴了 StackOverflow ,在过去一年左右的时间里,我们也在不断思考,什么样的产品模式才适合国内的技术环境。
这次改版,我们更强调了产品的社交属性,提供更多个性化的功能,增强用户发现答案的可能性;另一个重要的变化,就是对搜索框的强调,我们希望搜索框可以成为 SegmentFault 最重要的入口,通过减少入口简化解决问题的流程。
可以说这次改版,我们摆脱了 StackOverflow 的影子,这是一个属于我们自己的 SegmentFault。
董锋:产品设计之声望与等级:声望单纯从数字上看,很难看出用户的声望值与提问或回答的价值关系,所以我们引入了等级概念。将用户声望按高低排名分成了 11 个等级,参见这里,这样问题和答案的价值就能通过作者的等级很直观的区分。
InfoQ:SegmentFault 希望能够为国内的程序员提供最有用的问答,那么在搜素上我们是如何做优化的?
祁宁:首先我们提供了实时搜索功能,当然这是 redis 实现的,实时搜索能让用户更快更准确的定位资源。
然后我们的主力搜索引擎使用了国人开发的 xunsearch ,虽然它是基于 Xapian 的二次开发,但是封装后的 API 非常好用,而且也满足了我们的基本需求,它对中文的良好支持也是我们选择它的重要原因。
高嘉峻:之前说过我们希望强化搜索框的入口功能,所以这个产品对搜索要求会比较高。现阶段我们对搜索引擎的设计,更多考虑的是高扩展性,尤其是产品和功能上的扩展性。
早期 SegmentFault 的数据量还非常小,所以我们没有在搜索性能上做太多工作。功能上,我们希望随着网站的发展和运营,通过对用户行为的深入挖掘再扩展,我们使用 xunsearch 为问题、标签和用户建立了三份索引,也是出于易扩展方面的考虑。
高阳:新版网站搜索的改进很大程度上归功于 Redis 的使用,也可以通过这个文档来了解相关内容。
InfoQ:SegmentFault 的问题 URL 是无语义的,这一点和 Stackoverflow 不同,这是基于哪些考虑?
祁宁:是的,现在的 url 已经是由纯 id 组成。其实这也不难理解,Stackoverflow 或者国外网站用标题切分作为 URL 的一部分无疑就是为了 SEO,但是这一点英语上有天然优势,首先它每个单词是切分好的,再用中横线连接就可以自然形成一个个关键字,但汉字却不行,大多数标题连一个标点符号都没有,在 SEO 中的效果不会很好,其次,英文的字节长度要小于中文,可不要小看了这一点体积,因为我们的中文字节码都是要经过 urlencode,所以一个汉字的实际长度就很可观了。
因此对我们来说,与其在 url 这种细微末节上想伎俩,不如扎实的做好内功,做一个真正高质量的社区相信对搜索引擎的影响总比 URL 来的高吧。
InfoQ:我看到 SegmentFault 的邮件系统采用的 Amazon Simple Email Service(Amazon SES),那在 SegmentFault 的整个系统中是否还采用了其他的 SaaS 服务?在集成这些服务的时候您觉得需要注意哪些问题?
祁宁:在选择 SaaS 服务上来说我们显得很谨慎,主要是国内这一点还太欠缺,没有什么可靠的选择,我们还不想当试验品,另一点就是选择过多的 SaaS 服务,特别是这些服务还来自不同的提供商,会增加系统本身的复杂度,让它难以维护,可靠性也会降低。
但是选择国外的服务也会有风险,比如有段时间 SES 就会因为众所周知的原因而导致网络无法访问,这时候就需要你用另外的服务器做中转了,这也是我们没有贸然选择的原因,这其中的坑实在比较多。
InfoQ:在整个 SegmentFault 的开发过程中您能分别列举最让人激动和纠结的两个技术实现吗?
高嘉峻: 我个人比较兴奋的一个技术实现是我们这个 PHP 框架中一个 Data 模式,Data 模式加上以上 Joyqi 提到的注入。
我们解决这个问题,多场景要求不同的数据模型进行不同组合,而我们却不需要为这些场景分别定义数据结构,只需要在使用时直接调用,框架会在运行时注入数据。无论是开发效率还是运行效率都有提升。
董锋:在使用 LESS 还是 Sass 语法编写 CSS 纠结了很久。先用 LESS 写了一段时间,发现代码量控制不太好,与 HTML 结合过于紧密,有不少局限性,于是转投更成熟的 Sass,很好的将样式表模块化,提高复用率和效率。
我们还大胆了引入了响应式 web 设计(responsive design),使网页在不同分辨率的终端下都能良好的展示。
InfoQ:SegmentFault 社区当前讨论比较热烈的话题有哪些?SegmentFault 如何跟踪这些热点话题?
高嘉峻:首先我想解释一个问题,SegmentFault 提供的不是一个讨论平台,SegmentFault 是一个发现答案,解决问题的地方。
现在在 SegmentFault 平台提及最多的技术还是 Web 开发这个领域,如果说具体的技术上,PHP 和 MySQL 是最活跃的。我想这个现象与当下 SegmentFault 的发展阶段比较初级,会员还集中在 Web 开发领域有关。我认为随着 SegmentFault 的发展,用户组成会逐渐扩展到各个技术领域,趋于平衡。移动开发技术的问题会逐渐多起来,移动技术发展阶段比较初级,而且初入这个领域的人也会越来越多,需要 SegmentFault 的人在这个领域更集中。
我们正在构思一些数据挖掘类的产品,随着我们数据量的上升,对这些热点问题的跟踪和挖掘才会有意义。
InfoQ:SegmentFault 使用的 PHP 语言做开发,那么作为 PHP 语言的资深用户,据你的观察最近整个 PHP 社区都主要关注哪些热点问题?
祁宁:要说 PHP 的发展,确实还是比较让人振奋的。首先是 Laruence 成为了为数不多的 PHP 核心开发组一员,作为一个中国的 PHP 开发者,我感到由衷的高兴。另外一个就是 PHP 的开发者越来越务实了,最近看到开发语言排行榜,PHP 的排名下降了一些,其实这也是件好事,肯定很多人明白了 PHP 能干什么,不能干什么,这可以让这门语言的社区少一点浮躁。我希望的是 PHP 在擅长的领域做到极致,而不是什么都做个大概。
InfoQ:能和大家分享一下垂直型问答社区发展的探索、感悟,以及 SegmentFault 接下来的开发计划?
高嘉峻:其实不管做什么社区,最重要的是要有一个属于自己的性格。社区有性格,才能吸引志趣相投的人,留住这些人。我们最垂直的问答社区,就是要找到这个性格,踏踏实实做技术,做一个勤奋,聪明的技术宅,坚持展现这个性格,是我们要做的最重要的事。
说到接下来的计划,我们仍然是坚持帮助用户发现答案,解决问题的原则,围绕用户个性开发一些产品。
另外,我们还发现很多朋友对 SegmentFault 的私有技术很感兴趣,我们会逐渐把这些技术完善,在合适的时候开源。
高阳:对于 SegmentFault 接下来的发展,我想在保证更好产品设计的前提下,接下来的重点会在社区运营方面加强。对于创业公司而言面临的是综合的竞争,除了你熟悉的产品和技术,运营能力在国内互联网环境中显得极其重要。国内的竞争环境更加复杂甚至恶劣,好的产品自动脱颖而出的可能性小,所以我们会转变思路在运营以及对外合作上面下一些功夫。我相信通过不断的运营可以发掘迭代出真正满足用户需求的产品。
相关内容
感谢贾国清对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。
评论