1、Spring可以做什么

1.1、Spring的能力

image.png

1.2 、Spring的生态

image.png

  • 微服务
  • 分布式
  • web开发
  • 数据访问
  • 安全控制
  • 消息服务
  • 移动开发
  • 批处理
  • 。。。。

    2、为什么要用SpringBoot

    Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”.
    能快速创建出生产级别的Spring应用

    2.1、SpringBoot的优点

  • Create stand-alone Spring applications

    • 创建独立Spring应用
  • Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
    • 内置web服务器(默认Tomcat)
  • Provide opinionated ‘starter’ dependencies to simplify your build configuration
    • 自动starter依赖,简化构建配置 (防止jar包冲突)
  • Automatically configure Spring and 3rd party libraries whenever possible
    • 自动配置Spring以及第三方功能
  • Provide production-ready features such as metrics, health checks, and externalized configuration
    • 提供生产级别的监控、健康检查及外部化配置
  • Absolutely no code generation and no requirement for XML configuration
    • 无代码生成、无需编写XML

SpringBoot是整合Spring技术栈的一站式框架
Spring是简化Spring技术栈的快速开发脚手架

2.2、SpringBoot的缺点

  • 人称版本帝,迭代快,需要时刻关注其变化
  • 封装太深,内部原理复杂,不容易精通
  • 同时也说明其社区活跃度高,bug修复快

    3、SpringBoot产生时代背景

    3.1、微服务

    James Lewis and Martin Fowler (2014) 提出微服务完整概念。https://martinfowler.com/microservices/
    ‎简而言之,微服务架构风格是一种将单个应用程序开发为一‎‎套小服务‎‎的方法,每个服务‎‎都在自己的进程中运行‎‎并与轻量级机制(通常是HTTP资源API)进行通信。这些服务‎‎是围绕业务功能构建的‎‎,‎‎可通过‎‎全自动部署机制独立部署。这些服务的‎‎集中管理是最低限度‎‎的,这些服务可以用不同的编程语言编写,并使用不同的数据存储技术。

  • 微服务是一种架构风格

  • 一个应用拆分为一组小型服务
  • 每个服务运行在自己的进程内,也就是可独立部署和升级
  • 服务之间使用轻量级HTTP交互 ==主要指Restful API==
  • 服务围绕业务功能拆分
  • 可以由全自动部署机制独立部署
  • 去中心化,服务自治。服务可以使用不同的语言、不同的存储技术

    3.2、分布式

    1. 分布式的困难

  • 远程调用 一般使用http进行服务交互

  • 服务发现 就是看哪些服务是可用的 Nacos
  • 负载均衡 按照配置的算法合理的将请求分配给不同的服务器
  • 服务容错 各种错误情况下的处理方式
  • 配置管理 配置中心,修改配置让服务们自己同步
  • 服务监控 多个服务以及云平台的资源消耗和健康状况
  • 链路追踪
    • 一个复杂的业务流程可能需要连续调用多个微服务,我们需要记录一个完整业务逻辑涉及的每一个微服务的运行状态,再通过可视化链路图展现,帮助软件工程师在系统出错时分析解决问题,常见的解决方案有Zipkin,SkyWalking。
  • 日志管理
    • 微服务架构默认将应用日志分散保存在每一个微服务节点上,当系统进行用户行为分析、数据统计时必须收集所有节点日志数据,非常不方便。这时候我们需要一个独立的日志平台,收集所有节点的日志数据并可方便对其进行汇总分析,然后进行可视化展示,常见的解决方案有ELK(Elasticsearch+Logstash+Kibana),EFK(Elasticsearch+Fluentd+Kibana)。
  • 任务调度
  • ……

    2. 分布式的解决

  • SpringBoot + SpringCloud

    4、如何学习SpringBoot

    官网学习