Web开发是一直以来程序员的热门发展方向,不管是前端、后端还是全栈开发工程师的薪资待遇都很不错,最近有很多小伙伴问到我关于Web开发的问题,最常见的就是“web开发难吗”、“学什么语言做web开发好找工作”。
今天我用比较容易理解的方式来给大家讲讲web开发重中之重——服务器架构的原理和技术,服务器架构都没搞明白,web开发也就无从谈起,必备的技术你都懂了,学起来自然会通透很多。
首先我们先来看一张Web开发的服务器框架原理图,我们从这里开始了解(请好好看这张图,说来说去都是这些个东西):
暂时先不对里面的板块做详细分析,文章后面会具体讲解,我们先来梳理一下web开发的服务器框架原理。从图中的白箭头我们可以看出来,服务器的响应过程可以大致分为两个流程:
请求数据过程:客户端→web服务器→业务服务器→缓存服务器→数据库
.
返回数据过程:数据库→缓存服务器→业务服务器→web服务器→客户端
大多数数据需要走这两个过程,就拿王二麻子这个人查自己的英语四级成绩来举个例子:
作图不是很擅长,还望理解,过程就是这么个过程,虽然看起来跑来跑去很麻烦,但其实计算机分分钟能处理千万个王二麻子。
web开发目前主要的客户端类型有IOS、Android、PC(电脑)和移动(手机等)四种客户端,这个就不多讲了,通常意义上,每一个用户的界面就是客户端了,用来呈现图片、文字、视频等数据给用户查看。
web服务器的主要功能有2个:负载均衡和静态资源服务器。
(1)负载均衡
这是最简单的一个服务器架构了,它没有web服务器,就只有客户端、业务服务器、数据库组成,在数据量较小的情况下,它是可以正常运行的。
假如一个业务服务器能支持5000个客户端访问,只要不超过5000台设备访问都是OK的,但如果超出了5000个客户端访问呢?
那就只剩下2个方法:
一是通过换开发语言来重构业务服务器以达到提升它的性能,这涉及开发语言的性能,后面我们再讲。
.
二是增加业务服务器的数量来保证大量用户端的正常访问,增加负载能力,这也是较为常用的方法。
那么问题来了,增加业务服务器的数量,但它们“长得”都差不多,客户端就很郁闷,我该访问哪个服务器?
所以需要一个web服务器来统筹分配,分配客户端应该访问哪个业务服务器,合理分配资源,避免导致客户端统一访问某个业务服务器而造成负载超核,这就是web服务器的负载均衡作用。
(2)静态资源服务器
不是所有的数据请求都要访问数据库。前面我们所说的从客户端一步一步跑到数据库来进行数据的请求和返回数据动态请求,而有些数据存储在web服务器上的,不需要访问数据库就能获取数据到用户端,称为静态请求。
比如某些网页不常变化的一些文字、图片、视频等,基本就固定在某个地方做展示,开发员不调整就不会更新的那种,静静地待在那里,谁进入页面就显示出来,这些数据放在web服务器上而没有存在数据库,便于更快地展现给客户端。
业务服务器的主要功能是:接受数据、处理(查询、写入)数据、返回数据三方面。
(1)协议
目前服务器对数据的传输和处理主要遵循两种协议:http/https和socket请求。http协议属于应用层,socket就比较原生了,就是所谓的TCP/IP层,属于网络层。这两个就不细讲了,往这方面发展都会学的。
(2)开发语言
服务器的开发语言算是百家争鸣了,你可以用C、C++、Java、PHP、Python、Ruby等语言来开发,但是从性能、性价比方面还是有区别的。
目前在做服务器比较多的语言还是Java和PHP,为什么呢?
第一,PHP相对比较简单,比较容易入门这功能;第二,java可以大规模的团队协作开发,封装成模块,代码可复用。
但现在还存在这么一种趋势:用C/C++和Python来做服务器开发的公司越来越多了,为什么呢?
因为很多服务器开发的时期是很久以前了,十年或十几年前了,那时候企业为了快速地攻城略池,先把业务跑起来,选用了开发周期短的语言来做服务器,虽然负载有限,但可以用硬件来补足,但随着手机和电脑的数量越来越多,客户端数量上升,如果还是用硬件来补足服务器的负载性能,将会面临很多问题。
比如说其中的电费问题,阿里就遇到过,机器得一直开着,随着阿里的业务量越来越大,硬件每天消耗的电费开销是个头疼的问题,日以继夜地烧下去只会是烧钱,光是电费开销就占到了公司年开销的10~30%,那怎么办?那就只能从服务器的开发入手,选用性能更高的语言来重构服务器,性能提高,有的服务器重构之后性能,单台性能可以提升10倍。
所以C/C++这种机器语言就成为了有实力的企业开发服务器首选,所以说C/C++永不过时。
对于中小型企业来讲,开发服务器不建议用C/C++,虽然它们的性能高,但开发起来难度大,而且市面上真正懂C/C++的程序员比较少,所以支付的工资自然也就高了。可以选用脚本语言来开发,让业务先跑起来,等到了瓶颈时,相信公司也有了稳定的资金支持了,这个时候再重构服务器更合适。
我个人比较推崇用Python来做中小企业的服务器开发,为什么不是其他的语言呢?
首先Python是一门面向对象的脚本语言,代码量少,语法简洁,逻辑清晰,从的代码优美程度和团队协作开发上来讲,PHP不如Python;Java虽然好,但是比较重,比如干一件事情C语言需要100行代码,那么Java差不多就是50行左右,而Python只需要10行。
我个人不推荐用Ruby来做服务器。
一是因为Ruby是日本人做的东西,个人的爱国情怀,别杠,杠就是你赢。
二是Ruby是一种魔幻语言,什么意思呢?也就是你写了一个符号或者写了一个指令,他背后给你干了很多事儿,你看不到这个东西的底层,逻辑上不清晰,随便写,也就是说你按照它的一些特殊的符号,它会给你带来很多事儿。这种魔幻性语言他们不适合团队开发,团队开发的话,大家水平参差不齐,有的人掌握了更多的魔幻语法,有的人不掌握,不适合团队开发。
认真看文章的朋友可能会发现,在之前我们有讲过服务器架构的最简版,里面没有缓存服务器也能正常运行,那么问题来了,业务服务器需要数据直接去数据库找不就完了?
为什么要增加一个缓存服务器?
这其实是为了减少数据库的负载和提升客户端的体验感。缓存服务器相当于一个缓存区,可以缓存数据。
举个例子:
数据库的读取速度如果是4000次/s,如果此时有1万个数据在线请求访问数据库,可是数据库这1s很忙,忙不过来,那客户端那边就只有等待了,数据库需要2s多的时间才能给到客户端想要的数据,那如果是10万、100万、1000万呢?等20s、200s、2000秒?
.
这样的用户体验感是不是很不好?
于是增加了缓存服务器,它可以将常用信息缓存在那里,读取速度快(具体多快可以去网上查一下缓存和内存的速度差别),当再次客户端再次请求时,就不需要访问数据库,直接拿缓存服务器里面的数据就可以了。
在数据的储存方面还有更高深的分布式文件储存系统,也是解决传统数据库的不足之处,比如阿里采用的的TDFS和亚马逊的GDFS等等,这方面属于比较高端的技术了,如果有机会也可以去了解一下。
关于web开发的服务器架构原理就给大家讲完了,从原理上来理解的话也并没有很困难,如果你选用合适的语言去做web开发也会事半功倍。
是不是讲的很明白?如果你还有不懂的地方,多看几遍你就明白了。
文章到这里就结束了,感谢你的观看,只是有些话想对读者们说说。
我退休后一直在学习如何写文章,说实在的,每次在后台看到一些读者的回应都觉得很欣慰,对于自媒体我是个刚入门的人,还是个中年大叔…为了感谢读者们,我想把我收藏的一些编程干货贡献给大家,回馈每一个读者,希望能帮到你们。
干货主要有:
① 2000多本Python电子书(主流和经典的书籍应该都有了)
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
如果你用得到的话可以直接拿走,在我的QQ技术交流群里,可以自助拿走(纯技术交流和资源共享,广告截流的请自重,小心品牌给你扬了),群号是553274211。