Spring Cloud整体核心架构:Rest服务,在Spring Cloud配置过程中,都是遵循Rest风格规范,在Rest处理中,必不可少两个对象端:服务的提供者(provider)和服务消费者(consumer)

所以整个Spring Cloud的基础结构如下所示:

既然Spring Cloud的核心是Restful架构,那么如果想更好的去使用微服务好需要考虑这些问题:

1、所有的微服务的地址可能非常多,为了统一管理这些地址,也为了能够即时告诉用户哪些服务不可用用,为此必不可少一个分布式注册中心,并且注册中心支持HA机制(High Availability),为了高效且方便的服务注册,Spring Cloud使用Eureka服务注册中心。

2、对于整个的WEB端的架构(Spring Boot实现),可以进行轻松方便的WEB程序编写,而后利用Nginx或Apache实现负载均衡,这是WEB端端的负载均衡,那么业务端呢?应该也提供多个业务端进行负载均衡,这时将所有需要参与到负载均衡的业务端在Eureka之中进行注册。

在进行客户端使用Rest架构调用的时候,都需要有一个调用地址,即使使用了Eureka作为注册中心,也需要有一个明确的调用地址,但是所有的操作都利用访问地址的方式来调用。程序的开发者最方便的应用工具是接口,更好的方式是将所有的Rest服务的内容以接口的方式调用,所以它有提供了feign技术,利用feign可以伪造接口。

3、在进行整体微服务架构设计的时候由于牵扯到的问题还是属于RPC,所以不可避免考虑到熔断处理机制,所谓上的熔断就好比用电安全之中的保险丝,假设现在有若干个微服务,并且这些微服务之间允许相互调用,例如,A服务调用B服务、B服务又调用了C服务。

如果实际开发中没有设计好熔断处理机制,那么就会出现雪崩效应,所以为了防止这样的灾难问题出现,Spring Cloud里面提供有Hystrix熔断处理机制,以保证某一个微服务出现问题之后依然可以正常提供服务信息,但是这个返回的服务信息可能已经不是期望的结果,而是服务故障的信息,让调用方知道该服务出现,避免扩大更大范围的影响。

4、在进行微服务访问的时候还有一点是非常可怕的,客户端调用Rest微服务时需要知道所有微服务的名称信息,如果服务多名称也会多,操作起来非常麻烦,同时增加日后维护成本。

通过Zuul的代理用户只需要知道指定的路由的路径就可以访问指定的微服务的信息,这样更好提现了Java中“key=value”的设计方案,而且所有的微服务通过Zuul进行代理之后也可以更加安全的名称的隐藏。

5、在Spring Boot里面突出“零配置”的概念,原则上不再使用任何配置文件,但是事实上没有完全实现,因为在整体的设计里面,依然会提供application.yml等配置文件,那么在微服务创建之中,一定有成百上千个微服务,于是这些配置文件的管理就成为问题,维护起来就不是件容易的事了。

为了解决这样的问题,Spring Cloud的设计中提供一个SpringCloudConfig的程序组件,利用这个组件就可以直接基于Git或SVN来进行配置文件的管理。

由此可见,在整体设计上SpringCloud更好的实现了RPC的架构设计,而且使用了Rest作为通信的基础,这是它无与伦比之处,同时大量使用了Netflix公司的产品实践技术,所以这些技术也有可靠保证。

作者: xiaogao

出处: http://www.cnblogs.com/tocode/

关于作者:专注Java Web,网络爬虫,请多多赐教!

本文版权归作者和博客园共有,欢迎转载,但务必注明出处,且在文章页面明显位置给出, 原文链接 如有问题请咨询。

Spring Cloud 微服务入门(二)--Spring Cloud 架构的更多相关文章

  1. 《Spring Cloud微服务 入门 实战与进阶》

    很少在周末发文,还是由于昨晚刚收到实体书,还是耐不住性子马上发文了. 一年前,耗时半年多的时间,写出了我的第一本书<Spring Cloud微服务-全栈技术与案例解析>. 时至今日,一年的 ...

  2. spring cloud微服务实践二

    在上一篇,我们已经搭建了spring cloud微服务中的注册中心.但只有一个注册中心还远远不够. 接下来我们就来尝试提供服务. 注:这一个系列的开发环境版本为 java1.8, spring boo ...

  3. Spring Cloud 微服务五:Spring cloud gateway限流

    前言:在互联网应用中,特别是电商,高并发的场景非常多,比如:秒杀.抢购.双11等,在开始时间点会使流量爆发式地涌入,如果对网络流量不加控制很有可能造成后台实例资源耗尽.限流是指通过指定的策略削减流量, ...

  4. 微服务入门二:SpringCloud(版本Hoxton SR6)

    一.什么是SpringCloud 1.官方定义 1)官方定义:springcloud为开发人员提供了在分布式系统中快速构建一些通用模式的工具(例如配置管理.服务发现.断路器.智能路由.微代理.控制总线 ...

  5. Spring Cloud 微服务入门(一)--初识分布式及其发展历程

    分布式开发出现背景 当有计算机出现一段时间之后就开始有人去想如何将不同的电脑进行网络连接,而网络连接之后对于web的项目开发就探索所谓的分布式设计,同时人们也意识到重要的数据必须多份存在.所以分布式就 ...

  6. Spring Cloud 微服务六:调用链跟踪Spring cloud sleuth +zipkin

    前言:随着微服务系统的增加,服务之间的调用关系变得会非常复杂,这给运维以及排查问题带来了很大的麻烦,这时服务调用监控就显得非常重要了.spring cloud sleuth实现了对分布式服务的监控解决 ...

  7. 微服务入门三:SpringCloud Alibaba

    一.什么是SpringCloud Alibaba 1.简介 1)简介 阿里云未分布式应用开发提供了一站式解决方案.它包含了开发分布式应用程序所需的所有组件,使您可以轻松地使用springcloud开发 ...

  8. 基于Spring Cloud的微服务入门教程

    (本教程的原地址发布在本人的简书上:http://www.jianshu.com/p/947d57d042e7,若各位看官有什么问题或不同看法请在这里或简书留言,谢谢!) 本人也是前段时间才开始接触S ...

  9. Spring Cloud 微服务二:API网关spring cloud zuul

    前言:本章将继续上一章Spring Cloud微服务,本章主要内容是API 网关,相关代码将延续上一章,如需了解请参考:Spring Cloud 微服务一:Consul注册中心 Spring clou ...

随机推荐

  1. sqoop简单介绍

    一简介 Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS ...

  2. Keras 时序模型

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Thinking_boy1992/article/details/53207177 本文翻译自 时序模 ...

  3. 二十三、css如何实现锯齿形---border-image

    css如何实现这样的样式: 解决方案: 这里需要用到的技术是border-image的灵活运用,首先需要一张图片,这里我选中的是这样子的,此后 的图片可以拿这个更改圆形的颜色以更改锯齿颜色: 底部透明 ...

  4. springmvc中配置RESTful风格控制器

    一般的http请求中其实只需要get和post就可以满足项目需求了,而为什么还要使用restful可能就是为了使请求url看起来更加直观,好看吧.. restful常用的请求方式:get,post,p ...

  5. SpringMVC学习(一)——概念、流程图、源码简析

    学习资料:开涛的<跟我学SpringMVC.pdf> 众所周知,springMVC是比较常用的web框架,通常整合spring使用.这里抛开spring,单纯的对springMVC做一下总 ...

  6. pt-heartbeat(percona toolkit)

    pt-heartbeat是用来监控主从延迟的一款percona工具,现在我们大部分的MySQL架构还是基于主从复制,例如MHA,MMM,keepalived等解决方案.而主从环境的话,我们很关心的就是 ...

  7. ACM HDU 1755 -- A Number Puzzle

    A Number Puzzle Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  8. Yii2用Gii自动生成Module+Model+CRUD

    1. 开启gii模块 common/config/main-local.php加入下面代码 return [ 'modules' => [ 'gii' => [ 'class' => ...

  9. [EffectiveC++]item33:避免遮掩继承而来的名称。

    先看看: ZT C++ 重载.覆盖和隐藏的区别 http://www.cnblogs.com/jeanschen/p/3405987.html 隐藏是指派生类的函数屏蔽了与其同名的基类函数,规则如下: ...

  10. memcached 相关

    今天用了下memcached,把一个日志分析结果的大数组缓存起来,由于实时性跟准确性要求不高,所以缓存一周:因为日志越来越多,不缓存的话每次查看页面会比较慢.(其实可以先离线定期计算好结果存起来).以 ...