微服务概念在近几年流行开,微服务架构也成了当前架构设计追寻的热点。Spring Cloud正是开源的微服务架构典型,适合中小型企业快速上手。本文从Spring Cloud入手,浅析微服务。
微服务架构(Micro-Service Archeticture)是当下流行的架构风格,旨在通过将功能模块分解到各个独立的子系统中以实现解耦,它并没有一成不变的规定,而是需要根据业务来做设计[李贞昊,2017]。微服务架构中,每个微服务模块只是对简单、独立、明确的任务进行处理,通过REST API返回处理结果给外部。在微服务推广实践角度来看,微服务将整个系统进行拆分,拆分成更小的粒度,保持这些服务独立运行,应用容器化技术将微服务独立运行在容器中。过去设计架构时,是在内存中以参数或对象的方式实现粒度细化。微服务使用各个子服务控制模块的思想代替总线。不同的业务要求,服务控制模块至少包含服务的发布、注册、路由、代理功能。
微服务架构模式相比于单体应用架构,有很多优势。
Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的服务发现与注册、熔断机制、路由、全局锁、中心配置管理、控制总线、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。Spring Cloud整体架构图如图1.1所示。 Spring Cloud整体架构中如下几个基础服务模块:微服务配置管理、API网关服务、服务发现与注册和消息总线模块。
spring-cloud-config,微服务配置管理,即为上图的config service服务模块,为服务端提供了分布式环境的中央配置支持。配置服务器为各应用的所有环境提供了一个中心化的外部配置。它完成了对服务端Spring-Env和配置源抽象的映射,所以config服务不仅适用于Spring框架构建的应用,也可以使用在其他语言的应用程序。作为一个应用,可以通过部署管道来进行测试或者投入生产,分别为这些环境创建配置,并且在需要迁移环境的时候获取对应的配置来运行。
API网关,本系统使用netflix的zuul框架,作为系统的统一入口,具有负载均衡、服务路由、服务过滤等功能。
服务发现与注册有多种开源组件支持,比如zookeeper、etcd、netflix公司的Eureka,以及本系统使用的Consul。服务发现是一个服务将其地址信息在中心注册节点进行注册的过程。该服务一般会将它的主机IP地址以及端口号进行注册,具体还会包括认证信息、使用协议、版本号等信息,以及关于应用服务环境的细节信息。一个应用服务或者组件通过服务发现可以掌握其运行环境以及其它应用服务或组件的信息。用户配置一个服务发现工具之后,就可以将实际容器与运行配置分离开。