最后
Java架构进阶面试及知识点文档笔记
这份文档共498页,其中包括Java集合,并发编程,JVM,Dubbo,Redis,Spring全家桶,MySQL,Kafka等面试解析及知识点整理
Java分布式高级面试问题解析文档
其中都是包括分布式的面试问题解析,内容有分布式消息队列,Redis缓存,分库分表,微服务架构,分布式高可用,读写分离等等!
互联网Java程序员面试必备问题解析及文档学习笔记
Java架构进阶视频解析合集
1 通过负载均衡进行无状态服务的失效转移
不保存状态的应用给高可用的架构设计带来了巨大便利,既然服务器不保存请求的 状态,那么所有的服务器完全对等,当任意一台或多台服务器宕机,请求提交给集群中 其他任意一台可用机器处理,这样对终端用户而言,请求总是能够成功的,整个系统依 然可用。对于应用服务器集群,实现这种服务器可用状态实时监测、自动转移失败任务 的机制是负载均衡。
负载均衡,顾名思义,主要使用在业务量和数据量较高的情况下,当单台服务器不 足以承担所有的负载压力时,通过负载均衡手段,将流量和数据分摊到一个集群组成的 多台服务器上,以提高整体的负载处理能力。目前,不管是开源免费的负载均衡软件还 是昂贵的负载均衡硬件,都提供失效转移功能。在网站应用中,当集群中的服务是无状 态对等时,负载均衡可以起到事实上高可用的作用,如图5.5所示。
当Web服务器集群中的服务器都可用时,负载均衡服务器会把用户发送的访问请求 分发到任意一台服务器上进行处理,而当服务器10.0.0.1宕机时,负载均衡服务器通过心 跳检测机制发现该服务器失去响应,就会把它从服务器列表中删除,而将请求发送到其 他服务器上,这些服务器是完全一样的,请求在任何一台服务器中处理都不会影响最终 的结果。
由于负载均衡在应用层实际上起到了系统高可用的作用,因此即使某个应用访问量 非常少,只用一台服务器提供服务就绰绰有余,但如果需要保证该服务高可用,也必须 至少部署两台服务器,使用负载均衡技术构建一个小型的集群。
2 应用服务器集群的Session管理
应用服务器的高可用架构设计主要基于服务无状态这一特性,但是事实上,业务总 是有状态的,在交易类的电子商务网站,需要有购物车记录用户的购买信息,用户每次 购买请求都是向购物车中增加商品;在社交类的网站中,需要记录用户的当前登录状态、 最新发布的消息及好友状态等,用户每次刷新页面都需要更新这些信息。
Web应用中将这些多次请求修改使用的上下文对象称作会话(Session ),单机情况下, Session可由部署在服务器上的Web容器(如JBoss )管理。在使用负载均衡的集群环境 中,由于负载均衡服务器可能会将请求分发到集群任何一台应用服务器上,所以保证每 次请求依然能够获得正确的Session比单机时要复杂很多。
集群环境下,Session管理主要有以下几种手段。
- Session 复制
Session复制是早期企业应用系统使用较多的一种服务器集群Session管理机制。应用 服务器开启Web容器的Session复制功能,在集群中的几台服务器之间同步Session对象, 使得每台服务器上都保存所有用户的Session信息,这样任何一台机器宕机都不会导致 Session数据的丢失,而服务器使用Session时,也只需要在本机获取即可。如图5.6所示。
这种方案虽然简单,从本机读取Session信息也很快速,但只能使用在集群规模比较小的情况下。当集群规模较大时,集群服务器间需要大量的通信进行Session复制,占用 服务器和网络的大量资源,系统不堪负担。而且由于所有用户的Session信息在每台服务 器上都有备份,在大量用户访问的情况下,甚至会出现服务器内存不够Session使用的情 况。
而大型网站的核心应用集群就是数千台服务器,同时在线用户可达千万,因此并不 适用这种方案。
应用服务器3
图5.6使用Session复制实现应用服务器共享Session
- session绑定
Session绑定可以利用负载均衡的源地址Hash算法实现,负载均衡服务器总是将来源 于同一 IP的请求分发到同一台服务器上(也可以根据Cookie信息将同一个用户的请求总 是分发到同一台服务器上,当然这时负载均衡服务器必须工作在HTTP协议层上,关于 负载均衡算法的更多信息请参考本书第6章内容。这样在整个会话期间,用户所有的请 求都在同一台服务器上处理,即Session绑定在某台特定服务器上,保证Session总能在 这台服务器上获取。这种方法又被称作会话黏滞,如图5.7所示。
但是Session绑定的方案显然不符合我们对系统高可用的需求,因为一旦某台服务器 宕机,那么该机器上的Session也就不复存在了,用户请求切换到其他机器后因为没有 Session而无法完成业务处理。因此虽然大部分负载均衡服务器都提供源地址负载均衡算 法,但很少有网站利用这个算法进行Session管理。
- 利用 Cookie 记录 Session
早期的企业应用系统使用C/S(客户端/服务器)架构,一种管理Session的方式是将 Session记录在客户端,每次请求服务器的时候,将Session放在请求中发送给服务器,服 务器处理完请求后再将修改过的Session响应给客户端。
网站没有客户端,但是可以利用浏览器支持的Cookie记录Session,如图5.8所示。
感受:
其实我投简历的时候,都不太敢投递阿里。因为在阿里一面前已经过了字节的三次面试,投阿里的简历一直没被捞,所以以为简历就挂了。
特别感谢一面的面试官捞了我,给了我机会,同时也认可我的努力和态度。对比我的面经和其他大佬的面经,自己真的是运气好。别人8成实力,我可能8成运气。所以对我而言,我要继续加倍努力,弥补自己技术上的不足,以及与科班大佬们基础上的差距。希望自己能继续保持学习的热情,继续努力走下去。
也祝愿各位同学,都能找到自己心动的offer。
分享我在这次面试前所做的准备(刷题复习资料以及一些大佬们的学习笔记和学习路线),都已经整理成了电子文档
习笔记+最新讲解视频+实战项目源码】](https://bbs.youkuaiyun.com/topics/618154847)收录**