分布式架构

优点:耦合度低, 便于扩展

缺点:架构复杂,运维成本大

  • 微服务治治理
  • 异步通信技术
  • 缓存技术
  • 搜索技术
  • 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