一起玩转微服务(2)——框架与工具

一、微服务架构有哪些优势?

  • 独立开发 – 所有微服务都可以根据各自的功能轻松开发·
  • 独立部署 – 基于其服务,可以在任何应用程序中单独部署它们·
  • 故障隔离 – 即使应用程序的一项服务不起作用,系统仍可继续运行· 混合技术堆栈 – 可以使用不同的语言和技术来构建同一应用程序的不同服务·
  • 粒度缩放 – 单个组件可根据需要进行缩放,无需将所有组件缩放在一起

二、微服务有哪些特点?

  • 解耦 – 系统内的服务很大程度上是分离的。因此,整个应用程序可以轻松构建,更改和扩展·
  • 组件化 – 微服务被视为可以轻松更换和升级的独立组件·
  • 业务能力 – 微服务非常简单,专注于单一功能·
  • 自治 – 开发人员和团队可以彼此独立工作,从而提高速度·
  • 持续交付 – 通过软件创建,测试和批准的系统自动化,允许频繁发布软件·
  • 责任 – 微服务不关注应用程序作为项目。相反,他们将应用程序视为他们负责的产品·
  • 分散治理 – 重点是使用正确的工具来做正确的工作。这意味着没有标准化模式或任何技术模式。开发人员可以自由选择最有用的工具来解决他们的问题·
  • 敏捷 – 微服务支持敏捷开发。任何新功能都可以快速开发并再次丢弃

三、微服务架构如何运作?

微服务架构具有以下组件:

 

 

 

  • 客户端 – 来自不同设备的不同用户发送请求。·
  • 身份提供商 – 验证用户或客户身份并颁发安全令牌。·
  • API 网关 – 处理客户端请求。·
  • 静态内容 – 容纳系统的所有内容。·
  • 管理 – 在节点上平衡服务并识别故障。·
  • 服务发现 – 查找微服务之间通信路径的指南。·
  • 内容交付网络 – 代理服务器及其数据中心的分布式网络。·
  • 远程服务 – 启用驻留在 IT 设备网络上的远程访问信息。

四、什么是 REST / RESTful 以及它的用途是什么?

Representational State Transfer(REST)/ RESTful Web 服务是一种帮助计算机系统通过 Internet 进行通信的架构风格。这使得微服务更容易理解和实现。微服务可以使用或不使用 RESTful API 实现,但使用 RESTful API 构建松散耦合的微服务总是更容易。

五、什么是不同类型的微服务测试?

在使用微服务时,由于有多个微服务协同工作,测试变得非常复杂。因此,测试分为不同的级别。·

  • 在底层,我们有面向技术的测试,如单元测试和性能测试。这些是完全自动化的。·
  • 在中间层面,我们进行了诸如压力测试和可用性测试之类的探索性测试。·
  • 在顶层, 我们的 验收测试数量很少。这些验收测试有助于利益相关者理解和验证软件功能。

六、常用的微服务框架

各种语言都有自己的微服务框架,主要包括:

  • 主流微服务框架:SpringCloud、Dubbo、spring cloud alibaba
  • 新锐微服务框架:Istio

下面一起看一下常用的微服务框架体系。

1. Spring 顶级项目

首先,我们一起来看一下Spring的顶级项目都包括哪些:

  • Spring IO platform:用于系统部署,是可集成的,构建现代化应用的版本平台,具体来说当你使用maven dependency引入Spring jar包时它就在工作了。
  • Spring Boot:旨在简化创建产品级的 Spring 应用和服务,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用微服务功能,可以和Spring Cloud联合部署。
  • Spring Framework:即通常所说的Spring 框架,是一个开源的Java/Java EE全功能栈应用程序框架,其它Spring项目如Spring Boot也依赖于此框架。
  • Spring Cloud:微服务工具包,为开发者提供了在分布式系统的配置管理、服务发现、断路器、智能路由、微代理、控制总线等开发工具包。
  • Spring XD:是一种运行时环境(服务器软件,非开发框架),组合Spring技术,如Spring batch、Spring Boot、Spring data,采集大数据并处理。
  • Spring Data:是一个数据访问及操作的工具包,封装了很多种数据及数据库的访问相关技术,包括:jdbc、Redis、MongoDB、Neo4j等。
  • Spring Batch:批处理框架,或说是批量任务执行管理器,功能包括任务调度、日志记录/跟踪等。
  • Spring Security:是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。
  • Spring Integration:面向企业应用集成(EAI/ESB)的编程框架,支持的通信方式包括HTTP、FTP、TCP/UDP、JMS、RabbitMQ、Email等。
  • Spring Social:一组工具包,一组连接社交服务API,如Twitter、Facebook、LinkedIn、GitHub等,有几十个。
  • Spring AMQP:消息队列操作的工具包,主要是封装了RabbitMQ的操作。
  • Spring HATEOAS:是一个用于支持实现超文本驱动的 REST Web 服务的开发库。
  • Spring Mobile:是Spring MVC的扩展,用来简化手机上的Web应用开发。
  • Spring for Android:是Spring框架的一个扩展,其主要目的在乎简化Android本地应用的开发,提供RestTemplate来访问Rest服务。
  • Spring Web Flow:目标是成为管理Web应用页面流程的最佳方案,将页面跳转流程单独管理,并可配置。
  • Spring LDAP:是一个用于操作LDAP的Java工具包,基于Spring的JdbcTemplate模式,简化LDAP访问。
  • Spring Session:session管理的开发工具包,让你可以把session保存到redis等,进行集群化session管理。
  • Spring Web Services:是基于Spring的Web服务框架,提供SOAP服务开发,允许通过多种方式创建Web服务。
  • Spring Shell:提供交互式的Shell可让你使用简单的基于Spring的编程模型来开发命令,比如Spring Roo命令。
  • Spring Roo:是一种Spring开发的辅助工具,使用命令行操作来生成自动化项目,操作非常类似于Rails。
  • Spring Scala:为Scala语言编程提供的Spring框架的封装(新的编程语言,Java平台的Scala于2003年底/2004年初发布)。
  • Spring BlazeDS Integration:一个开发RIA工具包,可以集成Adobe Flex、BlazeDS、Spring以及Java技术创建RIA。
  • Spring Loaded:用于实现java程序和web应用的热部署的开源工具。
  • Spring REST Shell:可以调用Rest服务的命令行工具,敲命令行操作Rest服务。

2. 背景

对于使用java技术更多的团队来说,dubbo,Spring Cloud的知名度相对较高,而且在业界的影响力非常高。那么我们就来一起讨论一下这两种框架,做一个综合的评比。
Dubbo
Dubbo是阿里出品的服务化组件,应用于多个部门,后来开源之后,也衍生出像dubbox这样的框架,对其进行了进一步的增强。Dubbo 是一个分布式服务框架,是国内互联网公司开源做的比较不错的阿里开放的微服务化治理框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。目前Dubbo已经正式进入Apache孵化器。

现在可以再apache 下面找到dubbo

http://dubbo.apache.org/zh-cn/

 

其核心部分包含:

  • 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式;
  • 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持;
  • 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

 

Spring Cloud
Spring Cloud从其命名中就可以知道,是Spring Source的产物,可以说Spring的出现整个改变了企业级开发,Spring Cloud,除了具有 Spring 社区的强大背景外,还有 Netflix 强大的后盾与技术输出。Netflix 作为一家成功实践微服务架构的互联网公司,在几年前就把几乎整个微服务框架栈开源贡献给了社区,这些框架开源的整套微服务架构套件是 Spring Cloud 的核心。

  • Eureka: 服务注册发现框架;
  • Zuul: 服务网关;
  • Karyon: 服务端框架;
  • Ribbon: 客户端框架;
  • Hystrix: 服务容错组件;
  • Archaius: 服务配置组件;
  • Servo: Metrics组件;
  • Blitz4j: 日志组件。

从背景上来看,前者在国内的影响力比较大,后者在国外的影响力比较大,使用的公司也更多一些。

spring-cloud-alibaba

地址:

https://spring.io/projects/spring-cloud-alibaba

服务限流降级:默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。
消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。
分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。。
阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。
阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

Istio
Istio 作为用于微服务服务聚合层管理的新锐项目,是 Google、IBM、Lyft(海外共享出行公司、Uber劲敌) 首个共同联合开源的项S目,提供了统一的连接,安全,管理和监控微服务的方案。
目前首个测试版是针对 Kubernetes 环境的,社区宣称在未来几个月内会为虚拟机和 Cloud Foundry 等其他环境增加支持。 Istio 将流量管理添加到微服务中,并为增值功能(如安全性,监控,路由,连接管理和策略)创造了基础。

  • HTTP、gRPC 和 TCP 网络流量的自动负载均衡;
  • 提供了丰富的路由规则,实现细粒度的网络流量行为控制;
  • 流量加密、服务间认证,以及强身份声明;
  • 全范围(Fleet-wide)的策略执行;
  • 深度遥测和报告。

3. 社区活跃度

我们选择一个开源框架,社区的活跃度是我们极为关注的一个要点。社区越活跃,解决问题的速度越快,框架也会越来越完善,不然当我们碰到问题,就不得不自己解决。
先看一下dubbo和dubbox,
下图是dubbo目前的情况,在2017年,阿里已经宣布有团队重新维护dubbo项目,可以看到dubbo项目已经重新开始修复里边的一些bug,并且进入不断的完善的过程中了。Dubbo 目前在 GitHub 上有超过 16000 个 star 和超过 12000 的 fork 数,是国内影响力最大的开源项目之一。

 

 

反倒是继承而来的dubbox,已经有很长时间没有进行维护了。

 

 

再看Spring Cloud,沿袭着Spring一惯的风格,更新非常及时,响应的速度也非常快,社区非常活跃。

4. 架构完整度

根据微服务架构在各方面的要素,看看Spring Cloud和Dubbo都提供了哪些支持。表N展示了Dubbo和Spring Cloud的区别。

 

其实单纯从提供的数量上来比较,有一些不公平,因为dubbo是几年前出来的,极大的改变了人们对于分布式系统的认知。而上边写无的部分其实也可以整合其它的框架,所以,对于这一点的评比上来说,选用何种框架取决于团队目前的情况,而不是一下子就全部转型,要阶梯式的实现整个应用架构。

5. 总结

使用Dubbo构建的微服务架构就像组装电脑,各环节我们的选择自由度很高,但是最终结果很有可能因为一条内存质量不行就点不亮了,总是让人不怎么放心,但是如果你是一名高手,那这些都不是问题;而Spring Cloud就像品牌机,在Spring Source的整合下,做了大量的兼容性测试,保证了机器拥有更高的稳定性,但是如果要在使用非原装组件外的东西,就需要对其基础有足够的了解。

最后呢,说一下工具,个人偏好是eclipse派!
https://spring.io/tools

 

posted @ 2020-06-16 12:09  skyme  阅读(1526)  评论(3编辑  收藏  举报