前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >网站工作原理第二部分:客户端 - 服务器模型和Web应用程序的结构

网站工作原理第二部分:客户端 - 服务器模型和Web应用程序的结构

作者头像
疯狂的技术宅
发布2019-03-27 15:35:56
2.2K0
发布2019-03-27 15:35:56
举报
文章被收录于专栏:京程一灯京程一灯京程一灯

在 之前文章,我们分析了网站在基本工作原理,包括客户端(您的计算机)和服务器(响应客户端网站请求的另一台计算机)之间的交互。

作为四部分系列的第二部分,让我们双击了解基本Web应用程序的客户端,服务器和其他部分如何配置使您的网络浏览体验成为可能。

客户端 - 服务器模型

通过网络通信的客户端和服务器的这一想法称为“客户端 - 服务器”模型。 这让浏览网站(如此)和与Web应用程序(如Gmail)进行交互变为可能。

客户端 - 服务器模型实际上只是描述Web应用程序中客户端和服务器之间关系的方法 - 就像您可能使用“男朋友”和“女朋友”来描述您的个人关系一样。 信息是从一端到另一端的图像复杂化的细节。

基本Web应用程序配置

有数百种方式来配置Web应用程序。也就是说,大多数人都遵循相同的基本结构:客户端,服务器和数据库。

客户端

客户端是用户与之交互的。 因此,“客户端”代码对用户实际看到的大部分内容负责。 这包括:

1.定义网页的结构

2.设置网页的外观

3.实现响应用户交互的机制(点击按钮,输入文本等)

结构: 您的网页的布局和内容由HTML定义(通常是HTML 5,当涉及到Web app,这话得另说。)

HTML是超文本标记语言。 它允许您使用HTML标签来描述文档的基本物理结构。 每个HTML标签描述文档上的一个特定元素。

Web浏览器使用这些HTML标签来确定如何显示文档。

外观:为了定义网页的外观,Web开发人员使用CSS,即层叠样式表。 CSS是一种语言,可让您描述HTML中定义的元素应如何展示,允许更改字体,颜色,布局,简单动画和其他外观样式。

您可以为上述HTML页面设置样式,如下所示:

用户交互:最后,JavaScript处理用户交互。

例如,如果您想在用户单击按钮时执行某些操作,则可能会执行以下操作:

一些用户交互(如上所述)可以被处理,而无需请求服务器 - 称作“客户端JavaScript”。其他交互需要将请求发送到您的服务器来处理。

例如,如果用户发表评论,则可能需要将该评论存储在数据库中,以使所有的繁杂信息组织在一个位置。 因此,发送请求将用户ID和评论发送到服务器,并且服务器将侦听这些请求并相应地处理它们。

在本系列的下一部分中,我们将深入HTTP请求响应。

服务器

Web应用程序中的服务器监听来自客户端的请求。 当您设置HTTP服务器时,您将其设置监听一个端口号。 端口号始终与计算机的IP地址相关联。

您可以将每个计算机上的端口视为单独的通道,您可以使用它们来执行不同的任务:一个端口可以上网www.facebook.com , 而另一个端口则可以访问您的电子邮件。 这是可能的,因为每个应用程序(Web浏览器和电子邮件客户端)使用不同的端口号。

一旦您设置了HTTP服务器来侦听特定的端口,服务器将等待来自该特定端口的客户端请求,执行该请求所描述的操作,并通过HTTP发送响应请求的数据。

数据库

数据库是网络架构的基础设施 - 我们大多数人都害怕接触他们(前端开发者),但它们至关重要。 数据库是存储信息的地方,可以轻松访问,管理和更新信息。

例如,如果您正在构建社交媒体网站,则会使用数据库来存储有关用户,帖子和评论的信息。 当访问者请求页面时,来自站点的数据库中的数插入到页面,从而允许我们在诸如Facebook等(如Gmail)这样的网站上进行实时的用户互动。

这就是所有基础信息! (好吧,排序...)

就这么简单。 我们只是浏览了Web应用程序的所有基本功能。

如何扩展简单的Web应用程序

上述配置对于简单应用来说非常棒。但随着应用程序的扩展,单个服务器将无法处理来自数千个乃至上万)访问者的的并发请求。

为了扩展以满足高并发,我们可以把请求分发到一组后端服务器。

这是事情变得有趣的地方。您有多个服务器,每个服务器都有自己的IP地址。那么域名服务器(DNS)如何知道您的应用程序发送请求到那个服务器?

答案是它不知道。管理所有这些单独实例的方法是通过称为负载平衡器的东西。

负载平衡器充当交通警察,可以最快,最有效的方式跨服务器分配客户端请求。

由于您无法广播所有服务器实例的IP地址,因此您将创建虚拟IP地址,这是您向客户公开广播的地址。此虚拟IP地址指向您的负载平衡器。因此,当您的站点有DNS查找时,它将指向负载均衡器。然后负载均衡器将请求实时分配给各种后端服务器。

您可能想知道负载均衡器如何知道给哪个服务器发送流量。答案:调度算法。

一种流行的算法Round Robin在您的服务器(所有可用的服务器)之间均匀分配传入的请求。如果您的所有服务器具有相似的处理速度和内存,通常会选择此方法。

另一种算法“最小连接”,下一个请求将请求活动链接最少的服务器。

根据您的需要,还可以实现更多的算法。

流程如下所示:

服务

好的,所以我们通过创建服务器池和负载均衡器来解决我们的流量问题。工作很好,对吧?

...但是,只要复制一堆服务器,仍然会导致问题,因为您的应用程序不断增长。当您为应用程序添加更多功能时,您必须保证服务器数量的增长。为了解决这个问题,我们需要一种解耦服务器功能的方法。

这时服务出现了。服务只是另一个服务器,它只与其他服务器交互,而不是像传统Web服务器与客户端进行交互。

每个服务都有一个独立的功能单元,例如授权用户或提供搜索功能。服务允许您将单个Web服务器分解成多个服务,每个服务执行特定功能。

将单个服务器分解成许多服务的主要好处是它允许您完全独立地扩展服务。

这里的另一个优点是它允许公司内部的团队独立工作,而不是在一台整体式服务器上工作10s,100s甚至1000s,这很快成为项目管理噩梦。

这里快速说明:负载平衡器和后端服务器和服务的概念在您为应用程序添加越来越多的服务器扩展时变得具有挑战性。 它会像会话持久性那样特别棘手,例如在会话期间如何处理从客户端向同一台服务器发送多个请求以及如何部署负载平衡解决方案。 我们将把这些高级主题留给这个帖子。

内容分发网络

以上所有功能都适用于扩展,但您的应用程序仍然集中在一个位置。 当您的用户从国家的其他地方(或世界的另一边)访问您的网站时,由于客户端和服务器之间的距离增加,可能会需要更长的加载时间。 毕竟,我们在谈论“万维网”,而不是“局域网”。:)

解决这个问题的一个普遍策略是使用内容分发网络(CDN)。 CDN是分布在许多数据中心的“代理”服务器的大型分布式系统。代理服务器只是作为客户端和服务器之间的中介的服务器。

拥有大量分布式流量的公司可以选择支付CDN公司,使用CDN的服务器向最终用户提供内容。 CDN的一个例子是Akamai。 Akamai拥有数千台位于世界各地的服务器。

让我们来比较一个网站如何与CDN一起工作。

正如我们在第1节中所讨论的,对于典型的网站,URL的域名被转换为主机服务器的IP地址。

但是,如果客户使用Akamai,则该URL的域名将被转换为由Akamai拥有的边缘服务器的IP地址。然后,Akamai将网络内容提供给客户的用户,而无需请求客户的服务器。

Akamai能够通过存储来自客户服务器的HTML,CSS,软件下载和媒体对象等常用元素来实现这个功能。

主要目标是让您的网站的内容更接近您的用户。 如果内容不需经过这么远的路由到达用户,这意味着更低的延迟,这将会减少加载时间。

塔达! 一个更快的网站:)

Run that by me again?

接下里, 阅读 第三部分 我们将会详细介绍 HTTP and REST! :)


往期精选文章

使用虚拟dom和JavaScript构建完全响应式的UI框架

扩展 Vue 组件

使用Three.js制作酷炫无比的无穷隧道特效

一个治愈JavaScript疲劳的学习计划

全栈工程师技能大全

WEB前端性能优化常见方法

一小时内搭建一个全栈Web应用框架

干货:CSS 专业技巧

四步实现React页面过渡动画效果

让你分分钟理解 JavaScript 闭包



小手一抖,资料全有。长按二维码关注京程一灯,阅读更多技术文章和业界动态。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-09-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 京程一灯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 客户端 - 服务器模型
  • 基本Web应用程序配置
    • 客户端
      • 服务器
        • 数据库
          • 这就是所有基础信息! (好吧,排序...)
          • 如何扩展简单的Web应用程序
          • 服务
          • 内容分发网络
          • Run that by me again?
          相关产品与服务
          内容分发网络 CDN
          内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档