Spring Cloud 入门

微服务概念在近几年流行开,微服务架构也成了当前架构设计追寻的热点。Spring Cloud正是开源的微服务架构典型,适合中小型企业快速上手。本文从Spring Cloud入手,浅析微服务。

1. 微服务架构

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

2. vs 单体应用架构

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

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

3. Spring Cloud开源框架

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地址以及端口号进行注册,具体还会包括认证信息、使用协议、版本号等信息,以及关于应用服务环境的细节信息。一个应用服务或者组件通过服务发现可以掌握其运行环境以及其它应用服务或组件的信息。用户配置一个服务发现工具之后,就可以将实际容器与运行配置分离开。

原文发布于微信公众号 - aoho求索(aohoBlog)

原文发表时间:2017-09-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏嵌入式程序猿

这个坑希望你没踩

最近因为一个小项目使用KE02来评估,用的是FRDM-KE02Z的板子,但是在将新买的板子连上电脑后,始终连不上目标板,而电脑可以正常连接其他板子,所以证明驱动...

12220
来自专栏chenssy

阿里P8十年Java架构师是如何规划职业生涯以及架构体系的呢

高可用SpringCloud微服务与docker集成实现动态扩容实战

15430
来自专栏EAWorld

DevOps平台实践落地之构建管理详解

? 企业做DevOps平台,本质上是做企业的IT生产线,最终是实现整个企业级的数字化生产线。构建作为落地DevOps平台必不可少的环节之一,是持续集成、交付和...

584100
来自专栏Rainbond开源「容器云平台」

Pinpoint-java性能分析最佳实践_开源PaaS Rainbond

<center><img src="https://static.goodrain.com/images/acp/docs/bestpractice/Pinpo...

54990
来自专栏FD的专栏

【架构拾集】 微前端:微应用化

微应用化与微前端架构相当的类似,它们在开发时都是独立应用,在构建时又可以按照需求单独加载。如果以微前端的单独开发、单独部署、运行时聚合的基本思想来看,微应用化就...

12530
来自专栏一枝花算不算浪漫

[JetBrains注册] 利用教育邮箱注册JetBrains产品(pycharm、idea等)的方法

49360
来自专栏Crossin的编程教室

【我问Crossin】Python 能被运用在哪些领域?

1 if __name__ = "__main__" 是什么意思? if __name__ = "__main__" 用来判断当前文件是否被直接执行。 一个 p...

25660
来自专栏IT大咖说

支撑百度搜索引擎99.995%可靠名字服务架构设计

摘要 百度搜索引擎是全球最大的中文搜索引擎,致力于向人们提供"简单,可依赖"的信息获取方式。百度网页搜索部架构师郑然为我们分享支撑百度搜索引擎的可靠名字服务架构...

41050
来自专栏Rainbond开源「容器云平台」

少打一局王者荣耀就能上手Spring Cloud?!

18430
来自专栏Java架构沉思录

微服务等于Spring Cloud?一文告诉你微服务到底是什么。

首先微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应用,来理解什么是微服务。

10720

扫码关注云+社区

领取腾讯云代金券