热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何为Web应用程序构建高负载架构

为您的Web产品选择正确的体系结构是在考虑其开发过程中需要解决的关键问题。首先,它应该是可伸缩的并且能够处理高负载。尤其是当您要创建功能正常的网站,在线

为您的Web产品选择正确的体系结构是在考虑其开发过程中需要解决的关键问题。 首先,它应该是可伸缩的并且能够处理高负载。 尤其是当您要创建功能正常的网站,在线预订服务或电子商务解决方案时。

还记得人们如此钟爱的祝福星期五吗? 您是否知道有时网站和Web应用程序无法承受如此庞大的用户涌入并损失大量资金?

也许,当您不得不等待很长的时间才能加载网页或最终批准交易时,您也会感到恼火。 并停止与为您提供糟糕客户体验的公司开展业务。

页面和部分内容加载缓慢,崩溃,随机错误,与Internet断开连接可能是缺少高负载体系结构的可能后果。 这就是为什么创建可以处理高负载的软件系统很重要的原因。 即使您的Web项目很小,但有时可能会有大量用户涌入,或者您可能需要弹性扩展。

看一下有关高负载的一些事实:

  • 当一台物理服务器无法有效执行数据处理时,高负载开始
  • 如果一个实例同时服务10,000个连接–这是高负载
  • 高负载大约可以同时为成千上万的用户提供服务
  • 如果您在AWS(Amazon Web Services),Microsoft Azure或Google Cloud Platform上部署Web解决方案,则您将维持高负载架构

如果您的Web解决方案不能承受高负载,则可能会遇到以下问题:

  • 页面加载缓慢或无休止
  • 随机误差
  • 与Web服务器的连接断开
  • 部分内容加载
  • 减少用户观众活动
  • 客户流失

如您所见,项目架构会影响其成功。 没有满意的客户-没有成功和利润。 要实现可伸缩的Web应用程序,您需要了解开发高性能软件解决方案的原理。

构建高性能解决方案的原则

1.动态和灵活性

您永远不会知道明天的项目究竟会发生什么。 否则,如果没有人期望,一些次要产品功能将开始流行。

或者,您可能需要添加各种功能。 或者,您将决定推广您的应用程序并吸引客户。 因此,您必须能够弹性缩放并处理高负载。

在开发大型Web解决方案时,请关注灵活性,因为它使您能够轻松进行更改和扩展。 灵活性,没有对所有方面的初步计划,是任何快速增长的软件系统的最重要特征。

2.项目逐步增长

很难预测未来几年的受众规模,因此最好将重点放在可伸缩性上。 应用程序架构也是如此。 逐步解决方案是成功进行软件工程的基础。

如果您正在运行新产品,则无法立即提供可以承受数百万用户并同时处理其多个请求的基础结构。

使用云托管新项目,因为它可以减少服务器的成本,简化其管理并轻松部署应用程序。

此外,许多云托管服务还提供专用网络服务,使软件开发人员能够安全地使用云中的服务器并进行系统扩展。

Web解决方案的扩展是一个逐步的过程,它包含四个主要步骤:

  • 负荷分析
  • 确定受负载影响最大的区域
  • 这些区域到单个节点的转移及其优化
  • 负荷分析

可扩展的Web项目体系结构的开发

在大多数情况下,新的软件解决方案在单个服务器上运行,同时运行Web服务器,数据库和解决方案本身。 您从一开始就不会构建大型复杂项目。 相反,应将重点放在产品可伸缩性上,并选择功能强大的服务器,该服务器将在必要时能够处理高负载。

这种方法将帮助您节省时间并降低开发成本。 在下面,您可以看到一些方法来帮助您制作高性能的可伸缩Web应用程序。

数据库分离

通常,它是负载最大的第一个节点是数据库。 从用户到应用程序的每个请求通常是10到100个数据库查询。 在单独服务器上的数据库分支将提高其性能,并减少对其他组件(PHP, Nginx等)的负面影响。

数据库迁移
在某些情况下,将数据库移动到另一台服务器可能是工作Web解决方案的问题。 您应进行以下操作以有效地进行迁移:

  • 使用简单的解决方案–在网站上发布有关计划工作的公告,然后进行转移。 最好在用户观众活动很少的晚上进行此操作。
  • 使用复制将数据从一台服务器同步到另一台服务器。 配置后,您应该将应用程序中的数据库IP地址更改为新服务器。 然后–关闭旧服务器。

Web服务器分离

此后,分离Web服务器,将其分配给单独的节点将允许为应用程序留出更多资源。 说到PHP的示例,您应该将产品部署配置到Nginx服务器和代表后端的PHP服务器。

然后,Nginx本身将提供静态文件,而PHP服务器将仅被脚本处理占用。 Nginx通过IP地址启用到后端的连接:

server {
server_name ruhighload.com;root / var /www/ruhighload;
index index.php;location ~* .(php)$ {
fastcgi_pass 10.10 .10 .1 : 9000 ;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}

请记住,如果使用文件加载,则需要将文件存储分配给单独的节点。

使用多个后端

当负载增加时,Web应用程序将开始运行得更慢。 在某些时候,原因已经在于实现本身。 为避免此类问题,应使用多个PHP后端。

安装后端时,请确保它们具有相同的配置。 使用Nginx平衡它们之间的负载。 为此,您应该在上游定义后端列表,并在配置中使用它:

upstream backend {
server 10.10 .10 .1 ;
server 10.10 .10 .2 ;
server 10.10 .10 .3 ;
}
server {
server_name ruhighload.com;
root / var / www / ruhighload;
index index.php;
location ~ * . (php) $ {
fastcgi_pass backend;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;
}
}

当您开始使用多个后端时,来自同一用户的请求将被发送到另一台服务器。 这将需要一个用于所有会话的存储库。

您可以选择例如Memcache。 另外,您应该连接缓存服务器。 Memcache将使用恒定的哈希算法在所有服务器之间独立分配负载。

任务队列和DNS平衡

任务队列可以异步执行繁重的操作,而不会降低主应用程序的速度。 队列服务器将从Web解决方案接收任务时,其他服务器将处理它们。 如果队列中的平均任务数将增加,请增加服务器数以平衡负载。

DNS支持基于Round Robin的平衡,允许指定接收Web服务器的多个IP地址,称为前端。 在这里,您需要安装几个相同的前端,以便DNS为不同的客户端提供不同的IP地址。 这样,您将确保前端之间的平衡。

文件存储

文件上载和处理通常在后端进行。 有多个后端是完全不方便且效率低下的,因为软件工程师必须记住他们在哪个后端上载每个文件。

而且,它们会降低后端性能。 为避免此类困难,应使用单独的服务器来加载,存储和处理文件。

您可以通过以下方式进行:

  • 为文件服务器定义一个单独的子域
  • 在服务器和可以存储文件并进行处理的小型应用程序上部署Nginx
  • 通过添加新服务器和子域(例如,images1,images2,images3等)进行扩展。
  • 将文件负载转移到客户端,以便表单将请求发送到特定服务器

创建应用程序没什么大不了的,它可以随着流量的增长而跨服务器按比例扩展。 一切都是无状态的,负载平衡,90%的高速缓存,可靠的内容交付网络等–您将拥有高负载架构。

但是,成本效益是关键。 假设您有10万个用户和一台服务器。 因此,要获得13万个,您需要放置另一台服务器。 似乎很困难,不是吗?

因此,您应该落后一步,然后思考–系统的哪一部分导致了问题? 如果是数据库,请在开始项目开发之前选择一个可扩展的数据库。 或者,您可以使用多个数据库,例如,一个用于写入,一个用于读取(CQRS)。

预先定义和解决此类性能问题,并且不会显着增加基础架构成本,这是确保高负载的有效做法。

如果您在任何类型的开发项目中需要帮助,我也可以为您提供有关项目的咨询。 我是最受好评的自由职业者。 您可以直接在 Upwork 上雇用我 你也可以 雇用我   自由职业者

如果您有任何评论,问题或建议,请随时在下面的评论部分中发布它们!

From: https://hackernoon.com/how-to-build-a-high-load-architecture-for-your-web-application-hf2n32wg



推荐阅读
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Python如何调用类里面的方法
    本文介绍了在Python中调用同一个类中的方法需要加上self参数,并且规范写法要求每个函数的第一个参数都为self。同时还介绍了如何调用另一个类中的方法。详细内容请阅读剩余部分。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
author-avatar
crazyuzy327
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有