Nginx导航

简介

最近都在弄微服务的东西,现在来记录下收获。我从一知半解到现在能从0搭建使用最大的感触有两点

1.微服务各大组件的版本很多,网上很多博客内容不一定适合你的版本,很多时候苦苦琢磨都是无用功

2.网上博客参差不齐,有些甚至错误的。更离谱的是,好的文章阅读量除非高出天际,不然就都很低,比那些复制粘贴,随便应付的都低(这个搜索推荐算法不知道基于什么的)

通过这段时间学习,我觉得最重要是从好的博客入手,先不要着急怎么组件怎么使用,而是先了解组件的作用,大概的原理,然后才是使用,这样搭建和尝试的过程中才能更好的定位问题,最后再次回到原理和一些实际问题的处理(不知道实际问题怎样的,直接搜那个组件的面试题往往效果最好)

接下来的内容,都以导航的形式展现给大家(毕竟优秀的轮子很多,直接看大佬写的不香嘛),再顺带提些自己的理解

传送门

更多微服务的介绍可点击下方链接

微服务介绍Nginx导航Nacos导航Gateway导航Ribbon导航Feign导航Sentinel导航

博主微服务git练手项目:https://github.com/NiceJason/SpringCloudDemo

Nginx介绍

Ng基础原理介绍:https://blog.csdn.net/wang379275614/article/details/47777985

从以下几个方面去了解Ng:

1.讲了正向代理和反向代理的区别(其实就是请求方和接收方两个角度看事情)

 

2.非阻塞高并发链接,其实底层使用了epoll事件模型

 这其实是linux内核+硬件的支持:https://blog.csdn.net/armlinuxww/article/details/92803381 通俗易懂的讲解了epoll事件驱动是怎么一回事

   事件驱动简单来说就是两个阶段的事件模型

   第一阶段:由硬件接收到信息给内核发送中断信号以此执行中断程序

   第二个阶段:由内核发送唤醒信号将阻塞的进程唤醒,例如socket执行了accept()方法被阻塞了

   由于是事件模型,那么肯定是异步的,因此NG能一口气接收很多请求,间接保护了背后的系统,这个事件模型其实和我们写代码时设计的事件模型一模一样,只不过事件源的产生和发送都是由内核发出,我们监听就好(同样内核也作为监听者去监听硬件)

 

3.Ng由多个模块组成(我们具体配置的地方),每个模块都负责不同的功能(我把这些模块理解为Web程序的过滤器,只要你写了过滤器,那每个请求过来时都会执行下过滤器)

   例如最常用的Http模块,里面的各种参数常用的作用如下(具体实现百度)

   负载均衡,反向代理,限流(限制并发量),限制下载速度,设置缓存(静态缓存设置),设置http头

4.Ng使用Master/Worker模型来保证可靠性(https://guisu.blog.csdn.net/article/details/8930668),这个模型引发了下面几点思考

   结合Linux进程与线程的原理(https://my.oschina.net/cnyinlinux/blog/422207)可以了解到父进程和子进程的关系

   Ng采用的是父进程先绑定端口然后再fork子进程,这种模型会发生惊群现象(https://www.zhihu.com/question/360939266),多个进程监听同一个端口,有消息进来后全部惊醒,最终却只有一个进程能够处理

   NG是这样处理的(https://blog.csdn.net/wan_hust/article/details/38958545),将请求到来延时处理(相当于自身加个队列,变成了异步处理),然后设置一个互斥锁让多个worker去竞争,拿到锁的进程自身监听所有端口,没拿到锁的删除所有监听的端口(一开始由于继承父进程而监听所有端口),这样就变成了实际只有1个进程监听所有端口,等这个进程处理的事情满了就把锁释放出来,自身不再监听和争抢锁,消化完后再来

 

5.Nginx一般作为系统的最外层的网关,所有请求都先经过NG转发,一般是转发给系统服务的网关(如果有多个网关就能负载均衡啦,不过NG的负载均衡只有很简单的轮询或根据权重等,并不像Ribbon负载内部服务这么多选择),而这个转发行为,对于外面的请求来讲就是反向代理,对于系统来讲就是正向代理(一定程度上就保护了系统啦)。

6.NG可以做静态服务器,像浏览器一样存储一些静态资源的缓存,从而能快速响应

小结

     作为Java后端开发,博主还是菜鸡一个,对于Ng只能浅尝辄止,具体调优还是交给专业的运维人员,了解上面大概原理之后有如下好处:

     1.最重要的好处是了解公司架构,公司肯定有自己服务器,而开发是本地内网进行的,所以有些外部请求可能到不了你的内网机。例如微信支付的回调,公司Ng会配转发至内部服务器,但不会转发给你本地电脑ip。因此发现回调无效就能排查出问题,而不是一个劲的去找是不是自己操作姿势不对。

        还有为了安全期间,有的环境还可能有托管机,不能直接访问,这种也是让Ng暴露一个端口。

     2.清晰流程,数据的来去能更好的把握,碰到问题和新需求也能想想Ng能不能帮忙,跟运维人员吹水也不会一问三不知。个人感觉和学习前端知识一个道理,不求精通,但起码要了解,这样才能更好的开发

posted @ 2021-05-25 21:03  Nice斌  阅读(356)  评论(0编辑  收藏  举报