架构演变--微服务Spring Cloud
架构的演变
单体架构, 垂直应用架构, 面向服务架构(SOA),微服务架构,详情见下方博客
什么是微服务
微服务的概念源于2014年3月Martin Fowler所写的一篇文章“Microservices”。
- 微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。
- 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
关键字: 一种思想,业务,粒度小,独立. 通信.
微服务特点
- 复杂度可控:在将应用分解的同时,规避了原本复杂度无止境的积累。每一个微服务专注于单一功能,并通过定义良好的接口清晰表述服务边界。由于体积小、复杂度低,每个微服务可由一个小规模开发团队完全掌控,易于保持高可维护性和开发效率.
- 独立部署:由于微服务具备独立的运行进程,所以每个微服务也可以独立部署。当某个微服务发生变更时无需编译、部署整个应用。由微服务组成的应用相当于具备一系列可并行的发布流程,使得发布更加高效,同时降低对生产环境所造成的风险,最终缩短应用交付周期。
- 技术选型灵活:微服务架构下,技术选型是去中心化的。每个团队可以根据自身服务的需求和行业发展的现状,自由选择最适合的技术栈。由于每个微服务相对简单,故需要对技术栈进行升级时所面临的风险就较低,甚至完全重构一个微服务也是可行的。
- 容错(fault isolation):当某一组建发生故障时,在单一进程的传统架构下,故障很有可能在进程内扩散,形成应用全局性的不可用。在微服务架构下,故障会被隔离在单个服务中。若设计良好,其他服务可通过重试、平稳退化等机制实现应用层面的容错。
- 扩展:每个服务可以各自进行 负载均衡服务器扩展和 数据库扩展,而且,每个服务可以根据自己的需要部署到合适的硬件服务器上。当应用的不同组件在扩展需求上存在差异时,微服务架构便体现出其灵活性,因为每个服务可以根据实际需求独立进行扩展。
简单来说: 还是围绕粒度小,独立来说的, 这两点可以充分体现以上5点.
SOA和微服务架构的区别
彻底组件化和服务化: 微服务架构强调彻底组件化和服务化,一个组件就是一个产品,可以独立对外提供服务.
去企业服务总线: 微服务不再强调传统SOA架构里面比较中的ESB企业服务总线
独立: 微服务强调每个微服务都有自己独立的运行空间,包括数据库资源。
通信: 微服务架构本身来源于互联网的思路,因此组件对外发布的服务强调了采用HTTP Rest API的方式来进行
粒度小: 微服务的切分粒度会更小
为什么用Spring Cloud
- 来源于Spring: 质量,稳定性,持续性都可以得到保证
- 支持Spring Boot:更加便于业务落地.
- 发展快: 版本更新快
- 微服务: Java领域最适合做微服务的框架.
- 支持面广: 对微服务周边环境的支持力度最大.
- 门槛低
什么是Spring Cloud
- Spring Cloud 为开发人员提供了快速构建分布式系统的一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,负载均衡,
分布式会话,群集状态),分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速支持实现这些模式的服务和应用程序;- 他们将在任何分布式环境中运行良好, 包括开发人员的笔记本电脑,裸机数据中心及Cloud Foundry等托管平台.
特性
Spring Cloud 专注于提供良好的开箱即用经验的典型用例和可扩展机制,覆盖;
- 分布式或版本话配置
- 服务化注册和发现
- 路由
- service - to - service调用
- 负载均衡
- 断路器
- 分布式消息
Spring Cloud采用非常声明的方法,通常指需要改类路径或注解即可获得许多功能,示例:客户端发现的应用程序:
@SpringBootApplicatioin
@EnableDiscoveryClient
public class Application{
public static void main(String[] args){
SpringApplication.run(Application.class, args);
}
}
Spring Cloud 与dubbo
Dubbo 专注 RPC 和服务治理,Spring Cloud 则是一个微服务架构生态。
什么是Spring Boot
- Spring Boot是Spring项目中的子工程,与Spring-framework 同属Spring
的产品.由Pivotoal团队提供.- Spring Boot可以轻松创建独立的,生产级的基于Spring的你可以运行的应用程序.
用一些固定的方式构建生产级别的Spring应用.Spring Boot 推崇约定大于配置方式便于能够尽可能快速启动并运行程序. 默认了很多框架的使用方式.
扩展:
Spring Boot称为搭建程序的"脚手架",最主要作用帮我们快速构建庞大的spring项目,尽可能减少一切xml配置, 做到开箱即用,迅速上手,让我们关注与业务而非配置.
关键字: 脚手架, 约定大于配置, 自动.
Spring Boot和Spring Cloud的关系
- 基于Spring Boot 快速开发单个微服务,Spring Cloud 是一个基于Spring Boot实现的云应用开发工具;
- Spring Boot专注于快速,方便集成单个微服务个体, Spring Cloud关注全局服务治理框架;
- Spring Boot使用约定大于配置理念, 很多集成方案已选好, 能不配置就不配置, Spring Cloud很大一部分是基于Spring Boot实现. 必须基于Spring Boot.
简单来说: Spring Boot可以离开Spring Cloud独立使用开发项目, 但Spring Cloud离不开Spring Boot,属于依赖关系.