
这是万物可述的第15篇原创文章
为什么想谈一谈spring呐?
也许是情怀吧,如果把java比作通讯工具的话,绝大多数做java的人都应该会觉得spring及其衍生框架是驿站,信鸽,书信,电报等等中的手机吧,地位举足轻重应该没有之一(话不能说的太满,欢迎留言发表高见)

Ps:虽然和spring没有太大关系但是很多人会把分布式和微服务搞混,这里啰嗦一下
单应用架构顾名思义,应用服务器部署在一台服务器上,如上图

分布式架构则是一个到多个应用同时部署到多台服务器上,当然分布式会引发很多问题(比如负载均衡,session共享,分布式锁,分布式调度等等,与今天主题太远就不一一赘述了),具体见上图
SOA架构和微服务架构区别
SOA架构(Service Oriented Architecture)
面向服务的架构,它是一种设计方法,其中包含多个服务, 服务之间通过相互依赖最终提供一系列的功能

微服务架构
其实和 SOA 架构类似,是在 SOA 上做的升华,微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。这些小应用之间通过服务完成交互和集成。

Spring 是一个为了解决企业应用程序开发复杂性而创建的开源框架。框架采用分层架构并拥有七大核心模块:
1、核心容器(Spring Core)
2、应用上下文(Spring Context)
3、Spring面向切面编程(Spring AOP)
4、JDBC和DAO模块(Spring DAO)
5、对象实体映射(Spring ORM)
6、Web模块(Spring Web)
7、MVC模块(Spring Web MVC)
Springboot是帮助开发人员更容易的创建出基于Spring 框架独立运行和产品级别的框架,可以快速搭建微服务应用,具有以下特点
1、创建可以独立运行的 Spring 应用。
2、直接嵌入Tomcat 或 Jetty 服务器,不需要部署 WAR 文件。
3、支持一键启动,不需要预先部署应用服务器或Web容器,本身可以内嵌。
4、提供推荐的基础 POM 文件来简化 Apache Maven 配置。
5、尽可能的根据项目依赖来自动配置 Spring 框架。
6、提供可以直接在生产环境中使用的功能,如性能指标、应用信息和应用健康检查。
7、没有代码生成,也没有 XML 配置文件。
8、可灵活的通过注解的方式将内部的API接口发布为http rest接口服务

可以看出springcloud提供了从请求负载,注册熔断,认证拦截,限流监控,最终到数据交互等等全套的解决方案
01
服务注册与发现中心Eureka
利用Eureka可以很快速得实现一个注册中心,同时Eureka还提供了服务的健康检测、友好的UI界面让我们可以一目了然得看到整个注册中心的运行状况以及微服务的状况。
02
服务熔断器Hystrix
Hystrix是一个熔断组件,除了能够实现服务熔断之外,它还提供了服务降级、服务限流等功能,同时Hystrix还有一套完善的健康检测,以及熔断器健康数据的API接口,旗下的组件Hystrix Dashboard提供了单个服务熔断器的健康状态数据的UI界面显示,让整个微服务的健康状态得到更好的展示,方便维护。
03
负载均衡组件Ribbon
Ribbon组件能够实现系统提供的一些负载均衡的策略轮询、随机等算法,同时也能够自定义负载均衡策略,Ribbon与网关Zuul配合使用可以很容易的实现相关的均衡策略,根据请求来负载均衡到集群服务器,同时Ribbon与feign、RestTemplate配合可以实现消费方的负载均衡的策略。
04
路由网关Zuul
Zuul组件可以实现我们智能路由和过滤的功能,内部服务器的API接口统一通过网关进行对外的统一暴露,这样做能够更加安全的对微服务的保护,Zuul的智能过滤是通过自定义的拦截器来实现的,通过智能过滤可以剔除掉很多的非法访问等行为。
05
Spring Cloud Config
Spring Cloud Config提供了配置文件的统一的云端管理,通常配合GitHub使用,将所以微服务的配置文件统一放在远程仓库中,Server端统一读取仓库的配置文件,Client端通过读取Server的配置文件来实现统一管理配置,通常情况下,Spring Cloud Config和Spring Cloud Bus相互配合刷新指定Client或所有的Client配置文件。
06
Spring Cloud Security
Spring Cloud Security 是对Spring Security的封装,向服务提供用户验证的权限认证,一般来说它会配合Spring Security OAuth2组件一同使用,通过搭建一个微服务授权中心,验证Token或者JWT这种形式对整个微服务系统进行用户校验。
07
Spring Cloud Sleuth
Spring Cloud Sleuth是一个分布式的链路跟踪组件,它封装了Dapper、Zipkin和Kibana等组件,通过它可以知道服务与服务之间的依赖关系,便于后期维护与管理。
08
Spring Cloud Stream
Spring Cloud Stream组件是对数据流操作的,内部封装了Redis以及消息队列rabbitMQ、kafka、ActiveMQ等消息组件。
09
Feign
Feign是一个声明式的远程调度的组件,通常用在消费者端,通过Feign可以便捷的远程调用在注册中心的微服务的相关接口,实现远程调用,这也是微服务得以运行的基础。
10
Spring Cloud Task
Spring Cloud Task基于Spring Task,主要用于提供任务调度以及任务管理等方面的功能,在分布式事务中会用到。
作者:李龙,一位默默耕耘的资深程序员
编辑:徐菲

据说中国有句古语叫「金无足赤,人无完人」,但是,如果谁真的想打起灯笼来到市面上寻找完人,最终令他感到的可能不是一种失望,而是一种意外:完人可能就是那些终日为「善」而奔走,而又在不知不觉中实现了「美」的「真」实不虚的普通人。
追求完美是正常而有缺憾的人性。
--尼采





