首页 > 建站资源 > 建站教程 > 如何善于利用开源技术和云服务快速建立网站

如何善于利用开源技术和云服务快速建立网站

时间:2013-08-16    来源:Evernote

作为技术人员,已经有蛮长一段时间没有把自己的开发经验做一次总结了,可能是因为太忙和太懒吧,所以这次决定把自己这两三年来作为创业团队的成员在技术方面的心得和技巧做一个总结,也包括简单提及一下和之前在大网站工作的时候一些不同点进行分享。

先介绍一下自己,网名RainX,2004年毕业后进入雅虎中国工作,之后直到2010年底,一直在阿里集团的技术团队。 2010年底的时候觉得时机比较合适了,就离职出来创业,先后做为合伙人创立了 码云网(类似国外的eventbrite的自助活动管理平台)以及目前正在进行的回声网(情感故事社区)。首先先说一下作为创业团队的技术人员的成员和在大公司的技术人员的不同之处。

首先,大公司的开发人力资源充足,不管你是做架构的设计,还是底层开发人员,都不需要对所有的技术细节都有了解,而是精专在某个领域,越深入越好,通过团队的协作来解决单个人的能力短板,比如DBA可能对开发不是特别了解,后端开发无需了解前端的太多技术等等。 但是在初创团队,就需要相对全面的技能,比如我们之前在开发码云时,我一个人就需要同时写前端代码和后端代码,部署数据库,做界面的设计,写安卓和iOS 的客户端,以及桌面客户端,甚至还要帮我们拍摄的宣传视频做剪辑以及后期的音效工作。

然后,除了丰富的人力资源外,大公司内部一般也有 很多成型的系统,比如在雅虎的时候,有yapache(web服务器), yinst(包管理),mdbm(kv数据库), shmproxy (网络通信中间件), yrepl(消息中间件)等,创业团队无法应用到这些系统,只能找开源的对应产品替代。

最后,大公司有很多成熟的服务资源,从硬件方面的服务器,CDN,带宽等,到软件服务方面如短信平台,邮件平台等,都可以直接使用,但是初创团队就要购买或者寻找一些对应的替代 方案,目前这些很多是以云服务的形态出现的。基于这点,我有一个比较深刻的体会,这次回声在有一次推广的时候突然发现系统无法访问了,登录到服务器上也很慢,先后排查了web服务,数据库,邮件服务等都没有发现问题,最后发现原来是由于流量突然增大,我们购买的VPS的带宽用尽了,然后紧急的购买了新带宽才解决这问题,但是同样的问题在之前雅虎和淘宝工作的时候就根本没有遇到过。

如上面所述,开源软件和云服务的使用是初创团队不可或缺的元素,也同时可以大大的节约初创团队的时间成本。拿回声为例,我们大概只花了2个月的时间就完成了整个系统的搭建并上线,下面我就分几个方面分别介绍一下系统的搭建过程

整体架构

上图简单描绘了我们系统的架构和所使用的软件(括号内部)和服务(圆形标识)的情况,可以看到,网站的结构是非常简单的,我们将网站部署在2台 VPS云服务器上,一台提供web服务,另外一台所作为mysql slave供我们进行数据分析使用,注意由于我们目前流量还没有非常大,所以这台暂时还不提供对外的服务,只做数据分析用。目前两台VPS节点都使用的阿 里云的服务,关于VPS的选择方面,其实国内的选择空间不是特别大,比较难找到Amazon EC2类似级别的服务,如果创业的目标用户是针对国外用户的话,还是推荐Amazon EC2或者Linode等比较有规模的服务商。

1. web服务 : web服务我们采用的是LNMP的架构,LNMP的好处是开发简单,快速,资料丰富,并且被验证足以支撑到一定规模的访问量(facebook, yahoo等),php的mvc我们采用了codeigniter作为基础框架,同样是因为简单,作为创业团队,尽量选择自己熟悉并且稳定的系统和架构构 建你的网站,我不太建议刻意尝试太多新的东西,即使你的技术足以驾驭它,还是不可避免的踩很多坑,这会消耗创业者宝贵的时间和精力。 在web前端方面,我们采用了基于HTML5的响应式设计,这足以用单独的一篇文章来介绍,而我们在后面也会写一篇单独的文章来介绍这块。

2. 缓存服务&键值存储:不管是之前还是现在,我们都有很多的场景会使用到基于key-value的存储还有缓存的服务,redis在性能和功能上 有一个比较好的均衡,使用起来也不会太复杂,所以我们在系统里面大量的应用到redis, 如记录用户目前是否是第一次访问某个页面,记录用户是否升级到某个版本,以及首页的推荐文章的缓存,系统的部分配置信息等。

3. 异步队列服务(或者消息服务):我们使用Gearman作为队列服务的支持,严格说来Gearman并不是一个标准的消息系统,但是Gearman简单高 效的特点吸引了我们,并且它分布式架构足以支持更高级别的系统负载,并且他对php的支持很好,我们使用的是它的异步任务部分,关于Gearman如何作 为队列服务支持邮件的发送,可以参考官方网站的use cases里面的介绍, 除了邮件服务之外,我们的手机通知的推送服务也是基于Gearman进行了队列化的。

4. 邮件服务:对于网站来说,不管从邮件营销的角度,还是作为网站服务的基础部分,邮件都是很重要的一部分,这部分比较复杂,后面我们会单独用一个小节来介绍一下我们目前采用的邮件服务方案。

5. 搜索服务:目前使用的是Coreseek,Coreseek 是一款中文全文检索/搜索软件, 是基于Sphinx结合中文分词系统进行开发,优点是和php,mysql结合较好,有中文的支持,当然基于xapian的xunsearch也是一个不错的替代方案。

6. 推荐系统:回声网需要给用户推荐他可能喜欢的群组,以及潜在还需要根据群组推荐相关的群组,在推荐系统的选型上,我们选择了基于协同过滤的Mahout Taste CF来计算用户可能该兴趣的群组,然后使用Ruby语言基于Recommendify开发了基于item到item的推荐。我们会在每天晚上进行运算,把 结果放在数据库中提供前端调用。 当然虽然基于协同过滤的推荐系统已经非常完善了,但是由于它是基于统计模型的,在初始用户的行为数据比较少的情况下,该模型相对难以解决新用户 的推荐问题,比如我们会提供给新注册用户一些群组推荐,这里我们使用了一些基于用户特征的推荐,比如给群组打上标记,比如 “我想把学校炸啦” 这个群组我们会标记为优先推荐给90后的用户, “我是处男” 这样的群组我们只会推荐给年轻的男性用户。

7. 数据分析方面: 首先GA是网站服务不可缺少的工具,唯一的缺点是GA后台的访问不太稳定,最好配合VPN进行访问,关于GA使用方面的介绍,我的合伙人everfly会有写一篇专门的文章介绍。另外,基于app方面,我们使用Flurry提供的服务进行数据分析。 除了第三方提供的数据分析服务之外,有一些比较细致的分析还需要基于网站的自有数据进行,因为刚好之前有一台闲置的VPS,所以目前就拿来作为我们的数据分析服务器了,和主数据库配置了Master-Slave结构,数据分析在Slave上及进行,不影响线上的业务。

8. 域名服务:我们的域名是从godaddy上注册的(.fm的域名有点小贵),但是不建议使用godaddy的服务器作为nameserver, 因为偶尔会被墙,这里我们直接把nameserver迁到了dnspod上,还是非差稳定的。

9. CDN : 如果你的没有涉及到大量的图片或者声音数据,其实我觉得可以省掉购买CDN服务的步骤,不过我们的 网站刚好会有一些群组封面图片和用户自己的封面图片的展示需求,并且在一次推广中触及到了VPS流量的上限,所以我们把图片访问部分迁移到的CDN服务 上,这方面选择很多,我们使用了orca的服务,orca的服务有一个亮点是支持dropbox的同步,便于管理。然orca毕竟上线的时间不长,如果需要更专业的云存储服务,推荐又拍云和七牛云存储。

由于篇幅有限,这里很多内容无法展开来详细的介绍,下面我针对一些我感觉到相对比较重要的两个部分:发布系统和邮件系统做一个具体的说明。

发布系统

由于网站的结构是基于lnmp的,所以我们主要的代码都是php代码,之前在大网站的时候,一般会有比较严格的流程和比较严格的打包发布机制,比如Yahoo的 yinst package, 但是对于初创团队来说有些重了,这里我们直接使用svn进行代码的管理和发布。

虽然系统环境不复杂,但是我们还是分为开发环境,测试环境(beta),和生产环境(线上),开发环境我们在自己的机器上搭建,我的是 Ubuntu的系统,everfly是MacOS的系统,测试环境在和svn服务同一台服务器上,我们使用svnseve的post-commit 功能实现了一旦我们提交了代码,服务器会自动将代码部署到beta环境的web服务器上, 在生产环境则是直接使用svn export进行部署,整个流程还是非常简单的。

注意,有的时候我们在生产环境和开发环境的时候需要执行不同的逻辑,比如针对html内部引用的javascript代码,为了节省流量(当然 还有一个原因是代码写的太丑了,不想让大家看到笑话),在生产环境上,我们使用了jsmin进行压缩,但是在本机进行开发的时候,为了调试前端代码方便, 不能对javascript代码进行压缩,所以我们通过设置环境变量,然后在代码中检测环境变量的方式解决了这个问题,由于环境变量是设置在web server或者php-fpm的配置中的,所以线上和开发环境可以保持同一份代码,在代码中判断当前的系统执行不同的逻辑即可。

相关推荐
PHP 7安装使用体验:性能大提升、但升级需谨慎
国内主流云主机(云计算)服务商一览
独立服务器选择指南:VPS ECS 云服务器等
阿里云高性能I/O云服务器+SSD云盘,1元抢购中
3个月免费云服务器 10+行业解决方案 阿里云再推企业上云浪
1年免费亚马逊AWS云服务器申请方法过程及使用技巧
微软免费轻量级Web开发平台WebMatrix简介(附下载)
有关Web开发的26个概念和技术
10个常用的PHP技术技巧与教程分享
优秀Web开发人员须熟知的10件事
Openbiz:超实用的php开发利器 让你快速创建web应用
如何合理优化WEB前端 高效提升WEB前端性能
Web开发者须避免的五大误区
关于PHP编程语言的十大误解
HTTPS协议是如何保证数据连接的安全?
10条顶级大师推荐的PHP编程开发原则
jQuery与PHP实例讲解WEB砸金蛋程序开发 附源代码
实例讲解PHP与jQuery实现翻板抽奖程序 附源代码
130+提高开发效率的vim常用命令分享
值得你学习了解!揭秘九大前沿编程语言
Web开发中最致命的8个小错误:如何破局?
支付宝交易提示 BUYER_ENABLE_STATUS_FORBID 的解决办法
图解:大型网站系统架构是如何逐步演变完善?
主流开源建站程序大搜罗 自助建站不求人
8个提升网站速度的网站代码优化方法分享
13个选择WordPress做建站CMS的理由
网页制作教程:无需写一行代码也能完成网页设计
零基础怎样开始学习做网站(Ruby on Rails)?
不使用第三方平台 10分钟搭建运营人自己的网站
建站指南:Web前端图片极限优化策略
建站指南:简单6个步骤教会你快速搭建一个网站 windows环境

精彩推荐

热门教程