分享

No.34:网站架构浅析,你只差一个程序员了?

 彦晴 2017-05-14

NO.34:网站架构浅谈

来自极客方式

00:00 18:43

这期节目是极客方式开播一周年的第一期节目,我是15年的9月17日上线了极客方式的第0期《听极客方式,过精智生

从这期节目开始呢,到以后的几期节目,我打算开一个专题,给大家聊一下,如何从零开始搭建起一个属于自己的网站。这个话题一些朋友应该会非常喜欢,

如果你听过我之前的一些节目,比如关于Linux操作系统的一些话题,并且你已经开始上手linux,如果你对linux比价熟练了,我相信你已经有想上手亲自搭建一个网站的冲动了,当然,没有Linux的相关知识,也不太影响你对一个网站的搭建,但是Linux是一个非常好的系统,作为极客的话,一定不要错过学习和使用这个系统的机会。


这个专题主要聊些什么内容呢,我打算聊一下运行一个网站所需要的东西,比如关于域名的相关话题,如何选择服务器,如何搭建网站,还有一些细节部分,甚至还有一些这方面的爆料给大家。


这期节目,我们来看一下一些大型的网站的系统架构是怎么演化的。

我们也解释一下那些互联网公司到晚上还灯火通明,程序猿这类物种到底在高些什么,听完你就会觉得,程序员这一职业比相同工龄的其他职业薪酬要高出两三倍是有原因的,互联网是一个适合屌丝逆袭的场所。


说到这里,我先岔开一下,正因为程序员这一职业非常的火热,也催生了一些IT的培训机构,我在极客方式第27期介绍做一个程序员,到IT培训机构里培训一下怎么样,简单的聊了一下,还是那样,如果你的自学能力很强,并且有很充足的时间,你完全可以自学编程,然后找到一份比较好的工作,但是如果你觉得自学能力欠佳,或者时间不够充足,到培训机构里培训一下,让老师给你一对一的指点一下,也是一个不错的选择,就像我们考研时,我们抱一个培训班并不只是买这个机构的服务,还包括那种学习的氛围,环境真的也很重要。


自从那期节目播出后,我也收到了一些朋友的反馈,我也联系到了一些在培训机构的朋友,通过内部关系,我们达成了一个算是合作的东西,如果你想参加培训机构,快速的提升一下自己,你可以在极客方式的公众号里找到老王的微信(wongminli),从这里你会得到很大一部分的优惠,这个算是一个福利吧~


作为程序员,我难免会收到一些朋友的咨询,有一些朋友兴致冲冲的给我打来电话,说搭建一个网站要多少钱?

这个问题太笼统,通常这种情况,我就直接回他一句,就像我问你买一辆车要多少钱一样,

或者再细一点,买一辆大众车要多少钱,没法给出一个准确的答案。如果他说想做一个类似于某某网站的网站,这才有点问到点子上,就有一点清晰了。

就像段子里说的,我们一切业务都好啦,就差一个程序员了。这明显就属于不了解基本的互联网运行。


就像现在的淘宝网,在双11能承受住亿万次并发范文,他并不是才开始就是这个样子的,最开始的第一个版本,据说是在马云的客厅的一台服务器运行着,可想那时候的网站规模到底有多么小。

其他的网站也是一样的,不管是国内的,网易京东,还是国外的亚马逊,和facebook,他们大都一点一点的演化到现在这个规模的。

说道这里,给大家推荐一个网站,这个网站,存档这整个互联网上绝大部分网站的历史页面,你可以通过这个网站,来翻看一下那些我们耳熟能详的网站,当初的状态是怎么样的,他的网址是https://,就是存档的那个单词,它号称是互联网的历史档案馆。我会在极客方式的微信公众号里,贴出它的具体链接,还是回复节目编号,也就是34就能找到。

比如,现在听说网易论坛要在今年的10月19日停止服务,这个网站可是把丁磊抬到的中国首富的位置,为了准备这期节目,我就在这个档案馆里查了一下2001年的网易首页,以现在的眼光来看,简直是丑到爆,就像是一些刚学做网页的学生的作品,布局也非常混乱,满屏都是超级链接,还有大量的gif图片,让人严重怀疑这是一个大公司的官方网站。在2001年,正好是国内第一次的互联网泡沫时期,能做网站,工资就能达到6000左右,你想那可是2001年啊,这也说明的互联网在国内发展的非常迅速。

有点说远了,你从这个网站上就能看到现在部分主流的网站,在诞生之后,都是很low,很被人瞧不起的。


这期节目跟大家简单聊一下网站后台的架构,不关你是想真正的运营一个网站,还是想单纯的了解一下网站的运行原理,这期节目,对你都会有一些帮助。

最近,微信马上要推出一个叫小程序的应用,可能就是之前声称的“应用号”,这给软件后端又一个发展的机会。

一般大型的网站或者app都有一个同行的特点:比如高并发、大流量、有海量的数据、用户分布广泛,网络环境比较复杂。

几乎所有的大型互联网网站都是从一个小网站开始,渐进发展起来的,好的互联网产品都是慢慢运营出来的。并不是你一上来就照着大型互联网公司的模式做,你就是大型的互联网公司了


如果你选择小网站的话,刚开始时没有太多人访问,只需要一台服务器绰绰有余,这台服务器可以充当3个角色的服务器来用,比如应用程序服务器,数据库服务器,文件服务器等所有资源都放在一台服务器上。我们在选择服务器的时候,也通常不是自己在买一台机器放在家里或者办公室里,现在云的概念比较通行了,你可以选择租一台服务器来用,比如国内出名的阿里云服务器,搭建网站的套件可以选择比较主流的lnmp套件,也就是linux、+apache / nighx

+mysql+php这个组合,这样通常就能满足你基本的需要了。

甚至,你连租用服务器都没有必要,现在也诞生了一些网站应用程序的引擎,比如百度的bae、新浪的sae、谷歌的gae等等这些,你可以在网上Google一下这几个单词,选择一个合适的应用引擎,我们通过它鼠标点点选选,一个可运行的网站就这么出来了,可以去体验一吧,网站从无到有的过程还是挺有成就感的,你可以少量缴费,或者赚取云豆来延长你的网站运行时间,但是这种应用引擎我一直不怎么看好,它受到的限制比较多,并且现在也不是那么稳定。

这种规模下,我更推荐你租一台服务器,自己亲自搭建部署一个网站。

如果你那么企业网站,或者是搭建一个博客,你可以选择wordprees这个框架,他基本能完成在网上有一份属于你自己的网站的功能,它也有非常丰富的模板供你选择,就像更换我们的安卓手机的桌面一个更换网站的主题,开发速度也比较快。


第二个阶段,随着网站业务的发展,一台服务器逐渐不能满足需求,越来越多的用户访问导致性能越来越差,越来越多的数据导致存储空间不足,

比如随着用户逐渐增多,网站就会面临一些挑战,数据库压力大大所致访问速度减慢,慢慢就会拖慢整个网站的性能,据谷歌的anlytics这个网站的调查,如果一个网站有超过10秒还是没有打开的话,用户会毫不留情 的选择关闭,就是这么残酷,也不能怪用户矫情,这时候是该调整你的网站架构了。

这时候,就需要将应用和数据分离,此时整个网站使用三台服务器:应用服务器,文件服务器和数据库服务器,三台服务器对硬件资源要求各不相同:应用服务器需要处理大量的业务逻辑,因此需要更快更强大的CPU,数据库服务器需要快速磁盘检索和数据缓存,因此需要更快的硬盘和更大的内存,文件服务器需要存储大量的用户上传文件,因此需要更大的硬盘。

说到这里,老王有个经历,我之前给一个国企做网站,一个小领导的要求居然是,要有大容量的显卡,他说只有这样才能满足众多用户加载和现实网站数据,我当时啼笑皆非。

后来想了想可能是为了骗取上面拨款经费的一个手段,不得而知。


随着用户的不断增多,访问量也不断增大,这种架构方式也会出现瓶颈,这时候,就进入了架构的第三个阶段,使用缓存改善网站性能

根据二八定律,用户访问网站80%的业务访问,集中在那些20%的数据上。比如淘宝的买家浏览的那些商品大都集中在少部分成交量多,评价良好的商品上,看来淘宝的刷单地下产业链是有他的道理的,好,我们打住。

你像咱们的浏览器也设置了缓存,方便你在登录同一个网站时候,能够避免加载那些已经加载过的内容,比如图片等等。

网站使用的缓存可以分为两种:缓存在应用服务器的本地缓存和专门设置一个缓存的服务器。本地缓存的访问速度更快一些,但是受应用服务器内存限制,缓存数据量有限。远程分布式缓存可以使用集群的方式,部署大内存的服务器作为专门的缓存服务器,可以在理论上做到不受内存容量的限制。

这时候,我们可以把用户经常访问的那些数据缓存到缓存服务器里面,比如一些权限的管理,或者是一些其他的数据,

比如在奥运期间,用户使用百度搜索“奥运”这个关键词,就比其他的关键词要多很多,这时候,百度就可以将奥运的搜索内容。


使用了缓存服务器,就可以极大的缓解一些服务器的压力了,担心也不是一劳永逸的,程序员总是有很多工作要做。对于大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求。此时,应该考虑增加一些服务器分担原有服务器的访问以及存储压力,这时候,我们就可以将这些服务器做成一个叫“集群”的东西,通过调度服务器,就可以将来自用户的访问分发到应用服务器集群中的任何一台服务器上。

如果又有了更多的用户,可以将这个集群扩大。

如果你能将网站做到这个规模,那么就可以算是一个比较大型的网站了。


网站做到这个阶段的话,剩下的就可以在用户的体验上做文章了,比如咱们中国面积很大,有很复杂的网络环境,不同地区的用户访问一个网站时,速度差别也很大。那么该怎么办呢,现在一些互联网公司采用的是cdn服务或反向代理的方式,他们的原理也是类似于刚才我们提到的缓存的技术。我们一会在解释一下这些东西。

比如我们访问百度这个网站时,我们不一定就是访问的百度大厦机房的服务器,如果你在深圳,访问到北京市海淀区中关村的百度大厦,那速度会变的非常的慢。像cdn和反向代理就是解决这些问题的。

cdn又叫内容分发网络(Content Delivery Network),他是部署在网络提供商的机房的一台服务器,我们访问百度时,实际上是访问的离你最近的那台cdn服务器,这台服务器给你想要的数据。

又比如,我们如果要在网站上提供视频或音频的观看或收听功能,我们一般不会直接将这些文件放到这台服务器上,我们通常是放在一个比较靠谱点的cdn上,因为视频或音频的下载需求比较高,cdn可以明显改善这个功能。其实百度就提供了一些cdn服务,国内比较出名的还有又拍云cdn、七牛云存储等,这些都是免费的。

而反向代理呢,则是部署在中心机房那里,当用户访问中心机房的时候,入股欧方向代理服务器缓存这这些数据,就直接将结果范围给用户。这也是一种改善用户体验的方式。像现在主流的电商网站,社交网站,都有用了这些方式。

比如前些年京东搞双11的时候,网站直接瘫掉了,估计他们的问题就出在这里,这起故障会损失掉京东上亿的盈利机会



如果这些技术还不能满足要求,我们可以使用分布式的系统,比如分布式的文件系统,分布式的数据库系统,比如nosql,非关系数据库等这些。这些都是大型互联网公司正在用的技术,我记得前些年的12306开上线饱受诟病,而现在将开发交给阿里巴巴团队的时候,性能就明显的提升了上来,他们用的技术就是这个。


这些技术基本上就是一些网站的演变过程,并且用户的需求和技术还在不断的演变和发展。


听到这里,你应该能觉得,程序员的工作实在太枯燥乏味了。

确实是这样的,并且,上面提到的每一项技术都需要一点一点的学习,都伴随着大量的书籍,

我提到的这些还只是网站架构方面的,还不包括现在发展如火如荼的前端等技术,一个合格的程序员一般都需要很好的学习能力。

听到这里你也应该了解到程序员到底都在忙些什么,如果你身边有程序员朋友,请好好的对待他们~


下面是一则广告,我的几位前同事最近创业了,现在承接一些互联网的项目,这几位同事是我的师傅级别的同事,技术功底非常扎实,老王就是在他们的白板蹂躏和指点下慢慢成长起来的,非常值得信赖!

如果你正在考虑做一个网站,app或者是微信开发,都可以在极客方式公众号的后台联系到我, 我来帮你们促成这项合作。


祝大家有个精智的生活~~


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多