springcloud微服务实战<1>

单机结构 我只需要一台服务器完成我项目的部署(单体应用),开发部署简单  
他就会有单点问题, 因为此时只有一台机器,一旦这个机器挂了,我用户就没有办法使用应用的服务了
这个就是单点问题
针对我们的项目进行改造,升级,我们可以从部署层面来提高我们的负载能力 
我们想的是可以加机器

####### 
现在用户要发起一个请求,由2个机器共同来承担我们的响应 分别为Mysql 和tomcat
整体分布在不同的机器上面,分布式更多的讲究的是部署层面,只要你部署超过1台, 呢么我们就称为分布式系统
tomcat 这台机器只有一个节点  一旦他挂了  就不能再访问这个服务
集群的概念就是吧相同功能再部署一份

当我们访问 www.jd.com 有一个dns 的解析器,就是把你的域名进行解析成具体的ip
用户访问 nginx,nginx 帮我们做 负载均衡
我们做集群的时候 我们要做负载均衡
nginx 仅仅做将请求进行转发  很快的吧请求转发出去

分布式 只要部署超过2台就是分布式
集群复制 一份  通常集群要配置我们的Lb的 类似于nginx

################>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
云原生 可能以后会变成云原生架构  比如说mysql  阿里云有mysql 
什么分库分表 全部搞定了  所有的部署层面的东西全部交给阿里云了
我们运维的高可用阿 被攻击阿  阿里云都提供了一套解决方案了

###  微服务的调用 我们可以通过restTemplate发起调用, 这种方案有什么问题
比如说 我商品调用----->order
我的ip:port 是写死的

我要写端口 地址 
我订单微服务需要维护一份商品微服务的地址
商品服务修改地址之后  我订单服务是无法感知的
我做集群之后 我调用的时候 我要写一个Lb的功能
我还要感知上线 或者下线的处理


远程调用我们会发现一些问题  我们微服务springcloud 提供了注册中心
有一个服务的注册和发现 对于我们的微服务 有一个url 的管理  以及服务的动态感知
服务启动的时候 会把自己的信息注册进注册中心  进行服务注册
服务列表的拉取
发起调用的时候  我会进行服务的拉取  服务的续约
我会拉取注册中心的服务到本地 然后再发送远程rpc 进行调用
我们将url 的管理放在nacos 中了
加一台机器,减少一台机器  我们通过基于服务心跳来感知 服务的是否健康 来证明是否存活
服务注册和发现的功能  读取本地缓存列表 来执行网络调用
################>>>>>>>>>>>>>>>>
基于ribon 来做负载均衡  管理Url的 也可以实现服务注册和发现的功能 
也可以实现动态感知  动态感知是依赖我们心跳机制来实现的

nacos  ribbon 

常见的注册中心  nacos eureka consul
nacos 提供发现配置管理微服务   php 也可以连接到nacos,go也可以连接到nacos上
可以实现不同语言之间的相互调用
这样可以发挥不同语言的优势 比如说 go处理高并发能力强一些


远程调用读取的是本地列表 并不是读取注册中心的
 nacos定期将信息拉取到本地  调用是读取本地的缓存  
我调用是读取本地的缓存 然后再发起的调用 

你加一台机器 或者你减少一台机器  这个列表就不会更新  
这个时候就会调用到她已经下线的服务 就会报错
以及新的机器没有办法感知到
##################  nacos 下次拉取的时候就会更新到的
nacos 可以做我们的配置中心 还可以做我们的服务中心
###我希望从nacos 中获取服务  我们restTemplate 上面加@LoadBanace注解 实现我们的负载均衡策略
# 默认我们可以通过Irule 接口来进行修改


这样我们访问到2个就不一样了  我们基于服务来访问
负载均衡的概念  
 服务端负载均衡和客户端负载均衡
nginx --->服务端负载均衡
openfeing 客户端负载均衡 
springcloud中用的是客户端负载均衡
我们可以用ribbon来做负载均衡
我们用ribbon做负载均衡,
我们这样就可以实现负载均衡了
加上@LoadBanance  我们基于resttemplate 和服务发起调用
@LoadBance 帮我们实现负载均衡   基于服务名 
# 加上@LoadBananced 我们就可以基于服务名发起调用了,然后通过restTeplate发送请求  ribon的组件 .有负载均衡算法
@ LoadBanance才可以帮我们实现负载均衡 默认轮询算法
我们还有权重 把更多的请求分配给性能好的   负载均衡的使用
我们用到feign的远程调用插件  帮我们实现远程调用  感觉就像调用本地方法一样
1.添加openFeign的依赖
  我们通过远程调用就可以了
 调用远程方法感觉就像调用本地方法一样
feign的工作原理  形成一个代理类,创建一个代理类放入到spring容器中,@Autowaird 注入
代理方法中执行 就是基于ribbon 替换 通过restteplate实现远程调用
相关推荐
冰帝海岸3 小时前
01-spring security认证笔记
java·笔记·spring
没书读了3 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
代码小鑫6 小时前
A043-基于Spring Boot的秒杀系统设计与实现
java·开发语言·数据库·spring boot·后端·spring·毕业设计
真心喜欢你吖6 小时前
SpringBoot与MongoDB深度整合及应用案例
java·spring boot·后端·mongodb·spring
斗-匕9 小时前
Spring事务管理
数据库·spring·oracle
码上有前10 小时前
解析后端框架学习:从单体应用到微服务架构的进阶之路
学习·微服务·架构
天天扭码11 小时前
五天SpringCloud计划——DAY1之mybatis-plus的使用
java·spring cloud·mybatis
Doker 多克12 小时前
Spring AI 框架使用的核心概念
人工智能·spring·chatgpt
gjh120812 小时前
什么是微服务?
微服务
请叫我青哥15 小时前
第五十二条:谨慎使用重载
java·spring