Spring Cloud
Spring Cloud 自 2016 年 1 月发布第一个 Angel.SR5 版本-到目前 2020 年 3 月发布 Hoxton.SR3 版本-已经历经了 4 年时间。这 4 年时间里-Spring Cloud 一共发布了 46 个版本-支持的组件数从 5 个增加到 21 个。Spring Cloud 在 2019 年 12 月对外宣布后续 RoadMap:
这个 RoadMap 可以说是对 Spring Cloud 有着非常大的变化。
SpringCloud替代实现
!img
SpringCloud Alibaba
组件
Sentinel:把流量作为切入点-从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
RocketMQ:一款开源的分布式消息系统-基于高可用分布式集群技术-提供低延时的、高可靠的消息发布与订阅服务。
Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。
Seata:阿里巴巴开源产品-一个易于使用的高性能微服务分布式事务解决方案。
Alibaba Cloud ACM:一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心产品。
Alibaba Cloud OSS: 阿里云对象存储服务(Object Storage Service-简称 OSS)-是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
Alibaba Cloud SchedulerX: 阿里中间件团队开发的一款分布式任务调度产品-提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
Alibaba Cloud SMS: 覆盖全球的短信服务-友好、高效、智能的互联化通讯能力-帮助企业迅速搭建客户触达通道。
第一阶段课程Spring Cloud技术点
Eureka:服务注册与发现-用于服务管理。
Feign: web调用客户端-能够简化HTTP接口的调用。
Ribbon:基于客户端的负载均衡。
Hystrix:熔断降级-防止服务雪崩。
Zuul:网关路由-提供路由转发、请求过滤、限流降级等功能。
Config:配置中心-分布式配置管理。
Sleuth:服务链路追踪
Admin:健康管理
服务进化概述
> 《传统到分布式演进》
``plain
课外扩展:持续集成-持续部署-持续交付。集成:是指软件个人研发的部分向软件整体部分集成-以便尽早发现个人开发部分的问题;部署: 是代码尽快向可运行的开发/测试节交付-以便尽早测试;交付: 是指研发尽快向客户交付-以便尽早发现生产环境中存在的问题。 如果说等到所有东西都完成了才向下个环节交付-导致所有的问题只能在最后才爆发出来-解决成本巨大甚至无法解决。而所谓的持续-就是说每完成一个完整的部分-就向下个环节交付-发现问题可以马上调整。使问题不会放大到其他部分和后面的环节。 这种做法的核心思想在于:既然事实上难以做到事先完全了解完整的、正确的需求-那么就干脆一小块一小块的做-并且加快交付的速度和频率-使得交付物尽早在下个环节得到验证。早发现问题早返工。上面的3个持续-也都随着微服务的发展而发展-当架构师的同学-可以参考这种方式。持续集成的工具-向大家推荐:https://jenkins.io/doc/book/pipeline/
`
单体应用
随着项目越来越复杂-团队不断扩大。坏处就显现出来了。 - 复杂性高:代码多-十万行-百万行级别。加一个小功能-会带来其他功能的隐患-因为它们在一起。 - 技术债务:人员流动-不坏不修-因为不敢修。 - 持续部署困难:由于是全量应用-改一个小功能-全部部署-会导致无关的功能暂停使用。编译部署上线耗时长-不敢随便部署-导致部署频率低-进而又导致两次部署之间 功能修改多-越不敢部署-恶性循环。 - 可靠性差:某个小问题-比如小功能出现OOM-会导致整个应用崩溃。 - 扩展受限:只能整体扩展-无法按照需要进行扩展- 不能根据计算密集型(派单系统)和IO密集型(文件服务) 进行合适的区分。 - 阻碍创新:单体应用是以一种技术解决所有问题-不容易引入新技术。但在高速的互联网发展过程中-适应的潮流是:用合适的语言做合适的事情。比如在单体应用中-一个项目用spring MVC-想换成spring boot-切换成本很高-因为有可能10万-百万行代码都要改-而微服务可以轻松切换-因为每个服务-功能简单-代码少。
SOA
`
对单体应用的改进:引入SOA(Service-Oriented Architecture)面向服务架构-拆分系统-用服务的流程化来实现业务的灵活性。服务间需要某些方法进行连接-面向接口等-它是一种设计方法-其中包含多个服务- 服务之间通过相互依赖最终提供一系列的功能。一个服务 通常以独立的形式存在于操作系统进程中。各个服务之间 通过网络调用。但是还是需要用些方法来进行服务组合-有可能还是个单体应用。
`
所以要引入微服务-是SOA思想的一种具体实践。
微服务架构 = 80%的SOA服务架构思想 + 100%的组件化架构思想
微服务
#### 微服务概况
`sh
看这篇文章:http://www.martinfowler.com/articles/microservices.html
`
合久必分。分开后通信-独立部署-独立存储。
`sh
分封制:服从天子命令:服从服务管理。有为天子镇守疆土的义务:各自完成各自的一块业务。随从作战:服务调用。交纳贡献:分担流量压力。
`
`plain
Q:大师大师-服务拆多了怎么办?A:那就再合起来。Q:那太没面子了。A:那就说跨过了微服务初级阶段-在做中台(自助建站系统)。
`
#### 微服务特性
独立运行在自己进程中。
一系列独立服务共同构建起整个系统。
一个服务只关注自己的独立业务。
轻量的通信机制RESTful API
使用不同语言开发
全自动部署机制
#### 微服务组件介绍
不局限与具体的微服务实现技术。