1.微服务基础知识

微服务基础知识

本文系统的总结了架构的演变过程,并对微服务架构进行了整体说明,使各位读者对于微服务架构能有一个系统性的了解,并着重介绍了Spring Cloud的整体结构,在之后的几篇文章中,笔者将对Spring Cloud的各个组件进行详细的讲解说明:注册中心组件Eureka、Consul服务调用组件Ribbon、Feign服务熔断组件Hystrix

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协议

    两种调用技术的比较:

    比较项RestfulRPC
    通信协议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客户端容错保护
      ZuulAPI服务网关

      Spring Cloud Alibaba组件

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

      Spring Cloud 原生及其他组件

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

    Apache的微服务顶级项目

  3. ZeroC ICE

4. 服务调用

  1. 传统方式

    使用Java中的urlconnectionhttpclientokhttp

  2. RestTemplate

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

    • 常用方法

      Http MethodRestTemplate Method
      GETgetForObject(String, Class<T>, Object...); getForEntity(String, Class<T>, Object...);
      POSTpostForLocation(String, Object, Object...); postForObject(String, Object, Class<T>,Object...)
      PUTput(String, Object, Object...)
      DELETEdelete(String, Object...)
      HEADheadForHeaders(String, Object...)
      OPTIONSoptionForAllow(String, Object...)
      ANYexchange(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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值