日照定制软件开发大型网站应用之海量数据和高并发解决方案总结一二

发布时间:2021-04-25 16:23:18

首先,网站应用程序背景

开发网站应用程序,当用户较小时,使用简单:应用程序服务器+数据库服务器+文件服务器,因此您可以解决一些问题,或者您可以通过硬件。当然还考虑成本,提高网站应用程序的访问性能。

当问题的大小没有通过堆硬件在经济条件下解决时,我们应该通过其他想法解决问题,互联网提供了很多成熟的解决方案,但它没有适用性,你们都是淘宝的技术所有人都在移动,不一定达到淘宝的水平,这很简单。

其次,主要数据的主要解决方案和高并发性

大规模数据解决方案:

使用缓存;

页面静态技术;

数据库优化;

在数据库中隔离活动数据;

批量阅读和延迟修改;

读写分离;

使用NoSQL和Hadoop等技术;

分布式部署数据库;

应用服务和数据服务是分开的;

使用搜索引擎搜索数据库中的数据;

执行业务的拆分;

高并发下的解决方案:

应用程序和静态资源文件是分开的;

页面缓存;

集群和分布式;

逆向代理人;

CDN;

第三,大规模数据解决方案

(1)使用缓存

网站访问数据的特征主要作为“28法”:80?F商业访问集中在20?F数据上。

例如:百度的搜索热门单词可能集中在流行词汇的一小部分;新浪微博也可能在一定时期内是少数事件。

通常,用户仅使用总数据输入的一小部分。当网站已经发展到一定规模时,数据库IO操作成为一个性能瓶颈,使用缓存到公鸡这个小部分内存中的流行数据是一个非常好的选择,不仅可以减少数据库的压力,还可以减少数据库的压力,还要提高整体网站的数据访问速度。

使用缓存通过程序代码将数据直接保存到内存中,例如通过使用Map或ConcurrentHashMap;另一个,缓存框架:redis,ehcache,memcache等。

写一张照片使用缓存框时,我们需要关心的是创建缓存和缓存故障策略时。

可以在许多方面创建缓存创建,并且需要根据自己的业务选择特定。例如,第一次读取数据时应缓存新闻报道的新闻;对于具有高点击的文章,您可以缓存它。

内存资源有限,并选择如何创建缓存是值得思考的问题。此外,缓存的故障机制也需要良好研究,这可以通过设置故障时间来设置;或者通过将优先级设置为流行的数据设置,根据不同的优先级设置不同的到期时间;

应该注意的是,当我们删除数据时,必须考虑删除缓存,还要考虑数据是否在删除缓存之前已到达缓存时间!

使用缓存时,如何执行容错处理时缓存服务器发生故障时,与n多个服务器缓存有相同的数据,通过分布式部署控制缓存数据,在发生故障时自动切换到其他机器;或者通过散列一致性,等待缓存服务器恢复正常使用,重新指定缓存服务器。散列一致性的另一个角色是在分布式缓存服务器上定位数据,在缓存的服务器上不可用分发数据。数据缓存的哈希一致性也是比较问题。这里只能描述,关于哈希一致性,推荐文章:http://blog.csdn.net/liu76502308099

(2)页面静态技术

使用传统的JSP接口,前端接口的显示是在通过后台服务器渲染后返回前端料斗,如下所示:

写一张照片

当然,现在倡导前端和后端分离,前端接口基本上是HTML网页代码,角js或nodejs提供的路由将对后端服务器发出数据,然后呈现vision上的数据,这在很大程度上减少了。后端服务器的压力。

这些静态HTML,CSS,JS,图片资源等也可以放在缓存服务器上或CDN服务器上,通常使用CDN最大使用。服务器或nginx服务器提供静态资源功能。

此外,在“高性能网站高级指南 -  Web开发人员性能优化最佳实践(WordStep Network Frontal Team Truest)”本书为网站性能的前端界面提供了一些珍贵经验,如下:

写一张照片

因此,在处理这些静态资源中,选择正确处理的正确方法或对整体网站性能有很大的帮助!

(3)数据库优化

数据库优化是整个网站性能优化的最基本部分,因为大多数网站性能的瓶颈都在数据库IO操作中,尽管提供了缓存技术,但数据库的优化仍然是一个严重的治疗。一般公司拥有自己的DBA团队,负责创建数据库,建立数据模型等,与我们不了解数据库的人,您只能在线优化文章,探索,有没有系统的数据库优化概念。

对于数据库的优化,它是一种用技术换金钱的方法。有很多方法可以优化数据库,并且常见可以分为:数据库表结构优化,SQL语句优化,分区,分数,索引优化,使用存储过程而不是直接操作。

1,表面结构优化

已经总结了一些文章,用于开发规范和使用数据库的技术和设计以及优化,总结了前部,并且地址被盗,有必要移动查看:

a)MySQL开发规范和使用技能摘要:http://blog.csdn.net/xlgen157387/article/details/48086607

b)如何在一百万数据库检查中提高查询效率? :http://blog.csdn.net/xlgen157387/Article/Details/44156679

此外,您需要创建外键时要创建数据库表,可以轻松消除使用外键的一个好处,但现在我们全部通过数据的方式来确保数据。阅读操作的一致性,我觉得它更加放心,我用外键关联mysql使用东西来删除类,或者使用事物来使用事物来删除操作。当然,它也可能有一个合适的场景。每个人都有一个很好的建议,欢迎留言!

2,SQL优化

对于SQL优化,主要针对SQL优化语句处理逻辑,还根据索引使用。另外,SQL语句的优化可以针对特定的业务方法进行优化,我们可以记录执行业务逻辑操作的数据库执行时间,使目标优化,这种效果仍然非常好!例如,下图显示了执行呼叫的时间:

写一张照片

对SQL优化的一些建议,在组织之前,请搬家查看:

a)19 mysql性能优化点分析:http://blog.csdn.net/xlgen157387/article/details/50735269

b)MySQL批量SQL插入各种性能优化:http://blog.csdn.net/xlgen157387/article/details/50949930

排放表

分数是打破一个大表来将某个规则分解为一个独立存储空间的单个实体表。我们可以调用每个表,每个表对应三个文件,MyD数据文件,.myi索引文件,.mmy表结构文件。这些子节可以分布在同一块盘上,或在不同的机器上分布。根据先前已定义的规则获取相应的子表名,然后操纵它。

例如:用户表

有多种用户的角色可以分为不同的类别类别:学生,教师,企业等,我们可以根据类别类别分开数据库,以便每次查询现在都锁定了较小的范围用户的类型。

但是,在子表成像后,如果需要查询完整顺序,则需要使用多个表。

划分

数据库分区是一种物理数据库设计技术,DBA和数据库建模人员非常熟悉。虽然分区技术可以实现大量效果,但其主要目的是减少特定SQL操作中读写的总数据量以减少响应时间。

分区和尺度相似,所有这些都符合规则。差异谎言将大型表分解为几个独立实体,并且分区被划分为多个位置的多个位置,该位置可以在不同的机器中。分区后,表面仍然是一个表,但数据散列到多个位置。数据库读写操作仍然是一个大表名,DMS自动转到分区数据。当表中的数据变大时,读取数据,查询数据的效率很低,很容易将数据讨论到不同的数据表,但这会在得分后发出麻烦。因为,在不同的表中,数据被放置在不同的表中,并且需要在搜索数据时检查这些表中的数据。如果您想制作CRUD操作,您需要查找所有表,如果您涉及不同的表,则必须进行跨表操作,这仍然非常麻烦。

分区的使用可以解决这个问题,分区是为了将不同区域中的不同区域中的表中的数据保存在不同区域中,因此如果数据被询问,如果数据的范围可以分离数据,则可以将数据分离。数据量较少,操作量更快,方法对程序是透明的,程序不需要进行任何更改。

索引优化

索引的基本上原则是以数据的顺序保存到类似的表,从而可以在搜索索引字段是条件记录时从索引中快速找到相应的记录。指针和相应的数据是从表中获得的,这非常快。

但是,虽然查询的效率大大提高,但它是一种浪费资源,因为需要更新数据变化,因为需要更新数据变化。

关于使用索引,不同问题或不同讨论的问题,并根据具体业务选择适当的指数,以提高性能的效果是一项重大倡议!

推荐文章阅读:

a)索引的数据库索引和优缺点,11  - 使用:http://blog.csdn.net/xlgen157387/article/details/45030829

b)数据库索引原型:http://blog.csdn.net/kenyrose/article/details/7532032

使用存储过程而不是直接操作

存储过程位于大型数据库系统中,一组SQL才能完成特定功能语句集存储在数据库中。在第一次编译后,不需要再次编译呼叫,用户将通过指定存储过程的名称来执行它,并给出参数(如果存储的过程具有参数)。存储过程是数据库中的一个重要对象,并且应在存储过程中使用任何设计的数据库应用程序。

在操作过程的操作中,计算机更加复杂,并且写入的SQL语句可以由存储过程替换,并且仅需要更改存储过程的使用,并且可以在存储的存储过程中进行一些复杂的操作过程。 。

(4)将活动数据分开在数据库中

作为前面提到的“两法律”,网站的数据更多,但经常访问的数据是有限的,因此可以单独分离这些相对活动的数据以节省处理效率。

事实上,使用缓存前面的想法是一种非常明显的情况,使用数据库中的数据的用例,并且流行的数据可以缓存在内存中。

还有一个场景,例如,网站中使用的注册数量的用户是数万个级别的数千级,但经常登录只是数百万级,并且剩余的基础知识已经长时间尚未登录。如果您没有将这些Zombie用户分开,请单独分隔它,然后每次查询其他登录用户时都会浪费这些僵尸用户的查询操作。

(5)批量读数和延迟修改

批量读取和延迟修改的原理是通过减少操作数据库的操作来提高效率。

批量读数是合并多个查询一次,因为每个数据库请求操作都需要释放链接来构建和链接释放,或占用资源的一部分,可以异步读取批量读取。

延迟修改是对于一些经常修改数据的一些高耗材和修改的数据,首先将数据保存到每个修改的缓存中,然后将数据保存到缓存中到数据库,程序可以同时读取数据库中的数据和缓存。

例如:我现在正在写这个博客,我首先写了一个写入内容,然后单击post,我将返回markdown来修改操作,我有一个习惯,我没有写的东西,我总是按下它。“保存”按钮,然后我在另一个页面中打开此博客,我的修改已更新,但我仍在编辑!

写一张照片

我不知道CSDN技术是否在我没有单击发布之前,首先将数据放在缓存内。

(6)读写分离

读写分离的本质是将应用程序分配给数据库的读写操作到多个数据库服务器,从而减少单个数据库的访问压力。

读写分离通常通过配置主从数据库,并从库中读取数据,数据库添加修改以删除操作所有者。

写一张照片

相关文章请搬家观看:

a)MySQL5.6数据库主要来自(Master / Slave)同步安装和配置详细信息:http://blog.csdn.net/xlgen157387/article/details/51331244

b)经常拓扑,MySQL Master的原理分析,如何提高主从复制的效率:http://blog.csdn.net/xlgen157387/article/details/52451613

(7)使用NoSQL和Hadoop等技术

NoSQL是一个非结构的非关系数据库,可以通过关系数据库的条形框架断开,可以灵活地运行,并且因为NoSQL通过多个块存储数据,其运行数据速度也很快。

(8)分布式部署数据库

任何强大的单服务器都符合大型站点不持久的业务需求。阅读和写入后,数据库被分成两个或多个数据库服务器,但仍然对业务需求仍不满意。分布式部署数据库是拆分站点数据库的最后一个方法,才是当单表数据非常大时。

分布式部署数据库是一个理想的情况,分布式数据库是将表格放在不同的数据库中,然后放在不同的数据库中,以便在处理请求时,如果需要调用多个表,则可以让多个服务器同时处理多个服务器提高处理效率。

分布式数据库的简单架构图如下:

写一张照片

(9)应用服务和数据服务分离应用程序服务器和数据库服务器的目的是根据应用服务器的特征和数据库服务器的特征来优化基础优化,使每个服务器的特性可以更好,数据库服务器当然是一定的磁盘空间。应用程序服务器不需要过多的磁盘空间,以便分离很好,也可以防止使用与服务器有问题的其他服务。

写一张照片

(10)使用搜索引擎在数据库中搜索数据

使用搜索引擎的非数据库查询技术可以更好地支持网站应用程序的可扩展分布式功能。

常用搜索引擎,如solr将关键字映射到文档的映射关系,类似于我们使用“xinhua字典”来搜索关键字,首先要查看字典目录,然后定位特定位置。

搜索引擎可以通过维护某个关键字来快速定位您需要查找的数据,与传统数据库搜索相比,效率仍然很高。

它目前是一种相对令人富有的麋鹿堆栈技术。

Solr和MySQL查询性能的比较文章:

solr和mysql查询性能比较:http://www.cnblogs.com/luxiaoxun/p/4696477.html? UTM_SOURCE = TUICOOL&UTM_MEDIUM =推荐

(11)拆分业务

为什么您的业务拆分,在最终分析或不合理的业务数据表是在未使用的服务器上部署的,找到相应的数据,以满足网站的需求。在每个应用程序之间的指定URL连接之间使用了不同的服务。

例如,一个大型购物网站将分开家庭,商店,订单,买方,卖家等,一方面,业务模块分为不同的团队,并使用不同的业务。数据库表部署在unconflaction上,反映了拆分的想法,当业务模块使用数据库服务器无法影响其他业务模块的正常使用时。此外,当引起一个模块时,可以动态地扩展本模块中使用的数据库数量以满足业务的需求。

在高并发性下的解决方案

(1)应用程序和静态资源文件是分开的

所谓的静态资源是静态资源,例如HTML,CSS,JS,图像,视频,GIF等。应用程序和静态资源文件也是一个常见的解决方案。应用程序服务仅提供适当的数据服务,在指定的服务器(nginx服务器或CDN服务器)上的静态资源部署,通过角js或node js提供的路由技术访问应用服务器的特定服务以获得相应的前端外壳上的数据。这可以大大降低后端服务器的压力。

例如,百度主页使用的图片部署在单独的域服务器上。

写一张照片

(2)页面缓存

Page Cache缓存缓存生成应用程序生成的几个数据的页面,因此您无需每次重新生成页面,保存大量CPU资源,如果将缓存页面放入内存中更快。

您可以使用nginx提供的缓存功能,或者您可以使用特殊页面缓存服务器鱿鱼。

(3)集群和分布

(4)逆代代理

参考文章请搬到:

http://blog.csdn.net/xlgen157387/article/details/49781487

(5)CDN

CDN服务器实际上是一个群集页面缓存服务器,它的目的是尽快返回用户所需的数据,一方面加速用户访问速度,另一方面,后端服务器的负载压力也减少了。

CDN的全名是内容传递网络,它是内容分发网络。其基本思想是避免可能尽可能地影响数据传输速度和稳定性的瓶颈和链接,使内容传输更快,更稳定。

CDN使网络流量和连接,每个节点的加载状态以及用户的距离以及对用户距离的响应以及对用户距离的响应以及对用户距离和响应对用户距离和响应时间以及其他全面信息的响应将用户的请求呈现给最靠近用户的服务节点。其目的是使用户能够实现所需的内容,解决互联网网络拥塞的情况,并改善用户访问响应速度。

也就是说,CDN服务器部署在网络运营商的计算机室中,提供用户最近的层数据访问服务,用户可以在请求网站服务时从用户最近的网络访问商业机会。电信的用户为将分配联通的Unicom的Noicom节点分配电信的节点。

CDN分配请求特殊的方式,而不是要分配的正常负载平衡服务器,但在解析中,使用专用CDN域名解析服务器在解析中分配好。

CDN结构如下所示:

写一张照片

总结

如果您需要进行一个详细的介绍,如果您需要进行其中一个方式,您可以找到资源研究学习,只能扮演掷玉的作用。当然,大型网站的大规模数据和高并发解决方案不限于这些技术或技术,并且存在许多需要理解的成熟解决方案。


服务热线:4006068008 0531-85860101 15589999555邮箱:zlxk@zlxk.com地址:山东省济南市高新区鑫盛大厦2号楼24层

Copyright 2023,ALL Rights Reserved zlxk.com | | (c) Copyright 2024版权所有 鲁ICP备20032954号-1网站地图