一:前言
使用 Spring Boot 开发分布式微服务时,我们面临以下问题:
- 与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销,带宽问题,安全问题。
- 服务发现-服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉及一个服务目录,在该目录中注册服务,然后能够查找并连接到该目录中的服务。
- 冗余-分布式系统中的冗余问题。
- 负载平衡 --负载平衡改善跨多个计算资源 的工作负荷,诸如计算机,计算机集群,网络链路,中央处理单元,或磁盘驱动器的分布。
- 性能-问题 由于各种运营开销导致的性能问题。
- 部署复杂性-Devops 技能的要求。
因此,当遇到该问题时需要用到SpringCloud
二:什么是SpringCloud
基于 Spring Boot 的 Spring 集成应用程序,它利用 Spring Boot 的开发便利性简化了分布式系统的开发,提供与外部系统的集成。 如服务注册与发现、配置中心、负载均衡、断路器、消息总线、数据监控等;换句话说:Spring Cloud 提供了构建分布式系统所需的“全家桶”。
核心组件
- Eureka:服务注册与发现。
- Feign:基于动态代理机制,根据注解和选择的机器,拼接请求 url 地址,发起请求。
- Ribbon:实现负载均衡,从一个服务的多台机器中选择一台。
- Hystrix:提供线程池,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。
- Config:配置中心组件,它可以集中管理微服务的配置信息,从而实现配置的动态管理和更新。
- Bus:消息总线组件,它可以实现微服务之间的消息传递和事件触发,从而实现微服务之间的解耦和通信
- Zuul:API网关组件,它可以在微服务架构中起到网关的作用,从而实现请求路由、负载均衡、安全控制等功能。
三:为什么要学SpringCloud
(1)互联网应用和传统应用的区别
传统应用用于企业内部管理,面向企业内部人员
① 典型传统应用
① ERP 企业资源计划
② CRM 客户关系管理
③ WMS 仓储管理系统
④ OA 办公自动化
⑤ 各种后台管理系统,物业、物流、银行、金融.....
特点:
使用的是特定人群,数量不多
对用户体验要求不高
对数据的一致性要求高
互联网应用面向所有互联网用户
② 典型互联网应用
① 电商
② 视频
③ 社交媒体
④ 新闻
⑤ 游戏
特点:
面对所有互联网用户,用户量大
对用户体验要求高(界面、人性化、性能)
数据一致性要求相对不高
可用性要求高
三高问题(并发量、可用性、性能)
(2)微服务架构和单体应用架构的区别
传统应用大多数使用单体应用架构,互联网应用大多数采用微服务架构
① 微服务架构
微服务架构是一种架构风格和架构思想,它倡导我们在传统软件应用架构的基础上,将系统业务按照功能拆分为更加细粒度的服务,所拆分的每一个服务都是一个独立的应用,这些应用对外提供公共的API,可以独立承担对外服务的职责,通过此种思想方式所开发的软件服务实体就是“微服务”,而围绕着微服务思想构建的一系列体系结构(包括开发、测试、部署等),我们可以将它称之为“微服务架构”。
总的来说:N个项目达成N个包部署到服务器,将传统单体应用拆分为多微服务项目,每个微服务可以相互通信,部署到各自的服务器
优点:
- <