自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(94)
  • 收藏
  • 关注

原创 Spring Cloud Gateway-系统保护Sentinel集成

​ 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。— 摘自官网​ 通过上面的实验,我们可以知道通过配置可以实现服务降级后的返回,Spring Cloud Gateway Sentinel也提供了接口让开发人员实现自定义的服务降级响应,只要实现@Slf4j@Override");

2024-03-02 22:50:08 1358

原创 Nginx一主一从配置Keepalive

​ 输入命令 vi /etc/keepalived/keepalived.conf,修改 keepalived 配置文件,需要修改几处内容,分别是设置vip(本例中为192.168.246.48)、修改云主机的优先级(主节点优先级高,建议主节点设置为100,备节点设置为50)、屏蔽 vrrp_strict、添加定时任务检查nginx进程脚本。配置主节点简单页面:echo “Master NODE” > /var/www/html/index.html。通过安装httpd服务验证可用性。

2023-09-04 11:46:46 416

原创 Nginx配置ssl证书

make完成后,停止nginx服务,进入objs目录,将nginx启动程序,拷贝到安装目录下,替换原有的启动程序。configure执行完成后,输入make,注意:千万不要make install,这样会覆盖原有的配置。启动nginx,输入./nginx -V,查看是否安装成功。新建一个目录cert,把申请下来的证书上传上去。打开配置文件nginx.conf,加入以下配置。

2023-09-04 11:27:29 204

原创 Nginx安装及配置负载均衡

算法的基本思路是通过对客户端的IP地址取Hash值,将此Hash值与服务器列表中的IP地址的Hash值进行比较,找到具有匹配Hash值的服务器。​ 默认情况下,max_fails的值为1,表示的是请求失败的次数,请求1次失败就换到下台主机。​ backup是指备份的机器,相对于备份的机器来说,其他的机器就相当于主要服务器,只要当主要服务器不可用的时候,才会用到备用服务器。​ nginx会尽量不让负载繁忙的应用服务器上负载过多的请求,相反的,会把新的请求发送到比较不繁忙的服务器。

2023-09-04 11:26:45 1282

原创 Spring Cloud Alibaba体系使用OpenFeign与RestTemplate作为RPC组件

​ 本篇将介绍使用OpenFeign和进行RPC调用,并且将介绍两种RPC工具如何集成Sentinel进行系统保护。​

2023-06-29 17:48:25 1432 6

原创 Spring Cloud Alibaba体系使用Nacos作为服务注册发现与配置中心

​ Nacos是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台

2023-06-29 17:38:30 292

原创 Spring Cloud Gateway日志级别链路追踪设计

通过Spring Cloud Gateway过滤器机制,实现链路参数传递,完成日志级别链路追踪。

2023-06-24 18:27:40 1895

原创 Spring Cloud Gateway集成Nacos作为注册中心和配置中心

本篇文章将介绍Spring Cloud Alibaba体系下Spring Cloud Gateway的搭建,服务注册中心和分布式配置中心使用Nacos,后续将会持续更新,介绍集成Sentinel,如何做日志链路追踪,如何做全链路灰度发布设计,以及Spring Cloud Gateway的扩展等。

2023-06-24 18:14:53 1186

原创 Spring Cloud Alibaba-全链路灰度设计

灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。

2023-06-21 16:37:26 1300 1

原创 Quarkus - MySQL Hibernate ORM + 多数据源

类对应数据库1的user_account表。类对应数据库2的stock表。操作数据库的Service。操作数据库的Service。

2023-06-14 18:34:44 409

原创 Quarkus - 发布JSON Restful服务

需要注意的重要一点是,JSON 序列化层需要具有默认构造函数。发布一个JSON的Restful服务,该服务提供。我们将创建一个应用程序来管理一个水果列表。也支持JSON-B,如果你喜欢。添加jackson扩展的依赖。注解来定义你的实现节点。非常简单,你只需要使用。你可以使用响应式编程,集成,你的接口可以返回。根据水果名字删除水果。

2023-06-14 18:29:15 1030

原创 MySQL InnoDB下的锁问题

InnoDB的行锁是基于索引实现的,如果不通过索引加锁访问数据,InnoDB会对所有数据加锁。在不同隔离级别下,InnoDB的锁机制和一致性读取策略不通。介绍了Next-Key锁机制,以及InnoDB使用Next-Key锁的原因。精心设计索引,并尽量使用索引访问数据,使加锁的粒度更小,从而减少锁冲突的机会。选择合理的事务,小事务发生死锁的概率小。尽量使用相等的条件访问数据,避免Next-Key锁对并发插入的影响。避免死锁的一些常用方法。

2023-03-29 18:26:33 355 1

原创 通过MySQL驱动拦截器实现执行sql耗时计算

日志组件要支持MySQL的sql执行时间打印,要实现链路追踪常用的手段就是实现第三方框架或工具提供的拦截器接口或者是过滤器接口,对于MySQL也不例外,实际上就是实现了MySQL驱动的拦截器接口而已

2023-02-28 18:50:54 586

原创 基于Zookeeper实现分布式分片算法

基于Zookeeper和简单的平均分配算法实现了一个简单的分布式分片服务,该分片服务目前满足公司需求,因为其简单,所以不一定满足其他场景,针对其他场景还需考虑其他因素,该示例供参考。

2023-01-05 16:05:41 416

原创 Quarkus构建一个原生可执行文件

Quarkus构建一个可执行的二进制文件

2022-12-26 16:22:08 592 1

原创 Quarkus实现第一个Hello World

GraalVM是一种高性能的虚拟机,它可以显著的提高程序的性能和运行效率,非常适合微服务。其设计初衷是实现可以运行不同语言(Java、JavaScript、基于LLVM的语言(例如C和C ++)以及其他动态语言)编写的应用程序。它消除了不同编程语言之间的隔阂,并实现了多语言共享运行时的互操作性。

2022-12-26 16:16:19 452

原创 Spring事务管理传播机制

简单的理解就是多个事务方法相互调用时,事务如何在这些方法间传播。举个栗子,方法A是一个事务的方法,方法A执行过程中调用了方法B,那么方法B有无事务以及方法B对事务的要求不同都会对方法A的事务具体执行造成影响,同时方法A的事务对方法B的事务执行也有影响,这种影响具体是什么就由两个方法所定义的事务传播类型所决定。

2022-12-23 15:23:03 415

原创 JMH - Java微基准测试工具套件

MH 是 OpenJDK 团队开发的一款基准测试工具,一般用于代码的性能调优,精度甚至可以达到纳秒级别,适用于 java 以及其他基于 JVM 的语言。和 Apache JMeter 不同,`JMH 测试的对象可以是任一方法,颗粒度更小,而不仅限于rest api`。

2022-12-23 11:39:32 1246

原创 JAVA - gRPC拦截器实现分布式日志链路追踪

Java使用gRPC完成的服务间的调用可以通过`io.grpc.ClientInterceptor`和`io.grpc.ServerInterceptor`定义客户端和服务端的拦截器实现分布式链路追踪。

2022-11-01 15:19:12 1347 2

原创 SpringBoot + gRPC简单实现

gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特性。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。

2022-11-01 11:00:26 690

原创 Dubbo线程池

Dubbo实现了自定义线程池,其核心接口是`ThreadPool`,该接口是`SPI`的默认的实现是`fixed`,Dubbo提供了四种实现,分别是`CachedThreadPool`、`FixedThreadPool`、`LimitedThreadPool`、`EagerThreadPool`。

2022-09-02 16:53:50 1683

原创 Dubbo协议下的服务端线程模型

Dubbo服务端线程模型

2022-08-31 20:39:10 420

原创 AsyncContext异步处理Http请求及在业务中应用

`AsyncContext`是`Servlet 3.0`使Servlet 线程不再需要一直阻塞,直到业务处理完毕才能再输出响应,最后才结束该Servlet线程。在接收到请求之后,Servlet线程可以将耗时的操作委派给另一个线程来完成,自己在不生成响应的情况下返回至容器。针对业务处理较耗时的情况,这将大大减少服务器资源的占用,并且提高并发处理速度.........

2022-06-20 17:09:32 811 8

原创 公司Dubbo项目Service Mesh改造

Dubbo项目Service Mesh改造

2022-06-13 18:19:21 530 1

原创 公司传统微服务架构切换Service Mesh架构部署方案总结

系统架构切换背景    公司系统既有架构是传统的微服务架构,服务的部署方式也是传统的系统部署方式,并没有进行容器化部署;使用Dubbo作为微服务中间件,Zookeeper为系统的注册中心,同时使用Elastic JOB分布式定时任务中间件进行分布式任务处理;    随着云原生技术的快速发展,公司系统架构也开始着手进行调整,从技术上看云原生架构可以使系统拥有更好的伸缩性,更好的观测性,更灵活的发布策略,更精细的流量控制等等,可以让开发人员更专注于业务逻辑的开发,让开

2022-05-11 17:50:35 650 2

原创 基于Docker部署Skywalking

Skywalking简介    Skywalking是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s)架构而设计。提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。Docker部署Skywalking步骤部署Elasticsearch部署Skywalking OAP部署Skywalking UI应用程序配合Skywalking Agent部署部署Elasticsearch    这里基于Do

2022-04-15 11:52:30 9511 3

原创 Prometheus-普罗米修斯 基于文件的服务发现

最近在做一些应用程序内部的一些组件的监控工作,比如线程池的监控,我这里要把监控线程池的指标暴露出去,能够让Prometheus抓取到,然后修改Prometheus的配置文件,监控的服务信息配置好,重启Prometheus,Prometheus就能够抓取数据了;这就存在一个问题,就是每次我新增监控的实例时都需要修改Prometheus配置,并且重启Prometheus,非常不方便。所以就引出了一个概念服务发现

2022-04-08 19:04:20 897

原创 Java日志链路追踪工具LogHelper在ELK系统上的效果

    🔥🔥🔥轻量级日志链路追踪工具,结合logstash-logback-encoder实现日志输出json格式化;支持Sykwalking traceId,支持Apache Dubbo,Alibaba Dubbo,SpringCloud微服务框架日志链路追踪;支持异步线程日志链路追踪;支持OkHttp,HttpClient,RestTemplate Http客户端工具日志链路追踪;提供分布式消息队列日志链路追中解决方案;支持简单的敏感字段脱敏打印项目地址:https://githu

2022-04-02 12:34:40 872

原创 基于Spring AOP + logstash-logback-encoder实现日志链路追踪工具LogHelper

🔥🔥🔥轻量级日志链路追踪工具,结合logstash-logback-encoder实现日志输出json格式化;支持Sykwalking traceId,支持Apache Dubbo,Alibaba Dubbo,SpringCloud微服务框架日志链路追踪;支持异步线程日志链路追踪;支持OkHttp,HttpClient,RestTemplate Http客户端工具日志链路追踪;提供分布式消息队列日志链路追中解决方案;支持简单的敏感字段脱敏打印。

2022-04-01 16:05:55 2786

原创 动态线程池dynamic-tp接入Consul配置中心

前言    自从笔者给dynamic-tp接入了Zookeeper配置中心,就想着再扩展其他的配置中心,恰好笔者近期也在调研Consul配置中心,所以就想着将Consul配置中心接入到dynamic-tp。dynamic-tp快速接入:dynamic-tp官网:接入Consul配置中心具体实现    Consul配置中心是通过定时任务做的配置变更,为了屏蔽底层实现,这里我选择对SpringBoot程序和SpringCloud应用进行接入,使用的包是sprin

2022-03-24 19:12:02 2187

原创 开源动态线程池dynamic-tp支持zookeeper配置中心

前言    dynamic-tp是一个轻量级的动态线程池插件,它是一个基于配置中心的动态线程池,线程池的参数可以通过配置中心配置进行动态的修改,在配置中心的支持上最开始的时候支持Nacos和Apollo,由于笔者公司用的配置中心是Zookeeper,所以就想着扩展支持Zookeeper,在了解源码支持发现dynamic-tp的扩展能力做的很好,提供了扩展接口,只要我开发对应的配置中心模块即可,最终笔者实现了Zookeeper的支持并贡献到社区。接下来我通过源码解析方式介绍下Zookee

2022-03-17 15:18:51 2575

原创 动态线程池dynamic-tp快速接入

dynamic-tp是一个轻量级的动态线程池插件,它是一个基于配置中心的动态线程池,线程池的参数可以通过配置中心配置进行动态的修改,目前支持的配置中心有Apollo,Nacos和Zookeeper

2022-03-11 17:01:41 5936

原创 ScheduledThreadPoolExecutor不执行原因分析

前言    最近在调试一个监控应用指标的时候发现定时器在服务启动执行一次之后就不执行了,这里用的定时器是Java的调度线程池ScheduledThreadPoolExecutor,后来经过排查发现ScheduledThreadPoolExecutor线程池处理任务如果抛出异常,会导致线程池不调度;下面就通过一个例子简单分析下为什么异常会导致ScheduledThreadPoolExecutor不执行。ScheduledThreadPoolExecutor不调度分析示例程序&nbs

2022-03-08 14:06:01 4844

原创 实现一个简单的SPI

实现一个自定义的SPI机制其核心的逻辑就是扩展的加载,本篇是参考Dubbo等开源项目简单实现了一个SPI机制的核心代码,核心逻辑就是从SPI扩展的配置文件中加载扩展实现的流程

2022-01-10 15:10:37 755

原创 Dubbo集群容错

    Dubbo调用失败时提供了容错方案;当存在多个provider实例时Dubbo提供了路由和负载均衡的能力,下面时来自Dubbo官网的一张图,图片中展示了Dubbo集群容错的模型。各节点关系这里的 Invoker 是 Provider 的一个可调用 Service 的抽象,Invoker 封装了 Provider 地址及 Service 接口信息Directory 代表多个 Invoker,可以把它看成 List ,但与 List 不同的是,它的值可能是动态变化的,比

2021-12-07 10:48:50 598

原创 记一次因WebService无响应导致线程阻塞 - 生产问题定位

生产环境因WebService调用无响应导致线程阻塞问题排查

2021-12-06 19:41:48 1347

原创 老生常谈 - 引起Spring事务失效的几种情况总结

文章目录前言常见的Spring事务失效原因没有被Spring管理发生自调用方法不是public的数据源未配置事务管理器数据库引擎不支持事务事务传播机制设置以不支持事务运行异常被catch掉了异常类型错误总结前言    在使用Spring的事务管理时,有时候就会莫名其妙的发现事务没生效,其实并非Spring事务管理本身的问题,而是开发人员在使用时使用方式不对,Spring事务管理的底层机制没搞懂,又或者数据库层的问题导致,今天总结下Spring事务是失效的集中场景。常见的Spring

2021-12-01 21:05:57 369

原创 可靠消息最终一致性分布式事务

文章目录分布式事务可靠消息最终一致性分布式事务流程可靠消息最终一致性分布式事务依赖组件编码实现数据库建表语句代码实现搭建项目订单服务库存服务测试结果总结分布式事务    在后端的系统开发中,都会使用到关系型数据库,文件,等等数据存储,并且在系统运行过程中都会遇到事务问题,所谓事务包含四个基本要素:原子性,一致性,隔离性和持久性,这里以关系型数据库MySQL为例,MySQL的InnoDB引擎提供了事务的支持;在单机单进程环境下,通过MySQL的事务的就可以实现事务的特性,但是系统架构一

2021-11-29 14:22:09 798

原创 Dubbo远程调用 - invoke

文章目录例子执行invoker.invoke处理流程**MockClusterInvoker:** 首先会走到这个类中,因为没有mock,所以直接向下走。**AbstractCluster:** 这里会添加一个ClusterInterceptor拦截器,在调用前后做一些处理,这个不细说。**ClusterInterceptor:** 调用拦截器,在拦截器的`intercept`方法中会执行`AbstractClusterInvoker#invoke`方法。**AbstractClusterInvoker**

2021-11-28 21:13:46 1558

原创 Dubbo服务启动-Dubbo Consumer引用服务

文章目录Consumer消费者Demo示例ReferenceConfig#getObject()获取应用BeanReferenceConfig#createProxy()创建服务代理RegistryProtocol#refer引用服务RegistryProtocol#doRefer引用服务RegistryDirectory#subscribe订阅服务DubboProtocol#protocolBindingRefer创建Invoker总结Consumer消费者Demo示例<?xml version

2021-11-26 17:42:37 2578

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除