一.什么是微服务
将一个原本独立的单体系统拆分成多个微服务,各自独立运行,通过 HTTP的RESTful API 进行通信协作,属于架构范畴的一种设计风格。
微服务优点
1.它们往往比传统的应用程序更有效地利用计算资源。这是因为它们通过扩展组件来处理功能瓶颈问题。只需要为额外的组件部署计算资源,而不需要部署一个完整的应用程序的全新迭代。最终的结果是有更多的资源可以提供给其它任务。
2.它们更快且更容易更新。开发者可以更新应用程序的单个组件,而不会影响其他的部分。易于测试和定位问题。
3.微服务架构有助于新兴的云服务,如事件驱动计算。事件处理时才需要使用计算资源,而企业只需要为每次事件,而不是固定数目的计算实例支付。
微服务缺点
1.运维人员需要维护的进程数量会大大增加。
2.接口的一致性:我们需要更完善的接口和版本管理, 或是严格地遵循开闭原则。
3.分布式的复杂性:比如网络延迟、分布式事务、异步消息等。
微服务特性
1.服务组件化—-各自独立运行,通过 HTTP的RESTful API 进行通信协作
2.按业务组织团队—-每一个团队都是全栈,职责清晰
3.做”产品“的态度—-对整个生命周期负责
4.智能端点与哑管道—-服务调用方式,实时,异步中间件
5.去中心化治理—-组件能针对不同的业务特点选择不同的技术平台
6.去中心化管理数据—-只要求数据在最后的处理状态是一致的即可。
7.基础设施自动化—-自动化测试、自动化部署
8.容错设计—-快速检测出故障资源并尽可能地自动恢复服务是必须被设计和考虑的
9.演进式设计—-从简单项目,一个个拆分出微服务功能来扩展
二.什么是SpringCloud
1.定义:
Spring Cloud是一个基于Spring Boot实现的微服务架构开发工具。
它为微服务架构中涉及的配置管理、服务治理、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式回话和集群状态管理等操作提供了一种简单的开发方式。
2.为什么用SpringCloud
Spring Cloud来源于Spring,利用Spring Boot进行快捷开发。由于目前Spring Cloud社区的维护和支持的人员数量众多,相信Spring Cloud会有很好的发展。而且Spring Cloud基本上都是使用了现有的开源框架进行的集成,学习的难度和部署的门槛就比较低,对于中小型企业来说,更易于使用和落地。
3.Spring Cloud子项目
1、Spring Cloud Config:
配置管理工具,支持使用Git存储配置内容,可以使用它实现应用配置的外部化存储,并支持
客户端配置信息刷新、加密/解密配置内容等。
2、Spring Cloud Netflix:
核心组件,对多个Netflix OSS开源套件进行整合
Eureka: 服务治理组件,包含服务注册中心、服务注册与发现机制的实现。
Hystrix: 容错管理组件,实现断路器模式,帮助服务依赖中出现的延迟和为故障提供强大的容错能力。
Ribbon:客户端负载均衡的服务调用组件。
Feign:基于Ribbon和Hystrix的声明式服务调用组件。
Zuul:网关组件,提供智能路由、访问过滤等功能。
Archaiux:外部化配置组件
3、Spring Cloud Bus
事件、消息总线,用于传播集群中的状态变化或事件,以触发后续的处理,比如用来冬天刷新配置等。
4、Spring Cloud Cluster
针对ZooKeeper、Redis、Hazelcast、Consul的选举算法和通用状态模式的实现。
5、Spring Cloud CloudFoundry
与Pivotal Cloud foundry 的整合支持。
6、Spring Cloud Consul
服务发下和配置管理工具
7、Spring Cloud Stream
通过Redis、Rabbit或者Kafka实现的消费微服务,可以通过简单的声明式模型来发送和接收消息。
8、Spring Cloud AWS
用于简化整合Amazon Web Service 的组件。
9、Spring Cloud Security
安全工具包,提供在Zuul代理中对OAuth2客户端请求的中继器。
10、Spring Cloud Sleuth
Spring Cloud应用的分布式跟踪实现,可以完美整合Zipkin
11、Spring Cloud ZooKeeper
基于ZooKeeper的服务发现与配置管理组件
12、Spring Cloud Starters
Spring Cloud 的基础组件,它基于Spring Boot风格项目的基础依赖模块
13、Spring Cloud CLI
用于在Groovy中快速创建Spring Cloud应用的 Spring Boot CLI插件
4.Spring Cloud主要解决了什么问题?
1、对于企业级的SOA框架来说,服务与服务间的解耦是一项巨大的难题,经常会由于在服务更新的过程中,没有合理通信,导致数据的丢失。
这时候就应该进行服务治理,将服务之间的直接依赖转化为服务对服务中心的依赖。Spring Cloud 核心组件Eureka就是解决这类问题。