1.系统架构的演变
单体架构(war包 or jar包 到服务器直接运行)——>垂直架构(增加NGINX反向代理)——>SOA面向服务架构——>微服务架构
单体架构:
垂直架构:
横向扩展服务器,NGINX做分流
SOA架构:
依托服务总线
微服务架构:
架构选型:看适用人数,没必要自己坑自己
如何实现微服务架构?
为什么需要注册中心?
新启动的服务, 注册到注册中心。调用者从服务中心拉取服务列表供服务调用者去使用,就算注册中心挂了,也能从缓存中取到。
Nacos:CP+AP
Zookeeper:CP
如果要接入注册中心,就需要引入Nacos的客户端的包 Client
注册中心就是服务端,Nacos Server
核心功能
Nacos权限认证2.1.0之前有secretKey有默认值,别人可以通过调用Auth往Nacos插入新用户,所有服务别人都能看到和下线
Nacos的使用:
1.给需要加入到注册中心的微服务添加上依赖(这个依赖能实现自动注册功能)
2.启动类 开启服务发现(这个注解可省略)
3.指定注册中心地址(最好建立域名映射 不用改ip那么麻烦)
4.记得指定微服务的名字
5.然后登录到Nacos就发现注册上去了实例
6.远程调用服务
方法一
引用依赖
可以注入一个负载均衡的客户端(Nacos帮我们实现的)
传入微服务名字
底层会帮我们选择一个实例(基于权重的轮询)
接下来再通过restTemplate发起调用
常用配置:低版本需要禁用ribbon
方法二
底层调用会做替换(做了封装 实际还是方法一)
在远程调用的组件上带上注解
可以设置集群名字:上海机房
底层原理:
命名服务会获取所有实例,判断一下是不是同一个集群
需要指定负载均衡策略(可以自定义)这里指定的是NacosLoadBalancer(本地集群优先)
生效办法:
指定微服务名 和 策略的类
针对不同微服务可以配置多个
服务逻辑隔离
可以指定命名空间
只会调用同一个命名空间下的实例
group 一般用来配置隔离
持久实例:一般是基础服务 比如:数据库,缓存服务,配好就不变了
会把数据持久化到本地磁盘,即使挂了重启会读本地磁盘文件
默认微服务注册的都是临时实例
数据都存在内存中,用弱一致协议保证一致性(AP)
权限鉴权(开启权限认证)
在Nacos配置里设置为true
修改默认值
同一个集群下要一致
记得配置用户名和密码 否则会报错
高可用配置(Nacos集群搭建):
官方推荐架构:
服务端负载均衡,由负载均衡器反向代理到具体的nacos
假如搭了2个集群,
这时候一个是8848,一个是8849
两个集群都会用到9849端口,就会gRPC端口冲突,隔开 隔大一点就不会
修改cluster.conf配置
本地搭伪集群需要指定ip
注册中心可以三个节点都指定(当然使用服务端负载均衡更推荐)
8848和9848需要暴露出去
Nginx配置
http里同样需要加配置
修改yaml配置