分布式系统培训--课后作业

    最近接受了一场关于分布式和集群方面的培训,老师留下了作业需要完成,我也趁此机会将老师的培训内容进行一个复盘,以加强自己对分布式系统的理解,其中有说的不对的地方还请指教

    1. web应用的发展历程

    第一阶段:web服务器直连数据库

   

    早期阶段将服务器和数据库都部署在一台机器上,优缺点都很鲜明,优点是开发快速,适用于小微型项目,缺点是当访问量大时数据库压力倍增,并且这种模式下的耦合性很高,不利于项目的后期维护

    第二阶段:web服务器与数据库分开部署

    随着互联网的快速发展,单台机器的部署致使服务器已经无法满足大量的访问需求,所以出现了第二阶段的部署方式,将服务器与数据库分开部署,可以有效的提高负载能力,但是这种方式任然存在问题,当访问量大到一定程度瓶颈就会出现在对数据库的访问上面

    第三阶段:分布式&集群

    不同的web服务器对应着不同的ip地址,但是一个网站一般都只会提供一个入口(多了也记不住),所以当有请求进来时会使用反向代理服务器,这有点像java中的封装思想,我们只需要请求反向代理服务器的接口(ip),他会自动帮我们连接一个可用的ip


    在理解分布式之前有必要先搞清楚分布式和集群之间的区别,他们的共同点都是将服务部署在多个服务器,不同点在于分布式是将系统按功能模块拆分,而集群是将系统复制,举个公司招聘的例子:公司规模小的时候就只有一个招聘专员,他要负责:网上找简历-->面试-->背景调查-->发offer-->办理入职-->入职培训等一整套流程


    当公司大到一定规模,这一个人肯定是忙不过来的,所以这时候就有分布式和集群两种解决方案出现了,先说分布式。

    分布式就是将上述的功能都拆分开,让一个人去完成一个功能


    集群则是让多个人去完成同样的流程


    分布式中的每一个功能模块都是可以做成集群的,分布式和集群有他们各自的好处,分布式主要是用于缩短请求响应时间,集群则是解决大量访问的问题,同时也提高了系统稳定性,不至于一台服务器宕机就无法工作

2. 在集群中怎么解决session的问题

    我们知道session是用来保存用户数据的,比如用户的登录信息等,通常是保存在服务器端,那么在集群系统中我们存在多个服务器,并且每次请求都有可能访问到不同的服务器,那怎么确保每次都能拿到同一个session呢?

第一种:粘性session

    就是将session固定在第一次访问的服务器上,以后用户的每次请求都会由负载均衡器将其转发到这台服务器,这样就可以保证每次访问都可以拿到同一个session

    优点:简单,不需要对session进行任何处理

    缺点:容错率低,当保存session的那台服务器出现故障时,负载均衡器会自动将请求转发到其他服务器,这样就会丢失之前的session

第二种:session复制

    很简单,就是将一个服务器上的session复制到所有服务器上,这样每次请求不管被转发到哪台服务器都能获得一个同样的session

    优点:与第一种相比容错率提高很多,不担心单台服务器的稳定性问题

    缺点:频繁的对session进行大量操作会拖慢服务器性能

第三种:将session保存在缓存中

    就是将session保存到分布式缓存中(memcached、Redis等),利用本机的cookie保存sessionId,每次请求时携带sessionId到缓存中去获取session

    优点:响应速度快,容错率高

    缺点:受制于memcached和Redis的稳定性

第四种:将session持久化到数据库

    及将session保存到数据库中

    优点:稳定性好,及时服务器出现问题session也不会丢失

    缺点:当访问量大时对数据会造成很大压力

第五种:用cookie来存放session

    就是将session存放在session中保存在本机上

    优点:服务器端不用保存session,所以压力会小很多

    缺点:每次请求都需要携带session数据,对速度会造成影响

小结:

    以上就是关于集群和分布式的一个简单总结,目前用的比较广泛的时第三种,就是将session保存在缓存中









猜你喜欢

转载自blog.csdn.net/ht_kasi/article/details/80296541