图片中的客户端-服务器架构



熟悉的照片吗?但是,您经常会遇到这种架构-当您在线购买电影票,预订出海票或与医生预约时。

在客户端-服务器体系结构上,将构建所有站点和Internet服务。通过Internet传输数据的桌面程序也使用它。因此,IT专业人员需要了解它是什么以及它如何工作。

我将在文章中对此进行讨论。我会用手指和示例,再加上有趣的图片来解释=)如果您更喜欢视频格式,则可以观看有关同一主题的youtube视频

内容




它是什么以及它如何工作


在这里,我们有一位Vasya决定购买汽车。例如在广告中-快速,强大,美观!她就像飞机的机尾一样站着,Vasya没有那种钱。



当然,Vasya可以挖几年,然后再买车。但是你想现在到这里!是的,需要一辆汽车……

而Vasya不知道如何存钱-领取了工资,买了主要的,付了房租,仅此而已!其余的可以花。对于这类人,有些银行可以让您借钱取钱。



当然,那您将多付,将其退还。兴趣就是马。但是现在您已经可以买得起昂贵的东西了。

Vasya想到,估计并说:

-是的,我想那样!我可以从工资中向银行支付100卢布,但我无法保存。我会花的。

因此,瓦西亚去银行说:

-我是瓦西里·伊万诺夫,我想借1000卢布的汽车贷款。



秘书Katya必须检查他的信用记录。突然他无法得到贷款,他的故事不好吗?也许他已经获得了10个学分,却没有一分钱?也许他根本就是恐怖分子?有必要检查操作员的内心是否知道黑名单。



Katya有一个用于检查客户数据的特殊程序。该程序可以是Web或台式机:

  • 网络 -在Google或Facebook等浏览器中打开
  • 桌面 -在计算机上,例如单词或计算器

Katya是浏览器还是程序都没关系。无论如何,它将是一个客户。客户端就是您的应用程序。与我们的操作员一起工作的那个。



Katya驱动程序“ Vasily Ivanov”并在客户端上接收信息-他是否在黑名单上?以前有信用记录吗?等等。但是应用程序的内脏会发生什么?



Katya在客户端上输入了数据。但是,当她单击“检查”时,客户端向服务器发送了一个请求:

-给我有关Vasya Ivanov的信息!



服务器向数据库数据库发送了一个请求:

-从其中fio ='Vasily Ivanov'的客户端中选择*。 (给我上的名字“瓦西里·伊万诺夫”的所有信息)



的基本回答是:

-在这里,你所拥有的一切,我发现。



服务器将此信息返回给客户端:



客户已经为Katya绘制了它:



Katya看起来:

-是的,信用记录很好。



他向瓦斯亚提议:

-请,如果您想贷款,我们准备以年利率80%的方式分12年分配1000卢布。安排好了吗



瓦西亚很高兴:

-是的,一切都适合我,给我更多的钱,我就开车去了!
每个人都快乐,每个人都快乐。



当Katya将客户的全名驱到那里时,她甚至都不知道程序中的数据是怎么做的。但是您和我必须找出这是一条什么样的道路。为什么所有这些困难呢?为什么要这样的结构?为什么有客户端,为什么有服务器?


为什么我需要一个客户



这里的一切都很简单-用户正在与客户端一起工作。需要将程序代码的字节转换成美观且易于理解的图片。用户不是程序员,他不了解编程语言或sql。他了解模具和纽扣。我们在客户中绘制它们。




为什么我们需要服务器



他更强大,

可以有很多客户。在银行示例中,我们可以在俄罗斯的10个城市拥有10个分支机构,每个分支机构都有10个运营代理商。一千个Katek,每个人都有一台单独的计算机。



但是我们希望应用程序能够快速运行。这样它不会变得愚蠢且不会冻结,从而使操作员感到不安,并使客户端等待。因此,汽车需要强大的动力。但是,如果使每个操作员的计算机功能强大,那么您将不得不投入大量资金!

因此,我们将所有基本逻辑传输到服务器。现在,我们正在做的强大!而且客户端计算机可能很便宜,因为它们仅具有“请求信息和精美呈现”风格的逻辑。


没有代码重复

如果我们只有客户端计算机,则每个客户端计算机将具有相同的逻辑处理代码,整个数据库,所有恐怖分子目录等等。但是,由于服务器和数据库位于单独的链接中,因此客户端计算机释放了很多空间……还有代码。

无需重复代码,因为所有主要逻辑都被带到功能更强大的服务器上。




这样更安全,因为

在服务器和数据库中存储的信息是简单操作员无法访问的。它:

  • 客户资料
  • 有关他的财务信息
  • 银行黑名单
  • ...

为什么要向所有人和所有人显示此信息?操作员只能看到她的界面。我开了一个全名-我得到了是否提供贷款的答案。所有。她不需要任何其他东西。

有一些职员愿意为denyushki合并客户信息。有些不诚实的人准备无意间看着自己的肩膀。或者客户自己就是这样的人。想象一下,Vasya推挤脆弱的Katya,坐在她的计算机旁,然后将数百万美元转入她的帐户,直到被守卫束缚为止。




为什么我们需要基地


数据库与它有什么关系?即使服务器上存储了所有信息,我们也有这里的服务器。碰巧的是,有时根本不需要数据库,而我们仍然拥有两层的客户端-服务器体系结构。



在这种情况下,服务器会将所有数据存储在内存中。但是仅当服务器崩溃或仅重新启动时,所有信息才会丢失。关闭系统电源后,内存中的所有内容都会被删除。

DB(数据库)-一个单独的软件产品,使您可以:

  • 快速获取信息
  • 即使重新启动系统也可以保存信息。

也就是说,如果网络突然消失,底座死机,具有底座的机器重启或发生其他情况,我们的更改将不会丢失。这称为持久性。它是通过在发生问题时回滚的事务来实现的。但是在本文中,我们不会深入探讨该主题。)

是的,可能没有基础。但是,如果确实如此,我们对数据的安全性充满信心,并且可以轻松地进行搜索。




架构优势


我们总结一下架构的优点:

  1. 功能强大的服务器比100多个功能强大的客户端计算机便宜 -如果我们不希望应用程序减慢速度,则需要一台好的计算机。您将拥有一个。如果负载很大,但明显少于客户数量,则为几个。
  2. — , « » « , 100 ».
  3. — . , .



一个链接

断开了-每个人都在休息;如果服务器掉线或基座掉了,也就是说,一个链接已损坏-一切,每个人都处于昏迷状态,每个人都在休息。数百,数千甚至数百万的客户(如果有的话),没有人可以工作。所有操作人员都可悲地看着窗口“抱歉,出了点问题”,并在客户面前耸了耸肩。



这就是为什么在业务关键型软件中架构复杂甚至重复的原因。拥有数千名出纳员的银行无法承受停机时间。因此,他们使用服务器群集-一个掉了,其余的工作了。



然后,客户如何理解将请求发送到哪里?

平衡器放置在服务器的前面,客户端在此处发送请求。无论群集中放置了多少服务器,客户端都不会对它感兴趣。它有一个URL-平衡器的地址。



现在,客户收到一个请求:

-给我有关Vasya Ivanov的所有信息。

平衡器说:

-伙计们,一个新的要求!谁的负载更少?



第一台服务器:

-我的队列中有5个请求。

第二:

-我有2.

平衡器将请求发送到第二台服务器。



这种方案用于高负载的应用程序-当有太多请求而一个服务器根本无法处理它们时。

Facebook,亚马逊,谷歌-数以百万计的用户去那里。一台服务器无法处理它们。因此,他们放置了一个群集,平衡器分担了它们之间的负载。在这种情况下,群集中可能没有2台服务器,而是根据需要设置10台,15台服务器。



这样,我们可以用相同的方式平衡数据库。我们可以在各种机器上拥有多个数据库副本,并且平衡器将请求发送到一个或另一个。



这种方案称为热备用 -当我们有多个并行运行的服务器,并且平衡器在它们之间分配负载时。

也许还有一个冷备用方案-当我们的第二台服务器作为备份以防万一。所有请求都发送到第一个服务器,第二个服务器发送。



但是,如果第一台服务器发生故障并死亡,则平衡器会将负载重定向到第二台服务器:





此时,管理员将有时间在服务器1上解决问题。

当一台服务器能够承受负载并提供良好的速度时,将使用冷储备方案。但是该应用程序对业务至关重要,并且简单不能接受。

这可能很简单,不仅因为发生了不好的事情。还有定期的应用程序更新。两种备份方案都可以使您轻松升级。如果群集中有两个服务器,则更新将如下所示:

  1. 将所有负载重定向到服务器2
  2. 停止服务器1
  3. 更新服务器1
  4. 我们启动它,并将全部负载定向到它上面
  5. 停止服务器2
  6. 更新它
  7. 我们启动
  8. 再次分配负载(如果是热备用)

也就是说,该应用程序根本不会停止工作!

因此,冗余方案可以帮助我们消除“ 1条链路断开-每个人都在休息”的问题。客户端永远不会知道集群中的一台或多台服务器已死,一切都对他有用,而且一切正常。





高成本

服务器设备昂贵。在那里,您不能放置家用计算机的常规SSD。为什么?由于服务器的硬件要求与硬件+完全不同,因此支持特定功能:

-HDD具有特殊的控制器固件,该固件针对RAID中的磁盘操作进行了优化,这在家里是不需要的。

-SSD有一组电容器,可以在断电时存储能量,以便有足够的时间将DDR缓存中的数据放入非易失性存储器中,并且数据不会中断。

SSD-快速工作的磁盘,HDD-正常。RAID-当我们将N个磁盘连接在一起并且DDR缓存是RAM时

另外,服务器解决方案通常具有更长的保修期:5年而不是一年。




对于价格,它们相差2倍。例如,SSD:

  • 一个家庭的千兆成本16.53r
  • 服务器企业演出的费用为32卢布

2019年12月的数据。如果不是品牌烙铁,则应从制造商那里获取。

似乎没什么不同,对吧?但是关键是,对于一个房子来说,1 TB足以满足眼睛的需要-一切都将适合照片,电影和一堆应用程序……对于数据库,有时10 TB会很小。如果您创建集群,那么我们会将成本乘以2(如果不是更多)。因此,价格差异似乎很大,但是当转换为千兆字节时,会出现很小的差异。

别忘了,在家中您只需要保留照片,甚至那些照片通常都在云中。服务器上有一项关键业务功能,它会耗尽资源的消耗,因此必须复制以防“突然死掉”。


需要雇用系统管理员

我们需要聘请系统管理员来监视我们所有的应用服务器和数据库。将他的薪水加到设备成本中!



测试什么


要了解要测试的内容,您需要了解一个人正在处理的内容。

用户正在与客户端一起工作。它可以是Web或桌面应用程序,不是重点。为操作员Kate提供了一个工作场所,他们向他们展示了要运行的程序以及如何使用它。她不知道服务器和数据库的可用性,仅与客户端一起工作。



因此,测试人员首先检查客户端!因为服务器可以完美地运行,所以您甚至可以在API级别编写测试,并且这些测试都是绿色的,似乎每个人都受伤了!用户将下载报告并看到错误。哦。

服务器正在运行,客户端上发生了错误。并且不必关心数百个“绿色”自动测试。用户仍然有错误。我们的任务是从他的角度看。



但是,如果您有权访问应用程序服务器及其数据库-也值得检查它们!这样我们就可以看到“未来的错误”。例如:

  • 我们保存了产品卡-系统将其抽出并说一切都很好。在客户端上一切都很好!
  • 我们检查了数据库-那里的部分字段仍然为空,开发人员错误地在数据库中指出了字段的名称。并且信息丢失了。

用户现在在客户端中看到的只是一个缓存,“我输入的是我显示的内容”。如果不检查数据库,则可能不会立即出现这样的问题。用户打开产品卡-一些字段未填写:

-好吧,可能它们没有填写。

他们被填满了!只是储蓄歪曲地工作。因此,如果我们只有一个黑匣子,那么我们需要检查:“数据是否真的保存?”保存了吗?在新窗口中打开卡或通过API方法调用信息。

如果您有权访问数据库-只需检查一下就可以了。如果您有权访问服务器日志,请检查它们是否存在错误。



除了普通用户之外,还有一些邪恶的人试图加入我们的应用程序并窃取金钱/数据。他们不使用客户端或服务器-他们在那里没有访问权限。他们尝试拦截从客户端到服务器或从服务器到数据库的数据。



好吧,如果坏人可以做到这一点,那么测试人员也必须能够做到!因为测试人员会提供有关我们产品的信息。



测试人员检查了漏洞,然后告诉团队:

-伙计们,所以我检查了一下,我们有这样的潜在漏洞。让我们考虑一下是否需要以某种方式关闭它们。

这不是他们可以解决问题的事实。也许您有一个非关键的应用程序-数据不会泄漏,您也不会存钱。然后没有人会再打扰,因为安全性测试非常昂贵,专家很少。

但是,一些基本检查(例如sql注入或XSS攻击)值得探索和检查您的应用程序。至少了解他们的重要性。毕竟,如果攻击破坏了客户-好吧,让他自己成为木偶奇遇记。而且,如果攻击将服务器置于服务器上,那就不是很好。并且至少必须知道它是如何发生的。





客户端是用户使用的程序。他不知道这是计算机上的整个程序,还是背后藏有基础服务器甚至整个RAID的服务器。它可以在浏览器或桌面应用程序中工作。他只需要知道在哪里戳。

客户端不需要大量的内存,磁盘空间和其他资源。因此,工作相对便宜。而这正是我们所需要的,特别是如果我们需要为成千上万的银行运营人员购买设备时。

服务器 -存储应用程序本身的计算机。所有代码,所有逻辑,所有其他材料和参考书。例如,寄存器的FIAS地址目录或法人实体目录-它们还占据了自己和应用程序内存中的位置。

有时他们说“应用程序服务器”和“数据库服务器”。这是正常现象,因为实际上服务器只是一台机器,一台计算机。为了安全起见,数据库和应用程序服务器通常存储在不同的计算机上。在这种情况下,如果他们说“应用程序服务器”,那么我们正在谈论方案的第二个链接。

应用程序非常不同。有资源密集型,它们需要大量的内存和磁盘空间。有些“肺”甚至可以在家用计算机上部署。

DB(数据库) -数据仓库。在这里,您可以轻松地搜索信息,并确保即使在应用程序出现问题的情况下也可以保留信息。

数据库需要多少空间取决于数据量。银行有庞大的基础,只有1 TB的银行数量很少。而且,您可以在计算机上安装很小的一个。例如,可以提供XAMPP而且,您不可能将如此多的数据塞入其中,以致于没有放置它们的位置。

可能没有单独的基础,那么结构将变为两层:客户端-服务器。就这样!

该计划是有条件的,在现实生活中我们至少会拥有更多的客户。而且,如果应用程序负载很重,那么将有多个服务器和多个数据库:



PS- 在我的博客中以“有用”标签寻找更有用的文章

All Articles