00:00
好,同学们,我们上节课给大家讲了,通过单机硬件提升来提升我们的呃这个性能,那么接下来这节课呢,给大家来讲讲集群化的这种呃部署方式。这种部署方式呢,它能带来的好处其实比我们单机提升硬件呢来的更廉价,这个廉价指的是投入啊,投入包含我们花钱买的服务器,投入的这个研发的成本,包括后期的运维成本。因为在单机提升的时候,呃,当你的硬件达到这个一定的这个瓶颈的时候,再增加额外的硬件,那个成本是极其高的。啊,你像如果我们的服务器啊,比如说我们现在已经增加到了256G的内存,想要提升到512G的内存,那么我们需要付出的钱啊,可能就不是额外的再单独去买那几根内存条就能解决的了,那可能你买完这个内存条呢,你的主板已经不支持了,还得再去买更好的主板才能支持,呃,更大的内存啊我们的这个呃,通过一些软件的手段呢,也能够提升我们整体的性能,而且这种是更加常见的。
01:06
一般的公司吧,啊,花点钱买点硬件让他提升提升也就差不离了,那接下来就该我们程序员出场了。这种水平扩展集群化的服务,其实我们在基础课程里边呢,已经给大家讲过了,那么这节课呢,我们会给大家讲一些进阶或者是呃更加深入的一些使用的方式,集群化的管理方式呢,呃,我们用用这张图来给大家来演示一下啊用户请求对吧?呃,通过互联网打到我们的呃机房,然后透过我们的NG个服务器,NG呢是靠keep live的来保证它自身的高可用的。啊NG呢,作为反向代理服务服务器也作为负载均衡器,它会把用户的请求转发到后端的服务器上,我们在这儿呢,又称为叫上游服务器。上游服务器是提供数据的啊,然后下游呢,就是NG,什么叫上下游,在这给大家来捋一下,后边呢,我们统一用这种这个话术。
02:02
上游就是真正提这个,这个提供计算提供服务的,这是NG,相对于我们的后端的计算服务器来说,这里边儿可能跑的是PHP,呃,Java的代码,它就属于下游服务器了,那么最前端最终端的,呃,这个。用户呢,是我们的这个,呃,终端用户啊,终端用户,然后这个呃,中游的服务器,这是上游服务器啊,上下游我们先捋清楚了哈,那么用户请求转发到我们的上游服务器的时候呢,这里边儿也有一个,呃,我们需要注意的点,就是每一台上游服务器里边所运行的代码,它必须得是一样的。这样才能达到集群的效果,那如果像我们之前这张图里给大家画的,每一台服务器呢,完成的功能都不一样,那这种就叫分布式的这种计算啊,现在呢,我们给大家讲的是。集群化,集群化就是一模一样,用户请求不管是到了哪台后端服务器上呢,他能够得到的结果应该都是一样的啊,那么这种配置的方式,我们之前给大家讲过,通过这个upstream加这个proceed pass这两个关键字,Uptream和pro。
03:17
Pass就可以把用户请求中转到我们的后台,后台服务器或者叫我们的上游服务器上啊,那么我们这节课呢,给大家来讲的是另外的呃,一些其他的方式就是第一个呢,就是IP哈希。ID哈希呢,可以让我们的用户呢,呃,根据呃自身的IP地址啊,来定向的去转发到我们的后端的服务器,这个是为什么呢?有什么意义呢?啊,这其实是绘画保持的这么一个功能。我把这个字放大一点。因为上次这个课程呢,我看有同学说这个好像看不太清楚这个字是吧。再放大一点。
04:04
其实是来用来维持会话的啊,维持会话指的就是用户啊,在我们的系统当中,比如说点击了登录啊,登录之后呢。你要保证用户的这个登录状态啊,一直都是维持在登录的时候,你不能用户请求。由我们的NG转发到了这台服务器里,他在这里边呢,登录了。啊,已经这个登录成功。那么他在下次点击我的页面的连接的时候,NG呢又给他转发到了这台服务器,那这台服务器里边呢,并没有保存他的会话信息,以Java为例啊,那想要维持一个用户的登录呢,这里边要用到呃cookie和这个呃session啊session呢是保存的服务器端的,也就是在这台服务器登录成功的这台这台服务器上会保持啊,它会存储我们这个session信息。
05:08
那它转发到这台服务器里自然就没有了,那通常的解决方案和方法有这么几个,第一个呢,就是IP哈希啊,第二个呢就是啊,使用我们的后端服务器,就是上游服务器,它里边自身提供的一些功能来维持这个会话,最典型的就是reddi加spring session这两种方式,Spring session呢是一个技术框架,它会把用户的这些session存储到里啊,也就是借助第三方的这么一个存储啊,不在我们每一台独立的服务器里边去存储这个session了啊在。额外的一个第三方里,就是red里,我们把这个session给他存进来。那么每一个后端服务器去找这个用户session的时候呢,都去这台独立的服务器里去找啊,这是这个,呃,像Java啊,以Java为例,Java的解决方案,那我们现在讲的是NG格,那给大家来聊的就是怎么去通过NG去保持用户的会话,而不再需要用这个,呃。
06:08
Java,因为Java呢,呃,自身啊,它的这个性能上和N比起来啊,实在是有点儿,呃,稍微有那么一点低,对吧?另外就是你要额外的去增加一些服务器,你要知道你的服务器增加的越多,那么你的运维的成本和开发的成本也就越高,再有就是呢,你用red做这种session会话管理,它有一个天生的弱点,这个弱点呢,就是当你的后端的服务器变得更多的时候,当然你现在有两台,这还好。如果有200台或者2000台,那么你这台会不堪重负,那么你的整体的系统呢,设计的复杂度也会非常非常的高。那么如果我们通过NG就能把这个问题给解决了,那么我们在后端服务上呢,就可以省去省去了这些这个额外这些开销了,那么这就是我们接下来要给大家讲的,通过水平扩容之后,如何去保持用户的会话。
我来说两句