Spring Cloud学习之微服务架构(一)

1. 什么是微服务架构

著名的OO(面向对象,Object Oriented)专家Matin Flower于《Microservices》一书中提出了微服务的概念,是将软件应用程序设计为多个功能单一、可独立部署的应用服务。

1.1 面向服务架构(Service-Oriented Architecture)

我们先了解一下SOA,用Matin Flower的话来说,SOA可以看成是微服务的超集。它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。服务层是SOA的基础,可以直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性。SOA是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。SOA可以看作是B/S模型、XML(标准通用标记语言的子集)/Web Service技术之后的自然延伸。

1.2 微服务与单体架构

摘自《Microservices》
在微服务之前,一个单体架构就是一个服务进程,运行在weblogic或者tomcat上。当项目中有一个模块或者功能修改时,都需要重启整个容器,在模块功能较少时,重启或许花费几分钟,但是随着项目集成模块和功能逐渐庞大起来,启动一个应用或许要半个小时或者更久,测试验证的难度也越来越大。而且,大部分项目为了保证系统的分区容错性,都会增加负载均衡服务器(F5负载均衡、Nginx等),用以应分发高并发的网络请求,用户的访问被分派到不同的应用服务器,这种架构有一定的处理高并发的能力,也能应对一定复杂的业务需求。但是仍然改变不了单体应用的复杂性:

  1. 大量的业务代码,代码可读性、维护性随着时间的推移越发困难;
  2. 面对海量的数据,也需要对数据库进行分库分表设计,或者分布式设计;
  3. 修改代码的成本越来越大,项目上手的难度越来越高。

有了微服务呢?一个功能模块都可以解耦成一个独立的应用服务(这个设计需要开发人员自己把握),而独立的应用服务可以拥有自己的数据库设计,每个服务之间通过轻量级协议通信,如HTTP、REST、Thrift API等。有的人或许有所疑问,每个功能模块一个应用服务,那么部署的时候岂不是要部署很多个,而且集群的时候就是成倍的数量了。其实,随着Docker容器技术的推进,以及自动化部署工具(如开源组件Jenkins)的出现,应用的打包部署只需要在平台点击几下就行了。Docker和Jenkins这方面的内容就不在此赘述了。设计合理的微服务不仅保持了支持集群的能力,还有着良好的可扩展性,可维护性。

2. Spring Cloud

Spring Cloud作为Java语言的微服务的框架,依赖于Spring Boot,有快速开发、持续交付和容易部署等特点。有许多成熟开源的服务组件。Spring Cloud中文社区对Spring Cloud的描述为:

Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式环境中运行良好,包括开发人员自己的笔记本电脑,裸机数据中心,以及Cloud Foundry等托管平台。Spring Cloud中文社区

2.1 Spring Cloud 特性

Spring Cloud专注于提供良好的开箱即用经验的典型用例和可扩展性机制覆盖。

  • 分布式/版本化配置
  • 服务注册和发现
  • 路由
  • service - to - service调用
  • 负载均衡
  • 断路器
  • 分布式消息传递

2.2 Spring Cloud 组件

Spring Cloud拥有众多优秀的经过实践优化的组件,实现了系统独立的功能。可直接在项目中添加配置使用。

  1. Spring Cloud Config (Spring下)配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git以及Subversion。

  2. Spring Cloud Bus (Spring下) 事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。

  3. Eureka (Netfix下)云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。

  4. Hystrix (Netflix下)熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。

  5. Zuul (Netflix下)Zuul 是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。

  6. Archaius(Netflix下)配置管理API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。

  7. Consul(HashiCorp下)封装了Consul操作,consul是一个服务发现与配置工具,与Docker容器可以无缝集成。

  8. Spring Cloud for Cloud Foundry(Pivotal下)通过Oauth2协议绑定服务到CloudFoundry,CloudFoundry是VMware推出的开源PaaS云平台。

  9. Spring Cloud Sleuth (Spring下)日志收集工具包,封装了Dapper和log-based追踪以及Zipkin和HTrace操作,为SpringCloud应用实现了一种分布式追踪解决方案。

  10. Spring Cloud CLI(Spring下)基于 Spring Boot CLI,可以让你以命令行方式快速建立云组件。

  11. Ribbon (Netflix下)提供云端负载均衡,有多种负载均衡策略可供选择,可配合服务发现和断路器使用。

  12. Turbine(Netflix下)Turbine是聚合服务器发送事件流数据的一个工具,用来监控集群下hystrix的metrics情况。

  13. Feign (OpenFeignx下)Feign是一种声明式、模板化的HTTP客户端。

  14. Spring Cloud Task(Spring下)提供云端计划任务管理、任务调度。

  15. Spring Cloud Connectors(Spring下)便于云端应用程序在各种PaaS平台连接到后端,如:数据库和消息代理服务。

  16. Spring Cloud Cluster(Spring下)提供Leadership选举,如:Zookeeper, Redis, Hazelcast, Consul等常见状态模式的抽象和实现。

  17. Spring Cloud Starters(Pivotal下)Spring Boot式的启动项目,为Spring Cloud提供开箱即用的依赖管理。

  18. Spring Cloud Security (Spring下)基于spring security的安全工具包,为你的应用程序添加安全控制。

猜你喜欢

转载自blog.csdn.net/qq_34308732/article/details/88871891
今日推荐