1.微服务基础知识

微服务基础知识

1. 系统架构的演变

  1. 单体应用架构

    所有的前端和后台模块代码都继承在同一个系统中,部署时只部署这一个包即可。要增加并发量只能通过增加集群节点的方式。

    • 优点:开发简单,适用于小型应用
    • 缺点:不易扩展、维护,代码耦合度高
  2. 垂直应用架构

    按照各个业务模块,分为不同的系统,各个系统分开部署,可以针对某一并发量需求高的系统单独增加集群节点

    • 优点:能够解决高并发问题;针对不同的模块进行优化;方便水平扩展,提高容错
    • 缺点:系统之间相互独立;重复开发工作
  3. 分布式架构

    将垂直应用架构中的各个系统,又划分为功能层(展示层)服务层两个系统。展示层需要哪些功能,就去调用对应的服务层获取;而服务层只需要准备数据,提供专一的服务即可

    • 优点:解决了垂直应用结构的缺点
    • 缺点:服务的评估、治理、调度等管理工作不足
  4. 分布式SOA架构

    在分布式架构的功能层和服务层中间,加了一个SOA调度层,实现服务的评估治理调度等管理工作

    • SOA:Service-Orientd Architecture 面向服务的架构

      特点:分布式、可重用、扩展灵活、松耦合

    • 常用SOA:ESB总线技术、DUBBO框架

    • 优点:抽取公共的功能为服务,提高开发效率;对不同的服务进行集群化部署解决系统压力;基于ESB/DUBBO减少系统耦合

    • 缺点:抽取服务的粒度较大;服务提供方与调用方接口耦合度高

  5. 微服务架构

    将服务层的服务拆分到原子化,服务层与展示层之间通过http等轻量协议传输,实现服务提供方与调用方接口的解耦

    • 优点:通过服务的原子化拆分,以及微服务的独立打包、部署和升级,小团队的交付周期将缩短,运维成本也将大幅度下降;微服务遵循单一原则,微服务之间采用Restful等轻量协议传输
    • 缺点:微服务过多,服务治理成本高,不利于系统维护;分布式系统开发的技术成本高(容错、分布式事务等)

2. 核心概念

  1. 远程调用技术

    服务消费者远程调用服务提供者提供的服务

    流行的调用技术:

    1. RPC

      • RPC:Remote Procedure Call 进程间的通信方式。允许像调用本地服务一样调用远程服务
      • 负责屏蔽底层的传输方式(TCP/UDP)、序列化方式(XML/JSON/二进制)、通信细节
    2. Http

      • 使用Restful(Repreentational State Transfer)
      • 相对更规范、更标准、更通用,无论哪种语言都支持Http协议

    两种调用技术的比较:

    比较项 Restful RPC
    通信协议 Http 一般使用TCP
    性能 略低 较高
    灵活度
    应用 微服务架构 SOA架构
  2. CAP原理

    A:可用行(保证整个系统始终是可用的)——多节点

    C:一致性(保证系统中的各个节点上的数据始终是一致的)

    P:分区容忍行(是否容忍把数据放到不同的数据节点上)

    • 一个系统不可能同时满足以上三个要求,所以只需要满足其中两项即可:
      1. AC:使用传统数据库的方式
      2. AP:使用非关系型数据库的方式
      3. CP:例如zookeeper,在一个节点中存储数据的同时,向其他的节点备份数据,而在备份的过程中,整个服务是不可用的

3. 常见的微服务框架

  1. Spring Cloud

    一系列框架的有序集合。利用SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务注册发现消息总线配置中心负载均衡断路器数据监控等,都可以利用SpringBoot的开发风格做到一键启动和部署。集合了目前各家公司开发的比较成熟的服务框架并加以改造,屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署、易维护的分布式系统开发工具包。

    • 核心组件

      Spring Cloud Netflix组件

      组件名称 作用
      Eureka 服务注册中心
      Ribbon 客户端负载均衡
      Feign 声明式服务调用
      Hystrix 客户端容错保护
      Zuul API服务网关

      Spring Cloud Alibaba组件

      组件名称 作用
      Nacos 服务注册中心
      Sentinel 客户端容错保护

      Spring Cloud 原生及其他组件

      组件名称 作用
      Consul 服务注册中心
      Config 分布式配置中心
      GateWay API服务网关
      Sleuth/Zipkin 分布式链路追踪
  2. ServiceComb

    Apache的微服务顶级项目

  3. ZeroC ICE

4. 服务调用

  1. 传统方式

    使用Java中的urlconnectionhttpclientokhttp

  2. RestTemplate

    Spring框架提供RestTemplate类可用于在应用中调用rest服务,只需要传入url及返回值类型即可

    • 常用方法

      Http Method RestTemplate Method
      GET getForObject(String, Class<T>, Object...); getForEntity(String, Class<T>, Object...);
      POST postForLocation(String, Object, Object...); postForObject(String, Object, Class<T>,Object...)
      PUT put(String, Object, Object...)
      DELETE delete(String, Object...)
      HEAD headForHeaders(String, Object...)
      OPTIONS optionForAllow(String, Object...)
      ANY exchange(String, HttpMethod, HttpEntity<?>, Class<T>, Object...); execute(String,HttpMethod, RequestCallback, ResponseExtractor<T>, Object...);
    • 使用方式

      1. 创建RestTemplate对象Bean交给Spring容器管理

        @Bean
        public RestTemplate restTemplate() {
          return new RestTemplate();
        }
        
      2. 使用的时候,直接调用RestTemplate的方法即可

        @Autowired
        private RestTemplate restTemplate;
        
        T t = restTemplate.getForObject("http://ip:post/请求路径", T.class);
        
发布了1 篇原创文章 · 获赞 1 · 访问量 36

猜你喜欢

转载自blog.csdn.net/qq_34474521/article/details/105132803