一、基本概念:
单块架构: 如springmvc传统的三层系统架构,虽然逻辑上分为三层,但仍放在一个服务器中一起运行,不解耦
微服务: 一种架构风格,一个大型的应用由一个或多个微服务组成,独立部署,低耦合(spring,springboot,mybatis开发的项目都是一个微服务,独立存在,不依赖于微服务架构)
微服务架构:
1、springcloud:一种基于springboot的一整套实现微服务的架构(又称为"一站式全家桶")
2、dubbo:高性能、轻量级的RPC(远程过程调用)
二、springcloud优缺点:
优点: 1. 每个服务足够内聚,足够小,代码易于理解
2. 开发简单,开发效率高,一个微服务可能只敢一件事,能够被小团队单独开发
3. 低耦合,无论是在开发还是部署阶段都是独立的
4. 可以使用不同的语言
5. 易于和第三方集成
6. 每个微服务都有自己的存储能力,可以有自己的数据库也可以有统一的数据库
缺点: 1. 耗性能
2. 数据的一致性难以保障
3. 通讯成本高
4. 系统集成测试复杂
5. 随着服务的增多,维护成本和压力越来越大
三、dubbo的优缺点
优点: 1. 透明化的远程调用方法(只需简单配置,像调用本地方法一样调用远程方法,没有任何api 侵入)
2. 软负载均衡及容错机制
3. 使用zookeeper自动注册或配置管理
4. 服务接口管理与监控(dubbo- admin管理,dubbo-monitor监控)
缺点:只能使用java语言
四、springcloud和dubbo的区别
dubbo没有springcloud提供那么多的组件,需自己找第三方组件
五、技术栈
1.eureka(服务的注册与发现)
所有微服务都需要注册到eureka中进行统一管理(管理微服务的)
服务的注册:
eureka是基于cs的架构模式,即客户端与服务端的架构
(1)服务端的配置server
1.pom.xml引入eureka依赖
2.application.yml中配置eureka
instance
hostname:eureka的名字
client
register-with-eureka:不向注 册中心注册自己
fetch-registry:表名自己就是注册中心
defaultZone:eureka服务端的访问路径,用来验证eureka是否配置成功的
3. 将@EnableEurekaServe注解加到eureka服务的主启动器上,告诉eureka我是一个服务端
(2)将微服务模块注入到服务中,相当于客户端发送请求
1. pom.xml引入spring-cloud-starter-eureka依赖
2. application.yml中配置eureka
defaultZone:告诉我要注册到哪个服务里
instance-id:名字
prefer-ip-address:访问地址ip
3. 将@EnableEurekaClient注解加到想要注册到eureka的微服务上
服务的发现:
(作用:调用接口与前看是否存在)
编写测试类,注入@AutoWrite
private Discovery Client
List
获得所有注册到服务的名字,即instance-id
拓展:
1.eureka的自我保护机制(保存服务的信息)
2.集群: 1. 当面临请求过大时需要配置eureka集群
2. 若一个集群宕掉可以用其他的集群
配置:主要修改客户端和服务端的yml配置文件(添加defaultZone:所有集群的访问路径)
2.zookeeper(dubbo的服务注册)
ACID:
Atomicity原子性 Consistency一致性
Isolation 隔离性 Durability 持久性
CAP : 一致性、可用性、分区容错性(必须有)
eureka和zookeeper的区别:
1.eureka遵循AP原则
2.zookeeper遵循CP原则
3.zookeeper有主从的设计理念:
若主zookeeper宕掉,从属的zookeeper服务器会选出新的主zookeeper
大约十几秒到几分钟,zookeeper在此期间不可用,不接受外部请求