1、从单体架构到分布式架构的演进
1.1、单体架构
通常来说,如果一个war包或者jar包里面包含一个应用的所有功能,则我们称这种架构为单体架构。
1.2、集群及垂直化
1、通过横向增加服务器,把单台机器变成多台机器的集群。
2、按照业务的垂直领域进行拆分,减少业务的耦合度,以及降低单个war包带来的伸缩性困难问题。
1.3、SOA
SOA就是面向服务的架构,核心目标是把共享业务提取成独立的基础服务。在SOA中,会采用ESB(企业服务总线)来作为系统和服务之间的通信桥梁。
1.4微服务架构
SOA关注的是服务的重用性及解决信息孤岛问题。微服务关注的是解耦。解耦是降低业务之间的耦合度,而重用性关注的是服务的复用。
微服务会更多关注和DevOps持续交付上,因为服务粒度细化之后使得开发运维变得更加重要,因此微服务与容器化技术的结合更加紧密。
2、微服务解决方案之Spring Cloud
Spring Cloud其实就是一套规范,而Spring Cloud Netflix、Spring Cloud Consul、Spring Cloud Alibaba才是Spring Cloud规范的实现。
2.1、Spring Cloud Netflix
Spring Cloud Netflix主要为微服务架构下的服务治理提供解决方案,包括以下组件:Eureka,Zuul,Ribbon,Feign,Hystrix,Hystrix Dashboard,Turbine
2.2 Spring Cloud Alibaba
Spring Cloud Alibaba主要为微服务开发提供一站式的解决方案,包括开源组件和阿里云产品组件,云产品是需要付费使用的。包括以下组件:Sentinel,Nacos,RocketMQ,Seata,Dubbo,OSS(收费的云服务)
3、Spring Cloud的核心之Spring Boot
1、如何理解约定优于配置?
在SpringBoot中,约定优于配置的思想主要体现在以下方面
1、Maven目录结构的约定。
2、Spring Boot默认的配置文件及配置文件中配置属性的约定。
3、对于Spring MVC的依赖,自动依赖内置的Tomcat容器。
4、对于Starter组件自动完成装配。
2、自动装配的核心过程:
1、通过@Import(AutoConfigurationImportSelector)实现配置类的导入,但是这里并不是传统意义上的单个配置类装配。
2、AutoConfigurationImportSelector类实现了ImportSelector接口,重写了方法selectImports,它用于实现选择性批量配置类的装配。
3、通过spring提供的SpringFactoriesLoader机制,扫描classpath路径下的META-INF/spring.factories,读取需要实现自动装配的配置类。
4、通过条件筛选的方式,把不符合条件的配置类移除,最终完成自动装配。
3、@Conditional条件装配:
1、@Conditional是Spring Framework提供的一个核心注解,这个注解的作用是提供自动装配的条件约束,一般与@Configuration和@Bean配合使用,该注解可以接收一个Condition数组。
2、Condition是一个函数式接口,提供了matches方法,它主要提供一个条件匹配规则,返回true表示可以注入Bean,反之则不注入。
4、Starter命名规范:
1、官方命名:spring-boot-starter-模块名称,比如spring-boot-starter-web
2、自定义命名:模块名称-spring-boot-starter,比如mybatis-spring-boot-starter。