Clay 的技术空间

用进废退 | 艺不压身

前言

Spring Cloud 是一套较为全面的微服务框架集,集成了如服务注册发现、配置中心、消息总线、负载均衡、断路器、API 网关等功能实现。而在网上经常会发现 Spring Cloud 与阿里巴巴的 Dubbo 进行选择对比,这样做其实不是很妥当,前者是一套较为完整的微服务架构方案,而 Dubbo 只是服务治理与 RPC 实现方案。Dubbo 在国内有着非常大的用户群体,但是其周边设施与组件相对来说并不那么完善。很多开发者用户又很希望享受 Spring Cloud 的生态,因此也会有一些 Spring Cloud 与 Dubbo 一起使用的案例与方法出现,但是一直以来大部分 Spring Cloud 整合 Dubbo 的使用方案都不完善,直到 Spring Cloud Alibaba 的出现,才得以解决这样的问题。

问题延伸

由于 Feign 是基于 HTTP Restful 的调用,在高并发下的性能不够理想,那么 RPC 方案能否切换为 Dubbo?Spring Cloud 与阿里系的若干组件能否完美集成呢?

阅读全文 »

前言

本文主要介绍 SpringBoot 读取 YML 配置文件的几种写法。

提示

SpringBoot 属性绑定注解的介绍请参考 这里 的教程。

第一种写法

添加 @Configuration 注解到 Bean 定义类,并使用 @Value 注解指定 YML 配置文件中的 Key

1
2
3
4
5
6
shop:
wechat:
app-id: ''
app-secret: ''
encoding-token: ''
encoding-aes-key: ''
阅读全文 »

前言

由于不蒜子统计不对普通用户提供后台管理的功能,当站点的域名更换后,网站以前的所有统计数据都会重置为零。下面将介绍如何使用抓包工具来分析不蒜子统计的 API,进而实现不蒜子统计数据的更改。

Fiddler 下载

这里使用了 Fiddler,它是一款流行的抓包工具,可以将网络传输发送与接受的数据包进行截获、重发、编辑、转存等操作。本质上,Fiddler 是通过改写 HTTP 代理,让数据从它那里通过,来监控并且截取到网络数据。

抓包分析

1)启动 Fiddler 后,打开本地的浏览器访问博客的 URL,此时在 Fiddler 的界面上可以看到有关不蒜子的请求

1
https://busuanzi.ibruce.info/busuanzi?jsonpCallback=BusuanziCallback_195655659654
阅读全文 »

上篇 - Seata 入门教程(基础篇)

1、前言

  • 本案例使用的是 Seata 的 AT 模式
  • 由于篇幅有限,本案例只给出各个模块的核心代码和配置,点击下载完整的案例代码(简版)
  • 为了方便演示,本案例只使用 Nacos 作为注册中心,不使用 Nacos 作为配置中心,即使用 file.conf 配置文件来存储 TC(Seata Server)相关的配置信息
  • 最新发布的内容,已追加 TC(Seata Server)整合 Nacos 作为配置中心的教程,点击下载完整的案例代码(配置中心版)

1.1、版本说明

  • MySQL 5.7
  • Nacos Server 1.4.0
  • Seata Server 1.4.0
  • Spring Boot 2.3.2.RELEASE
  • Spring Cloud Hoxton.SR8
  • Spring Cloud Alibaba 2.2.3.RELEASE

特别注意:Spring Boot 和 Spring Cloud 以及 Spring Cloud Alibaba 的版本号需要互相对应,否则可能会存在各种问题,具体可以参考官方的版本说明

1.2、案例目标

本案例将会创建三个服务,分别是订单服务、库存服务、账户服务,各服务之间的调用流程如下:

  • 1)当用户下单时,调用订单服务创建一个订单,然后通过远程调用(OpenFeign)让库存服务扣减下单商品的库存
  • 2)订单服务再通过远程调用(OpenFeign)让账户服务来扣减用户账户里面的余额
  • 3)最后在订单服务中修改订单状态为已完成
阅读全文 »

1、Seata 整体框架

1.1、Seata 概述

Seata 是一套一站式分布式事务解决方案,为用户提供了 AT、TCC、SAGA 和 XA 事务模式,致力于提供高性能和简单易用的分布式事务服务。

阅读全文 »

前言

术语

  • TX 协议:应用或者应用服务器与事务管理器的接口

  • XA 协议:全局事务管理器与资源管理器的接口。XA 是由 X/Open 组织提出的分布式事务规范,该规范主要定义了全局事务管理器和局部资源管理器之间的接口,主流的数据库产品都实现了 XA 接口。XA 接口是一个双向的系统接口,在事务管理器以及多个资源管理器之间作为通信桥梁。之所以需要 XA 是因为在分布式系统中从理论上讲两台机器是无法达到一致性状态的,因此引入一个单点进行协调。由全局事务管理器管理和协调的事务可以跨越多个资源和进程。全局事务管理器一般使用 XA 二阶段协议与数据库进行交互。

阅读全文 »

前言

为了减少开发的复杂度,Sentinel 对大部分的主流框架,例如 Web Servlet、Dubbo、Spring Cloud、gRPC、Spring WebFlux,Reactor 等都做了适配,只需要引入对应的依赖即可方便的整合 Sentinel。如果要实现 Spring Cloud 和 Sentinel 的整合,可以通过引入 Spring Cloud Alibaba Sentinel 来整合 Sentinel。Spring Cloud Alibaba 是阿里巴巴开源的,致力于提供微服务开发的一站式解决方案。Spring Cloud Alibaba 默认为 Sentinel 整合了 Servlet、RestTemplate、FeignClient 和 Spring WebFlux。Sentinel 在 Spring Cloud 生态中,不仅补全了 Hystrix 在 Servlet 和 RestTemplate 这一块空白,而且还完全兼容了 Hystrix 在 FeignClient 中限流降级的用法,并且支持运行时灵活地配置和调整限流降级规则。

Sentinel 整合 Spring Cloud

1.0、版本说明

本案例使用各开源组件的版本说明如下,点击下载完整的案例代码

  • Sentinel 1.8.0
  • Spring Boot 2.1.18.RELEASE
  • Spring Cloud Greenwich.SR6
  • Spring Cloud Alibaba Sentinel 2.1.3.RELEASE
阅读全文 »

上篇 - Sentinel 入门教程(基础篇)

前言

1.0、版本说明

本文针对 Sentinel 1.8.0 及以上版本编写,特别说明除外。由于 1.8.0 版本对熔断降级特性进行了全新的改进升级,建议使用最新版本以更好地利用熔断降级的能力。

1.1、Sentinel 的控制规则

Sentinel 的所有规则都可以在内存态中动态地查询与修改,修改之后立即生效,同时 Sentinel 也提供了相关 API 供开发者来定制自己的规则策略。Sentinel 主要支持以下几种规则:

  • 流量控制规则
  • 熔断降级规则
  • 系统保护规则
  • 来源访问控制规则
  • 动态规则扩展
阅读全文 »

前言

本文针对 Sentinel 1.8.0 及以上版本编写,特别说明除外。由于 1.8.0 版本对熔断降级特性进行了全新的改进升级,建议使用最新版本以更好地利用熔断降级的能力。

流量控制与熔断降级

流量控制概述

拿旅游景点举个示例,旅游景点通常都会有最大的接待量,不可能无限制的放游客进入,比如故宫每天只卖八万张票,超过八万的游客,无法买票进入,因为如果超过八万人,景点的工作人员可能就忙不过来,过于拥挤的景点也会影响游客的体验和心情,并且还会有安全隐患;只卖 N 张票,这就是一种限流的手段。流量控制在网络传输中是一个常用的概念,它用于调整网络包的发送数据。在网络传输时,任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的,因此需要根据系统的处理能力对流量进行控制。

sentinel-flow-control

阅读全文 »

服务发现介绍

微服务架构概述

为适应企业的业务发展,提高软件研发的生产力,降低软件研发的成本,软件架构也作了升级和优化,将一个独立的系统拆分成若干小的服务,每个小服务运行在不同的进程中,服务与服务之间采用 RESTful、RPC 等协议传输数据,每个服务所拥有的功能具有独立性强的特点,这样的设计就实现了单个服务的高内聚,服务与服务之间的低耦合效果,这些小服务就是微服务,基于这种方法设计的系统架构即微服务架构。微服务架构的优点如下:

  • 易于开发和维护:一个微服务只会关注一个特定的业务功能,所以它业务清晰,代码量较少
  • 单个微服务启动较快:单个微服务代码量较少,所以启动会比较快
  • 业务之间松耦合,无论是在开发阶段或者部署阶段,不同的服务都是互相独立的
  • 局部修改容易部署:单体应用只要有修改,就得重新部署整个应用,微服务解决了这样的问题
  • 技术栈不受限:在微服务架构中,可以结合项目业务及团队的特点,合理地选择技术栈
  • 按需伸缩:可根据需求,实现细粒度的扩展
  • 只有业务逻辑的代码,不会和 HTML、CSS 或者其他前端页面耦合,目前有两种开发模式:前后端分离、全栈开发
阅读全文 »
0%