互联网项目面临的是两个问题(特点)

时间:12-06来源:作者:点击数:
城东书院 www.cdsy.xyz

互联网项目主要面临的是两个问题(也是互联网项目的特点):

1高并发访问(访问量大):

一般传统网站并发量在1000以上,就可以赚钱了.如果服务器遇到大规模的访问,如果不做优化,不做升级,架构不升级,网站是承受不了这么大的并发量.这样用户的体验度不是很好。

2海量数据存储问题(大数据):

用户一多,数据就会多,比如说淘宝网站,几亿用户注册,数据存入到数据库当中,从一个数据库查询出相应的数据,就算表的字段加上索引,也要花费大量的时间来查询,从而导致用户体验度不是良好。

面对这两个问题我们必须对架构进行优化,如果不做优化很难满足用户高并发访问,大数据存储。

架构优化:

1.要求前端页面必须美观,大气,上档次,(好实现)

2.后台系统必须具有流畅的运行效果(不好实现),—>要是系统具有流程的运行效果,就必须经过项目的一系列优化,具体哪些优化呢?

2.1.数据层的优化

  • 数据库集群(来解决主备,读写分离),数据库分表,分库储存来解决大数据存储问题,每个库存储大约500万条数据,大于500万条就换库进行存储.开启索引,开启缓存,数据库设计优化,sql优化.
  • 缓存优化(由于数据库本身结构的限制,并不能满足用户的高并发访问的需求,为了减轻数据库的压力,必须加一个缓存,作用是把频繁读取的数据放入缓存当中,就减轻了数据库的压力,防止数据库崩溃,我们经常发些项目一上线,最先出现瓶颈的一定是数据库,数据库往往出现崩溃的现象,因为我们施加给数据库的压力太大了)
  • 搜索优化(使用专业的搜索工具ES,那么搜索的效率性能是非常高的,比数据库搜索要快的多,同时也减轻数据库的压力)

2.2:项目层优化

  • *必须使用集群
  • *必须使用分布式
  • *jvm优化,tomcat服务器优化

2.3:应用层优化

  • *可以加上页面缓存
  • *可以加上页面静态化
  • *nginx进行负载均衡
  • *可以使用F5进行硬件负载均衡
在这里插入图片描述

互联网项目架构思想:

在这里插入图片描述

服务器就是项目的意思,项目上线就需要部署服务器里面,服务器在互联网项目当中不存在单机版的,一定是集群,来分担服务器压力(因为并发量太高),如上图,我们部署4台服务器.

我们的mysql数据库也要采用集群的方式,单机版是不可能满足我们搜索需求的.

上面的服务器中的项目要访问下面的数据库,由于数据库本身结构的限制导致查询效率不是很高(数据库都是从前到后依次扫描,如果加上索引,扫描速度会快点),但我我们想一想,是服务器项目的压力大,还是数据库的压力大?当然是数据库的压力大,比如我访问一个页面,这个页面要查询非常多的数据,比如我们上京东

在这里插入图片描述

这个页面上有分类数据1,导航数据2,广告数据3…所有的分类模块都要发送一条sql语句去数据库查询,所以每次刷新网页,加载整个页面会发送上百次sql语句查询数据库.所以所数据库面临的压力是远远大于服务器项目的.

同时由于数据库查询效率的问题,横容易造成数据库io阻塞,什么叫io阻塞,就是我们从数据库查询数据,查询的数据统统从io流出来,但是并发量太高的话,数据都会堵塞在流当中,最后就会造成数据库的崩溃。

如果采用非常多的集群的话,性能不升反降,同时成本太高.所以所数据库面临频繁的读取数据的问题。

所以我们在服务器项目集群和数据库集群之间加上redis缓存服务器,同时缓存服务器也采用集群的方式,这样项目就会先加载缓存当中的数据,如果缓存没有数据,再查mysql数据库,同时把数据放入缓存当中,那么加入redis数据库缓存有什么好处呢?1减轻数据库压力.2提高查询效率,尤其是redis的查询效率,所以当redis缓存服务器集群一加,完全满足高并发访问。

同时我们还需要搜索优化,我们使用ES索引库进行搜索,我们在项目服务器集群和mysql数据库集群之间创建一个ES项目来访问索引库。

由于服务器是集群的方式搭建的,所以我们并不知道让哪一个项目服务器来完成请求,那么怎么解决我们的请求发给哪一个服务器?

在项目服务器的上面,必须要有一个负载均衡nginx服务器(官方测试 nginx 能够支支撑 5 万并发链接,并且 cpu、内存等资源消耗却非常低,运行非常稳定。)

同时也采用集群的方式,那么用户会把请求发给nginx服务器,nginx服务器就会自动决定将请求转发给一台项目服务器,但是由于nginx采用了集群的方式,每一台nginx服务器都会完成负载均衡,那么请求来了,我们到底将请求交给那一台nginx服务器呢?

这就存在一个问题:

最顶层也采用集群,意味着我们要对这个集群再次做负载,可以这么说,凡是集群,都要做负载均衡。

如果我们一直采用集群,就会一直向上循环,这个架构就一直往上顶,在最高层,必须只有一台服务器,不然就会处于无限的循环当中,我们nginx服务器采用主备的方式,备份机(监控主机有没有挂,一旦挂了,就立马充当主机,相当于有两条命,达到一个高可用的作用),相当于目前就一台nginx服务器,所以就不会出现无限的循环集群。

=====================================================

在这里插入图片描述

对于session如何共享问题?

用户第一次访问服务器1,在此服务器上产生一个名字jack,当这个服务器宕机了,用户请求转移服务器2,但是这个服务器并没有jack名字信息,由于是两个不同的pc,不同的服务器,那么怎么实现session数据共享问题呢?

可以使用tomcat集群session复制功能,把用户的信息直接广播给每一个集群服务器,但是这样不行,如果服务器1当中有1亿个session信息,sessipn数据量非常庞大,那么在传输过程中可能会卡死,这种方式在传统项目当中可以使用,但是在互联网项目当中,这种方式不可取.

另一种方式就是使用第三方服务器来存储我们的session数据,使用redis服务器来存储session数据,当请求一访问服务器1,服务器1就把数据放在redis服务器当中,如果服务器2想要数据的话,就去redis服务器当中查询就行了,这就实现了session共享.

在这里插入图片描述

集群:就是干同样的事情,

分布式:就是干不同的事情

在这里插入图片描述
在这里插入图片描述
城东书院 www.cdsy.xyz
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门