Spring Cloud Alibaba 微服务1,系统架构演变 + Nginx反向代理与负载均衡

这篇具有很好参考价值的文章主要介绍了Spring Cloud Alibaba 微服务1,系统架构演变 + Nginx反向代理与负载均衡。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

csdn 哪吒编程,SpringCloud实战教程,nginx,系统架构,负载均衡,微服务

专栏导读

🏆作者简介:哪吒,CSDN2022博客之星Top1、CSDN2021博客之星Top2、多届新星计划导师✌、博客专家💪 ,专注Java硬核干货分享,立志做到Java赛道全网Top N。

🏆本文收录于Java基础教程系列(进阶篇),本专栏是针对大学生、初级Java工程师精心打造,针对Java生态,逐个击破,不断学习,打通Java技术栈

🏆订阅后,可以阅读Java基础教程系列(进阶篇)中全部文章包含Java基础、Java高并发、Spring、MySQL等Java进阶技术栈

🏆还可以订阅其姐妹篇Java基础教程系列,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例理论结合实战,实现Java的轻松学习

🏆哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师。

🏆面试福音:10万字208道Java经典面试题总结(附答案)

大家好,我是哪吒。

本系列为SpringCloud微服务系列,先从微服务的入口Nginx开始学习,读哪吒编程,品技术人生。

一、系统架构演变

最开始接触Java语言的时候,我写的第一个项目是图书管理系统,当时是用JSP+servlet写的,感觉很吊的样子,全班领先水平。

csdn 哪吒编程,SpringCloud实战教程,nginx,系统架构,负载均衡,微服务
慢慢的变成了JSP+SSM架构。
csdn 哪吒编程,SpringCloud实战教程,nginx,系统架构,负载均衡,微服务
到现在单体架构最流行的SpringBoot+Vue
csdn 哪吒编程,SpringCloud实战教程,nginx,系统架构,负载均衡,微服务
但是,随着业务量的不断增大,你会发现,这些单体架构,已经无法满足数据日益膨胀的今天,动不动就几万、几十万的QPS,我记得当初200QPS,我就觉得挺吓人了。

为了解决性能问题,慢慢的微服务SpringCloud架构浮出水面,微服务的核心理念是将应用细粒化,将单一应用拆分成若干个小应用,每个小应用提供单一的业务功能,独立部署,服务之间相互调用,降低程序耦合度,解决单台服务器宕机的问题。

微服务提供了:

  1. 高可用:当某个节点服务器宕机后,可以迅速将流量转移到其它节点;
  2. 高性能:多台服务器对外提供相同的服务,提升程序的吞吐量;
  3. 高扩展:当业务发生激增时,可以通过增加节点的方式,解决性能问题​;

csdn 哪吒编程,SpringCloud实战教程,nginx,系统架构,负载均衡,微服务
注:本章的重点是Nginx,微服务其它组件就不画了。

二、什么是Nginx?

Nginx是俄罗斯人Igor Sysoev编写的一款高性能 HTTP 和反向代理服务器。Nginx选择了epoll和kqueue作为网络I/O 模型,在高连接并发的情况下,Nginx是Apache服务器不错的替代品,它能够支持高达50 000个并发连接数的响应,运行稳定,且内存、CPU等系统资源消耗非常低。

三、servername匹配规则

  1. 完整匹配
  2. 通配符匹配
  3. 正则匹配

正则匹配格式,必须以~开头,比如server_name ~^www\d+\.nzbc\.com$;。如果没有~开头,则Nginx会判定为完整匹配,在逻辑上,需要添加^和$锚定符号。正则匹配格式中.为正则元字符,需要通过反斜线进行转义,如果正在表达式中包含{},需要用双引号引用起来,避免报错。

四、正向代理与反向代理

1、正向代理

csdn 哪吒编程,SpringCloud实战教程,nginx,系统架构,负载均衡,微服务

正向代理服务器一般位于用户和服务器之间,用户通过正向代理服务器访问应用服务器获取资源。

最常见的例子就是,我们访问一个外国网站,该网站无法在国内直接访问,但是可以通过代理服务器访问,也就是说,用户向正向代理服务器发送一个请求并指定目标,然后正向代理服务器向目标服务器(外国网站)转交请求并将获得的内容返回给用户。

正向代理服务器,代理的是客户端,去和服务端交互。

2、反向代理

csdn 哪吒编程,SpringCloud实战教程,nginx,系统架构,负载均衡,微服务

反向代理服务器一般位于用户和服务器之间,用户访问反向代理服务器获取应用服务器资源,用户不知道应用服务器的地址,是由代理服务器转发的,有降低网络和服务器的负载,提高访问效率的作用。

反向代理服务器,代理的是服务端,去和客户端交互。

Nginx就是一款高性能的反向代理服务器。

3、LVS

先说结论,LVS解决了Nginx单机性能瓶颈的问题。

LVS主要用于多服务器负载均衡,工作在网络的第四层,可以实现高性能、高可用的服务器集群技术,采用同步请求转发的策略。

LVS支持的并发量要比Nginx高,可以配合keepalived使用,将Nginx作为LVS的节点机器,因为Nginx在网络的第七层,功能上肯定强于LVS。

用户通过Nginx访问应用服务器,应用服务器直接将数据返回给机房路由,返回时不走Nginx了,降低了Nginx的性能消耗。
csdn 哪吒编程,SpringCloud实战教程,nginx,系统架构,负载均衡,微服务

五、负载均衡策略

1、轮询

默认使用轮询方式,逐一转发访问,这种情况适合无状态请求,会话无法保持,可以通过基于客户端实现会话保持。

会话保持方式:

(1)基于session实现:

session用于存储客户端用户信息,一般不在服务器存储session,可以通过SpringSession将session存储到一个Redis服务器中,再次访问时,可以到Redis服务器中获取session,实现session共享。

(2)基于cookie实现,无状态的会话保持方式

客户端访问时,先到权限校验服务器校验权限,生成一个cookie,并进行加密,只有服务器能解密,客户端没密码无法解密,客户端携带此cookie再次访问应用服务器,应用服务器进行解密校验,完成无状态的会话保持。

csdn 哪吒编程,SpringCloud实战教程,nginx,系统架构,负载均衡,微服务

2、权重

通过upstream进行权重的定义。

  1. weight:权重
  2. down:下线不用了
  3. backup:备用服务器

修改配置文件后,需要通过systemctl reload nginx命令重启Nginx。

nginx.conf配置如下

http{
	upstream httpnz {
		server 192.168.66.1 weight=1 down;
		server 192.168.66.2 weight=5 backup;
		server 192.168.66.3 weight=10;
	}
	server{
		listen 80;
		server_name nzbc;
		
		location / {
			proxy_pass http://httpnz;
		}
	
		error_page 500.html;
		location = /500.html{
			root html;
		}
	}
}

3、ip_hash

每个请求按访问ip的hash结果分配,映射到固定某一台的服务器,会导致负载均衡不平衡。

当此应用服务器宕机后,session会丢失,再次发起请求时,会重新固定访问另一台正常的应用服务器,并实现会话保持。

4、least_conn

最少连接访问。

5、url_hash

根据访问的url转发请求,定向流量转发。

每个请求按访问url的hash结果分配,映射到固定的某一台服务器,会话无法保持。

一般在获取本地资源时使用(且本地资源不在同一台服务器上),比如通过地址1获取图片资源、通过地址2获取pdf协议资源。

6、fair

根据服务器响应时间转发请求。

7、小结

最常用的负载均衡策略是配置权重,其它的形式,不是很常用。

ip_hash、least_conn、url_hash、fair,这几种形式无法实现动态Nginx上下线(新增或减少Nginx服务器),而且还会造成流量倾斜的问题,如果瞬时流量比较爆炸的时候,会将某个服务器直接干蹦
csdn 哪吒编程,SpringCloud实战教程,nginx,系统架构,负载均衡,微服务

六、动静分离

动静分离的最终目的是将获取静态资源和动态资源分离开,提升服务器性能和高可用性。

csdn 哪吒编程,SpringCloud实战教程,nginx,系统架构,负载均衡,微服务

配置静态资源,nginx.conf配置如下

http{
	upstream httpnz {
		server 192.168.66.1 weight=1 down;
		server 192.168.66.2 weight=5 backup;
		server 192.168.66.3 weight=10;
	}
	server{
		listen 80;
		server_name nzbc;
		
		location / {
			proxy_pass http://httpnz;
		}
		
		location ~*/(js/img/css) {
			root html;
			index index.html index.htm;
		}
		
		error_page 500 502 503 504 /50x.html;
		location = /50x.html{
			root html;
		}
	}
}

七、URLRewrite

URLRewrite是实现URL重写的关键指令,根据regex (正则表达式)部分内容,重定向到replacement,结尾是flag标记。

flag标记说明:

  1. break,本条匹配完成后即终止;
  2. last,本条匹配完成后,继续向下匹配;
  3. redirect,返回302临时重定向;
  4. permanent,返回301永久重定向;

配置URLRewrite,nginx.conf配置如下

http{
	upstream httpnz {
		server 192.168.66.1 weight=1 down;
		server 192.168.66.2 weight=5 backup;
		server 192.168.66.3 weight=10;
	}
	server{
		listen 80;
		server_name nzbc;
		
		location / {
			rewrite ^/([0-9]+).html$ /index.jsp?pageNum=$1 break;
			proxy_pass http://httpnz;
		}
		
		location ~*/(js/img/css) {
			root html;
			index index.html index.htm;
		}
		
		error_page 500 502 503 504 /50x.html;
		location = /50x.html{
			root html;
		}
	}
}

csdn 哪吒编程,SpringCloud实战教程,nginx,系统架构,负载均衡,微服务
csdn 哪吒编程,SpringCloud实战教程,nginx,系统架构,负载均衡,微服务

Java学习路线总结,搬砖工逆袭Java架构师

10万字208道Java经典面试题总结(附答案)

Java基础教程系列

Java基础教程系列(进阶篇)文章来源地址https://www.toymoban.com/news/detail-783785.html

到了这里,关于Spring Cloud Alibaba 微服务1,系统架构演变 + Nginx反向代理与负载均衡的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Spring Cloud Alibaba整合RocketMQ架构原理分析

    Spring Cloud Alibaba整合RocketMQ架构原理分析

    关于RocketMQ的原理,本文就不做详细分析了,这里就重点关注Spring Cloud Alibaba是如何整合RocketrMQ的。 RocketMQ提供了RocketMQ Client SDK,开发者可以直接依赖这个SDK,就可以完成消息的生产和消费。 1.生产消息 RocketMQ Client SDK提供了生产消息的API接口DefaultMQProducer,开发者可以直接使

    2024年01月22日
    浏览(46)
  • 拾壹博客Spring Boot转换成Spring Cloud Alibaba架构

    拾壹博客Spring Boot转换成Spring Cloud Alibaba架构

    改的地方实在太多了,所以过程记录不下去了,但是业务模块跟Boot是一毛一样的没有变化,直接发项目代码,包括了nacos中的配置文件在对应的模块,运行大概是没有问题。 成果: 链接已死,真的大无语。 等哪天把家里的k8s的minio整一下。先传到CSDN咯。 PS:其实过年前就已

    2024年02月06日
    浏览(42)
  • 04-Springbooot与Spring Cloud Alibaba搭建后端架构

    04-Springbooot与Spring Cloud Alibaba搭建后端架构

      settings.xml,配好了阿里镜像 02-maven的安装配置_NikoWord的博客-CSDN博客 01-IDEA使用技巧_NikoWord的博客-CSDN博客 04-设置idea编码、编译_NikoWord的博客-CSDN博客

    2024年02月08日
    浏览(45)
  • Spring Cloud Alibaba-01-微服务介绍

    Spring Cloud Alibaba-01-微服务介绍

    Lison dreamlison@163.com , v1.0.0 , 2023.05.07 架构的演变 随着互联网的发展,网站应用的规模也不断的扩大,进而导致系统架构也在不断的进行变化,从互联网早起到现在,系统架构大体经历了下面几个过程: 单体应用架构: 把所有功能都集中在一个应用中,统一部署,开发成本、

    2024年02月22日
    浏览(147)
  • 【微服务 Spring Cloud Alibaba】- Nacos 服务注册中心

    【微服务 Spring Cloud Alibaba】- Nacos 服务注册中心

    目录 1. 什么是注册中心? 1.2 注册中心的作用 2. SpringBoot 整合 Nacos 实现服务注册中心 2.1 将服务注册到 Nacos 2.2 实现消费者 3. 服务列表各个参数的含义、作用以及应用场景 注册中心是微服务架构中的一个重要组件,它用于实现 服务注册 与 服务发现 。 【思考一】什么叫服务

    2024年02月06日
    浏览(49)
  • Spring Cloud Alibaba - 服务注册与发现(Nacos)

    ✅作者简介:热爱Java后端开发的一名学习者,大家可以跟我一起讨论各种问题喔。 🍎个人主页:Hhzzy99 🍊个人信条:坚持就是胜利! 💞当前专栏:微服务 🥭本文内容:Spring Cloud Alibaba - 服务注册与发现(Nacos)。 在微服务架构中,服务注册与发现是其中的重要一环。服务

    2024年02月07日
    浏览(117)
  • 【Spring Cloud】如何确定微服务项目的Spring Boot、Spring Cloud、Spring Cloud Alibaba的版本

    【Spring Cloud】如何确定微服务项目的Spring Boot、Spring Cloud、Spring Cloud Alibaba的版本

    本文描述如何确定微服务项目的Spring Boot、Spring Cloud、Spring Cloud Alibaba的版本。 我们知道Spring Boot、Spring Cloud、Spring Cloud Alibaba的版本选择一致性非常重要。在选择Spring Boot和Spring Cloud版本时,需要考虑到两者之间的关系以及项目的具体需求。 首先,Spring Boot和Spring Cloud有密切

    2024年02月08日
    浏览(48)
  • Spring Cloud微服务架构:实现分布式系统的无缝协作

    Spring Cloud微服务架构:实现分布式系统的无缝协作

    🎉欢迎来到架构设计专栏~Spring Cloud微服务架构:实现分布式系统的无缝协作 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:架构设计 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技术和水

    2024年02月08日
    浏览(46)
  • Spring Cloud Alibaba--Nacos服务注册和配置中心

    Spring Cloud Alibaba--Nacos服务注册和配置中心

    Nacos 是Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos的特性,官网解释如下: 服务发现和服务健康监测 Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Age

    2024年02月05日
    浏览(42)
  • 【Spring Cloud Alibaba】Sentinel 服务熔断与流量控制

    【Spring Cloud Alibaba】Sentinel 服务熔断与流量控制

    目录 前言 一、Sentinel 入门 1.1 什么是 Sentinel ? 1.2 微服务集成 Sentinel  1.3 安装Sentinel控制台 二、Jmeter 压力测试工具 2.1 Jmeter 介绍  2.2 Jmeter 安装 2.3 接口测试 三、Sentinel 使用 3.1 限流规则 3.1.1 warm up(预热模式) 3.1.2 排队等待 3.1.3 关联 3.1.4 链路 3.2 熔断规则 3.3 服务降级     

    2024年02月01日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包