SpringCloud入门——SpringCloud介绍

本文介绍了SpringCloud的主要组件,如Eureka、Feign、Ribbon、Hystrix、Zuul、Config等,并对比了单体应用与微服务的优缺点。微服务提供了独立部署、易于维护和扩展等优势,但也带来了分布式复杂性和事务处理挑战。同时,文章指出了接口调整和测试的难度增加以及运维复杂性的提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringCloud入门——SpringCloud介绍

一、SpringCloud技术点

Eureka:服务注册中心,用于服务注册与发现,管理服务。

Feign: web调用客户端,能够简化HTTP接口的调用。

Ribbon:基于客户端的负载均衡。

Hystrix:熔断降级,防止服务雪崩。

Zuul:网关路由,提供路由转发、请求过滤、限流降级等功能。

Config:配置中心,分布式配置管理。

Sleuth:服务链路追踪。

Admin:健康管理。

二、单体应用与微服务对比

单体应用

  1. 概念:所有功能全部打包在一起。应用大部分是一个war包或jar包。

  2. 好处:容易开发、测试、部署,适合项目初期试错。

  3. 坏处:

    ​ 随着项目越来越复杂,团队不断扩大。坏处就显现出来了。

    • 复杂性高:代码多,十万行,百万行级别。加一个小功能,会带来其他功能的隐患,因为它们在一起。
    • 技术债务:人员流动,不坏不修,因为不敢修。
    • 持续部署困难:由于是全量应用,改一个小功能,全部部署,会导致无关的功能暂停使用。编译部署上线耗时长,不敢随便部署,导致部署频率低,进而又导致两次部署之间 功能修改多,越不敢部署,恶性循环。
    • 可靠性差:某个小问题,比如小功能出现OOM,会导致整个应用崩溃。
    • 扩展受限:只能整体扩展,无法按照需要进行扩展, 不能根据计算密集型(派单系统)和IO密集型(文件服务) 进行合适的区分。
    • 阻碍创新:单体应用是以一种技术解决所有问题,不容易引入新技术。但在高速的互联网发展过程中,适应的潮流是:用合适的语言做合适的事情。比如在单体应用中,一个项目用spring MVC,想换成spring boot,切换成本很高,因为有可能10万,百万行代码都要改,而微服务可以轻松切换,因为每个服务,功能简单,代码少。

    微服务

    1.概念:微服务是一种架构风格,将单体应用划分为小型的服务单元。

    2.好处:

    1. 独立部署。不依赖其他服务,耦合性低,不用管其他服务的部署对自己的影响。
    2. 易于开发和维护:关注特定业务,所以业务清晰,代码量少,模块变的易开发、易理解、易维护。
    3. 启动块:功能少,代码少,所以启动快,有需要停机维护的服务,不会长时间暂停服务。
    4. 局部修改容易:只需要部署 相应的服务即可,适合敏捷开发。
    5. 技术栈不受限:java,node.js等
    6. 按需伸缩:某个服务受限,可以按需增加内存,cpu等。
    7. 职责专一。专门团队负责专门业务,有利于团队分工。
    8. 代码复用。不需要重复写。底层实现通过接口方式提供。
    9. 便于团队协作:每个团队只需要提供API就行,定义好API后,可以并行开发。

    3.坏处:

    1. 分布式固有的复杂性:容错(某个服务宕机),网络延时,调用关系、分布式事务等,都会带来复杂。

    2. 分布式事务的挑战:每个服务有自己的数据库,优点在于不同服务可以选择适合自身业务的数据库。订单用MySQL,评论用Mongodb等。目前最理想解决方案是:柔性事务的最终一致性。

      刚性事务:遵循ACID原则,强一致性。
      柔性事务:遵循BASE理论,最终一致性;与刚性事务不同,柔性事务允许一定时间内,不同节点的数据不一致,但要求最终一致。
      
      BASE 是 Basically Available(基本可用)、Soft state(软状态)和 Eventually consistent (最终一致性)三个短语的缩写。BASE理论是对CAP中AP的一个扩展,通过牺牲强一致性来获得可用性,当出现故障允许部分不可用但要保证核心功能可用,允许数据在一段时间内是不一致的,但最终达到一致状态。满足BASE理论的事务,我们称之为“柔性事务”。
      
    3. 接口调整成本高:改一个接口,调用方都要改。

    4. 测试难度提升:一个接口改变,所有调用方都得测。自动化测试就变的重要了。API文档的管理也尤为重要。推荐:yapi。

    5. 运维要求高:需要维护 几十 上百个服务。监控变的复杂。并且还要关注多个集群,不像原来单体,一个应用正常运行即可。

    6. 重复工作:比如java的工具类可以在共享common.jar中,但在多语言下行不通,C++无法直接用java的jar包。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值