“两万块,能不能帮我做个淘宝出来?”
“额……”
“一个月的时间够不够?”
“泥揍凯!”
大多数非专业人士不太了解软件开发这个事儿到底是怎么一回事儿,有的人觉得很神秘,有的人觉得很简单。本文想通过对网站搭建基础知识的简单介绍,说一说这究竟是怎么一回事。
说到这,可能会有人要问:不是说软件开发吗,怎么变成网站搭建了。答:软件有很多种类型,网站是其中的一种并且比较常见,而网站的搭建其实包含了除开发以外的许多内容,但二者往往会被等同起来。拿网站搭建做例子也正基于此,它在被错误认识方面很具有代表性。
作为一个扫盲文,我将尽量将概念简单化,如有不严谨的地方,还请各位方家高抬贵手。如有错误之处,还请指教。
网站的基础设施
一个网站最基础的,要有一台服务器和一个域名。
服务器可以简单的理解为一台专用的电脑,它的作用是提供网站的功能。服务器需要有一个独一无二的网络标识以便通过网络访问到它,类似现实中的地址,我们称之为IP地址。
域名就是我们常说的大不了坑你一点(例如本站 zhangjianquan.com)这样的名字,它可以看作是IP地址的别名,方便人们记忆,当然它还有其他作用,此处暂且不表。
理论上一个网站可以没有域名,只需要IP地址即可,但通常来说,面向公众的网站都不会拿一个空洞的IP地址来让人访问的。
中大型的网站往往会有许多子域名,每个子域名都可能对应着多台服务器。
值得一提的是,域名和服务器都需要向专门的机构购买,并且是按时间收费的,不像很多人想象的那样一个网站做好了后面就都不需要花钱了。
另外还有一点,如果要想使用中国大陆的服务器提供网站服务,域名必须备案,否则将无法访问。一个使用较为广泛的避免备案的解决方案是使用香港地区的服务器。
网站的结构
从大的角度讲,绝大多数网站的软件部分都由两个“端”组成:前端和后端。那么有只有前端或只有后端的吗?当然也有,前者我们通常称之为静态网站,而后者一般用于向外部提供数据接口。
下面简单的对这两个部分做一个介绍。
前端
前端就是打开网站时看到的页面,包括数据的加载、页面元素的展示以及用户交互等等。举个例子,大家现在看到的这篇文章,包括标题、内容、图片、logo等等,就是页面元素的展示,而我在编辑它的时候,则涉及到数据的交换。用户交互要更加复杂一些,小到点击一个按钮弹出一个对话框,大到玩网页游戏,都属于这一范畴。当然前端也不仅仅是这些眼睛能看到的东西,像发送请求、处理用户输入、存储本地数据这样的操作用户也是没有感知的。
对于非专业人员来讲,前端基本上就是他们对一个网站的全部印象了,所以像文章开头这样的类似笑话的对话其实并不少见。当然话说回来,就算只做淘宝的前端,两万块也是远远不够的,至于需要在后面加几个0,大家自行想象吧。
后端
后端可以泛指除前端以外的其他部分,它所包含的内容相对更多一些,从功能上讲可以概括为业务数据的处理和存储,比如用户下的订单,观看视频的历史记录,等等。前端同样可以进行数据存储,但这些数据一定是非持久的,或者说是可丢弃的,否则当用户换了台电脑或是换了个浏览器之后发现自己的订单没了,岂不是扯淡?
前端在人前,后端自然在人后。还是举个例子,我们在某个网站上登录账号的时候眼睛能看到的,就是输入账号密码后点击登录按钮,若登录成功页面就会跳转,否则提示错误信息。而这一过程我们眼睛看不到的是,前端发送HTTP请求将账号密码传到后端,后端去保存账号信息的地方(通常是数据库)查询账号是否存在,并核对密码是否一致,并将结果返回给前端。这个例子看似很简单,但其实它也可以很复杂。例如,为了数据安全,账户密码通常不会明文存储,所以需要先将输入的密码处理一下后再做比较;在账号密码校验通过后,检查当前登录是否正常(是否在常用地区,是否为常用设备等),发送异常登录警告,记录当前登录时间,增加日常登录积分,等等,短暂的时间里可能发生了很多事情。
网站的开发
流程
网站的开发绝不是一上来就开始写代码的。因为网站只是软件的一种,所以它同样遵循一般的软件开发流程,包括对软件先进行需求分析,设计软件的功能和实现的算法和方法、软件的总体结构设计和模块设计、编码和调试、程序联调和测试以及编写、提交程序等一系列操作。
分工
需求分析自然由需求分析师来做,分析完成后形成完整的需求文档,交由软件工程师(即程序员or码农)进行功能设计和编码,编码完成后交由测试人员测试,发现问题修复再回归,直到测试通过后,将代码打成可发布的软件包,交由运维人员进行发布。
当然以上是标准的开发流程和人员分工,实际上有些小型的项目可能会跳过某些步骤,甚或是所有这些事情都是一个人做的。
网站的部署
在软件开发完成以后,需要将软件包部署到服务器上以供访问。而在部署之前,需要提前准备好基础设施以及软件依赖。
首先,需要将域名指向服务器,即在域名DNS服务商处添加一条指向服务器IP的DNS记录。
服务器需要装好软件所需的运行时环境,同时需要安装一些其他的依赖软件,例如反向代理软件,数据库软件等等,并做好相应的配置。
将软件包上传到服务器并运行,网站部署完成。
结束语
以上就是网站搭建的部分基础知识了,希望能对大家有一些帮助和启发。
需要注意的是,在实际的软件开发或是网站搭建的过程中,以上所提到的内容可能会复杂的多。举一些常见的例子:服务器使用负载均衡,应用防火墙,对象存储,开发时前后端分离或是服务端渲染,数据缓存,数据库读写分离……