分布式架构
优点:耦合度低, 便于扩展
缺点:架构复杂,运维成本大
- 微服务治治理
- 异步通信技术
- 缓存技术
- 搜索技术
- devops
微服务
- 微服务是分布式架构一种较好的实践,常见的微服务技术是springcloud
- 单一职责: 每一个服务对应唯一的业务能力
- 面向服务:微服务向外暴露接口
- 自治:团队独立、技术独立、数据独立、部署独立
- 隔离性强: 服务调用做好隔离、容错、降级、避免出现级联问题
springcloud介绍
- springcloud是分布式的一种解决方案,它将项目拆分成一个个服务(降低耦合),目的是为了减轻服务器的压力,增加了部署难度
- 拆分会造成使架构更复杂,造成更多的问题,中途又出现很多技术来解决问题,springcloud将这些技术整合起来
微服务组件
- 微服务将业务进行拆分、解耦,不同业务单独建一个springboot,会造成一个个问题,主要有下面5中技术解决微服务出现的问题常常被叫做微服务治理
- 注册中心
- 服务远程调用
- 配置中心
- 服务网关
- 服务监控与保护
服务调用层
- rpc (remote process call) 远程过程调用
- rpc是一种概念,为分布式设计,duboo、grpc可以实现
- 保持长连接,从而效能高
- rpc能够对服务进行解耦、耦合性高
- 服务解耦:本地调用远程的方法,这个调用是透明的,并不知道这个调用的方法是部署哪里
- 耦合性高: 调用者需要知道所调用接口的函数名、参数格式、参数顺序、参数名称等
- rpc = socket + 动态代理
- restful (representational state transfer) 性状态转移或表征状态转移
- 是一种设计风格,基于http协议,可以使用xml格式定义或json格式定义
- resource: 通过url、rui去标识、定位资源
- representational:资源的表现形式,如json、xml
- state transfer:http是一个无状态协议,所有状态保存在服务器端、客户端想要获取服务端信息,需要通过http的请求(get、post、put、delete等)获取,这种状态转移发生在osi模型的表现层,叫做无状态转移
- soap (Simple Object Access Protocol) 简单对象访问协议
- 是一种交换数据的一种协议规范
- 基于xml,实现技术是webService
- dubbo:是基于rpc的,并发高的场景
- openfeign: 基于restful的,并发低的场景
微服务远程调用
- 这个业务需要另外一个业务的数据,这个时候就会涉及到远程调用,远程调用的技术要用到feign或者dubbo,feign是我们常见的restful风格的请求用的是http协议、dubbo着用的rpc协议
- 跨服务的远程调用,实际上就是发送一个http请求,RestTemplate可以调用帮我们发送一个http请求,请求到别的业务的接口,并返回对应的数据对象例子:首先在启动类注册一个RestTemplate对象,然后使用 restTemplate.getObject(url, Entity.class); 缺点是这种方式是硬编码,不适用于与并发集群、profieles
- 替代RestTemplate的有两种技术是:Dubbo、openfeign
Eureka(注册中心)
- 服务之间存在服务之间互相调用的问题,它的角色是基于具体的业务,抛开业务,它既可以是提供者又可以是消费者
- 解决消费者与提供者集群的问题,这个和nginx负载均衡是一样的,Eureka来记录生产者与消费者,它帮我们管理请求的接收与分发,提供者每个30s会向Eureka发送心跳,来确定这个提供者是否挂掉,如果挂掉会剔除掉这个提供者
- Eureka-Server 服务端记录服务信息、心跳监控
- EurekaClient
- Provider: 服务提供者
- Consumer: 服务消费者
网关
- 没有网关,所有人都可以访问,为了安全加入了网关
- 功能:身份认证和权限校验、服务路由、负载均衡、请求限流
- 技术有: getway是spring5中WebFlux实现的是响应式的、zuul是Servlet实现(阻塞式)
- 微服务5大组件: 注册中心、服务远程调用、配置中心、服务网关、服务监控和保护
- 微服务技术体系: doubble、springcloud、springCloudAlibaba
Dubbo | springCloud | springCloudAlibaba | |
注册中心 | zookeeper、Redis | Eureka,Consul、zokeeper | Nacos、Eureka |
服务远程调用 | Doubbo协议 | Feign(http协议) | Doubbo、openFeign |
配置中心 | 无 | SpringcloudConfig | SpringCloudConfig、Nacos |
服务网关 | 无 | SpringCloudGateway、Zuul | SpringCloudGateway、Zuul |
服务监控和保护 | dobbo-admin | Hystrix | Sentinel |
服务总线 | bus | Nacos |
springcloud与springBoot版本兼容问题
- springcloud版本参考:https://spring.io/projects/spring-cloud#overview
- springAlibaba版本参考:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
微服务特点
约定 > 配置 > 编码
组件之间可以互相选择
springcloud+dubbo+nacos+sentinel+seata
springcloud+feign+nacos+sentinel+seata