微服务概述及常见解决方案

微服务概述

专业解释

微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一个个小的服务,每个服务运行在其独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。

我的通俗理解

就六个字:“高内聚,低耦合”。
没错,就是这个在软件开发过程中被反复提到的六个字,各类设计模式、架构设计、从入门到放弃等各种书中总会提到,从初级到高级到骨灰级程序员、架构师挂在嘴边的也是这六个字。只不过,在微服务概念之前,这六个字被用在类、模块、组件上,微服务则是将它放在服务上。

优缺点:

优点

  • 微服务是松藕合的,无论是在开发阶段或部署阶段都是独立的。能够快速响应, 局部修改容易, 一个服务出现问题不会影响整个应用。
  • 易于和第三方应用系统集成, 支持使用不同的语言开发, 允许你利用融合最新技术。
  • 每个微服务都很小,足够内聚,足够小,代码容易理解。团队能够更关注自己的工作成果, 聚焦指定的业务功能或业务需求。
  • 开发简单、开发效率提高,一个服务可能就是专一的只干一件事, 能够被小团队单独开发,这个小团队可以是 2 到 5 人的开发人员组成。

缺点

  • 开发人员要处理分布式系统的复杂性
  • 多服务运维难度, 随着服务的增加,运维的压力也在增大
  • 系统部署依赖、服务间通信成本、数据一致性、系统集成测试、性能监控

备注:缺点其实就是待解决的问题,所以也就有了一系列的微服务解决方案,其实质是工具集。

微服务架构方案

第一套解决方案:Apache Dubbo Zookeeper

技术架构:

  • Zookeeper(服务注册中心)
  • Dubbo-monitor(服务监控)

备注:Dubbo相当不完善,需要借助很多第三方组件

第二套解决方案:Spring Cloud Netflix 【已停止开发,进入维护阶段】

技术架构:

  • Eureka (服务注册与发现)
  • Feign(整合了ribbon和Hystrix,负载均衡和熔断限流等)
  • Ribbon(负载均衡)
  • Hystrix (熔断限流,合并请求等)
  • Hystrix Dashboard (提供了服务监控的功能,提供了数据监控和友好的图形化界面)
  • Hystrix Turbine (Hystrix Turbine将每个服务的Hystrix Dashboard数据进行了整合。也是监控系统的功能)
  • Zuul (智能路由和过滤)
  • 五大神兽(Eureka、Ribbon、Hystrix 、Zuul 、Config )

备注:2018年年底,Netflix宣布停止开发,进入维护模式。

以上两种方案对比:

  • 最大区别:SpringCloud抛弃了Dubbo的RPC通信,采用的是基于HTTP的REST方式。 严格来说,这两种方式各有优劣。虽然从一定程度上来说,后者牺牲了服务调用的性能,但避免了原生RPC带来的问题。而且REST相比RPC更为灵活,服务提供方和调用方的依赖只依靠一纸契约,不存在代码级别的强依赖,这在强调快速演化的微服务环境下,显得更加合适。
  • 产品定位不同:Dubbo的定位是一款RPC框架,Spring Cloud的目标是微服务架构下的一站式解决方案

第三套解决方案:Spring Cloud Alibaba

技术架构:

  • Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。兼顾注册中心与配置中心。
  • Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
  • RocketMQ:开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
  • Dubbo:这个就不用多说了,在国内应用非常广泛的一款高性能 Java RPC 框架。
  • Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
  • Arthas:开源的Java动态追踪工具,基于字节码增强技术,功能非常强大。
    在这里插入图片描述

技术栈大总结

服务注册中心

用来管理微服务架构中每一个服务健康状态以及服务元数据存储。

技术栈:

  • Eureka (所属 Netflix ,包括EurekaServer和EurekaClient)
  • Consul(所属SpringCloud,GO语言实现)
  • Zookeeper (所属Apache,JAVA语言实现 )
  • Nacos:(所属Alibaba,JAVA语言实现)
服务配置中心

用来将微服务的配置文件进行远端仓库统一管理。

技术栈:

  • Spring Cloud Config:提供统一配置的功能,ConfigServer 用来获取远端仓库配置,并存入本地仓库、ConfigClient
    (根据ConfigServer 读取自身配置.
  • Spring Cloud Bus(消息总线):提供了配置实时更新的功能,通过MQ将微服务的所有节点连接到一起通过消息总线实现自动配置刷新。
  • Nacos:所属Alibaba,兼顾配置注册中心和配置中心。
服务间通信组件

两种实现方式:
Dubbo的RPC方式(底层基于Netty实现,而Netty底层基于Java NIO,基于TCP建立的长链接)。
SpringCloud的HTTP Restful方式,短连接的方式。

HTTP Restful方式性能不如RPC,但可跨异构系统,不要求各系统使用同一种语言。
HTTP Restful方式有两种实现方案:

  • RestTemplate(路径写死、没有负载均衡)+Ribbon(所属Netflix ,实现负载均衡)
  • OpenFeign(所属SpringCloud,封装了Netflix 的Feign,自带负载均衡)
服务熔断组件

采用服务熔断或服务降级的方式解决服务雪崩问题
技术栈:

  • Hystrix (所属Netflix)
  • Sentinel(所属Alibaba)
服务网关组件

用来统一服务总入口,实现路由转发和过滤
技术栈:

  • Zuul1.x、Zuul2.x (所属Netflix)
  • Gateway(所属SpringCloud)

总结

对微服务的通俗理解:高内聚、低耦合
对SpringCloud的通俗理解:微服务工具集

Dubbo在一开始的定位是RPC框架,近几年随着微服务的兴起,才开始向着微服务解决方案更新迭代。但目前为止,Dubbo还相当不完善,需要借助很多第三方组件。
Spring Cloud Netflix是一站式微服务解决方案,但已停止开发,进入维护阶段。
Spring Cloud Alibaba是在Spring cloud netflix基础上封装了阿里巴巴的微服务解决方案,是目前最完善的微服务解决方案。

综上,目前最佳方案是:

  1. 服务注册中心 Nacos
  2. 服务配置中心 Nacos
  3. 服务熔断组件 Sentinel
  4. 服务间通信组件 OpenFeign
  5. 服务网关组件 Gateway

附图一:
在这里插入图片描述
附图二:
在这里插入图片描述

本文章整合了好几篇优质文章。如若侵权,请联系作者,立即删除。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值