server可以配置1个或者多个,代表用户请求进来被反向代理到这个某个tomcat节点,
upstream www.abc.com {server 192.168.1.171:8080;server 192.168.1.172:8080;server 192.168.1.173:8080;}用户请求通过访问www.123.com,反向代理到upstream所对应的3个tomcat节点,这个就是3台tomcat组成的集群,如果说1个tomcat能够支持的并发为150,那么3台就差不多是450上下 。
server {listen80;server_namewww.123.com;location / {# 把请求代理到upstream对应的tomcat集群中proxy_passhttp://www.abc.com;}}负载均衡 - 轮询配置集群的时候其实默认就有负载均衡,默认的是轮询 。负载均衡算法有如下几种:
- 轮训,如下所示,这是默认的三节点集群使用了默认的轮询负载均衡算法 。轮询就是用户请求进来会一个一个的分别分配到这三个节点去处理 。
- 就好比胖头陀和瘦头陀去食堂打饭,有30个馒头,不论你胖瘦高矮,食堂阿姨一人分15个馒头 。
- 再举个栗子,就好比皇宫佳丽三千,你应该要干嘛?雨露均沾吧,7个不同的妃子,每天一个轮训着平均分配资源,对吧 。
upstream www.abc.com {server 192.168.1.171:8080;server 192.168.1.172:8080;server 192.168.1.173:8080;}负载均衡 - 权重weight按照一定的比率去分配流量的访问,权重越大,被访问到的几率也就越大 。一般来说服务器的硬件配置整体性能层次不齐,有的好有的不好,所以,相对来说性能不好的权重分配少一些,性能好的服务器权重分配高一些,这样不同节点承载的压力也就不同了 。举两个例子:
- 就好比胖头陀和瘦头陀去食堂打饭,有30个馒头,阿姨看胖头陀很胖,分配20个馒头,瘦头陀很瘦,吃的少,分配10个馒头 。
- 再举个栗子,就好比皇宫佳丽三千,你应该要干嘛?每个人有不同的喜好,甄嬛长得漂亮一些,自然权重也会高一些,咖妃长得太黑了,自然权重少一些 。
upstream www.abc.com {server 192.168.1.171:8080 weight=1;server 192.168.1.172:8080 weight=3;server 192.168.1.173:8080 weight=2;}负载均衡 - ip_hash(不演示了)根据用户请求过来的ip做哈希,ip一定是固定的,所以哈希的值也是固定的,这样用户请求到的tomcat节点也是固定的,这种方式可以保证用户会话不会丢失,永远存在,但是如果用户切换网络,比如从wifi到4g,则会导致会话丢失 。举个例子,我人在上海,拨打110,由于我所在的地域是上海,那么对方接通的肯定是上海公安局,如果我现在去了南京,这个时候拨打110,那么运营商根据我所在地分配的接听电话就是江苏公安局了 。对吧,这是一个道理,就是根据你的地址来源进行服务节点的分配处理 。
配置代码示例:
upstream www.abc.com {ip_hash;server 192.168.1.171:8080 weight=1 max_conns=180;server 192.168.1.172:8080 weight=3;server 192.168.1.173:8080 weight=2;}负载均衡 - url_hash(不演示了)【基于云落地SLB+Tengine实现高可用集群负载均衡 - 中】和iphash同理,用户请求,在浏览器中访问的url,根据这个做hash,分配到不同的节点 。小节常用的负载均衡算法为 加权轮询,iphash是用的最少甚至不用,因为会造成请求并发量倾斜,容易导致固定的某个节点宕机 。
提一下动静分离,架构师课程中,把静态代码发布到nginx,实现动静分离 。当然也可以静态代码(JS/css/HTML)放到CDN会更好 。
加餐:什么是动静分离提到动静分离就会想到前后端分离,各种分,分分合合的 。
- 前后端分离就是前后端开发人员所做的本质工作拆开,以前写jsp的时候,前端后端都是由同一个程序员去做的,随着互联网的发展,工作职能开始拆分,那么前端工作量比如js/css/html这些都会由前端去做,称之为frontEnd,后端人员负责JAVA代码开发,接口提供,称之为backEnd 。这就是前后端分离 。
- 既然前后端分离了,那么代码肯定是解耦的,是两块不一样的代码,前端归前端,后端归后端 。那么这个时候我们就可以借助nginx去实现动静分离部署,其实也就是前端通过nginx静态资源映射,后端通过nginx实现tomcat集群部署,如此一来,用户请求进来到达nginx,那么前端请求访问静态页面,后端接口调用会通过nginx来代理到各自的tomcat节点 。那么在架构师体系功课程中,我们就是采用的前后端分离开发外加动静分离进行部署的 。具体的结构图如下: 附:如果nginx有2台,那么一台负责虚拟静态资源,另外一台负责反向代理也可以 。本质上就是使用了2个location来做了2个虚拟主机,一个做静态资源,一个做tomcat反向代理,动静分离可以把动静请求分离,减少tomcat请求压力 。ok吧 。
推荐阅读
- 史湘云的性格特点分析
- 茶叶云片佐茶食品介绍,茶叶商家加入商战
- 茶文化发展简史,云南专题研讨陶茶结合文化产业发展模式要致力于打造特色陶茶文化
- 茶树品种的分类和鉴定,云南古茶山
- 阿里云峰会 | 来听听达摩院技术专家是怎么讲智能外呼机器人技术
- 基于CentOS7编译安装mono环境运行C#程序
- 郴州碧云茶功效与作用,五盖山米茶鉴赏
- 大年初三自驾去宜良游,曾几何时多霸气的广告词语_不到九乡枉来云南
- 云南这10条线路,弥勒入列!
- 0785-基于CDP7.1.1的Spark3.0技术预览版本发布
