这个是我面试的一道题:解决方案在下面 如果能够帮到你,请喜欢 关注一下。
严重鄙视伸手党。
一、解决方案设计题:
考虑灾备(比如由于火灾、断电等原因导致服务器不可用)与负载(指突然间有大量客户端访问数据导致服务器任务量加大),公司在a、b两机房分别部署了服务器,请你设计客户端访问服务端的方案,以便达到最优交互体验。
一.灾备解决方案:
根据请求服务器a的响应来判断服务器的状态,200是正常,非200是错误,错误切换另一个服务器b,并且设置默认下次访问服务器b;下面的解决方案一并解决此方案;
二.负载解决方案:
在服务器方面来看待是,正常来说完成一次访问,通常在0.1-5s间,正常的情况下取1s一次访问来说,APP每次访该资源到服务器响应后得到数据有一个时间过程;
在服务器测试阶段,同时访问服务器的用户数量不同,响应时间不同;
举例:1000个用户同时访问,从访问到拿到数据时间为梯度t1s
2000个用户同时访问,从访问到拿到数据时间为梯度t2s
3000个用户同时访问,从访问到拿到数据时间为梯度t3s
…………
当然可以分的更细一点。
当一个服务器的资源对一个APP接受访问的时候,就相当于已经为一个APP开启一个线程了,对于服务器的情况不同同时开启的线程数不同,当大量客户端访问服务器的时候,服务器开启的线程就会增多,线程一增多每个线程分得的时间片就少,相对于来说用户访问数据的时间就长了。在服务器方面来看待是,APP每次访该资源到服务器响应后得到数据有一个时间过程,此时app可以记录此次访问用得的时间timeA,在APP测试的阶段设定访问时间段为标准值假如设定t1s,当本次APP访问服务器a的时间大于t1s的时候下次再次访问服务器就是访问服务器b,同时记录此次时间段timeNow,如果timeNow> t1,此时
说明两台服务器各自访问人数均在1000人以上,此时
标准值为第二梯度值t2s;当用户在高梯度值访问一段时间后,此时标准值自动设置成比当前梯度值低一级,这样就能解决当服务器a,b;都在大负荷的时候,此时假如其中一台服务器a用户量降低了;另一太服务器的负荷能力;
依次类推每次获得的timeNow跟梯度值对比,再对服务器访问的时间对比;
把服务器的访问时间梯度值分的越细,用户体验就越好,因为这些用户对服务器的选择更合理;
网友评论