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. arcgis10.sp5下载地址

    http://support.esrichina.com.cn/2012/0716/1649.html

  2. Javascript之全局变量和局部变量部分讲解

    以此文作为自己学习的一个总结. 关于全局变量和局部变量的一句简单的定义:在函数外声明的变量都为全局变量,在函数内声明的为局部变量. 一.局部变量和全局变量重名会覆盖全局变量 var a = 1; fu ...

  3. Ganglia安装

    一.rrdtool安装 1.1 安装依赖包 由于rrdtool依赖的包比较多,而且包之间也存在依赖,故使用yum安装由于服务器无法联网,故使用iso文件创建本地yum源,方法见下: (1)创建iso存 ...

  4. java线程方法join的总结

    虽然关于讨论线程join方法的博客已经很多了,不过个人感觉挺多都讨论得不够全面,所以我觉得有必要对其进行一个全面的总结. 一.作用 Thread类中的join方法的主要作用就是同步,它可以使得线程之间 ...

  5. lsqnonlin函数使用方法

    非线性最小二乘函数  lsqnonlin  格式x = lsqnonlin(fun,x0) %x0 为初始解向量:fun为,i=1,2,-,m,fun返回向量值F,而不是平方和值,平方和隐含在方法中, ...

  6. scp 上传和下载文件

    mac和linux自带scp命令,windows的话请考虑gitbash或者专业linux工具 (默认端口为22,所以-p可不写) 上传文件 scp -p /home/lnmp.gz root@ip: ...

  7. leetcode Ch2-Dynamic Programming [2014]

    1. Triangle class Solution { public: int minimumTotal(vector<vector<int> > &triangle ...

  8. java img图片转pdf 工具类

    package com.elitel.hljhr.comm.web.main.controller; import java.io.File; import java.io.FileNotFoundE ...

  9. Web API 2 入门——使用Web API与ASP.NET Web窗体(谷歌翻译)

    在这篇文章中 概观 创建Web窗体项目 创建模型和控制器 添加路由信息 添加客户端AJAX 作者:Mike Wasson 虽然ASP.NET Web API与ASP.NET MVC打包在一起,但很容易 ...

  10. JS 获取指定日期的前几天,后几天

    function getNextDate(date,day) { var dd = new Date(date); dd.setDate(dd.getDate() + day); var y = dd ...