Spring Cloud

老板让你抗住千万级流量,如何做架构设计?

谁说胖子不能爱 提交于 2020-08-11 12:38:59
作者:袋🐴饲养员员 cnblogs.com/GodHeng/p/8834810.html 随着互联网的发展,各项软件的客户量日益增多,当客户量达到一定峰值时,当数以万计的流量来临时,程序的顺利运行以及即时响应则显得尤为重要,就像双11那天的淘宝一样。那么,如何设计架构才能够抗住这千万级的流量。 老板让你抗住千万级流量,如何做架构设计? 首先,要在我们架构设计的时候建立一些原则。 1. 实现高并发 服务拆分: 将整个项目拆分成多个子项目或者模块,分而治之,将项目进行水平扩展。 服务化: 解决服务调用复杂之后的服务的注册发现问题。 消息队列: 解耦,异步处理 缓存: 各种缓存带来的并发 2. 实现高可用 集群、限流、降级 3. 业务设计 幂等: 就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用,就像数学里的数字1,多少次幂的结果都是1。举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额发现多扣钱了,流水记录也变成了两条。 防重: 防止同样的数据同时提交 除了在业务方向判断和按钮点击之后不能继续点击的限制以外,在服务器端也可以做到防重: 在服务器端生成一个唯一的随机标识号(Token<令牌>

SpringBoot实现本地存储文件上传及提供HTTP访问服务

和自甴很熟 提交于 2020-08-11 11:22:57
笔者计划为大家介绍分布式文件系统,用于存储应用的图片、word、excel、pdf等文件。在开始介绍分布式文件系统之前,为大家介绍一下使用本机存储来存放文件资源。 二者的核心实现过程是一样的: 上传文件,保存文件(本节是本地磁盘) 返回文件HTTP访问服务路径给前端,进行上传之后的效果展示 一、复习 服务端接收上传的目的是提供文件的访问服务,那么对于SpringBoot而言,有哪些可以提供文件访问的静态资源目录呢? classpath:/META-INF/resources/ , classpath:/static/ , classpath:/public/ , classpath:/resources/ 这是之前我们为大家介绍的内容,从这里看出这里的静态资源都在classpath下。那么就出现问题: 应用的文件资源不能和项目代码分开存储(你见过往github上传代码,还附带项目文件数据的么?) 项目打包困难,当上传的文件越来越多,项目的打包jar越来越大。 代码与文件数据不能分开存储,就意味着文件数据的备份将变得复杂 二、文件上传目录自定义配置 怎么解决上述问题?别忘记了spring boot 为我们提供了 使用 spring.resources.static-locations 配置自定义静态文件的位置。 web: upload-path: D:/data/ spring:

SpringCloud- 第六篇 Hystrix参数配置(三)

核能气质少年 提交于 2020-08-11 11:11:43
1:概述 Hystrix使用Archaius作为配置属性的默认实现。官方配置文档: https://github.com/Netflix/Hystrix/wiki/Configuration 每个属性有四个优先级,依次增大: 1:代码的全局默认值 2:动态全局默认属性 可以使用全局属性文件来更改全局默认值。 3:代码实例默认 定义特定于实例的默认值,比如在HystrixCommand构造函数中设置的值 4:动态实例属性 可以动态设置实例特定的值,从而覆盖前面三个默认级别,格式是: hystrix.command.命令key.属性名称=值 2:请求上下文 1:requestCache.enabled 设置是否开启请求的缓存功能,默认true 2:requestLog.enabled 设置是否开启请求的日志功能,默认true 3:命令执行 execution.isolation.strategy 指示HystrixCommand.run()执行哪个隔离策略,选项: 1:THREAD - 它在单独的线程上执行,并发请求受线程池中线程数的限制 2:SEMAPHORE - 它在调用线程上执行,并发请求受信号计数的限制 3:官方推荐使用线程隔离策略,默认也是按照线程隔离进行处理。 4:信号量隔离的方式是限制了总的并发数,每一次请求过来,请求线程和调用依赖服务的线程是同一个线程

一张图搞懂Spring bean的完整生命周期

ぐ巨炮叔叔 提交于 2020-08-11 10:45:23
一张图搞懂Spring bean的生命周期,从Spring容器启动到容器销毁bean的全过程,包括下面一系列的流程,了解这些流程对我们想在其中任何一个环节怎么操作bean的生成及修饰是非常有帮助的。 Bean的完整生命周期所用到的组件大概可以分为以下几类: 1、Bean级别的接口 Bean自身定义的方法或者实现了接口的方法,即init-method和destroy-method指定的方法,还有实现了BeanNameAware,BeanFactoryAware,InitializingBean,DiposableBean等接口的方法。 2、容器全局后处理器接口 包括了BeanFactoryPostProcessor,InstantiationAwareBeanPostProcessor,BeanPostProcessor这两个接口,它们是容器全局级别的接口。 推荐去我的博客阅读更多: 1. Java JVM、集合、多线程、新特性系列教程 2. Spring MVC、Spring Boot、Spring Cloud 系列教程 3. Maven、Git、Eclipse、Intellij IDEA 系列工具教程 4. Java、后端、架构、阿里巴巴等大厂最新面试题 觉得不错,别忘了点赞+转发哦! 来源: oschina 链接: https://my.oschina.net/javaroad

重磅:Consul、Terraform、Vagrant 等禁止中国使用!部分 Spring Cloud 用户或受影响

主宰稳场 提交于 2020-08-11 10:35:36
近日, 国外HashiCorp在官网宣布: 不允许中国境内使用、部署和安装该企业旗下的【企业版】产品和软件。 PLEASE NOTE THAT THE SOFTWARE MAY NOT BE USED, DEPLOYED OR INSTALLED IN THE PEOPLE’S REPUBLIC OF CHINA. 请注意,本软件不得在中华人民共和国境内使用、部署或安装。 (开源版等其它版本没有提及) HashiCorp旗下的知名的开源软件: Terraform: Terraform 是一种安全有效地构建、更改和版本控制基础设施的开源工具(基础架构自动化的编排工具)。它的目标是 "Write, Plan, and create Infrastructure as Code", 基础架构即代码,Terraform也 提供了Kubernetes应用程序的完整生命周期管理,包含Pod的创建、删除以及副本控制等。国内众多公有云都支持Terraform。 Consul : 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发,目前在国内也有大量的使用和落地案例。 Vagrant: 也是一个比较流行的虚拟机管理软件,使用 Vagrant 可以让我们用命令直接从云上下载虚拟机的镜像,然后进行创建和管理等。 其中, Consul 有被整合入

官方文档中文版!Spring Cloud Stream 快速入门

亡梦爱人 提交于 2020-08-11 10:27:31
本文内容翻译自官方文档, spring-cloud-stream docs ,对 Spring Cloud Stream的应用入门介绍。 一、Spring Cloud Stream 简介 官方定义 Spring Cloud Stream 是一个构建消息驱动微服务的框架。 Spring Cloud Stream构建在SpringBoot之上,提供了Kafka,RabbitMQ等消息中间件的个性化配置,引入了发布订阅、消费组和分区的语义概念,有效的简化了上层研发人员对MQ使用的复杂度,让开发人员更多的精力投入到核心业务的处理。 在实际开发过程中,服务与服务之间通信经常会使用到消息中间件,而以往使用了哪个中间件比如RabbitMQ,那么该中间件和系统的耦合性就会非常高,如果我们要替换为Kafka那么变动会比较大,使用Spring Cloud Stream来整合我们的消息中间件,可以降低系统和中间件的耦合性。 二、Spring Cloud Stream 解决什么问题 无感知的使用消息中间件 Stream解决了开发人员无感知的使用消息中间件的问题,因为Stream对消息中间件的进一步封装,可以做到代码层面对中间件的无感知。 中间件和服务的高度解耦 Spring Cloud Stream进行了配置隔离,只需要调整配置,开发中可以动态的切换中间件(如rabbitmq切换为kafka)

颓废程序员,大四=失业,用一个月时间让我遇见更好的我自己,努力ing,我会持续更新我自己的成果以及遇到的问题的

左心房为你撑大大i 提交于 2020-08-11 10:12:18
因为太菜了,所以本博客基本就是写日记呀,写写心得写写学到的东西遇到的坑,以后复习起来也方便,不是做什么大型项目 资料基本都是看的一些b站上面的视频可能会很浅显,希望有看到的大佬们能给点建议,根据大佬们的建议我会去更改自己的计划,在这就先谢谢那些大佬们啦,谢谢你们的帮助!!! Java基础知识以及servlet之前已经看过了,应该还可以,如果之后又要用到遗忘的用到的时候再去快速得补一下 我必须要把这些进度完成,不然不睡觉!!! 8.8 计算机网络,tcp/ip协议,socket,操作系统,cpu底层(马士兵老师的课程) 8.9Spring复习 8.10-8.11SpringMVC 8.13-8.14MyBatis 8.15-8.16SpringBoot 8.17-8.19struts框架 8.20-8.22habinate框架 8.23-8.25分布式架构 8.26-8.28Netty框架 8.29-8.30radis 8.31-9.2SpringCloud 9.3-9.5Nginx 9.6-9.7Zookeeper 9.8-9.9SVN,git,Maven,docker 可能我写的都很菜,大家别介意啊,只是想写一个博客来记录我自己,为自己而奋斗一把,不让游戏一直占据着我的生活 因为我是2021届的本科生,学校是以前的三本所以要靠自己去学,现在学校里面催着要快点找到工作

SpringBoot + Spring Cloud Eureka 服务注册与发现

家住魔仙堡 提交于 2020-08-11 09:59:31
什么是Spring Cloud Eureka Eureka是Netflix公司开发的开源服务注册发现组件,服务发现可以说是微服务开发的核心功能了,微服务部署后一定要有服务注册和发现的能力,Eureka就是担任这个角色。如果你用过Dubbo的话,Dubbo里服务注册和发现就是通过Zookeeper框架完成的。 Eureka 目前是2.2.x版本,目前官方已经宣布不再维护和更新了,不过Eureka 做注册中心已经在生产环境中大规模使用了,可以说很稳定了。从我个人的角度看,目前大家使用的更多的是阿里的 Nacos 和 Consul 这两个组件实现了不止服务发现和注册,微服务开发不用再去依赖更多的组件和框架。这篇文章模拟一下Eureka Server集群和服务提供者集群和服务消费。 版本说明 SpringCloud + SpringBoot开发微服务并不是版本越新越好,Spring Cloud官方提供了一个版本对应关系。目前最新的就是Hoxton, 对应SpringBoot 2.2.x版本。 准备工作 新建父工程, 主要约定SpringCloud, SpringBoot版本号,我使用的是Hoxton.SR1, SpringBoot2.2。 新建5个子Module,这里两个Eureka Server,两个Service,一个consumer, 两个Eureka

Spring Cloud 系列之 Consul 配置中心

最后都变了- 提交于 2020-08-11 08:50:41
前面我们已经学习过 Spring Cloud Config 了: Spring Cloud 系列之 Config 配置中心(一) Spring Cloud 系列之 Config 配置中心(二) Spring Cloud 系列之 Config 配置中心(三) 它提供了配置中心的功能,但是需要配合 git、svn 或外部存储(例如各种数据库),且需要配合 Spring Cloud Bus 《Spring Cloud 系列之 Bus 消息总线》 实现配置刷新。 前面的课程中我们也学习了 Spring Cloud Consul,当时讲解了它作为注册中心的使用方案,且作为 Spring Cloud 官方推荐替换 Eureka 注册中心的方案。既然使用了 Consul,就可以使用 Consul 提供的配置中心功能,并且不需要额外的 git 、svn、数据库等配合,且无需配合 Bus 即可实现配置刷新。 Spring Cloud 官方声明 Consul 可以作为 Spring Cloud Config 配置中心的替代方案。 官方文档:https://cloud.spring.io/spring-cloud-static/spring-cloud-consul/2.2.2.RELEASE/reference/html/#spring-cloud-consul-config 关于 Consul

SpringCloud GateWay

蹲街弑〆低调 提交于 2020-08-11 08:25:27
http://www.ityouknow.com/springcloud/2019/01/26/spring-cloud-gateway-limit.html spring: cloud: gateway: routes: - id: nameRoot uri: http://nameservice predicates: - Path=/name/** filters: - StripPrefix=2 //代表 截取路径的个数, 这样配置后当请求 /name/bar/foo 后端匹配到的请求路径就会变成 http://nameservice/foo 。 来源: oschina 链接: https://my.oschina.net/u/3847203/blog/4469494