自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 订单号和 id 列可不可以是同一列?

id 列首先说 id 列一般作为主键,没有什么业务含义,设计的目的是为了查询和索引方便,如果用单表的情况下一般会设置为自增,有序了以后,无论数据库还是业务检索起来效率都非常高。在分布式场景中,单表已经不能满足我们的需求了,所以用自增 id 的方案也就不合适了。当比如我们进行分表设计时,主键列到底如何生成就成了一个问题,流行的方法是利用像 snowflake 这样的算法计算出一个趋势有序的值作为 id。(当然还有其他多种方法)这样就满足了扩展性和一定程度上解决了检索性能的问题。订单号订单号的生成一般

2022-05-26 11:38:14 720

原创 OpenFeign 如何设置动态 URL?

如果你利用 Spring Cloud OpenFeign 进行服务间调用一般会加入这个注解:@FeignClient(name = "" ,url = "http://myapp.com",path = "")可以看出其中的 url 参数是一个字符串,上面的配置是把它写“死”在代码中了。如果我们想根据不同的环境作动态配置,让这个 url 动态的变化应该怎么办呢?可以这样:首先修改注解@FeignClient(name = "" ,url = "${feign.client.url.TestUr

2022-05-26 11:32:32 4668 1

原创 记一次 OpenFeign 线上乱码问题

问题描述前两天,开发同学发现线上某服务往第三方 API 发出的请求(这个请求是用 openFeign 包装过的),其响应有时为乱码后来经过测试能够稳定复现问题,开发同学通过分析发现,只要请求的 header 中有 “Accept-Encoding” 且值为 “gzip, deflate, br”,那么响应回来的数据必是乱码。通过这个现象我们得出结论,即给请求头加了压缩标识,数据也响应回来了,但是并没有解压缩。知道了原因,那么解决思路无非有二:不压缩了加上解压缩实现解决方案第一种思路实现

2022-05-26 11:29:02 2376

原创 Java 序列化那些事儿

Questions序列化与反序列化是什么?序列化 对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传递性。序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。核心作用是对象状态的保存与重建。反序列化 客户端从文件中或网络上获得序列化后的对象字节流,根据字节流中所保存的对象状态及描述信息,通过反序列化重建对象。为什么需要序列化与反序列化?对象序列化可以实现分布式对象。主要应用例如:RMI(即远程调用 Remote Method Invocation) 要利用对象序列化

2022-05-06 21:54:40 351

原创 面试不会问的Hystrix实现资源隔离

资源是什么?又为什么要隔离?我们设想一个这样的场景:在某分布式微服务系统中的某个服务 A ,它依赖外部的 B 、C、D 三个服务,通过 RPC 远程调用它们。假设服务 A 是一个 springboot 启动的 java 进程,内部 wrap 的 web server 是 tomcat。假设 tomcat 采用的线程模型是 NIO 模式,它默认的最大连接数是 10000 ,也就是最多同时接收处理10000个用户请求。在正常情况下,只要同时请求数不超过10000 且服务 A 及内外部服务都正常运行就没有问题。(

2022-04-25 11:38:31 407

原创 Redis 内存回收策略

小盒子的技术分享 有关编程、技术类知识的分享及生活感悟 109篇原创内容 ...

2022-04-21 16:26:46 3931

原创 灰度发布、蓝绿部署、金丝雀都是啥?

目录滚动部署蓝绿发布为什么还需要蓝绿金丝雀发布(canary)金丝雀和蓝绿的对比灰度发布A/B Test实现kubernetesistiospring cloud 网关参考滚动部署在滚动部署中,应用的新版本逐步替换旧版本。实际的部署发生在一段时间内。在此期间,新旧版本会共存,而不会影响功能和用户体验。这个过程可以更轻易的回滚和旧组件不兼容的任何新组件。下图显示了该部署模式:旧版本显示为蓝色,新版本显示为绿色,它们部署在集群中的每一台

2022-04-19 15:20:08 7014

原创 Executor框架及线程池总结

概述Executor作为一个灵活且强大的异步执行框架,其支持多种不同类型的任务执行策略,提供了一种标准的方法将任务的提交过程和执行过程进行了解耦开发,基于生产者和消费者模型,还提供了对生命周期的支持,以及统计信息收集,应用程序管理机制和性能检测等机制。成员分为四个部分:任务、任务执行、任务执行结果以及任务执行工具类任务:实现Callable接口或Runnable接口任务执行部分:ThreadPoolExecutor以及ScheduledThreadPoolExecutor任务执行结果:Future接口以及F

2022-04-07 19:23:58 867 1

原创 再聊聊ThreadLocal

定义“Each thread holds an implicit reference to its copy of a thread-local variable as long as the thread is alive and the ThreadLocal instance is accessible; after a thread goes away, all of its copies of thread-local instances are subject to garbage collec

2022-03-28 17:17:06 632

原创 Unix 网络 IO 模型

前知识文件描述符文件描述符(file descriptor,简称 fd)在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于 UNIX、Linux 这样的操作系统。Linux 平台万物皆文件在 Linux 中,内核将所有的外部设备都当做一个文件来进行操作,而对一个文件的读写操作会调用内核提供

2022-03-18 17:14:21 784

原创 再聊 HashMap

特点KV 结构,K、V 都允许 null 值线程不安全,运行速度快,存取速度快非线程安全的数据结构jdk1.7 是数组+链表的结构jdk1.8 是数组+链表+红黑树数组长度定义为多少?HashMap 类中有一个非常重要的字段,就是 Node[] table,即哈希桶数组。上两图中的数组即为 Node 数组。以下为部分源码:static class Node<K,V> implements Map.Entry<K,V> { 

2022-03-10 17:45:11 725

原创 ohmyzsh 新功能解决文件全路径拷贝痛点

今天刚升级了 ohmyzsh 最新版本,发现添加了一个 feature,可以解决文件全路径拷贝的痛点。之前介绍过一些方法来解决拷贝文件全路径:比如:用 greadlink$ brew install coreutils$ greadlink -f file.txt## 显示/Users/baidu/Desktop/file.txt图形界面下用 path finderAlfred 插件在终端打开 Finder ,或在 Finder

2022-02-28 10:28:12 643

原创 缓存一致性协议-MESI

背景带有高速缓存的CPU执行计算的流程程序以及数据被加载到主内存指令和数据被加载到CPU的高速缓存CPU执行指令,把结果写到高速缓存高速缓存中的数据写回主内存高速缓存的数据结构高速缓存的底层数据结构其实是一个拉链散列表的结构,就是有很多的bucket,每个bucket挂了很多的cache entry,每个 cache entry 由三个部分组成:tag 、 cache line 、 flagcache line :缓存的数据,可以包含多个变量的值tag :指向了这个缓存数据在主内存的数据的地址flag :标

2022-02-17 17:58:59 2941

原创 synchronized 锁的是什么?

概述本文我们将回答两个问题:synchronized 锁的是什么?为什么 wait() 和 notify() 需要搭配 synchonized 关键字使用 ?我将通过先介绍基础知识再回答问题的方式来解答这两个问题,了解了前面的基础知识后,问题也就迎刃而解了。前知识-对象头(mark word)内存布局我们知道 java 对象的内存布局如下图所示:而其中对象头区域包含  markword 和 class pointer利用 JOL 可以分析内存中的对象布局“JOL 的全称是 Java Object

2022-02-15 17:36:13 656

原创 Redis 分布式解决方案

概述在 Redis 3.0 之前,集群方案一般为两种:客户端分区方案代理方案3.0 之后官方提供了专有的集群方案 Redis Cluster。将数据集分散到多个节点上,每个节点负责整体的一部分,即为数据分区。分区就会涉及到分区规则,Redis 常用的是哈希分区规则,哈希分区规则比较常见的有节点取余分区一致性 hash 算法虚拟槽分区客户端分区也叫客户端分片(Smart Client)如下图所示,为一个客户端分区方案。通过 sentinel 实现集群高可用,分区逻辑在客户端实现优点是:分区逻辑可控。缺点是:需

2022-01-25 18:19:24 2417

原创 自顶向下学习 RocketMQ(十):消息重投和消息重试

消息重投“生产者在发送消息时,同步消息失败会重投,异步消息有重试,oneway 没有任何保证。消息重投保证消息尽可能发送成功、不丢失,但可能会造成消息重复,消息重复在 RocketMQ 中是无法避免的问题。消息重复在一般情况下不会发生,当出现消息量大、网络抖动,消息重复就会是大概率事件。另外,生产者主动重发、consumer 负载变化也会导致重复消息。如下方法可以设置消息重试策略: retryTimesWhenSendFailed: 同步发送失败重投次数,默认为 2,因此生产者会最多尝试发送 r

2022-01-18 19:08:13 2916

原创 自顶向下学习 RocketMQ(九):回溯消费

定义“回溯消费是指 Consumer 已经消费成功的消息,由于业务上需求需要重新消费,要支持此功能,Broker 在向 Consumer 投递成功消息后,消息仍然需要保留。并且重新消费一般是按照时间维度,例如由于 Consumer 系统故障,恢复后需要重新消费 1 小时前的数据,那么 Broker 要提供一种机制,可以按照时间维度来回退消费进度。RocketMQ 支持按照时间回溯消费,时间维度精确到毫秒。”Demo我们仍然是利用 Spring Cloud Stream 的编程模型 + Spring Clou

2022-01-17 15:00:27 2736

原创 自顶向下学习 RocketMQ(七):事务消息

定义“RocketMQ 事务消息(Transactional Message)是指应用本地事务和发送消息操作可以被定义到全局事务中,要么同时成功,要么同时失败。RocketMQ 的事务消息提供类似 X/Open XA 的分布事务功能,通过事务消息能达到分布式事务的最终一致。”Demo下面的例子,还是以 spring cloud stream 编程模型为基础,结合 spring cloud alibaba RocketMQ 的实现,演示了如何使用事务消息。流程事务消息交互流程如下图所示:事务消息发送步骤如下:

2022-01-10 17:37:32 675

原创 自顶向下学习 RocketMQ(六):定时消息

定义和原理定时消息(延迟队列) 是指消息发送到 broker 后,不会立即被消费,等待特定时间投递给真正的 topic。broker 有配置项 messageDelayLevel,默认值为 1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h  18 个 level , 可以配置自定义 messageDelayLevel。注意,messageDelayLevel 是 broker 的属性,不属于某个 topic。发消息时,设置 del

2022-01-10 09:26:41 1633

原创 自顶向下学习 RocketMQ(五):顺序消息原理

自顶向下学习 RocketMQ(五):顺序消息原理回顾上文中我们对 RocketMQ 的 顺序消息 进行了 spring cloud 版本的演示,这里再回顾一下:顺序消息分为 分区顺序消息 和 全局顺序消息。全局顺序消息其实是分区顺序消息的一种特殊情况,即如果只有一个分区且同一时间只有一个消费者线程进行消费,那么就可以看作是全局顺序消息。在 RocketMQ 创建 topic 时默认队列(分区)数量是:8 ,是针对所有 topic 的如果要单独设置一个 topic 的队列(分区)数量,在 sp

2022-01-05 17:30:22 2080

原创 JVM 调优之 glibc 引发的内存泄露

回顾上篇文章 JVM调优之G1换CMS 中 我们将 G1 换成 CMS 并调整了 JVM 参数,由于 GC 选择和参数设置的更加合理,所以内存的增长非常缓慢了。但这并没有从根本解决问题,通过观察发现,最高的时候一天 RSS 会增长 100M 左右,而且整体的趋势仍然是向上增长的,并没有一丝的回落迹象。问题分析虽然增长缓慢,哪怕每天只有 1M,离 OOM 也只是时间问题。这就使我们不得不再次仔细分析为什么 RSS 会一直增长。堆内存分析通过监控发现,堆内存呈周期性的增长和回收,与我们的 JVM 参数

2021-12-28 14:13:45 1112

原创 JVM调优之G1换CMS

问题发现发现某应用的内存在缓慢的持续增长,系统告警内存使用系统已超过 80%,且正在持续增长。具体来说是 RES 在增长。你可以通过以下命令,在目标主机上查看内存情况:ps -p 1 -o pcpu,rss,size,vsize“RSS 是常驻内存集(Resident Set Size),表示该进程分配的内存大小。”“SIZE: 进程使用的地址空间,如果进程映射了 100M 的内存,进程的地址空间将报告为 100M 内存。事实上,这个大小不是一个程序实际使用的内存数

2021-12-23 18:40:30 554

原创 自顶向下学习 RocketMQ(四):顺序消息

顺序消息顺序消息是消息队列 RocketMQ 提供的一种对消息发送和消费顺序有严格要求的消息。对于一个指定的 Topic,消息严格按照先进先出(FIFO)的原则进行消息发布和消费,即先发布的消息先消费,后发布的消息后消费。顺序消息分为 分区顺序消息 和 全局顺序消息分区顺序消息“分区顺序 对于指定的一个 Topic,所有消息根据 sharding key 进行区块分区。同一个分区内的消息按照严格的 FIFO 顺序进行发布和消费。Sharding key 是顺序消息中用来区分不同分区的关键字段,和普通消息的

2021-12-21 18:14:08 1340

原创 lo4j2 漏洞复现过程及解决方案

背景近日,阿里云团队发现并报告了 log4j2 的一个漏洞。由于 log4j2 是一个依赖较广的底层库,所以影响范围很大。影响程度严重,有多严重呢?这么说吧,是灾难性的。复现漏洞环境介绍操作系统:macos Catalinajdk 版本:11.0.9.1log4j2 版本:2.13.3(使用 springboot 2.3.2.RELEASE 间接依赖)原理介绍引用公众号:“小林 coding” 的一张图:使用 log4j2 正常打日志的时候没事儿,比如:logger.info("this is&n

2021-12-13 16:43:17 2471

原创 自顶向下学习 RocketMQ(三):消息存储

前言通过前面两篇中的应用例子,我们已经大概知道 RocketMQ 的架构是什么样的了。如图:主要是以下几个部分:producerconsumerbrokernameserver如果你自己动手部署过 RocketMQ, 相信对下面的这个部署架构图会非常清楚:本文我们来了解一下 RockerMQ 中的消息存储是如何设计和实现的。消息存储前知识在介绍之前我们先了解几个基本概念:分区消息队列中 同一个 topic 中的消息可能会存储到多个分区上,如下图:offset消息在 broker 上的每个分区都是组织成一个文

2021-12-08 18:35:00 1513

原创 自顶向下学习 RocketMQ(二)SpringCloud 整合 RocketMQ

why上文中我们讨论了 RocketMQ 的安装问题,有些重要的问题忘了说,即:为什么要用消息队列消息队列有什么用?用了消息队列有什么好处?来讨论为什么之前,先来看一下消息模型,即 “是什么?”,我们引用 RocketMQ 的消息模型:“RocketMQ 主要由 Producer、Broker、Consumer 三部分组成,其中 Producer 负责生产消息,Consumer 负责消费消息,Broker 负责存储消息。Broker 在实际部署过程中对应一台服务器,每个 Broker 可以存储多个 Topi

2021-12-06 18:53:31 1348

原创 自顶向下学习 RocketMQ(一): QuickStart

安装部署 RocketMQ采用源码编译安装,注意请提前将 maven 安装调试好。操作系统 macOSRocketMQ 版本:4.9.2Maven 版本 3.3.9JDK 版本 1.8.0_181以下安装是单 Master 模式,非集群模式,仅适用于本地开发和测试环境。下载源码包wget https://dlcdn.apache.org/rocketmq/4.9.2/rocketmq-all-4.9.2-source-release.zip解压源码并进行编译> unzip&nbs

2021-11-30 14:42:59 453

原创 多租户系统设计

多租户系统设计SaaS 的系统分级SaaS 系统架构成熟度模型的 5 个级别——从“混乱”到“乌托邦“第 0 级(混乱):每次新增一个客户,都会新增软件的一个实例。第 1 级(受控的混乱):所有客户都运行在软件的同一个版本上,而且任何的定制化都通过修改配置来实现。第 2 级(多租户 [multi-tenant]、高层建筑 [Highrise]):所有的客户都已经可以在软件的同一个版本上运行了,而且他们都在同一个“实例”上运行。第 3 级(多租户, 扩建 [Build-Out]):此时你已经拥有了多租户、单一

2021-11-30 09:46:57 8700 1

原创 我就想存个文件,怎么这么麻烦 ?- k8s PV、PVC、StorageClass 的关系

Docker当我们使用 Docker 时,设置数据卷(Volume)还是比较简单的,只需要在容器映射指定卷的路径,然后在容器中使用该路径即可。比如这种:# tomcat  tomcat01:    hostname: tomcat01    restart: always    image: jdk-tomcat:v8&

2021-11-26 18:06:53 1510

原创 istio 原理简介

前导由于 istio 自 1.5 版本以后架构上有了较大变化,控制面从多组件变成了单体的 istiod 组件,所以下文会先介绍 1.5 之前的架构,再介绍 1.5 之后的,是一个由繁到简的过程。istio 1.5 之前架构Istio 的架构分为控制平面和数据平面数据平面:由一组智能代理(Envoy)以 sidecar 模式部署,协调和控制所有服务之间的网络通信。控制平面:负责管理和配置代理路由流量,以及在运行时执行的政策。可以看到控制面(control plane )组件众多,下图是 1.1 版本所包含的组

2021-11-19 15:50:19 1136

原创 幂等解决方案集合(二)消息幂等

问题描述消息队列的消息幂等性,主要是由 MQ 重试机制引起的。我们通常会认为,消息中间件是一个可靠的组件——这里所谓的可靠是指,只要我把消息成功投递到了消息中间件,消息就不会丢失,即消息肯定会至少保证消息能被消费者成功消费一次,这是消息中间件最基本的特性之一,也就是我们常说的“AT LEAST ONCE”,即消息至少会被“成功消费一遍”。举个例子,一个消息 M 发送到了消息中间件,消息投递到了消费程序 A,A 接受到了消息,然后进行消费,但在消费到一半的时候程序重启了,这时候这个消息并没有标记为消费成功,这

2021-11-16 18:05:13 2162

原创 Kubernetes监控体系总结

基本概念cAdvisorDocker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux/Windows/Mac 机器上。容器镜像正成为一个新的标准化软件交付方式。为了能够获取到 Docker 容器的运行状态,用户可以通过 Docker 的 stats 命令获取到当前主机上运行容器的统计信息,可以查看容器的 CPU 利用率、内存使用量、网络 IO 总量以及磁盘 IO 总量等信息。显然如果我们想对监控数据做存储以及可视化的展示,那么 docke

2021-11-15 20:27:00 1226

原创 幂等解决方案集合(一)

什么是幂等(idempotent)百度百科:“幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。”“在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。”“这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,“setTrue()”函数就是一个幂等函数,无论多次执行,其结果都是一样的。更复杂的操作幂等保证是利用唯一交易号(流水号)实现。”幂等的数学

2021-11-12 18:37:25 935

原创 如何使用skywalking 进行全链路监控

小盒子的技术分享 发起了一个读者讨论 有什么想问小盒子的吗? 如何使用skywalking 进行全链路监控本文涉及内容skywalking 全链路监控skywalking 的参数配置skywalking UI 监控视角与指标介绍一些很有用的点skywalking 全链路监控下图是我从网上找到的一个比较常见的微服务架构,看的出来使用的是 spring cloud 框架组...

2021-11-10 10:59:01 1771 2

原创 几个在 Mac 电脑上提高程序员开发效率的小工具

快速打开多个 idea 工程 或前端 vscode 工程前提是你安装了 iterm + oh my zsh 这个组合,后面就比较简单了vscode 比较简单,打开后先 command+shift+p , 然后输入 shell command 提示安装 code 命令。安装好后,在 iterm 终端界面,找到想打开的文件或目录,用 code 命令加参数打开即可。idea 需要利用 open 命令,比如我在 iterm 终端输入:## 用 idea 打开 id_rsa&n

2021-11-06 11:18:34 405

原创 百度 UidGenerator 源码解析

简介先来看一下官方介绍:雪花算法“雪花算法(Snowflake)是一种生成分布式全局唯一 ID 的算法,生成的 ID 称为 Snowflake IDs 或 snowflakes。这种算法由 Twitter 创建,并用于推文的 ID。Discord 和 Instagram 等其他公司采用了修改后的版本。一个 Snowflake ID 有 64 位。前 41 位是时间戳,表示了自选定的时期以来的毫秒数。接下来的 10 位代表计算机 ID,防止冲突。其余 12 位代表每台机器上生成 ID 的序列号,这允许在同一毫

2021-11-05 16:03:53 977

原创 扒一下一直不求甚解的 iptables

基本概念iptables 是什么?在 netfilter 的 官网 找到的如下解释:“iptables is the userspace command line program used to configure the Linux 2.4.x and later packet filtering ruleset. It is targeted towards system administrators.Since Network Address Translation is also configure

2021-11-04 13:13:45 133

原创 你工作的目的不是取悦老板而是对公司有利

缘起最近在读 NetFlix CEO 里德·哈斯廷斯联合欧洲工商管理学院教授艾琳·迈耶写的新书《不拘一格》,结合我最近的管理工作,觉得非常有共鸣,迫切想和大家分享其中一二。这本书的副标题是:网飞的自由与责任工作法,见文知义,讲的就是根据网飞在创业过程中的管理经验总结出的工作方法。可谓是从实践中来到实践中去。书中重点讲了三个部分提升人才密度加强沟通坦诚取消管控我将根据我自己对该书部分章节内容的摘抄结合自身感受做本次分享。提高人才密度“工作表现无论好与坏,都是具有感染力的。如果你表现平平,可能会影响到很多本可以

2021-11-03 16:35:08 225

原创 API 网关选型及包含 BFF 的架构设计

API 网关选型及包含 BFF 的架构设计一 背景介绍下图是我从网络上找到的一个微服务架构的简单架构图,如图可见 API Gateway 在其中起到一个承上启下的作用,是关键组件。图片来源于网络在更通用的场景下我们会使用 NGINX 这样的软件做前置,用来处理SLB负载均衡过来的流量,作用是反向代理、集群负载均衡、转发、日志收集等功能。然后再将 NGINX 的请求 proxy 到 API Gateway 做统一网关处理。在上面的这个场景下 API Gateway 可以包含以下功能:安全限流缓存熔断重试负载反

2021-11-03 16:24:33 792

原创 如何利用 VsCode + evernote + markdown 将自己的博客自动同步成笔记

在 VsCode 中安装 evermonkey 插件在 VsCode 中找到 evermonkey 插件,安装command + shift + p ,输入 ever token。显示 “open developer page to get API token”,选择它。会让你选择 china 和 international 两个选择,选择 china. 接着会打开默认浏览器的一个界面。先生成你自己的 token, 然后回到 VsCode 打开设置找到如下图的设置,把刚才生成好的内容填写进去。到这里一般就好

2021-11-03 14:05:03 245

空空如也

空空如也

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

TA关注的人

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