微服务学习 --- Spring Cloud概述
目录1.认识微服务1.1 单体架构1.2 集群和分布式架构1.3 微服务架构1.4 微服务带来的优势与挑战2.微服务解决方案 - Spring Cloud2.1 什么是Spring Cloud2.2 Spring Cloud版本2.3 Spring Cloud实现方案3.小结从这篇文章开始我将开始介绍微服务的相关知识。众所周知微服务架构已成为现代软件开发的重要范式它将复杂系统拆分为独立、可扩展的服务提升了灵活性和开发效率。学习微服务不仅是掌握技术栈更是理解分布式系统设计、团队协作和持续交付的核心理念。学习微服务就离不开Spring Cloud的学习。在学习 Spring Cloud 之前我们先来了解下什么是微服务以及微服务的发展史。在架构发展的过程中项目开发遇到了哪些问题以及 Spring Cloud 是用来解决什么问题的。这会对我们的学习有一定的帮助。1.认识微服务到底什么是微服务呢简单来说微服务是一种经过演变而来的服务架构。服务架构最早是单体的也被称作单体应用下图就很好地表示了服务架构从单体应用向微服务架构的转变我们先来看服务架构最早的样子——单体架构是什么样的。1.1 单体架构单体架构Monolithic Architecture是一种传统的软件设计模式整个应用程序作为一个单一、紧密集成的单元构建和部署。很多创业公司早期或者传统企业会把业务的所有功能实现都打包在一个项目这就是单体架构。像这样业务的所有功能实现都打包在一个 war 包或者 Jar 包中这种方式就称为单体架构。我以大家都熟悉的电商平台为例。电商平台包括用户管理商品管理订单管理支付管理库存管理物流管理等等一个项目早期会把这些模块都写在一个web项目中然后统一部署到一个web服务器中去。这种架构的优点在于开发简单部署简单⼀个项⽬就包含了所有的功能省去了多个项⽬之间的交互和调用消耗直接部署在⼀个服务器即可。但缺点也很明显随着功能增加代码增多维护成本上升。扩展性差无法针对特定模块独立扩展。技术升级困难全系统依赖同一技术栈。因此早期服务架构经过时间的推移渐渐抛弃了这种架构转头向新的服务架构靠拢。1.2 集群和分布式架构当网站的用户量越来越大需求就会越来越多用户量也会越来越大服务可能会面临以下问题1.后端服务器压力越来越大负载越来越高可能出现无法访问的情况。2.业务场景逐渐复杂。为了满足用户需求单体应用也会越来越大各个模块代码之间的耦合度也会越来越高。一旦出了任何一个问题整个项目都要重新打包构建发布。3.一个很微小的问题可能导致整个服务挂掉。因此我们可以从两个方面进行优化横向添加服务器把单台机器变为多台机器的集群。纵向把一个应用按照业务进行拆分拆分为多个项目。此架构也称为垂直架构。以单体结构规模的项目为单位进行垂直划分也就是将一个大项目拆分为一个一个的单体项目项目与项目之间比较独立接口用于数据同步。由此就引入了集群和分布式这两种概念。集群 (cluster)是将一个系统完整的部署到多个服务器上每个服务器都能提供系统所有的服务多个服务器间通过负载均衡调度完成任务。每个服务器称为集群的节点 (node)。分布式是将一个系统拆分为多个子系统多个子系统部署在多个服务器上多个系统上的子系统协同合作完成一个特定的任务。举个例子假设有一个餐馆这个餐馆只有一个厨师因此这个厨师就要负责做饭相关的所有工作。随着餐馆生意的火爆一个厨师逐渐忙不过来因此这个厨师现在有两个选择1.再招聘一个厨师两个厨师都负责做饭相关的所有工作。2.将厨师的工作分为洗菜切菜配菜炒菜。招聘一个配菜师负责洗菜切菜配菜厨师只负责炒菜。后面随着餐馆的生意更加火爆一个配菜师也忙不过来了就再招聘多个厨师多个配菜师。集群和分布式的区别和联系在于1.从概念上来看集群是多个计算机做同样的事分布式是多个计算机做不同的事。2.从功能上来看集群的每一个节点功能是相同的并且是可以替代的。分布式也是多个节点组成的系统但是每个节点完成的业务是不同的一个节点出问题这个业务就不可访问了。3.从关系上来看分布式和集群在实践中很多情况下是相互配合使用的。比如分布式的某一个节点可以由一个集群来代替。分布式架构大多是建立在集群上的所以实际的分布式架构设计中并不会把分布式和集群单独区分而是统称为分布式架构。1.3 微服务架构在分布式架构下当部署的服务越来越多重读的代码就会越来越多服务的调用关系也会越来越复杂。我们可以把一些通用的会被多个上层服务调用的共享业务提取成独立的基础服务组成一个个微小的服务这就是微服务。因此微服务架构是一种将应用程序拆分为多个小型、独立服务的软件设计模式。每个服务运行在自己的进程中通过轻量级通信机制如HTTP/REST或消息队列交互并围绕特定业务功能构建。这些服务可以独立部署、扩展和维护通常由不同的团队负责开发。简单来说微服务就是很小的服务。小到一个服务只对应一个单一的功能只做一件事。这个服务可以单独部署运行。从这个角度来看微服务架构其实是分布式架构的一种拓展这种架构模式下它拆分粒度更小服务更独立。我们可以理解为微服务是一种经过良好架构设计的分布式架构方案。我们再来看分布式架构与微服务架构的区别分布式将服务进行拆分拆了就行。微服务指非常微小的服务更细粒度的垂直拆分通常指不能再拆的服务。分布式架构侧重于压力的分散强调的是服务的分散化。而微服务侧重于能力的分散更强调服务的专业化和精细分工。从实践角度来看微服务通常是分布式架构。因此选择微服务架构通常意味着需要解决分布式架构的各种难题。1.4 微服务带来的优势与挑战微服务架构带来好处的同时也面临一些挑战从单体服务转向微服务意味着管理更加复杂。接下来我们从优势和挑战这两个方面来分析微服务架构。优势模块化与独立性。微服务架构将应用拆分为多个独立服务每个服务负责特定功能。这种模块化设计便于开发、测试和部署团队可以独立工作而无需频繁协调。容错性高。一个服务发生故障可以使故障隔离在单个服务中不影响整体服务故障。扩展性好。每个服务都是独立运行的我们可以结合项目实际情况进行扩展按需伸缩。技术栈灵活。不同服务可采用适合其需求的技术栈如编程语言、数据库避免单一技术限制。例如计算密集型服务可用Go而数据分析服务选用Python。挑战分布式系统复杂性。服务间通信如RPC或消息队列引入网络延迟、序列化开销和一致性问题。需处理分布式事务、幂等性等场景。运维成本高。需管理大量服务的监控、日志收集和链路追踪。工具链如Prometheus、ELK的搭建和维护成本显著增加。开发和测试。一个业务流程可能涉及多个微服务共同完成服务调用引入网络延迟不可靠的网络如何进行容错处理等问题。这对开发和测试而言难度也会上升。负载均衡。微服务架构中的服务实例数量可能非常庞大因此需要有效的服务发现和负载均衡机制来管理请求流量和保证高可用性。2.微服务解决方案 - Spring Cloud2.1 什么是Spring Cloud为了解决微服务遇到的各种难题Spring Cloud便应运而生。我们先来看官网的介绍Spring Cloud 是一套基于 Spring Boot 的微服务架构开发工具集用于快速构建分布式系统中的常见模式如配置管理、服务发现、断路器、智能路由等。它通过封装 Netflix、Consul、Zookeeper 等第三方组件简化了分布式系统的开发流程。简单来说Spring Cloud就是分布式微服务架构的一站式解决方案是微服务架构落地的多种技术的集合。Spring Cloud并非由Spring团队独立开发的框架而是对现有优秀开源微服务解决方案的整合。它遵循SpringCloud规范将不同公司维护的组件以SpringBoot风格进行封装简化了配置和底层实现细节。这种设计让开发者能够快速投入微服务开发无需关注复杂技术细节。Spring Cloud在此过程中扮演了微服务生态协调者的角色。2.2 Spring Cloud版本Spring Cloud是一个由很多子项目组成的庞大项目这些子项目由各个公司来维护所以发布阶段也是不同的。为了管理主项目和子项目的依赖关系以及为了避免和子项目版本冲突主项目版本的命名并没有采用和子项目数字版本化的形式而是采用了英文名称。但由于英文版本号太复杂了从Hoxton之后Spring Cloud的版本就变成了2020.0.0这样的日期版本号了。Spring Cloud中的所有子项目都依赖SpringBoot所以SpringBoot和Spring Cloud的版本之间也存在一定的对应关系2.3 Spring Cloud实现方案Spring Cloud作为微服务架构的规范拥有多个实现方案其中最具代表性的是Spring Cloud Netflix和Spring Cloud Alibaba。Spring Cloud Netflix是Netflix开源软件Netflix OSS在Spring Cloud标准下的实现提供了一系列核心组件Eureka服务注册与发现ZuulAPI网关Ribbon客户端负载均衡Feign声明式服务调用Hystrix熔断与限流Hystrix Dashboard监控面板在早期阶段Spring Cloud Netflix曾是Spring Cloud生态的默认一站式解决方案甚至让许多人将“Spring Cloud”直接等同于“Spring Cloud Netflix”。然而Netflix在2018年前后宣布其核心组件如Hystrix、Ribbon、Zuul进入维护模式不再积极更新。这一变化促使Spring Cloud官方逐步移除相关维护模块推动社区转向其他替代方案。Spring Cloud Netflix并未从Spring Cloud依赖中完全移除但从2020.0版本开始仅保留对Eureka的支持。Spring Cloud Alibaba 是阿里巴巴集团基于 Spring Cloud 规范实现的开源组件和云产品集合。该项目由阿里中间件团队主导开发目前处于快速发展阶段功能迭代频繁。尽管 Spring Cloud Alibaba 尚未被列为 Spring Cloud 官方默认推荐方案但其核心组件在融入 Spring Cloud 生态之前就已经在众多企业级应用中广泛使用。该项目可视为继 Spring Cloud Netflix 之后的第二代 Spring Cloud 实现方案。更多详细信息可参考官方文档 Spring Cloud Alibaba 官方介绍Spring Cloud Alibaba 主要包含以下关键组件Nacos服务发现与配置管理Sentinel流量控制与系统保护Seata分布式事务解决方案Spring Cloud Alibaba 以 Spring Cloud Netflix 的设计思想为基础通过性能增强实现了技术升级。在 Spring Cloud Netflix 停止维护的背景下Spring Cloud Alibaba 迅速崛起并成为微服务开发的首选框架。我们来看Spring Cloud的实现对比Spring Cloud官方Spring Cloud NetflixSpring Cloud Alibaba服务注册/发现EurekaEurekaNacos服务调用OpenFeignFeignDubbo服务网关SpringCloudGatewayZuulSpringCloudGateway配置中心SpringCloudConfigArchaiusNacos负载均衡SpringCloud LoadBalanceRibbonDubbo3.小结本文从架构演进的角度出发带大家回顾了从单体架构到集群与分布式架构再到微服务架构的发展历程。可以看到微服务并非凭空产生而是为了解决传统架构在扩展性、维护性和技术灵活性等方面的痛点而逐步演化出来的。它以更细粒度的服务拆分、独立部署和灵活的技术选型为现代大型应用开发提供了新的思路。当然微服务架构在带来诸多优势的同时也引入了分布式系统固有的复杂性——服务发现、配置管理、负载均衡、容错处理等问题都需要专业的工具来解决。Spring Cloud正是为此而生的一站式解决方案它整合了 Spring Cloud Netflix 和 Spring Cloud Alibaba 等多个生态实现帮助开发者更高效地落地微服务架构。在接下来的文章中我们将深入 Spring Cloud 的核心组件逐一拆解它们在微服务体系中扮演的角色与实战用法敬请期待。