2019版:第一章:(1)技术发展

一、技术的分类

  1、解决功能性的问题

Java、Servlet、JSP、Tomcat、RDBMS、JDBC、Linux、Svn 等

  

  2、解决扩展性的问题

Spring、SpringMVC、SpringBoot、Hibernate、MyBatis 等

  

  3、解决性能的问题

NOSQL、Java 多线程、Nginx、MQ、ElasticSearch、Hadoop 等

  

二、发展历程

  1、Web1.0 时代

    Web1.0 时代,数据访问量很有限,用一夫当关的高性能的单节点服务器可以解决大部分问题。

    

  2、Web2.0 时代

    随着Web2.0的时代的到来,用户访问量大幅度提升,同时产生了大量的用户数据。加上后来的智能移动设备的普及,所有的互联网平台都面临了巨大的性能挑战。  

    

三、解决服务器 CPU 内存压力

    

  思考:Session 共享问题如何解决?
  方案一:存在 Cookie 中?
            此种方案需要将 Session 数据以 Cookie 的形式存在客户端,不安全,网络负担效率低
    
 
  方案二:存在文件服务器或者是数据库里,此种方案会导致大量的 IO 操作,效率低。
    

   方案三:Session 复制

  此种方案会导致每个服务器之间必须将 Session 广播到集群内的每个节点,Session 数据会冗余,节点越多浪费越大,存在广播风暴问题。
    

  方案四:存在 Redis 中

    目前来看,此种方案是最好的。将 Session 数据存在内存中,每台服务器都从内存中读取数据,速度快,数据结构还相对简单。
    

四、解决 IO 压力

  

  将活跃的数据缓存到 Redis 中,客户端的请求先打到缓存中获取对应的数据,如果能获取到,直接返回,不需要从 MySQL 中读取。
  如果缓存中没有,再从MySQL 数据库中读取数据,将读取的数据返回并存一份到 Redis 中,方便下次读取。
 
  扩展:对于持久化的数据库来说,单个库单个表存在性能瓶颈,因此会通过水平切分、垂直切分、读取分离等技术提升性能,此种解决方案会破坏一定的业务逻辑,但是可以换取更高的性能。
原文地址:https://www.cnblogs.com/niujifei/p/15787792.html