物理架构:BS&CS / 服务器 / 云和集群 / 分布式 / 网络工程师

更多
2021年04月14日 08点31分 作者:叶飞 修改

计算机上运行着各种各样的软件。


按是否需要联网

可以分为:

  • 单机程序:在当前电脑上独立运行,比如:WPS、PhotoShop、单机小游戏(扫雷)
  • 联网程序:需要通过网络连接到服务器才能正常运行,比如:QQ、哔哩哔哩、知乎、一起帮,这类软件又被分为两种架构:

    • C/S(Client/Server):客户端/服务器,表现为用户需要下载一个软件安装在自己电脑上,然后通过这个软件联网(和服务器相连),比如:QQ
    • B/S(Browser/Server):浏览器/服务器,表现为用户直接打开浏览器(比如:IE/Chrome/360浏览器),输入网址,和服务器相连,比如:一起帮

广义上,所有需要联网的程序开发都可以称之为Web开发,但一般我们会认为B/S架构的、基于浏览器的项目才是Web开发(实际上B/S也占绝对份额)。


网络和服务器

网络又分为局域网和互联网(后文详述)。

最初,人们利用网络把各自的电脑直接连接:

但随着网络规模的扩大(互联网的发展),这样做有两个问题:

  • 安全:我的电脑直接“暴露”在其他电脑面前,但你不知道那些电脑面前是不是坐着一个“黑客”
  • 性能:我的电脑得响应无数的请求,还要不要干自己的工作了?

于是大家觉得应该专门用一台电脑作为节点负责响应其他电脑的请求,这台电脑就被称之为服务器

对外提供“服务”(为大家服务嘛,^_^)的“机器”(电脑/计算机)。


服务器究竟可以干啥呢(响应什么请求)?

  • 网页:事先存储在服务器
  • Email中继:发送和收取都要通过服务器
  • 即时交流:QQ/直播
  • ……

服务器和我们用的电脑有什么区别呢?本质上没有区别。服务器为什么被称为服务器?就像警察被称之为警察一样:

  • 警察也是人,因为从事警察工作,我们就称其为警察
  • 服务器也是计算机,因为它用于提供服务,所以我们就称其为服务器

一定要说区别的话:

  • 可以没有显示器,或者多台服务器共用一个显示器
  • 外形更简洁:刀片式/塔式
  • 要求更稳定更强大的性能
  • 通常放置在专门的机房(布置在主干网络节点/恒温/除尘/防静电……)

各种服务器/机房图片


所谓云计算

飞哥认为:本质上就是一个“新瓶装旧酒”的概念炒作。

云,实际上就是指服务器端。

我估计云计算名称的来源就是因为:我们以前在用图表示服务器端的时候,经常用这个图标:

但云计算也有点“新”东西:

  1. 最初,一个网站使用一台服务器太奢侈了,所以产生了:虚拟(共享)主机,一台服务器大家共用操作系统,独享磁盘空间
  2. 虚拟主机不能通过操作系统自主的控制,所以产生了:VPS(Virtual Private Server,一台服务器被分隔成多个虚拟的操作系统,每个人都有自己的一份
  3. 后来一个网站一台服务器都有可能不够了,就产生了集群:把多台服务器的资源组合使用,对外看起来还是一台服务器一样
  4. 再集群的基础上再进行VPS的划分,这就产生了现目前意义上的服务器/计算/存储。

云服务的诞生,极大的减少了(中小型)互联网公司服务器维护的人力成本负担(以前的服务器运维失业)。

PS:现在所谓的“云计算”培训班,其实就是以前的Linux运维培训班(升级版)


分布式

把一个需要非常巨大的计算/存储能力才能解决的问题分成许多小的部分,然后把这些部分分配给多个计算机进行处理。对应的是集中式

以我们源栈培训为例:

  • 集中式:在重庆搞块地,修个大学校,所有老师同学就在这个大学校里面教学
  • 分布式:在重庆、上海、北京、深圳……各地开分校,学生老师就近入校学习

横向扩展

分布式为系统的横向扩展提供了可能,为微型机的繁荣奠定了基础:

  • 纵向:在一台服务器里面使用更好/快/多的CPU、内存条等,从微机升级到小型机、中型机、大型机……
  • 扩充:不断的添加新的服务器,1台到2台,2台到4台,4台到8台……(大型网站/项目服务器可以上万台,据说google是几百万台,^_^)

体会:蚁多咬死象

和“云”的区别

分布式既可以建立在真实的物理节点上(比如一台一台的服务器),也可以建立在虚拟的云服务器上。


布式
商业通俗
专业
(硬件)聚合后切分(成操作系统)
(任务)切分后聚合
只存在于服务器端
可以混淆服务器端和客户端的界限(比如P2P下载)
一般我们把起来的、用于的分布式节点和称之为:集群。常见的有:

  • web服务器集群:专门用于响应HTTP请求,常用的技术核心是“负载均衡(Load Balance)”,即把请求尽量均匀的分布到不同的服务器,典型代表:nginx
  • 数据库集群:把数据库部署到多个服务器,但对外
  • 分布式缓存:redis、memcache……
  • 分布式文件存储:GFS(Google File System)、HDFS(Hadoop Distributed File System)、TFS(Taobao FileSystem)
  • email集群:……
集群技术一般都是“透明”的,即:只涉及部署,不影响开发。所以我们后续的课程一般都不涉及。


网络工程师

严格意义上,和程序员/软件工程师是有区别,或者说有侧重的。

网络工程师可分为:

  • 硬工:负责网络设备(硬件,比如路由器和网线)的生成、研发、安装、部署、维护……,常见的“网管”;不常见的在厂里。
  • 软工:负责网络运转所需软件的开发和维护,一般来说,也比较偏硬件,即软件主要是控制网络设备如何运作,而不是具体的业务逻辑
软硬件区别和工程概念参考:软件工程:背景知识 / 企业应用


作业

  1. 我能不能把我自己在用的这台电脑用作服务器?为什么?
  2. 思考一下:以下这些软件哪些属于Web开发,属于B/S还是C/S,哪些属于企业应用,为什么?
    1. 一起帮

    2. 哔哩哔哩
    3. QQ和微信
    4. 百度和google
    5. 超市收银(进销存)系统
    6. 源栈的扫地机器人内嵌控制程序
    7. 华为的鸿蒙操作系统
    8. .NET Framework
    9. AlphaGo
    10. WPS 或 office
软件分类 W
赞: 0 踩: 0

打赏
已收到打赏的 帮帮币

你的 打赏 非常重要!
为了保证文章的质量,每一篇文章的发布,都已经消耗了作者 1 枚 帮帮币
没有“帮帮币”,作者无法发布新的文章。

全系列阅读
评论 / 0

编程基础


项目管理相关

需求发布、开发规划、部署、测试,源代码版本管理(git)等……

逸闻史话

认识计算机

编程语言

数据结构和算法

Web开发基础

全部
关键字



帮助

反馈