您的位置:首页 > 运维架构 > 网站架构

Sprig MVC 学习笔记 (2)—— 网站架构的演变及海量数据、高并发解决方案

2019-06-19 16:10 204 查看
版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

Sprig MVC 学习笔记 (2)

—— 网站架构的演变及海量数据、高并发解决方案

1.1 架构演变

基础架构中,服务端就是一台主机,里面存储了应用程序和数据库,当数据流大的时候就难应付了,这时,就需将应用程序和数据库分别放到不同主机中。

1.2 海量数据解决方案

1.2.1 缓存和页面静态化

缓存就是把从数据库中获取的结果暂时保存起来,在下次使用的时候无需重新到数据库中获取,这样可以大大降低数据库压力,提高速度。

缓存的使用方式:

  • 通过程序直接保存到内存中:主要使用Map,尤其是ConcurrentHashMap
  • 使用缓存框架:Ehcache、Memcache、Redis等

缓存使用最重要的问题是什么时候创建缓存和缓存的失效机制,缓存可以在第一次获取时创建,也可以是程序启动和缓存失效之后立即创建,缓存的失效可以定期失效,也可以在数据发生变化的时候失效。

【延伸】缓存中空数据的管理方法:如果缓存是在第一次获取时创建的,那么最好在使用缓存时将没有数据的缓存用特定的类型值来保存。比如创建一个专门的类来保存没有数据的缓存,这样程序从缓存中查询后就知道是没创建缓存还是缓存没有数据。

**页面静态化:**是将程序最后生成的页面保存起来,使用页面静态化后就不需每次调用都生成新的页面了。

1.2.2 数据库优化

  • 表结构优化
  • SQL语句优化
  • 分区
  • 分表
  • 索引优化使用存储过程代替直接操作

1.2.3 分离活跃数据

将活跃数据单独保存,从而提高效率

1.2.4 批量读取和延迟修改

减少操作次数,从而提高效率

1.2.5 读写分离

1.2.6 分布式数据库

1.3 高并发解决方案

1.3.1 应用和静态资源分离

将静态资源单独存放在一个服务器中,通过不同的域名可以让浏览器直接访问资源服务器而不用访问应用服务器。

1.3.2 页面缓存

页面缓存是将应用生成的页面保存起来,这样就不需要每次都重新生成页面了。

【延伸】有部分经常变化的数据页面怎么使用页面缓存?
对于文章下面的“顶”“踩”、电商系统中商品详情页的销量等,可以先生成静态页面,然后使用Ajax来读取并修改相应的数据。

1.3.3 集群与分布式

集群和分布式都是使用多台服务器进行处理。集群是每台服务器具有相同的的功能,处理请求时调用哪一台服务器都可以,主要起分流的作用。分布式是将不同的业务放到不同的服务器中,处理一个请求可能能够用到多台服务器,这样可以提高请求的处理速度。

集群方式:

  • 静态资源集群
  • 应用程序集群

应用程序会用到一些缓存数据,如果集群就需要同步这些数据,最重要的是Session同步

Session需要同步的本质:要使用不同服务器给同一个用户提供服务。

Session同步处理方式:

  1. 在Session发生变化后自动同步到其他服务器上
  2. 用一个程序统一管理Session

Tomcat默认使用第一种方式,第二种方式可使用专门的服务器安装Memcached
等高效缓存程序来统一管理Session,然后在应用程序中通过重写Request并覆盖getSession方法来获取指定服务器中的Session。

1.3.4 反向代理

反向代理是指客户端直接访问的服务器并不真正提供服务,他从其他服务器中获取资源,并将结果返回给用户。
【延伸】反向代理服务器和代理服务器的区别?
代理服务器是代我们获取资源并将结果返回给我们,所要获取的资源是我们主动告诉代理服务器的;
反向代理服务器是我们访问一台服务器时,服务器自己调用了别的服务器的资源并将结果返回给我们,我们自己并不知道;
代理服务器使我们主动使用的,它不需要有自己的域名;
反向代理服务器时服务器自己使用的,它有自己的域名。

反向代理服务器作用:

  1. 作为前端服务器跟实际处理请求的服务器(如Tomcat)集成
  2. 用做负载均衡
  3. 转发请求

1.3.5 CDN

CDN是一种特殊的集群页面缓存服务器。

CDN的每个节点其实就是一个页面缓存服务器。

CDN每个节点也可能集群了多台服务器。

CDN的服务器分布全国各地,接受请求后将请求分配到合适的节点。

CDN分配请求的方式:用专门的CDN域名解析服务器在解析域名的时候就分配好的,一般在ISP那里使用CNAME将域名解析到一个特定的域名,再将解析的域名用专门的CDN服务器解析到相应的CDN节点。
注:第二步访问CDN的DNS服务器是因为CNAME记录的目标域名使用NS记录指向了CDN的DNS服务器。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: