现在很多涉及到大规模、高并发访问的Server,基本都是使用nginx作为反向代理服务器,进行网络请求的接收、分发以及缓存。特地问了下百度在线广告的师兄,它们的backend server也是使用的nginx。随着这一两年做的东西逐渐增多,也逐渐找到自己的兴趣,并不是Data Mining抑或Machine Learning,而在于与App相关的一些backend Server的开发,即涉及一些网络优化以及高并发的处理。
下个月需要做一个Server相关的项目,而也一直有意华商韬略的Server进行优化而还没行动。计划接下来的时间,先在台式机搭一个nginx的反向代理Server环境,将华商韬略的数据库进行部署,将数据处理的Server由Apache换成Tornado,并在Server做一些数据的Cache,提高CRUD的效率。之后将环境分别迁移到aws以及阿里云。一来,为下面的项目做好准备,二来,继续翻新华商韬略的iOS客户端。涉及大规模方面的问题,有必要发信问问老罗。
使用代理服务器接受Internet的连接请求,将请求转发给内部网络的服务器,并将从内部服务器得到的结果返回给Internet上请求连接的客户端。因此对于Client看起来,反向代理服务器就是其能够看到的Server。使用反向代理的好处很多。
反向代理与正向代理的区别,主要相对于Client来说,如果Nginx就是其目的服务器,而不是Nginx隐藏的数据服务器,则Nginx是反向代理;如果对于Client来说,Nginx并不是目的服务器,只是作为一个转发请求的桥梁,而其为正向代理。对于正向代理服务器,Client需要进行相应的设置,即知道代理服务器的IP以及端口;而对于反向代理服务器,该服务器即是其目标服务器,不需要进行相应的设置。
反向代理服务器可以搭成集群,用户访问不同的资源服务器B时,让不同代理服务器Z(x)去应答不同用户,发送给不同用户不同的资源。因为不同的Z(x)可以做不同的Cache,而并不需要每次都像B发请求,特别是一些静态数据,如果这些反向代理服务器可以和用户x来自同一网络,则x对B的访问,就能得到高质量的速度,这也是CDN的核心技术。
一个master进程,生成一个或者多个worker进程,将原来串行的逻辑并行化,并将逻辑拆分成很多独立模块并行执行,Master组件主要进行逻辑拆分,将每个独立部分下发到多个Worker,同时维护Worker队列,Worker主要进行逻辑计算,并将结果返回Master