Spring Cloud

面试系列-Spring Cloud 的核心架构原理

无人久伴 提交于 2020-02-26 23:41:01
最近在补一些分布式系列的面试内容,提前做做准备吧,你们懂的,也跟大家分享分享。现在分布式系统基本上都是标配了,如果你现在还在玩儿单机,没有接触过这些东西的话,权当是为你打开一扇新的大门吧。 大的单体项目有多蛋疼 以前我们做单机系统的时候,所有的代码都在一个项目里面,只是不同的模块按照包名来划分的。我们以前做的一个某省的教育项目,有学生信息和就业系统、有高校培训系统、有一个人资系统等一共六个,4个小伙伴都在一个代码里面进行开发,各个系统之间有一定的联系,但是大部分是不相关的,但管理页面在一起。 那时候我们都在一个项目里面码代码,每次启动好几分钟,还有就是包版本冲突问题,搞得真是蛋疼。大家经历过大型的单体项目开发,相信你有体会的。 还有各系统的使用量也不一样,有的比较大。比如学生信息和就业系统,面向的是所有高校,特别是快毕业那段时间,每个学校会上报就业率等信息,还有就是打印报到证呀什么的。有的系统就使用比较少,比如人资、培训系统 使用的基本上就教育厅的一些员工,和部分老师,流量不大,勉强能扛得住。 模拟业务背景 大点的企业,比如做电商的,用户几十万的,日活几万的,背后好几十人上百人的团队在支撑开发,单体系统就不太合适了。 比如现在有一个下单买东西的需求,就需要订单系统、库存系统、仓库系统和积分系统 等来进行处理。如下图: 订单系统、库存系统、仓储和积分系统都是部署到不同的机器上的。

SpringCloud 基础教程(九)-Hystrix服务监控(下)

拟墨画扇 提交于 2020-02-26 18:58:30
  我的博客: 程序员笑笑生 ,欢迎浏览博客!  上一章 SpringCloud基础教程(八)-Hystrix熔断器(上) 当中,我们介绍了Hystrix在分布式环境下,如何通过熔断、降级的方式解决了服务延迟或者故障出现的问题,本章我们将深入了解Hystrix的服务监控。 前言  当服务端因为网络延迟或故障出险问题时,我们可以通过Hystrix实现服务熔断,那么如何做到迅速的发现问题并且迅速的解决问题呢?熔断的监控工具有2款工具:Hystrix-dashboard和Turbine,Hystrix-dashboard是针对Hystrix进行实时的监控工具,通过Hystrix-dashboard我们可以直观的看到单个应用的服务信息。但是,在分布式的模式下,我们需要一个能够汇总所有的服务数据并直观的显示出来,这个工具就是Turbine。 一、健康检查  我们在 SpringCloud 基础教程(三)-Eureka 进阶 中提到了 Eureka是默认使用心跳机制来监测服务的健康与否的,我们通过在服务端引入actuator依赖,并修改yml配置,开启健康检查,能够查到服务是否正常,这里在需要被监测的服务组件中,开启监控也需要引入actuator: <dependency> <groupId>org.springframework.boot</groupId> <artifactId

SpringCloud 基础教程(八)-Hystrix熔断器(上)

痞子三分冷 提交于 2020-02-26 18:44:04
  我的博客: 程序员笑笑生 ,欢迎浏览博客!  上一章 SpringCloud基础教程(七)-声明式服务调用Fegign 当中,我们介绍了使用Fegin更加简化的实现服务间的调用.本章节我将继续探索Hystrix组件的使用。 一、前言  在分布式的环境中,服务之间得依赖不可避免的会失败,Hystrix是Netfilx的库,主要是通过添加延迟和容错的逻辑帮助控制分布式服务之间的交互,Hystrix通过隔离服务之间的访问点,停止他们之间的级联故障以及提供备选的选项来实现这一点。 二、Hystrix简介 2.1 服务雪崩  假设在分布式的环境中,所有的一切都正常,请求流如下图所示: 当许多后端服务变的一个故障时,会导致某一个、多个调用不可用,并且占用系统的线程,I/O等资源:  随着请求数的变大,就能导致所有服务器上的资源几秒钟内饱和,又称为雪崩状态:  通过客户端执行网络访问时,这些问题会更加的严重,第三方依赖就相当于一个"黑夹子",封装操作的细节,而且还可以随时的修改,每个客户端的网络和资源配置都不同,通常也难以监控可修改。所有的问题都代表了需要对故障和延迟做隔离,单个依赖的故障不能关闭整个系统: 2.2 Hypstrix 设计原则: 防止单个依赖耗尽所有容器用户线程 提供降级服务,以保护用户请求失败 使用隔离技术,阻断一个依赖故障的传播 近实时的指标、监控 2.3 Hystrix

浅谈应用系统立体化监控

十年热恋 提交于 2020-02-26 17:56:28
本人浅析传统IT系统层面的系统监控,不涉及k8s以及Service Mesh,抛砖引玉。 随着系统增多,我们需要一套能够立体化监控系统去监控你的应用及业务,出现问题能够及时告警,或通过大屏、短信和邮件。 我个人认为监控应该从三个方面进行入手,即:Metrics、Logging、Tracing。 Metrics (指标) 通常指标信息担负着数据可视化的物料信息,比如:计量器、直方图、计数器、TPS等等。 Logging(日志) 日志信息通常记录了应用程序运行时的详细状态信息。通常会有INFO、WARN、ERROR等级别。 Tracing(追踪) 在传统的单体应用,如传统的MVC系统中,通常访问逻辑明确。而使用微服务对系统进行重新设计之后,就会带来接口互调,多线程,应用多活情况下的调用次序不明等种种问题。这时迫切需要记录每次请求都经过了哪些主机的那些服务,以及是一次调用会带来系统内部的多次调用问题。以及Http传输协议的天然低效率问题,都是需要在追踪层面上做考虑的。 监控选型与架构: Metrics (指标): Promethues+Grafanna+Influxdb Logging(日志): ELK or Spark Streaming Tracing(追踪): Zipkin or Skywalking 欢迎关注我的公号:彪悍大蓝猫,持续分享SpringCloud、大数据干货~ 来源

SpringCloud配置中心选Vault作为数据后端

丶灬走出姿态 提交于 2020-02-26 17:32:32
SpringCloud配置中心 本篇讲解Spring Cloud Config采用Vault作为数据后台的方案,以SpringCloud-Hoxton.RELEASE、SpringBoot-2.2.1.RELEASE版本为基础,Vault采用1.3.1。 项目基础采用Eureka作为注册中心,启动和发现都依赖它。 样例托管在Github: ====>> cloud-service-config-vault config-vault配置 pom.xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> applicatin.yml spring: cloud: config: server: vault: backend: secret default-key: application #公共配置属性,所有应用共享 host: localhost port: 8200 scheme: http kv-version: 2 timeout: 5 skip-ssl-validation: true 注意: backend参数对应vault中具体一个secrets,且只能配置一个secrets。

SpringCloud 基础教程(七)-Feign声明式服务调用

纵饮孤独 提交于 2020-02-26 17:13:08
  我的博客: 程序员笑笑生 ,欢迎浏览博客!  上一章 SpringCloud基础教程(六)-负载均衡Ribbon 当中,我们介绍了Ribbon在微服务中是如何做到负载均衡的,本期我们将在此基础上使用Fegin更加简化的实现服务间的调用。 前言  什么是Fegin,在解释之前,我们先梳理一下我们之前学习到的,在微服模式下,解决服务间的调用可以通过Grpc、HttpClient、(Spring中的resttemplate是对HttpClient的封装)等开源框架,这种调用我们称之为远程过程的调用,即RPC,那么进行RPC调用需要解决几个重要的问题,一个是序列化/反序列化,比如Json/xml等怎样序列化和反序列化等,再一个就是以什么样的协议实现这样的调用。这两个问题在开源社区都有了很好的技术方案。那么Spring Cloud Fegin主要是为了更简单的实现开发,封装了Http的调用流程,更适合面向接口化编程的习惯。我们虽然能通过Ribbon和RestTemplate通过URL进行远程调用,但是这样拼接参数,并不是特别的优雅,为此,我们可以通过使用Feign让远程调用变的更简洁。 一、快速使用Feign  我们在上几章的服务调用方server-consumer示例的pom文件中添加Feign的依赖 (我使用的spring Cloud版本是Greenwich.SR3版本

13 个最火的 Java 开源项目推荐!总有一个适合你!

筅森魡賤 提交于 2020-02-26 16:42:54
更多开源项目推荐: https://github.com/Snailclimb/awesome-java Guide 哥注:下面这些推荐的项目几乎都和 Spring Boot 有关,毕竟这年头没有理由再搞 SSM/SSH 这些东西了。 商城系统 Guide 哥注:下面的商城系统大多比较复杂比如 mall ,如果没有 Java 基础和 Spring Boot 都还没有摸熟的话不推荐过度研究下面几个项目或者使用这些项目当作毕业设计。 mall :mall 项目是一套电商系统,包括前台商城系统及后台管理系统,基于 SpringBoot+MyBatis 实现。 mall-swarm : mall-swarm 是一套微服务商城系统,采用了 Spring Cloud Greenwich、Spring Boot 2、MyBatis、Docker、Elasticsearch 等核心技术,同时提供了基于 Vue 的管理后台方便快速搭建系统。 onemall :mall 商城,基于微服务的思想,构建在 B2C 电商场景下的项目实战。核心技术栈,是 Spring Boot + Dubbo 。未来,会重构成 Spring Cloud Alibaba 。 litemall : 又一个小商城。litemall = Spring Boot 后端 + Vue 管理员前端 + 微信小程序用户前端 + Vue

快速搭建单机版Spring Cloud EurekaServer

有些话、适合烂在心里 提交于 2020-02-26 15:52:04
本文介绍搭建单机版的Eureka Server服务 1 创建项目,导入依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.yiidian</groupId> <artifactId>eureka-server</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> <relativePath /> </parent> <properties> <project.build.sourceEncoding>UTF-8<

SpringCloud 进阶: 消息驱动(入门)Spring Cloud Stream【Greenwich.SR3】

折月煮酒 提交于 2020-02-26 14:34:23
 我的博客: 程序员笑笑生 ,欢迎浏览博客!  上一章 SpringCloud 基础教程(十二)-Zipkin分布式链路追踪系统搭建 当中,我们使用Zipkin搭建完整的实时数据追踪系统。本章开始我们将进入Spring Cloud的更高阶的内容部分,首先从消息驱动Spring Cloud Stream开始。 前言  消息驱动,顾明思议,在企业级应用中,消息中间件经常用于处理非同步场景、消息通知、应用解耦等。常用的有RabbitMq、kafka、Redis等消息队列等。Spring Cloud Stream是一个构建事件消息驱动的微服务框架,提供了一个灵活的编程模型。并基于Spring的基础之上,支持发布-订阅模型、消费者分组、数据分片等功能。 一、Stream 应用模型 Middleware: 消息中间件,如RabbitMq等 Binder:可以认为是适配器,用来将Stream与中间连接起来的,不同的Binder对应不同的中间件,需要我们配置 Application Core:由Stream封装的消息机制,很少情况下自定义开发 inputs:输入,可以自定义开发 outputs:输出,可以自定义开发 接下来快速开始,主要就是针对以上几个组件进行不同的配置。 二、快速开始  接下来,我们以RabbitMQ为例(消息队列的环境搭建整这里不做过多的介绍,本章以Stream为主)

六、Spring Cloud之配置中心config

天大地大妈咪最大 提交于 2020-02-26 14:17:45
前言 前面我们讲了微服务的注册中心、负载均衡、熔断处理、网管服务。接下来我们讲配置中心,为什么要用配置中心呢? 其实我们接触一段时间就可以发现,我们的项目还是非常多的,每个项目都有自己的一份配置,这样管理起来就显得很不方便了,所以微服务中就提供了config 配置中心,将所有服务的配置都集中在config 服务中,这样方便统一管理。 怎么说呢?就好比每个项目都比如一个房间,每个房间都需要一把钥匙才能开启。而config 则是管理这些钥匙的,好比钥匙链,想要启动那个项目,就需要先从config中获取对应的钥匙,然后启动项目。 下面让我们来看下怎样部署一个config吧。配置中心分为服务端和客户端,和eureka 有点像,服务端是一个单独的项目,用来管理其他服务的配置,其他的服务就是客户端。 配置中心服务端 映入config-server 依赖 首先我们创建一个config 的子模块,用来做config 服务端,然后在pom.xml 文件中加入config-server依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> 启动类 在启动类中,我们加入@EnableConfigServer