记一次我的技术分享-nginx的使用及案例分析

        先给大家分享一套非常有用的nginx学习视频,共100集,每集几分钟讲清一个知识点,非常nice。大家扫码关注一下公众号 智程科技 回复 “nginx100” 即可免费领取哦

        好了,言归正传。我现在的公司有一个非常优良的传统,那就是每个员工都会定期地分享技术干货,互相拓宽大家的知识维度。一般是以讲解加问答的形式,内容可以是一种新技术、一次性能调优的过程、甚至是一段优美的代码,内容不限制,时间一小时。其实,我第一次的技术分享是在19年5月份,但由于本人比较懒,一直没记录到博客上,现在忙里偷闲补上先。

公司和真名匿了哈 

nginx主要有三个应用场景:静态资源服务,API服务,反向代理

1.当应用构成集群时,nginx可以提供反向代理功能,将请求传递给应用服务;而且,应用集群需要动态扩容和容灾,nginx可以提供负载均衡的功能;

2.nginx一般处于企业内网的边缘节点,可以将一些不太变动的动态信息缓存在nginx部分,直接向用户提供访问,以加快访问;

3.nginx可以直接访问数据库或redis,利用与nginx集成js/lua这样的语言及其工具库,可以提供完整的API服务.

nginx在做反向代理时,提供性能稳定,并且能够提供配置灵活的转发功能;

根据不同的正则匹配,采取不同的转发策略,比如图片文件结尾的走文件服务器,动态页面走web服务器;并且nginx对返回结果进行错误页跳转,异常判断登;

如果被分发的服务器存在异常,可以将请求重新转发给另一台服务器,然后自动去除异常服务器

AKF扩展立方体可是个好东西,分布式和微服务的扩展和划分都要按这个模型设计

这是nginx负载均衡的示意图:一个客户端通过nginx,nginx根据一定的算法选择了一台应用服务器1进行访问那么,当应用集群中某一台服务器宕机,或者要进行扩容,nginx依然能为应用集群提供高可用性.

nginx负责与上游服务交互的模块,统称为upstream模块,在其中,除了指定上游服务器外,还提供基本的负载均衡算法叫round-robin算法,即加权轮询方式访问server指令的上游服务

优先选择 nginx到一群上游服务器中 连接数最少的那台上游服务。如果nginx与好几台server的并发连接数都是相同的,则执行round-robin算法;很多算法最后都会退化成这个

round-robin无法保证某一类请求 只能由某一台服务器去处理,对于这种情况,我们可以选择基于hash算法来保证某一类请求 只能由某一台服务器去处理

round-robin无法保证某一类请求 只能由某一台服务器去处理,对于这种情况,我们可以选择基于hash算法来保证某一类请求 只能由某一台服务器去处理

普通hash存在这样的问题,当上游服务器发生变化时,大量的请求的路由策略会失效。一致性哈希算法可以缓解这种问题,仍然是由upstream hash模块实现的一致性hash算法,比如现在有几个key,5,6,7,8,9;上游正好有5server,0,1,2,3,4。那么这几个key分别落到对应的server,我们可以采用最简单的取模的hash算法(现在正好是5),但是,当一台server宕机,或者增加一个server,都会导致以前的key的目标server发生了变化。少了1,4,那么hash算法就变成了模4,那么所有key之前对应的目标server全都失效了。这种情况会引发在我们上游服务有缓存的情况下,会导致缓存大量失效特别是面向大流量的场景下,每一个server缓存被命中,使得我们能够服务于这么多的用户。由于我们更换了hash算法,server的数量,会导致一瞬间,所有的server的缓存几乎都失效了会引发恶性的连锁反应

 上面两个图是自己画的nginx双节点的部署架构图。

 

 

 

 

 

 

 

 

 

 

Guess you like

Origin blog.csdn.net/weixin_38316944/article/details/114377842