各种服务器都是怎么划分

在做系统设计或者部署的时候,总计会听到开发人员提到服务器,有时候还会提到应用服务器、数据库服务器等,这些服务器都是怎么划分? 有些产品可能可能还会疑惑,我们的系统不是使用浏览器,没有客户端,为什么还要需要服务器?

现在就把这些事都讲一讲。

客户端、服务端—为什么要有服务器

客户端这个词因为在不同场景都会使用,所以会一些串场。

首先在客户端/服务端是一个架构模式,意思就是有一个业务的请求者和业务的响应者。 业务的请求者就被称为客户端, 业务的响应者就被称为服务端。

客户端和服务端都是业务的抽象说法,并不代表实际的物理现状或者具体数量。 例如你去超市买东西,在这个模式里你就是客户端,超市就是服务端。

这种模式原来被称为C/S模式,但是因为慢慢会后面一种实现方案冲突了,也就没人这么叫了,现在更多的是叫联网应用,因为服务端一般会部署另外的服务器上。

部署服务端的机器,就叫服务器。

与之相对应的就是单体应用,意思就是他不需要连服务端就可以自己运行,例如我们用到的计算器、画图等。

还有一种特殊的应用,从模式上是联网,但是部署的时候会把服务端和客户端部署在一起,所以 虽然没有服务器,但是也是有服务端的。 例如程序员做开发的时候,经常在自己电脑上启动一个服务端,就是这种情况。

当然也有一些应用是这样的情况,例如有个报表软件,号称是下载后即可使用,实际上是让用户下载了一个服务端,在自己电脑上启动起来,然后再进行访问。

c/s模式、b/s模式又是什么

上面的客户端是相对于服务端来说的,是一种角色的说法。 而在c/s模式、b/s模式,都是对于这种架构的实现方案。 c/s模式,是自己专门开发一个程序,用于实现业务功能,包括跟服务器通信,界面定义、业务处理等。 b/s模式,是用浏览器作为客户端实现业务功能,实现以上的服务器通信、界面定义、业务处理等。

他们的优劣势在网上一搜一大把,更细的就不说了,这里列一些常规的 1、开发客户端,可以自己定义通信协议、界面、功能都很灵活,包括加密、动画以及各种复杂的操作都可以实现(只要技术水平可以达到)。优点是功能强大效率高,缺点是开发成本高 2、使用浏览器,只能使用浏览器支持的通信协议(http、https),功能也只能使用html+js支持的部分,形式只能是网页(这里的网页是泛指,浏览器可解析都包含)。优点是开发成本较低,缺点是受限于浏览器所提供的api。

b/s也有一种特殊应用,就是只有页面,单独的一个html格式的文件。这类一般常见于浏览器的扩展,或者做文件分享时使用。例如做一个定时器功能的html页面,打开之后设置一个时间,到点了就会进行提醒。 之前流行过一段时间,但是受限于使用模式,慢慢就消退了。

无论是c/s 还是b/s 都是需要服务端。

服务器,各种服务器

上面说了,运行服务端的机器就是服务器。其实这又是一个多场景串场的词语。

先说运行服务端的机器就是服务器,这时指的逻辑上的服务器。

服务端也是程序,按照服务端的结构,一般会分为应用服务、也就是经常说的tomcat之类、数据库服务,用于存储数据的,也就是经常说的mysql、oracle之类。再复杂点的会需要缓存服务,也就是经常说的memcache、redis之类。

在小型的服务端,这些程序一般会都装在一台服务器上。而在大型的服务端,例如供几百上千万的用户时,那么不同的应用会部署在独立的服务器上,就形成了应用服务器、数据库服务器、缓存服务器等,而且根据负载的不同,还会进行更大数量的扩容,例如应用服务器会有多台,数据库服务器也有多台等。

在物理上虽然会有多台应用服务器或者数据库服务器,但是上系统层面他的角色是唯一的,实现这种唯一的技术就是集群技术。 不同的应用程序所需要的集群技术是不一样的,例如tomcat的集群实现和mysql的集群实现就完全不一样。 而且一般会有多种实现集群的方式和手段,不同的方式所能实现的效率和性能也不一样,这个后面再聊。

当说一台两台服务器的时候,是说相对于PC机或者个人机的物理服务器。我们办公时使用的电脑是个人电脑,一般能满足日常使用即可,因为我们每天都会关机,虽然偶尔不关也没事,但是永久了就会有死机的可能。 。 而服务器则需要很高的稳定性,首先要需要满足几年的不断电运行(长期开机),然后要足够稳定,不能运行几天就死机。 个人电脑重启下就好了,但是服务器重启就会影响到很多用户(例如微信的服务器宕机,会影响多少人)? 服务器是高性能、高稳定性的电脑。

这也是服务器大多数使用linux系统的原因,因为linux系统足够稳定(不会动不动就出现死机蓝屏程序无法响应等问题)。

也有时候会听到说拿一台pc机当服务器,其实只要性能足够,或者对稳定性没要求(例如测试系统),这种情况也是可以的,但是切记不要跑正式环境或者重要数据。

毕竟个人电脑的主板、电源等没有经过严格的拷机,很容易出问题,到时候丢数据就麻烦了。

说明

写一些产品经理需要了解的技术内容,尽量用一些简单、通俗的语言,如果太难懂,请留言告诉我。