GMTC北京站9折购票倒计时,部分日程已上线,戳此查看 了解详情
写点什么

专访 SegmentFault 开发团队:垂直问答社区的架构升级

  • 2012 年 9 月 04 日
  • 本文字数:3596 字

    阅读完需:约 12 分钟

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 )关注我们,并与我们的编辑和其他读者朋友交流。

2012 年 9 月 04 日 00:006533
用户头像

发布了 89 篇内容, 共 28.3 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

云上基础产品之负载均衡

韩超

负载均衡 公有云

【摘】Git-从零单排 02期

卡尔

git 原理 开发工具 工具链

B端产品经理养成记(1):业务场景

涛哥

产品经理 需求 产品开发

Go: 使用GODEBUG改善Goroutine的使用

陈思敏捷

debug 协程 Go 语言

程序猿邂逅相亲妹,默默无语两行泪

码农神说

程序员 相亲

N皇后问题

孙苏勇

算法 DFS 深度优先搜索

直面一个复杂世界

史方远

读书笔记 个人成长 随笔杂谈

RocketMQ - 如何实现事务消息

Java收录阁

RocketMQ

谈谈控制感(12):选择什么样的工作

史方远

读书笔记 个人成长 随笔杂谈

云上基础产品之内容分发网络

韩超

CDN 公有云 内容分发网络

关于 Windows 10 2020 年 5 月更新

FeiLong

工作那么久,你还具备学习能力么?

punkboy

学习 程序员

你想活出怎样的人生

Janenesome

读书笔记 思考

程序员的晚餐 | 5 月 30 日 入梅天,来一盆小龙虾

清远

美食

云上基础产品之对象存储

韩超

对象存储 公有云 S3

Linux命令-df

一周思进

做PO难,难于上青天

刘华Kenneth

敏捷 产品经理 决策 PO

Python 进阶与核心技术 dict & set

Bonaparte

Python 极客时间

云上基础产品之虚拟私有云

韩超

公有云 VPC 虚拟私有云

架构之路

强哥

极客大学架构师训练营

遇事不决,请先 「搜索」

小匚

个人成长 职场 随笔杂谈

Prometheus 2.18.0 新特性

耳东@Erdong

Prometheus

B端产品经理养成记(2):用户故事

涛哥

产品经理 需求 产品开发

一款霸榜 GitHub 的开源 Linux 资源监视器!

JackTian

GitHub Linux 开源 bashtop 资源监视器

浅说Docker基础知识与核心原理

岿然独存5

Docker 软件 Go 语言

戒掉手机吧

鼎玉谷

人生 手机 时间 浪费 控制

是什么奠定了架构师的职场地位?

刁架构

极客大学架构师训练营

除了直接看余额,谁更有钱还能怎么比(二)

石君

去中心 零知识证明

ARTS Week2

丽子

draw.io-取代visio的流程图绘制工具

Rice嵌入式开发技术分享

chrome vscode 写文章神器 draw.io

【5月】本月读书学到了什么

Neco.W

创业 读书感悟 阅读量

专访SegmentFault开发团队:垂直问答社区的架构升级_PHP_水羽哲_InfoQ精选文章