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能不能帮忙,跟运维人员吹水也不会一问三不知。个人感觉和学习前端知识一个道理,不求精通,但起码要了解,这样才能更好的开发
Nginx导航的更多相关文章
- Gateway导航
简介 最近都在弄微服务的东西,现在来记录下收获.我从一知半解到现在能从0搭建使用最大的感触有两点 1.微服务各大组件的版本很多,网上很多博客内容不一定适合你的版本,很多时候苦苦琢磨都是无用功 2.网上 ...
- Ribbon导航
简介 最近都在弄微服务的东西,现在来记录下收获.我从一知半解到现在能从0搭建使用最大的感触有两点 1.微服务各大组件的版本很多,网上很多博客内容不一定适合你的版本,很多时候苦苦琢磨都是无用功 2.网上 ...
- Sentinel导航
简介 最近都在弄微服务的东西,现在来记录下收获.我从一知半解到现在能从0搭建使用最大的感触有两点 1.微服务各大组件的版本很多,网上很多博客内容不一定适合你的版本,很多时候苦苦琢磨都是无用功 2.网上 ...
- nginx设置导航&安装showdoc&创建文件服务&zabbix&grafana
安装环境: [root@nginx showdoc]# cat /etc/centos-release #系统版本 CentOS Linux release 7.5.1804 (Core) [root ...
- 【干货分享】Node.js 中文学习资料和教程导航
这篇文章来自 Github 上的一位开发者收集整理的 Node.js 中文学习资料和教程导航.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念,它的目标是帮助程 ...
- Nginx + spawn-fcgi- Ubuntu中文
Nginx - Ubuntu中文 页面 讨论 查看源代码 历史 导航 首页 最近更改 随机页面 页面分类 帮助 编辑 编辑指南 沙盒 新闻动态 字词处理 工具 链入页面 相关更改 特殊页面 打印版 ...
- 拿到新机器,进行初始化和部署Nginx的过程
1. 在/etc/ansbile/hosts中添加主机init 2. 在sysinit.yml中修改要初始化的机器: hosts: init 3. 设置不检查key export ANS ...
- node.js中文资料导航 Mark
Node.js HomePage Infoq深入浅出Node.js系列(进阶必读) Node.js中文文档 被误解的 Node.js Node.js C++ addon编写实战系列 热门node.js ...
- 【干货分享】Node.js 中文资料导航
这篇文章与大家分享一批高质量的的 Node.js 中文资料.Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的, 易于扩展的网络应用 Node ...
随机推荐
- bootstrap期末考试习题整理
1.Which is true about Bootstrap? A. Bootstrap is the most popular and powerful front-end (HTML, CSS, ...
- && 与 || 差在哪?-- Shell十三问<第十问>
&& 与 || 差在哪?-- Shell十三问<第十问> 好不容易,进入两位数的章节了... 一路走来,很辛苦吧?也很快乐吧? 在解答本章题目之前,先让我们了解一个概念:r ...
- 【秒懂音视频开发】14_AAC编码
AAC(Advanced Audio Coding,译为:高级音频编码),是由Fraunhofer IIS.杜比实验室.AT&T.Sony.Nokia等公司共同开发的有损音频编码和文件格式. ...
- MySQL提升笔记(3)日志文件详解
在MySQL数据库和InnoDB存储引擎中,有很多种文件,如:参数文件.日志文件.socket文件.pid文件.MySQL表结构文件.存储引擎文件. 本节重点关注日志文件,MySQL的复制.事务等重要 ...
- Java高级【Junit、反射、注解】
1.Junit单元测试 * 测试分类: 1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值. 2. 白盒测试:需要写代码的.关注程序具体的执行流程. * Junit使用 ...
- 【笔记】《Redis设计与实现》chapter9 数据库
9.1 服务器中的数据库 Redis服务器将所有都保存在服务器状态redis.h/redisServer结构中 struct redisServer{ //... // 一个数组,保存着服务器中所有数 ...
- (十三)Docker容器进入的4种方式
简介 在使用Docker创建了容器之后,大家比较关心的就是如何进入该容器了,其实进入Docker容器有好几多种方式,这里我们就讲一下常用的几种进入Docker容器的方法. 进入Docker容器比较常见 ...
- Typora+PicGo+阿里云写博客笔记
Typora+PicGo+阿里云写博客笔记 选择这三个工具的理由 我一直有在使用typora使用mardown写作,毕竟typora很香,可以实时预览,非常丝滑. 配合上PicGo这个图床工具简直绝了 ...
- Kafka2.8安装
1.概述 最近Kafka官网发布了2.8版本,在该版本中引入了KRaft模式.鉴于新版本和新特性的引入,相关使用资料较少,那边本篇博客笔者将为大家介绍Kafka2.8的安装和使用. 2.内容 2.1 ...
- python 第三方库大全
Python 作为程序员的宠儿,越来越得到人们的关注,使用 Python 进行应用程序开发的越来也多.那么,在 2013 年有哪些流行的 Python 项目呢?下面,我们一起来看下. https:// ...