简介

最近都在弄微服务的东西,现在来记录下收获。我从一知半解到现在能从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导航的更多相关文章

  1. Gateway导航

    简介 最近都在弄微服务的东西,现在来记录下收获.我从一知半解到现在能从0搭建使用最大的感触有两点 1.微服务各大组件的版本很多,网上很多博客内容不一定适合你的版本,很多时候苦苦琢磨都是无用功 2.网上 ...

  2. Ribbon导航

    简介 最近都在弄微服务的东西,现在来记录下收获.我从一知半解到现在能从0搭建使用最大的感触有两点 1.微服务各大组件的版本很多,网上很多博客内容不一定适合你的版本,很多时候苦苦琢磨都是无用功 2.网上 ...

  3. Sentinel导航

    简介 最近都在弄微服务的东西,现在来记录下收获.我从一知半解到现在能从0搭建使用最大的感触有两点 1.微服务各大组件的版本很多,网上很多博客内容不一定适合你的版本,很多时候苦苦琢磨都是无用功 2.网上 ...

  4. nginx设置导航&安装showdoc&创建文件服务&zabbix&grafana

    安装环境: [root@nginx showdoc]# cat /etc/centos-release #系统版本 CentOS Linux release 7.5.1804 (Core) [root ...

  5. 【干货分享】Node.js 中文学习资料和教程导航

    这篇文章来自 Github 上的一位开发者收集整理的 Node.js 中文学习资料和教程导航.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念,它的目标是帮助程 ...

  6. Nginx + spawn-fcgi- Ubuntu中文

    Nginx - Ubuntu中文 页面 讨论 查看源代码 历史   导航 首页 最近更改 随机页面 页面分类 帮助 编辑 编辑指南 沙盒 新闻动态 字词处理 工具 链入页面 相关更改 特殊页面 打印版 ...

  7. 拿到新机器,进行初始化和部署Nginx的过程

    1. 在/etc/ansbile/hosts中添加主机init 2. 在sysinit.yml中修改要初始化的机器:   hosts: init 3. 设置不检查key      export ANS ...

  8. node.js中文资料导航 Mark

    Node.js HomePage Infoq深入浅出Node.js系列(进阶必读) Node.js中文文档 被误解的 Node.js Node.js C++ addon编写实战系列 热门node.js ...

  9. 【干货分享】Node.js 中文资料导航

    这篇文章与大家分享一批高质量的的 Node.js 中文资料.Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的, 易于扩展的网络应用 Node ...

随机推荐

  1. 学习Typora来写博客

    Typora学习 标题分级 知识详解 标题分级可使用快捷键Ctry+数字键(1.2.3.4.5.6.0) 例如Ctry+1为一级标题,Ctry+2为二级标题,以此类推,总共可分为六个级别的标题,Ctr ...

  2. 【Prolog - 2.0 基础应用】

    [术语统一 terms unify] 两者统一,只需满足下面两条件之一 1.原本就是相同的 2.包含变量,这些变量可以用术语统一实例化,从而得到相等的术语 mia和mia是统一的,42和42是统一的, ...

  3. 结对编程-stage_2

    教学班 罗杰.任建班周五3.4节 gitlab项目地址 Here it is. 成员 周远航(3004) 李辰洋(3477) 结对编程体验 经过了上一阶段的磨合,第二阶段我们的配合更加流畅,也熟悉了对 ...

  4. OO第四单元作业总结以及课程总结

    第四单元总结--UML 第四单元作业架构分析 第一次作业其实是本单元三次作业中最难的一次.由于第一次是第一次作业,要考虑到搭建框架和设计架构,这次作业的思维性很强.在了解了各个类型元素(Element ...

  5. (四)Struts2的Action(深入讲解版)

    Struts2的Action 开发者需要提供大量的Action,并在struts.xml中配置Action.Action类里包含了对用户请求的处理逻辑,因为我们也称Action为业务控制器. 一.编写 ...

  6. 算法:第一节课Master定理

    1.ctex:要求用Tex编辑器进行作业的书写 2.与东大本科有差距,还需要多点努力才行. 3. 4.考试不考概念 5. 6.时间复杂度和空间复杂度 7.算法好坏的评价标准 8.基本运算 9.时间复杂 ...

  7. xctf - forgot

    xctf - forgot check一下,开启了NX 拉入ida中,能找到: __isoc99_scanf,能够无限输入, 循环中,读取32个scanf的字符并进行判断,最后根据结果调用存在栈上的函 ...

  8. Spring @Value注入static属性

    import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Com ...

  9. Day01_10_Scanner 接收用户输入

    Scanner函数 import java.util.Scanner; class ScannerTest { public static void main(String[] args){ Syst ...

  10. Flowable中的Service

    前言 在学习博客[(https://blog.csdn.net/puhaiyang/article/details/79845248)]时,注意到Flowable中的各种Service(如下),进而在 ...