浅谈“阿里云”微服务分布式解决方案Spring Cloud Alibaba 的前世今生
前沿:全文比较长阅读可能需要10-15分钟
借用阿里巴巴云栖大会上的一句话“侠之大者,为国为民”。在金庸小说中,郭靖和黄蓉是“侠之大者,为国为民”的典范,他们以布衣之身帮助宋军守护襄阳十余年,成为世人笔下和口中传送的侠义之举。
技术的世界里,并无大小之分,为成千上万在技术领域埋头深耕的企业和工程师们点赞。
2016年的那届双11,阿里的RocketMQ 团队首次将低延迟存储解决方案应用于双11的支撑,经受住了流量的大考,整个大促期间,99.996%的延迟落在了10ms以内,完成了保障交易稳定的既定目标,阿里云智能中间件的程序员们正和社区的开发者们一起,用键盘敲下国内微服务开源项目的过去和未来。
在2017年9月25日,Apache软件基金会官方宣布,阿里巴巴捐赠给 Apache 社区的开源项目 RocketMQ 从 Apache社区正式毕业,成为 Apache 顶级项目(TLP),诞生国内首个非 Hadoop 生态体系的 Apache 社区顶级项目。对于读写比例几乎均衡的分布式消息引擎来说,这一技术上的突破,即便是放在全球范围内,也绝对是值得称赞的。
2018年,中国的 Java 圈发生了一件大事。Spring Cloud 联合创始人 Spencer Gibb 在 Spring 官网的博客页面宣布:阿里巴巴开源 Spring Cloud Alibaba,并发布了首个预览版本。随后,Spring Cloud 官方 Twitter 也发布了此消息。至此Spring Cloud Albaba正式出现在大众眼前。Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合。
写到这里我们就不得不提起微服务了,我们先来认识微服务在云计算领域的定义,应用场景,整体的架构,优缺点有哪些。
微服务架构(通常简称为微服务)是指开发应用所用的一种架构形式。 通过微服务,可将大型应用分解成多个独立的组件,其中每个组件都有各自的责任领域。在处理一个用户请求时,基于微服务的应用可能会调用许多内部微服务来共同生成其响应。
容器是微服务架构的绝佳示例,因为它们可让您专注于开发服务,而无需担心依赖项。现代云原生应用通常使用容器构建为微服务。下面以Docker部署微服务为例说明:
1、微服务架构的定义:
微服务架构将单体应用,按照业务领域拆分为多个高内聚低耦合的小型服务,每个小服务运行在独立进程,由不同的团队开发和维护,服务间采用轻量级通信机制,如HTTP RESTful API,或者RPC,独立自动部署,可以采用不同的语言及存储。
微服务体现去中心化、天然分布式,是中台战略落地到IT系统的具体实现方式的技术架构,用来解决企业业务快速发展与创新时面临的系统弹性可扩展、敏捷迭代、技术驱动业务创新等难题。
- 微服务架构是一种架构模式,将单体应用划分成一组小的服务,服务之间互相协作,共同实现系统功能
- 每个服务运行在其独立的进程中,服务间采用轻量级的通信机制协作(通常是基于Restful API)
- 每个服务都围绕着具体业务进⾏构建,由独立的小团队负责设计、开发、测试,并可以独立部署到生产环境
2、微服务的特点
1、小 按照业务单一职责设计
2、独 立进程,独立部署
3、轻 量级的通信机制
•4、松 耦合
3、中台和微服务有什么关系?
中台架构,简单地说,就是企业级能力的复用,一个种方法论,企业治理思想。
微服务,是可独立开发、维护、部署的小型业务单元,是一种技术架构方式。
可见,中台并不是微服务,中台是一种企业治理思想和方法论,微服务是技术架构方式。
中台化的落地,需要使用微服务架构
- 中台强调核心基础能力的建设,基础能力以原子服务的形式来建设,并通过将原子服务产品化,支撑业务端各种场景的快速迭代和创新;原子服务和微服务所倡导的服务自闭环思想不谋而合,使得微服务成为实现原子服务的合适架构。
- 支撑业务场景的应用也是通过服务来实现,其生命周期随业务变化需要非常灵活的调整,这也和微服务强调的快速迭代高度一致,所以业务应用服务也适合通过微服务来实现。
- 中台化系统建设不是一蹴而就的,需要长期动态的演进,加上其技术体系已经在互联网领域被证明且相当成熟,其在企业落地、执行的土壤已经具备。
4、微服务架构的用途和应用场景有哪些?
微服务作为云计算PaaS层的一个重要的服务,有哪些应用场景呢?
通常情况下,微服务可用于加快应用开发速度。使用 Java 构建的微服务架构非常常见,尤其是 Spring Boot 架构。比较微服务与面向服务的架构也很常见。它们具有相同的目标,即将单体式应用分解为更小的组件,但这些架构所用的具体方法素有不同。以下是一些微服务架构示例:
- 网站迁移:托管在单体式平台上的复杂网站可以迁移到云端和基于容器的微服务平台。
- 媒体内容:通过使用微服务架构,图片和视频资源可以存储在可扩缩的对象存储系统中,并直接提供给网站或移动设备。
- 交易信息和帐单:付款处理和订单可分离开来,各自作为独立的服务单元,这样即便帐单服务无法正常工作,也能正常接收付款。
- 数据处理:微服务平台可以扩展对现有模块化数据处理服务的云端支持。
我们以一个简单的微服务在电商领域的应用为例进行说明,
一、使用微服务之前:
如果是单体架构,传统的应用开发整个大团队必须要精确的协作起来以便正确开发、测试和部署应用,包括评论管理,推荐管理,订单管理,支付管理都会涉及到大团队之间的相互协同。
这种单体应用比较适合于小项目,优点是:
- 开发简单直接,集中式管理
- 基本不会重复开发
- 功能都在本地,没有分布式的管理开销和调用开销
当然它的缺点也十分明显,特别对于互联网公司来说:
- 开发效率低:所有的开发在一个项目改代码,递交代码相互等待,代码冲突不断
- 代码维护难:代码功能耦合在一起,新人不知道何从下手
- 部署不灵活:构建时间长,任何小修改必须重新构建整个项目,这个过程往往很长
- 稳定性不高:一个微不足道的小问题,可以导致整个应用挂掉
- 扩展性不够:无法满足高并发情况下的业务需求
二、使用微服务以后:
使用微服务架构以后,可以独立开发和部署各个单元、整体应用的开发可以根据业务模块进行拆分,重组为小团队但是使用API与契约保证功能不变
现在主流的设计一般会采用微服务架构。其思路不是开发一个巨大的单体式应用,而是将应用分解为小的、互相连接的微服务。一个微服务完成某个特定功能,比如乘客管理和下单管理等。每个微服务都有自己的业务逻辑和适配器。
每个业务逻辑都被分解为一个微服务,微服务之间通过REST API通信。一些微服务也会向终端用户或客户端开发API接口。但通常情况下,这些客户端并不能直接访问后台微服务,而是通过API Gateway来传递请求。API Gateway一般负责服务路由、负载均衡、缓存、访问控制和鉴权等任务 。
三、传统的大兵团作战>特种战术小队的协同作战
通过对比单体架构和微服务架构,我们可以总结这是一场战术技术的大革命,从传统的大兵团作战,过渡到无数的特种战术小队协同作战。
3、Spring Cloud Alibaba分布式微服务解决方案以及阿里云容器服务
一、Spring Cloud 的概述
首先SpringCloud 是若干个框架的集合,包括 spring-cloud-config、spring-cloud-bus 等近 20 个子项目,提供了服务治理、服务网关、智能路由、负载均衡、断路器、监控跟踪、分布式消息队列、配置管理等领域的解决方案。
Spring Cloud 通过 Spring Boot 风格的封装,屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、容易部署的分布式系统开发工具包。
Spring Cloud 包含以下组件,主要以 Netflix 开源为主:
Spring Cloud 包含了很多组件,包括服务的注册和发现,容错,消费,驱动,配置中心,网关和安全认证等。
二、SpringCloud项目简介
springCloud是基于SpringBoot的一整套实现微服务的框架。他提供了微服务开发所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。最重要的是跟spring boot框架一起使用的话,会让你开发微服务架构的云服务非常好的方便。
三、为什么使用Spring Cloud
- Spring Cloud来源于Spring,质量、稳定性、持续性都可以得到保证
- Spirng Cloud天然支持Spring Boot,更加便于业务落地。
- Spring Cloud发展非常的快,从16年开始接触的时候相关组件版本为1.x,到现在将要发布2.x系列
- Spring Cloud是Java领域最适合做微服务的框架。
- 相比于其它框架,Spring Cloud对微服务周边环境的支持力度最大。
- 对于中小企业来讲,使用门槛较低。
四、Spring Cloud Alibaba包含了哪些组件和服务
Spring Cloud Alibaba 系列组件,其中包含了阿里开源组件,阿里云商业化组件,以及集成Spring Cloud 组件,下图是整体的概览
总共分为分为7个模块,包括开源组件,商业化服务组件,服务治理,网关和服务层。
这里分开来介绍,开源的组件如下:
Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
RocketMQ:开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
Dubbo:这个就不用多说了,在国内应用非常广泛的一款高性能 Java RPC 框架。
Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
Arthas:开源的Java动态追踪工具,基于字节码增强技术,功能非常强大。
商业化组件
阿里巴巴推出 Spring Cloud Alibaba,很大程度上市希望通过抢占开发者生态,来帮助推广自家的云产品。
Alibaba Cloud ACM:一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心产品。
Alibaba Cloud OSS:阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的云存储服务。
Alibaba Cloud SchedulerX:阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准的定时(基于 Cron 表达式)任务调度服务。
五、阿里云容器服务
容器及一种服务,Container as a service 容器又是微服务的载体,容器为服务提供了生存空间和土壤,
阿里云的容器服务可以根据用户的不同服务需求和业务应用需要,提供独立且隔离的容器集群和资源,控制台通过Docker的引擎控制和管理各个域,控制台统一对集群资源进行管理,服务注册和发现,以及资源的动态调度和业务生命周期管理。如下图例所示。
整体的架构和服务组件如下:
服务编排部署 – 增强生命周期管理
服务调度扩展
存储管理
后记:
目前阿里在微服务领域,已经有Dubbo、Druid,FastJson等成功的开源组件,再加上阿里不遗余力的推广,社区发展也非常快。Dubbo是国内应用最广的分布式服务框架之一,基于Dubbo改造的Dubbox等也有很多公司在使用,集成Dubbo,利用Dubbo在微服务领域的超高人气Spring Cloud Alibaba对Dubbo做了比较好的集成,可以吸引不少使用Dubbo的开发者。
另外云原生成为趋势,云原生(Cloud Native)是今年技术领域特别热门的一个词,云原生是一种专门针对云上应用而设计的方法,用于构建和部署应用,以充分发挥云计算的优势。
Spring Cloud Alibaba 集成了阿里云的商业化组件,可以说天然支持云原生特性。
参考资料:阿里云云栖号:Spring Cloud Alibaba 新一代微服务解决方案