当前位置: 首页 > 科技观察

给老大解释一下,为什么要用SpringCloudalibaba作为微服务开发框架???

时间:2023-03-21 16:53:23 科技观察

本文转载自微信公众号《JAVA日知录》,作者:飘渺果酱。转载本文请联系JAVA日知录公众号。什么是微服务说到微服务就不得不提MartinFowler在2014年3月25日发表的文章Microservices,给出了微服务的定义。后续国内所有关于微服务的介绍都是基于本文的翻译,或者结合自己的理解。最重要的段落如下:简而言之,微服务架构风格[1]是一种将单个应用程序开发为一组小服务的方法,每个服务都在自己的进程中运行并与轻量级机制通信,通常是HTTP资源API.这些服务围绕业务能力构建,可通过全自动部署机制独立部署。这些服务有最低限度的集中管理,可能用不同的编程语言编写,并使用不同的数据存储技术。这转化为:架构风格是一种将一组小型服务发展为单个应用程序的方法。每个应用程序都运行在自己的进程中,并通过轻量级机制进行通信,例如HTTP等API。这些服务基于业务场景,使用自动化部署工具独立发布。可以有一个非常轻量级的集中管理来协调这些服务,服务可以用不同的语言编写,可以使用不同的数据存储。如何实现微服务相对于单体架构简单粗暴。微服务架构将应用打散,形成多个微服务,独立开发、测试、部署和运维。虽然在管理和逻辑上更符合业务需求,但微服务架构也带来了很多亟待解决的核心问题:如何发现新的服务节点,如何检查服务节点的状态?如何发现服务,如何实现负载均衡?进行消息通信?如何将服务API暴露给用户?如何集中管理多个服务节点的配置文件?如何收集服务节点的日志并统一管理?微服务雪崩?可以发现,上述问题并非特定于某种语言或某种技术。任何一个想要构建微服务架构的软件厂商都必须面对这些问题,要么独立开发,要么集成多种现有技术形成一个整体的解决方案。庆幸的是,经过多年的沉淀,业界早已有了标准答案。下图清楚地说明了微服务架构所需的标准组件。APIGateway:封装了系统的内部架构,为每个客户端提供定制化的API。在微服务架构中,服务网关的核心点是所有客户端和消费者通过一个统一的网关访问微服务,并在网关层处理所有非业务功能。注册中心:微服务架构体系中的核心技术组件,起到新服务节点的注册和状态维护的作用。Dubbo、SpringCloud等主流微服务框架都基于Zookeeper、Eureka等分布式系统协调工具构建了服务注册中心。服务路由:在通过注册中心搭建的多服务集群环境中,当客户端请求到达集群时,如何判断哪个服务器响应该请求?这就是服务路由的问题。服务通信:在微服务定义中声明,服务之间的通信采用轻量级的协议,通常是HTTPRESTful风格。但由于RESTful风格过于灵活,必须加以约束,应用时通常封装在上层。例如SpringCloud中提供了Feign和RestTemplate来屏蔽底层的RESTful通信细节。服务保护:对于分布式环境下的服务,当服务本身发生故障并导致错误时,它也会因为依赖其他服务而发生故障。除了超时、重试、异步解耦这些比较容易想到和实现的,我们还需要考虑各种场景的容错机制。链接跟踪:一个复杂的业务流程可能需要持续调用多个微服务。我们需要记录一个完整的业务逻辑中涉及到的每一个微服务的运行状态,然后通过可视化的链接图展示出来,以在系统出现问题时帮助软件工程师。分析和解决问题,常见的方案有Zipkin和SkyWalking。统一日志管理:微服务架构默认将应用日志分散保存在各个微服务节点上。系统在进行用户行为分析和数据统计时,必须收集所有节点的日志数据,非常不方便。这时候就需要一个独立的日志平台来收集所有节点的日志数据,方便汇总分析。常见的解决方案包括ELK和EFK。配置中心:在微服务架构中,考虑到服务数量多,配置信息分散,一般需要介绍一下配置中心的设计思想和相关工具。通过部署配置中心服务器,将原本分散的配置文件从应用中剥离出来,集中传输到配置中心。配置中心一般会提供UI界面,可以方便快捷的实现大规模集群的配置调整。为什么选择SpringCloud首先,SpringCloud有天然的优势,因为它是Spring家族的一员,而Spring在JavaEE开发领域的强势地位,对SpringCloud起到了很好的推动作用。同时,基于SpringCloud的SpringBoot已经成为JavaEE领域最流行的开发框架,用于简化Spring应用的框架构建和开发过程。其次,技术组件的完备性是我们选择SpringCloud的主要原因。SpringCloud几乎包含了开发一个完整的微服务系统所需的所有技术组件,包括服务注册与发现、API网关、配置中心、消息处理、负载均衡、熔断器、数据监控等常用技术组件都可以基于SpringBoot快速上手集成到业务系统中。以下是SpringCloud中常用的技术组件。为什么选择SpringCloudAlibaba?首先,SpringCloud里面的技术组件是最好的,比如注册中心Eureka、Zuul等都是依赖Netflix的,这也让它受制于第三方厂商。如果Zuul宣布停止维护,Spring组织将不得不寻找替代品或自行开发;尤里卡2。在互联网上,又没有维护界面,国内的软件公司很少同意这样做。比如我们部门使用Apollo配置中心来替代原生的SpringCloudConfig。SpringCloudAlibaba是国内微服务开发的一站式解决方案。兼容原有的SpringCloud,扩展了微服务生态。通过加入少量的配置注解,可以实现更符合国情的微服务架构。目前SpringCloudCloudAlibaba已经是SpringCloud直属子项目。官网为:https://spring.io/projects/spring-cloud-alibaba#overviewSpringCloudAlibaba将服务注册、配置中心和负载均衡功能集成到Nacos中,并具有图形界面,简化了微服务的复杂度架构,出现问题的概率也会降低。原有的服务保护组件也调整为Sentinel,相比Hystrix更加强大和易用。同时也支持调用Dubbo,使用Seata来支持分布式事务。