自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SSO单点登录

​单点登录(SingleSignOn,SSO),就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后,即可获得访问单点登录系统中其他关联系统和应用软件的权限,同时这种实现是不需要管理员对用户的登录状态或其他信息进行修改的,这意味着在多个应用系统中,用户只需一次登录就可以访问所有相互信任的应用系统。这种方式减少了由登录产生的时间消耗,辅助了用户管理,是比较流行的。

2023-12-25 14:55:25 397

原创 JAVA序列化--Protobuf

Protocol Buffers(简称protobuf)是一种轻便高效的数据序列化格式,可用于结构化数据的序列化和反序列化。它由Google开发并开源,用于解决数据交换和存储的通用问题。

2023-12-20 18:18:01 1076

原创 扩展点设计

在平时业务开中经常会遇到不同业务走不同的业务逻辑,为了代码的扩展性,不得不采取一些手段来对其进行解耦,代码扩展点实现方式主要包括 Java SPI、dubbo SPI、策略模式及改进扩展点实现、Cola扩展点和抽象业务扩展点实现方式,这里我们介绍下Cola的实现方式。

2023-12-13 11:51:41 896

原创 Java Agent探针技术

Java Agent探针,JVM 一旦跑起来,对于外界来说,它就是一个黑盒。而 Java Agent 可以像一支针一样插到 JVM 内部,探到我们想要的东西,并且可以注入东西进去。

2023-11-22 20:36:25 1225

原创 埋点数据设计

简单来说,埋点就是在网站或APP中加入一些程序代码,用以收集和统计用户在该网站/APP中的浏览、访问数据和应用使用情况,分析用户交互行为,从而帮助产品和运营进行后续优化。

2023-11-16 21:25:53 73

原创 一次线上环境YoungGC 停顿超长时间调优

JVM性能调优牵扯到各方面的取舍与平衡,往往是牵一发而动全身,需要全盘考虑各方面的影响。在优化时候,切勿凭感觉或经验主义进行调整,而是需要通过系统运行的客观数据指标,不断找到最优解。同时,在进行性能调优前,您需要理解并掌握以下的相关基础理论知识。

2023-11-06 13:52:26 254

原创 如何降低消息队列系统中消息的延迟?

这时,你要关注的就是消息队列中,消息的延迟了,这其实是消费性能的问题,那么你要如何提升消费性能,保证更短的消息延迟呢?在我看来,你首先需要掌握如何来监控消息的延迟,因为有了数据之后,你才可以知道目前的延迟数据是否满足要求,也可以评估优化之后的效果。然后,你要掌握使用消息队列的正确姿势,以及关注消息队列本身是如何保证消息尽快被存储和投递的。接下来,我们先来看看第一点:如何监控消息延迟。一、如何监控消息延迟?使用消息队列提供的工具,通过监控消息的堆积来完成;通过生成监控消息的方式来监控消息的延迟情况。

2023-11-04 17:31:39 127

原创 如何保证消息只被消费一次

消息一旦被重复消费,就会造成业务逻辑处理的错误。那么我们要如何避免消息的重复呢?想要完全的避免消息重复的发生是很难做到的,因为网络的抖动、机器的宕机和处理的异常都是比较难以避免的,在工业上并没有成熟的方法,因此我们会把要求放宽,只要保证即使消费到了重复的消息,从消费的最终结果来看和只消费一次是等同的就好了,也就是保证在消息的生产和消费的过程是“幂等”的。

2023-11-04 13:51:47 143

原创 消息投递:如何保证消息不丢失?

在电商系统中,我们经常有这样的场景,在用户下单购买完商品后,需要给用户发送红包来促进用户继续消费。而发送红包的流程并不在下单的核心流程之内,这样的流程我们通常会采用消息队列的方式来异步处理,提高接口性能。

2023-11-04 10:22:04 99

原创 MySQL是如何优化in子查询的?

MySQL做了不少的优化手段来保证in子查询的性能,大家也能在实际的业务中感受到in子查询的速度也没那么慢

2023-11-01 18:51:45 541

原创 CDN:静态资源如何加速?

​简单地说,内容分发网络是一个经策略性部署的整体系统,包括分布式存储、负载均衡、网络请求的重定向和内容管理4个要求,而内容管理和全局的网络流量管理是CDN的核心所在。通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。

2023-10-31 11:11:48 125

原创 应用性能管理:用户的使用体验应该如何监控?

应用性能管理(Application Performance Management,简称APM),它的含义是:对应用各个层面做全方位的监测,期望及时发现可能存在的问题,并加以解决,从而提升系统的性能和可用性。

2023-10-30 09:37:42 128

原创 流量控制:高并发系统中我们如何操纵流量?

随着现在微服务、分布式系统的发展,各个服务之间的相互调用越来越复杂。为了保证自身服务的稳定性与高可用,当面对超过自身服务能力的请求调用时,要做一定的限流措施。

2023-10-27 21:18:16 110

原创 降级熔断:如何屏蔽非核心系统故障的影响?

限流、熔断和降级都是系统容错的重要设计模式

2023-10-27 16:48:07 84

原创 服务端监控要怎么做?

在一个项目的生命周期里,运行维护占据着很大的比重,在重要性上,它几乎与项目研发并驾齐驱。而在系统运维过程中,能够及时地发现问题并解决问题,是每一个团队的本职工作。所以,你的垂直电商系统在搭建之初,运维团队肯定完成了对于机器 CPU、内存、磁盘、网络等基础监控,期望能在出现问题时,及时地发现并且处理。你

2023-10-20 09:46:13 155

原创 分布式Trace:横跨几十个分布式组件的慢请求要如何排查?

在分布式链路跟踪中有两个重要的概念:跟踪(trace)和 跨度( span)。trace 是请求在分布式系统中的整个链路视图,span 则代表整个链路中不同服务内部的视图,span 组合在一起就是整个 trace 的视图。

2023-10-18 20:26:49 631

原创 API网关:系统的门面要如何做呢?

API网关作用就是把各个服务对外提供的API汇聚起来,让外界看起来是一个统一的接口,同时也可以在网关中提供额外的功能。

2023-10-16 18:44:01 142

原创 多机房部署:跨地域的分布式系统如何做?

在不同的 IDC 机房中,部署多套服务,这些服务共享同一份业务数据,并且都可以承接来自用户的流量。这样,当其中某一个机房出现网络故障、火灾,甚至整个城市发生地震、洪水等大的不可抗的灾难时,你可以随时将用户的流量切换到其它地域的机房中,从而保证系统可以不间断地持续运行。这种架构听起来非常美好,但是在实现上却是非常复杂和困难的,那么它复杂在哪儿呢?

2023-10-16 11:00:10 594 1

原创 广告归因转化系统设计

归因(Attribution)是指采用标识符来识别用户的转化路径,并判断其中的有效触点价值。广告平台基于归因结果,进行付费;广告主则可用于投放策略的优化。

2023-10-08 17:49:00 465

原创 tomcat配置优化

Tomcat 默认配置的最大请求数是150,也就是说同时支持150 个并发,当然了,也可以将其改大。当某个应用拥有250 个以上并发的时候,应考虑应用服务器的集群。具体能承载多少并发,需要看硬件的配置,CPU 越多性能越高,分配给JVM 的内存越多性能也就越高,但也会加重GC 的负担。

2023-10-08 09:47:27 88

原创 缓存淘汰算法-LRU

我们常用缓存来提升数据查询速度,由于缓存容量有限,当缓存容量到达上限,就需要删除部分数据挪出空间,这样新数据才可以添加进来。缓存数据不能随机删除,一般情况下我们需要根据某种算法删除缓存数据。常用淘汰算法有 LRU,LFU,FIFO,这篇文章我们聊聊 LRU 算法。例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

2023-09-07 20:29:04 165

原创 TiDB介绍

TiDB是PingCAP公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 协议和 MySQL 生态等重要特性。

2023-09-06 21:34:06 71

原创 延时消息队列

延时队列的内部是有序的,最重要的特性就体现在它的延时属性上,延时队列就是用来存放需要在指定时间点被处理的元素的队列。队列是存储消息的载体,延时队列存储的对象是延时消息。所谓的延时消息,是指消息被发送以后,并不想让消费者立刻获取,而是等待特定的时间后,消费者才能获取这个消息进行消费。

2023-09-01 21:27:17 790

原创 JSON Schema动态表单配置规则应用

用 JSON Schema 来描述表单适合于低代码或者数据中台的快速开发。前端不需要维护 schema,schema 可以存在后端,随意分发动态渲染。

2023-08-24 21:51:18 1477

原创 缓存最佳实践

旁路缓存策略是最常用的一种缓存读写策略,它适用于读请求比较多,数据更新频率不高的场景。它的基本思想是:应用程序直接访问缓存和数据库,而不通过中间层。当需要读取数据时,先从缓存中查找,如果命中则直接返回;如果未命中,则从数据库中查询,并将结果放入缓存中,然后返回。当需要更新数据时,先更新数据库,然后删除缓存。

2023-08-21 21:36:23 908

原创 QLExpress规则引擎实战

由阿里的电商业务规则、表达式(布尔组合)、特殊数学公式计算(高精度)、语法分析、脚本二次定制等强需求而设计的一门动态脚本引擎解析工具。

2023-07-27 20:25:15 5028 1

原创 接口重试机制实战

重试机制通常来说,会用try/catch,while循环之类的语法来进行重处理,但是这样的做法缺乏统一性,会侵入业务代码,难以维护。spring-retry却可以通过注解,在不入侵原有业务逻辑代码的方式下,优雅的实现重处理功能,使业务代码和重处理解耦。

2023-07-26 09:21:42 134

原创 数据库优化方案

MySQL Binlog 是记录 MySQL 所有数据变动的二进制日志文件,用于 MySQL 主从复制和数据恢复。此外开发者还可以将订阅 MySQL Binlog 应用在增量索引、缓存一致性、基于数据的任务分发、记录数据变更等场景。

2023-07-24 21:15:00 65

原创 MySQL学习之两阶段提交

在执行一条update语句时候,通过连接器、分析器、优化器之后,调用操作引擎,将新行写入内存,写入redo log,状态为prepare->写binlog->redo log状态修改为commit。写入redo的过程分为了prepare和commit称为二阶段提交。

2023-07-24 18:31:32 436

原创 ElasticSearch数据的同步方案

考虑到订单系统ES服务的业务特殊性,对于订单数据的实时性较高,显然监听Binlog的方式相当于异步同步,有可能会产生较大的延时性。ES集群的分页查询支持from和size参数,查询的时候,每个分片必须构造一个长度为from+size的优先队列,然后回传到网关节点,网关节点再对这些优先队列进行排序找到正确的size个文档。对于ES写入机制的有了解的同学可能会知道,新增的文档会被收集到Indexing Buffer,然后写入到文件系统缓存中,到了文件系统缓存中就可以像其他的文件一样被索引到。

2023-07-19 17:34:21 1788

原创 ELK高级搜索八之分词器实战

分词器接受一个字符串作为输入,将这个字符串拆分成独立的词或语汇单元(token)(可能会丢弃一些标点符号等字符),然后输出一个语汇单元流(token stream)。有趣的是用于词汇识别的算法。whitespace(空白字符)分词器按空白字符 —— 空格、tabs、换行符等等进行简单拆分 —— 然后假定连续的非空格字符组成了一个语汇单元。将用户输入的一段文本,按照一定逻辑,分析成多个词语的一种工具。常用的内置分词器。

2023-07-18 21:03:40 261 2

原创 ELK高级搜索七Spring boot 接入Elasticsearch

es节点所在的磁盘空间不够用的时候,es会将该节点上面的索引标位只读,不能向该索引写入数据,默认当磁盘空间超过85%,我们可以使用下面的命令调整磁盘空间比例为95%输出:{"acknowledged":true,"fragment":false,"shardsAcknowledged":true}输出:{"acknowledged":true,"fragment":false,"shardsAcknowledged":true}jsonMap.put("categoryName", "科技");

2023-07-18 17:59:12 135

原创 缓存问题之缓存雪崩

在生产环境中,会因为很多的原因造成访问请求绕过了缓存,都需要访问数据库持久层,虽然对Redsi缓存服务器不会造成影响,但是数据库的负载就会增大,使缓存的作用降低。

2023-07-17 18:25:09 89

原创 java脚本引擎Groovy实战

​互联网时代随着业务的飞速发展,不仅产品迭代、更新的速度越来越快,个性化需求也是越来越多。如何快速的满足各种业务的个性化需求是我们要重点思考的问题。我们开发的系统如何才能做到热部署就能适应各种规则变化呢?实现业务和规则的解耦。好了,Java的ScriptEngine脚本引擎给了我们一个选择,它支持代码动态执行,代码修改后不需要重启JVM进程,就可以使用解析或编译方式执行,非常方便,在一些动态业务规则、热更新、热修复等场景中会非常方便。

2023-07-06 18:13:08 7152 1

原创 分布式任务调度平台XXL-JOB

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用

2023-07-06 15:23:40 62

原创 优化mysql分页查询

MySQL的系统结构图,客户端程序发送sql语句查询请求给服务层,服务层会解析、优化sql语句,之后交给存储引擎,也就是说,存储引擎是真正完成查询的(增加、删除、修改也是由存储引擎负责的)

2023-06-29 20:05:20 906

原创 基于 Spring 实现观察者模式

观察者模式又称为 发布-订阅模式,定义了对象之间一对多依赖关系,当目标对象(被观察者)的状态发生改变时,它的所有依赖者(观察者)都会收到通知。一个观察目标可以对应多个观察者,而这些观察者之间没有相互联系,所以能够根据需要增加和删除观察者,使得系统更易于扩展,符合开闭原则;并且观察者模式让目标对象和观察者松耦合,虽然彼此不清楚对方的细节,但依然可以交互,目标对象只知道一个具体的观察者列表,但并不认识任何一个具体的观察者,它只知道他们都有一个共同的接口。

2023-06-28 20:57:12 524

原创 kafka原理五之springboot 集成批量消费

​由于Kafka的写性能非常高,因此项目经常会碰到Kafka消息队列拥堵的情况。遇到这种情况,我们可以通过并发消费、批量消费的方法进行解决。​

2023-06-22 23:11:00 5843

原创 微服务学习系列15:日志框架slf4j使用和原理

slf4j主要是为了给Java日志访问提供一个标准、规范的API框架,其主要意义在于提供接口,具体的实现可以交由其他日志框架,例如log4j和logback等。对于一般的Java项目而言,日志框架会选择slf4j-api作为门面,配上具体的实现框架(log4j、logback等),中间使用桥接器完成桥接。例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

2023-06-15 20:00:57 3817 1

原创 微服务学习系列14:分库分表ShardingSphere

Apache ShardingSphere 是一款分布式的数据库生态系统, 可以将任意数据库转换为分布式数据库,并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。

2023-05-26 09:37:32 392

空空如也

空空如也

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

TA关注的人

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