微服务为何选择Spring Cloud

现如今微服务架构非常流行,而使用微服务构建系统也会带来更清晰的业务划分和可扩展性。下面主要介绍主流技术——Spring Cloud。

为什么微服务架构需要Spring Cloud?

简单来说,服务化的核心就是将传统的一站式应用根据业务拆分成一个一个的服务,而微服务在这个基础上要更彻底的去耦合(不再共享DB、KV,去掉重量级ESB),并且强调DevOps和快速演化。这就要求我们必须采用与一站式时代、泛SOA时代不同的技术栈,而Spring Cloud就是其中的佼佼者。

接下来我们从服务化架构演进的角度来看看为什么Spring Cloud更适应微服务架构。

1、从使用Nginx说起

最初的服务化解决方案是给提供相同服务的服务提供一个统一的域名,然后由服务调用者向这个域名发送HTTP请求,由nginx负责请求的分发和跳转。


这种架构存在很多问题:

a、Nginx作为中间层,配置文件中耦合了服务调用的逻辑,这削弱了微服务的完整性,也是的Nginx在一定程度上变成了一个重量级的ESB。

b、服务的信息分散了各个系统,无法统一管理和维护。每一次的服务调用都是一次尝试,服务消费者并不知道有哪些实例在给它们提供服务。这不符合DevOps理念。

c、无法直观的看到服务消费者和服务提供者当前的运行状况和通信频率。这也不符合DevOps理念。

d、消费者的失败重发、负载均衡等都没有统一策略。加大了开发每个服务的难度,不利于快速演化。

2、基于Dubbo实现微服务

为了解决上面的问题,我们需要一个现成的中心组件对服务进行整合,将每个服务的信息汇总,包括服务的组件名称、地址、数量等。服务的调用方在请求某项服务时首先通过中心组件获取提供这项服务的实例信息(IP、端口等),再通过默认或自定义的策略选择服务的某一提供者直接进行访问。所以,我们引入了Dubbo。

Dubbo是阿里开源的一个SOA服务治理解决方案,文档丰富,在国内的使用读非常高。

使用Dubbo构建的微服务,已经可以很好的解决上面提到的问题:

    调用中间层变成了可选组件,消费者可以直接访问服务提供者。

    服务信息被集中到Registry中,形成了服务治理的中心组件。

    通过Monitor监控系统,可以直观的展示服务调用的统计信息。

    Consumer可以进行负载均衡、服务降级的选择。

但是对于微服务架构而言,Dubbo也并不是十全十美的:

a、Registry严重依赖第三方组件(zookeeper或Redis),当这些组件出现问题时,服务调用很快就会中断。

b、Dubbo只支持RPC调用。使得服务提供方和服务调用方在代码上产生了强依赖,服务提供者需要不断将包含公共代码的jar包打包出来供消费者使用。一旦打包出现问题,就会导致服务调用出错。

c、最重要的是Dubbo现在已经停止维护了,对于技术发展的新需求,需要由开发者自行拓展升级。这对于很多想要采用微服务架构的中小软件组织,显然是相当合适的。

3、新的选择——Spring Cloud

作为新一代的服务框架,Spring Cloud提出的口号是“面向云环境的应用程序”,它为微服务架构提供了更加全面的技术支持。

结合我们前面提到的微服务的诉求,我们把Spring Cloud和Dubbo进行对比:

很明显,Spring Cloud的功能比Dubbo更加强大,涵盖面更广,而且作为Spring的拳头项目,它也能够与Spring framework、Spring Boot、Spring Data等其它项目完美融合,这些对于微服务而言是至关重要的。前面提到,微服务一个重要理念就是持续集成、快速交付,而在微服务中使用一个统一的技术框架,显然比把分散的技术组合到一起更有效率。更重要的是相比于dubbo,它是一个正在持续维护的、社区更加火热的开源项目,这就保证了使用它构建的系统,能够持续地得到开源力量的支持。

=================================================================================

Spring Cloud技术概览

下图展示了SpringCloud完整技术组成:

服务治理:这是SpringCloud的核心。目前Spring Cloud主要通过整合Netflix的相关产品来实现这方面的功能(Spring Cloud Netflix),包括用于服务注册和发现的Eureka,调用断路器Hystrix,调用端负载均衡Ribbon,Rest客户端Feign,智能服务路由Zuul,用于监控数据收集和展示的Spectator、Servo、Atias,用于配置读取的Archaius和提供Controller层Reactive封装的Rxjava。

分布式链路监控:Spring Cloud Sleuth提供了全自动可配置的数据埋点,以收集微服务调用链路上的性能数据,并发送给Zipkin进行存储,统计和展示。

消息组件:Spring Cloud Stream对于分布式消息的的各种需求进行了抽象,包括发布订阅、分组消费、消息分片等功能,实现了微服务之间的异步通信。Spring Cloud Stream也集成了第三方的RabbitMQ和Apache kafka作为消息队列的实现。而Spring Cloud Bus基于Spring Cloud Stream,主要提供了服务间的事件通信(比如:刷新配置)。

配置中心:基于Spring Cloud Netflix和Spring Cloud Bus,Spring又提供了Spring Cloud config,实现类配置集中管理,动态刷新的配置中心概念。配置通过Git或简单文件来存储,支持加解密。

安全控制:Spring Cloud Security基于OAUTH2这个开放网络的安全标准,提供了微服务环境下的单点登录、资源授权、命令管理等功能。

命令行工具:Spring Cloud Cli提供了以命令行方式或脚本的方式来管理微服务及Spring Cloud组件的方式。

集群工具:Spring Cloud Cluster提供了集群选主,分布式锁(暂未实现)、一次性令牌(暂未实现)等分布式集群需要的技术组件。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,406评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,976评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,302评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,366评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,372评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,457评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,872评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,521评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,717评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,523评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,590评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,299评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,859评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,883评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,127评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,760评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,290评论 2 342

推荐阅读更多精彩内容