logo头像

Aoho's Blog

Spring Cloud 入门

本文于482天之前发表,文中内容可能已经过时。

1. 微服务架构

微服务架构(Micro-Service Archeticture)是当下流行的架构风格,旨在通过将功能模块分解到各个独立的子系统中以实现解耦,它并没有一成不变的规定,而是需要根据业务来做设计[李贞昊,2017]。微服务架构中,每个微服务模块只是对简单、独立、明确的任务进行处理,通过REST API返回处理结果给外部。在微服务推广实践角度来看,微服务将整个系统进行拆分,拆分成更小的粒度,保持这些服务独立运行,应用容器化技术将微服务独立运行在容器中。过去设计架构时,是在内存中以参数或对象的方式实现粒度细化。微服务使用各个子服务控制模块的思想代替总线。不同的业务要求,服务控制模块至少包含服务的发布、注册、路由、代理功能。

2. vs 单体应用架构

微服务架构模式相比于单体应用架构,有很多优势。

  • 首先,巨大的单体式应用拆分为多个微服务,降低了复杂性。在具有之前单体应用功能的同时,单体应用被拆分为多个可管理的微服务。每个微服务都具有定义清楚的边界,使用远程过程调用(RPC)或者消息驱动API。拆分后的微服务模块,粒度小,很容易开发和维护。微服务架构模式降低了单体式编码的难度,并且功能提供了模块化的解决方案。
  • 第二,微服务架构下,专门开发团队负责开发一个子服务。每个开发团队可以自主选择技术栈,提供API接口。当然,许多公司将技术栈统一,只提供特定选择的技术。然后,这种自由使得开发团队不需要被迫使用特定的那些技术,他们可以自由地选择适合该微服务的技术。甚至于,重构之前的代码也变得很便捷。
  • 第三,每个微服务都是独立的部署。开发团队不再需要协调其它服务部署对本服务的影响。这样的特性大大加快了部署速度。微服务架构模式使得持续化部署成为可能。
  • 最后,微服务架构模式使得每个微服务应用都可以被独立扩展。单体架构应用也可以横向扩展,即整个应用完整的复制到不同的节点。当应用的不同组件在扩展需求上存在差异时,微服务架构便体现出其优越性。通过在不同的基础设施之间实现扩展,这些服务能够有效地降低风险[陈春霞, 2016]。

3. Spring Cloud开源框架

Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的服务发现与注册、熔断机制、路由、全局锁、中心配置管理、控制总线、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式[翟永超,2016]。Spring Cloud整体架构图如图1.1所示。
![cloud structure][sc]
[sc]:http://ovci9bs39.bkt.clouddn.com/cloud%20structure.png “图1.1 Spring Cloud整体架构图”

Spring Cloud整体架构中如下几个基础服务模块:微服务配置管理、API网关服务、服务发现与注册和消息总线模块。

spring-cloud-config,微服务配置管理,即为上图的config service服务模块,为服务端提供了分布式环境的中央配置支持。配置服务器为各应用的所有环境提供了一个中心化的外部配置。它完成了对服务端Spring-Env和配置源抽象的映射,所以config服务不仅适用于Spring框架构建的应用,也可以使用在其他语言的应用程序。作为一个应用,可以通过部署管道来进行测试或者投入生产,分别为这些环境创建配置,并且在需要迁移环境的时候获取对应的配置来运行。

API网关,本系统使用netflix的zuul框架,作为系统的统一入口,具有负载均衡、服务路由、服务过滤等功能。

服务发现与注册有多种开源组件支持,比如zookeeper、etcd、netflix公司的Eureka,以及本系统使用的Consul。服务发现是一个服务将其地址信息在中心注册节点进行注册的过程。该服务一般会将它的主机IP地址以及端口号进行注册,具体还会包括认证信息、使用协议、版本号等信息,以及关于应用服务环境的细节信息。一个应用服务或者组件通过服务发现可以掌握其运行环境以及其它应用服务或组件的信息。用户配置一个服务发现工具之后,就可以将实际容器与运行配置分离开。

微信打赏

赞赏是不耍流氓的鼓励

评论系统未开启,无法评论!