- 博客(95)
- 收藏
- 关注
原创 移动端自适应
这些框架已经经过测试和优化,可以确保在各种设备上呈现良好的效果。移动端自适应是前端开发中一个很重要的问题,因为移动设备的尺寸和分辨率多种多样。这意味着我们需要对不同的设备进行适配,以确保我们的网站或应用程序在各种设备上都能正常运行。总之,在解决移动端自适应问题时,我们需要使用各种方法,以确保页面在各种设备上都能正常运行。在移动端开发中,我们可以使用相对单位(例如 em、rem、vw、vh 等)来代替绝对单位(例如 px)。我们可以根据设备的宽度和高度来设置 CSS 样式,以适应不同的设备。
2024-10-29 14:43:29
406
原创 Flink CDC 如何简化实时数据入湖入仓
在上图左侧的 SQL 中,我们可以将 MySQL 中的实时产品表、实时订单表和 PostgreSQL 中的实时物流信息表进行实时关联,即 Streaming Join,关联后的结果实时更新到 Hudi 中,非常轻松地完成异构数据源的数据湖构建。Flink CDC 基于数据库日志的 Change Data Caputre 技术,实现了全量和增量的一体化读取能力,并借助 Flink 优秀的管道能力和丰富的上下游生态,支持捕获多种数据库的变更,并将这些变更实时同步到下游存储。这种简洁的架构有着明显的优势。
2024-10-29 14:42:40
892
原创 云网络订单模块流量染色功能浅谈
现在有这样一种情况:当有v2工程有订购类接口被调用时,工程会请求mop,然后mop下发mq消息B,消息B无法区分接受方是v1还是v2工程,此时就会存在抢消息现象,导致消息无法被发送消息的工程消费,导致订单出错。所以,考虑给在mop发送过来的消息中加上userid信息,在下发至工程前,通过feign调用订单工程的方式,并在请求头中塞入userid,再经过ha至ingress分流,最后到对应的工程,及v1消费消息A,v2消费消息B,互不影响。
2024-10-29 14:41:30
387
原创 java中list与map的互转与去重
Person person = personList.stream().filter(s -> s.getName().equals("张三")).findFirst().orElse(null);List<Person> person = personList.stream().filter(s -> s.getName().equals("张三")).collect(1、将List转换为Map,以name作为key,age作为value。8、将list中的age组成新的list。
2024-10-29 14:40:28
1038
原创 Disconf简介
Disconf是一套完整的基于zookeeper的分布式配置统一解决方案,它通过disconf-web管理配置信息,然后将配置的key在Zookeeper上建立节点,disconf-client启动后拉取自身需要的配置信息并监听Zookeeper的节点。(2)服务启动时,通过扫描,获取哪些类、哪些属性需要获取分布式的配置,根据注解知道分布式配置项和配置文件。(2)注解式编程,极简的使用方式:通过简单的标注+极简单的代码撰写,即可完成复杂的配置分布式化;(1)支持配置(配置项+配置文件)的分布式化管理;
2024-09-27 17:01:42
254
原创 Dragonfly-一个基于p2p的高效文件传输系统
Dragonfly 是阿里开源的一款基于 P2P 的智能镜像和文件分发工具。它旨在提高文件传输的效率和速率,最大限度地利用网络带宽。尤其是在分发大量数据时,例如应用分发、缓存分发、日志分发和镜像分发。它能让所有类型的文件、镜像或数据分发变得简单而经济。
2024-09-27 16:58:49
1010
原创 如何在 Kubernetes 中使用 APISIX Ingress 实现 gRPC 代理服务
gRPC 是一个高性能、开源、通用的远程过程调用(RPC)框架,其支持基于 HTTP/2 协议的双向流传输,并且支持多语言。gRPC 使用 Protocol Buffers(Protobuf)作为数据序列化格式,这使得它比其他序列化方案更快和更小。通过 APISIX Ingress,我们能够在 Kubernetes 中代理 gRPC 服务,实现对 gRPC 协议的支持。
2024-09-27 16:57:57
1128
原创 openvpn源码分析(一)
当 OpenVPN 进程收到 SIGTERM 信号时,会等待当前正在处理的数据包处理完成后再退出,以保证数据的完整性和一致性。SIGUSR1:重新载入证书和密钥。当 OpenVPN 进程收到 SIGUSR1 信号时,会重新载入证书和密钥,以更新 VPN 连接的安全性。当 OpenVPN 进程收到 SIGINT 信号时,会立即终止进程,可能会导致数据的丢失和不一致性。当 OpenVPN 进程收到 SIGHUP 信号时,会重新加载配置文件并应用新的配置。启动函数Main()调用Openvpn_main()
2024-09-27 16:57:25
765
原创 VictoriaMetrics安装部署手册
概要:VictoriaMetrics是一个开源的时序数据库和监控系统。它是为大规模的时序数据而设计的,可以扩展到数十亿数据点,具有高可用性和高性能。VictoriaMetrics的主要特点包括: 高性能:VictoriaMetrics采用了一些优化技术,如块存储、压缩、索引等,可以在不牺牲查询性能的情况下,大大减少存储空间。高可用性:VictoriaMetrics具有多副本的数据复制机制,可以保证数据的可靠性和高可用性。
2024-09-27 16:56:16
2325
原创 解决ETCD mvcc: database space exceeded问题
etcd的官方文档常见问题(FAQ)版块针对这个场景有明确的说明,这个报错信息是etcd服务端返回的,用来提示应用etcd服务端空间不足了。etcd服务默认不会开启自动压缩参数,如果变更频繁,会导致空间和内存的浪费,最终将耗尽etcd的存储空间,Etcd v3 的默认的存储空间是2GB,如果不压缩,超过这个限制后,就会报错:”mvcc: database space exceeded”,导致数据无法写入。查询etcd节点状态,发现"NOSPACE"的告警信息,并且DB SIZE=2.1G。
2024-09-27 16:54:13
840
原创 canal现网部署方案
其中example为server名称,若新建server名,需在conf下创建server名称的文件夹,并将example下的instance.properties拷贝入新文件夹下待修改。canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议。对于自建 MySQL , 需要先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式,my.cnf 中配置如下。
2024-08-19 16:05:32
481
原创 Linux系统四层端口连通性测试方法汇总
如果显示Connection timed out.表示连接超时,一般为主机不可达;如果显示Connection refused.表示主机可达,但是端口号不通;通常url就为服务端IP:PORT,必要时可以加-m参数来设置超时时间。通常若包含 Connected to ...信息,则说明连接成功。-c date表示收到请求时执行date命令打印当前系统时间。UDP端口连通性正常的话可以从服务端收到一定字节数的报文。ncat默认IPv4和IPv6服务会同时开启。ncat默认IPv4和IPv6服务会同时开启。
2024-08-19 16:03:29
440
原创 Actor 模型及 Akka 简介(三):EventBus简介
要使用 Akka EventBus, 首先要实现一个 EventBus 接口。type EventEvent 就是需要发布到总线上的事件Classifier 分类器用于对订阅者进行绑定和筛选Subscriber 注册到总线上的订阅者。所幸的是,我们不需要要从头实现 EventBus 接口,Akka 提供了一个 LookupClassification 帮助我们实现 Pub-Sub 模式,我们要做的最主要就是实现 publish 方法。subscriber!event// 其他方法...
2024-08-19 16:02:10
484
原创 Linux进程打开文件数量限制修改
因此我们通过ulimit修改bash进程的打开文件数量后,在这个bash进程启动的子进程也会修改,但是这个是临时的,重新登录或者换一个shell就失效了。如何永久修改这个进程打开文件数量呢?可以看到在成功打开两个文件后tail再打开的文件就会报错(Too many open files),因为进程默认都会打开标准输入、输出和错误三个文件。已运行的进程无法直接修改打开文件数量,需要修改shell下进程打开文件数量后重新启动原来的程序才行,
2024-08-19 16:00:48
501
原创 DNS域名解析
正是因为有这种本地DNS解析的规程,所以有黑客就可能通过修改用户的域名来把特定的域名解析到他指定的IP地址上,导致这些域名被劫持。Mail Exchange,就是可以将某个域名下的邮件服务器指向自己的 MailServer,如taobao.com域名的A记录IP地址是115.238.25.xxx,如果将MX记录设置为115.238.25.xxx,即xxx@taobao.com的邮件路由,DNS会将邮件发送到115.238.25.xxx所在的服务器,而正常通过Web请求的话仍然解析到A记录的IP地址。
2024-07-26 17:30:30
1572
原创 PowerMockito使用详解
说明:当使用PowerMockito.whenNew方法时,必须加注解@PrepareForTest和@RunWith。注解@PrepareForTest里写的类是需要mock的new对象代码所在的类。说明: 当需要mock final方法的时候,必须加注解@PrepareForTest和@RunWith。注解@PrepareForTest里写的类是final方法所在的类。说明:当需要mock静态方法的时候,必须加注解@PrepareForTest和@RunWith。说明:注解里写的类是私有方法所在的类。
2024-07-26 17:29:37
1927
原创 Redis如何优化大key
通过优化数据结构设计、设定合理的数据过期策略、优化系统架构和配置,以及渐进式删除大Key等方法,我们可以有效地解决和预防大Key问题,从而提高Redis系统的稳定性和性能。启用Redis的内存淘汰策略,例如LRU(Least Recently Used,最近最少使用),以便在内存不足时自动淘汰最近最少使用的数据,防止大Key长时间占用内存。Redis大key问题指的是某个key对应的value值所占的内存空间比较大,导致Redis的性能下降、内存不足、数据不均衡以及主从同步延迟等问题。设置合理的过期时间。
2024-07-26 17:28:37
426
原创 Java进程笔记
isInterrupted判断的是调用此方法的线程,如果设置了线程中断标志,则返回true,并不表示线程真正的被中断。根据volatile的happend-before原则,volatile的写必须对后续的volatile读内存 可见,也就是说每次写volatile变量的时候,把它刷新到内存,每次读volatile变量的时候都从内存读取。根据synchronized的happend-before原则,锁的释放happend-before锁的获取,现在在释放锁的时候,会将修改的值刷新到内存。
2024-07-26 17:28:01
317
原创 Go中变量的生命周期
生命周期指变量在程序执行过程中存在的时间段。包级别变量的生命周期是整个程序的执行时间。相反,局部变量有一个动态的生命周期:每次执行声明语句时创建一个新的实体,变量一直生存到它变得不可访问,此时它占用的存储空间被回收。函数的参数和返回值也是局部变量,它们在其闭包函数被调用的时候创建。在如上代码片段中,变量t在每次for循环的开始创建,变量x和y在循环的每次迭代中创建。那么垃圾回收器如何知道一个变量是否应该被回收?
2024-07-26 17:27:16
495
原创 QT/C++获取电脑CPU实时占用率
因此,根据上述公式的原理,在计算CPU使用率时需要阻塞/等待线程若干时间。由于需要阻塞线程,所以计算CPU使用率的函数是绝对不能写在主线程里的,因此另开一个线程用以计算该公式。除此之外,为了方便分析,我还增加了获取磁盘占用率与内存容量的计算。2、运行时间 = 内核时间 + 用户时间 - 空闲时间。使用的时候需要实例化类,并切带调用相应的函数就可以了。1、cpu使用率 = 运行时间 / 间隔时间。3、间隔时间 = 内核时间 + 用户时间。
2024-06-24 17:33:09
1758
原创 RabbitMQ交换机类型
一种带路由功能的交换机,把消息路由到 binding_key 和 rounting_key 完全一样的队列中。如下图,当消息的 rounting_key 为 orange 时,消息会被路由到 Q1 队列;当消息的 rounting_key 为 black 或 green 时,消息会被路由到 Q2 队列。在发送消息的 headers 中的可以指定一组键值对属性,当这些属性与 binding_key相匹配时,则将消息路由到该队列。最基本的交换机类型,广播消息,此时会把消息路由到与该交换机绑定的所有队列中。
2024-06-24 17:32:27
484
原创 分布式中的脑裂问题
当因为网络等原因,造成集群出现了多个分区时,主节点就不能与集群内所有节点进行通信,这时一部分集群就会认为主节点服务宕机,开始进行新leader的选举,此时会在各分区内都选举出leader,整个集群内会存在多个leader,然后各leader会各自处理一些事务,这些事务没有在整个集群内同步。另外一种是有状态的高可用,常见的如mysql集群,采用主从模式,主节点提供读写能力,从节点提供读能力,高可用集群中的节点提供的能力是有差异的,主节点挂了之后需要重新选举主节点来形成新的主从集群。
2024-06-24 17:31:49
621
原创 Vue 3.0 主要特性及代码示例
最后,我们将这两个函数作为组件的属性传递给组件实例。函数中,我们分别处理了文本编辑器的输入和提交事件。函数中,我们使用 ref 函数创建了一个响应式的字符串值。对象,它包含了一些用于操作组件状态的函数。的 IndexedDB 实例。然后我们定义了两个函数。这个组件使用了 Composition API 中的。对象,分别用于存储和修改组件状态。函数作为组件的属性传递给组件实例。作为组件的属性传递给组件实例。函数中,我们定义了一个。在这个示例中,我们使用。在这个示例中,我们使用。,它存储了组件实例的。
2024-06-24 17:29:32
577
原创 分布式任务调度器中的状态机设计详解
DSL是一种工具,它的核心价值在于,它提供了一种手段,可以更加清晰地就系统某部分的意图进行沟通。这种清晰并非只是审美追求。一段代码越容易看懂,就越容易发现错误,也就越容易对系统进行修改。因此,我们鼓励变量名要有意义,文档要写清楚,代码结构要写清晰。基于同样的理由,我们应该也鼓励采用DSL。按照类型,DSL可以分为三类:内部DSL(Internal DSL)、外部DSL(External DSL)、以及语言工作台(Language Workbench)。Internal DSL是一种通用语言的特定用法。
2024-06-24 17:28:04
620
原创 Apache Doris Grafana监控指标介绍
整个集群重点关注的几个指标:- 集群 FE JVM 堆统计- 集群BE内存使用情况概览- Tablet调度情况- BE IO统计- Query Statistic这部分查询请求数及响应时间- BE BC(Base Compaction)和CC(Compaction Cumulate)
2024-05-27 17:26:59
2254
原创 浅谈RDMA
所谓直接,指的是可以像访问本地内存一样,绕过传统以太网复杂的TCP/IP网络协议栈读写远端内存,而这个过程对端是不感知的,而且这个读写过程的大部分工作是由硬件而不是软件完成的,即把报文封装和解析放到硬件中做了。2000年由IBTA(InfiniBand Trade Association)提出的IB协议是当之无愧的核心,其规定了一整套完整的链路层到传输层(非传统OSI七层模型的传输层,而是位于其之上)规范,但是其无法兼容现有以太网,除了需要支持IB的网卡之外,企业如果想部署的话还要重新购买配套的交换设备。
2024-05-27 17:26:05
482
原创 OpenVPN Management实验
OpenVPN Management是OpenVPN的功能之一,提供了管理OpenVPN服务器的办法。OpenVPN服务器状态监听:可以查看OpenVPN服务器的当前运行状态,如连接状态、客户端数量、服务器负载等。客户端连接管理:可以管理已经与OpenVPN服务器建立连接的客户端,如断开连接、禁止连接等。认证和授权管理:可以管理OpenVPN服务器的安全认证和授权机制,例如使用LDAP或RADIUS进行用户认证、管理访问权限等。
2024-05-27 17:25:29
930
原创 clickhouse的集群部署
因为已经配置了zookeeper,所以创建表的DDL语句也会同步到其他节点上。任选一台机器,创建一个 ReplicatedMergeTree 引擎的测试表,测试 ZooKeeper 同步功能。不用也可以,但建议还是使用。配置文件是热更新的,所以修改配置后无需要重启服务,除非是首次启动 ClickHouse。,准备搭建一个3分片2副本集群,当然也可根据你自己实际情况选择机器数量。根据每台机器的分片副本,配置。(一定要看,本人亲自搭建过,一步一步来,不会有问题)如果集群部署成功,你会看到所有机器的信息。
2024-05-27 17:24:54
3285
1
原创 java实体类通过反射机制进行操作
System.out.println("属性名: "+field.getName()+" 属性值: "+field.get(entity));// entity是实体,method是get方法,例如"getTaskId"// entity是实体, index是字段名称,例如"taskId"@Schema(description = "平均时延")@Schema(description = "丢包率")@Schema(description = "任务ID")(1)get的两种方式。1.先定义一个实体类。
2024-05-27 17:24:10
489
原创 本地自建DNS用于浏览器DNS代理
其意义在于以加密的HTTPS协议进行DNS解析请求,避免原始DNS协议中用户的DNS解析请求被窃听或者修改的问题(例如中间人攻击)来达到保护用户隐私的目的。因此,攻击者将无法查看请求的URL并对其进行更改,如果使用了基于HTTPS的DNS,数据在传输过程中发生丢失时,DoH中的传输控制协议(TCP)会做出更快的反应。然后在Chrome浏览器安全DNS设置页面(chrome://settings/security)自定义安全DNS的服务地址:https://localhost:8053/dns-query。
2024-04-30 17:46:15
2201
2
原创 vxlan 协议原理简介
下图是 vxlan 协议的报文,白色的部分是虚拟机发送报文(二层帧,包含了 MAC 头部、IP 头部和传输层头部的报文),前面加了 vxlan 头部用来专门保存 vxlan 相关的内容,在前面是标准的 UDP 协议头部(UDP 头部、IP 头部和 MAC 头部)用来在底层网路上传输报文。还有一种通信方式,那就是不同 VNI 网络之间的通信,这个需要用到 vxlan 网关(可以是物理网络设备,也可以是软件),它接收到一个 vxlan 网络报文之后解压,根据特定的逻辑添加上另外一个 vxlan 头部转发出去。
2024-04-30 17:42:46
1074
原创 go语言中的名称
Go中函数、变量、常量、类型、语句标签和包的名称遵循以下规则:由字符、数字、下划线等组成,以字符或下划线开头,不能以数字开头;大小写敏感,如name和Name是不同的名称;一般采用驼峰命名法(camel case),而不采用蛇形命名法(snake case),如一般写作fileName,而不采用file_name;包名总是由小写字母组成;
2024-04-30 17:39:13
481
原创 He3DB 云原生数据库核心设计理念与架构特性介绍
总的来说,He3DB通过将S3作为持久层的选择,结合数据缓存服务层的设计,提出了一个既能满足大规模数据存储需求,又具有成本效益,同时能够提供必要性能保障的解决方案。通过这种机制,He3DB能够在没有高性能硬件支持的情况下,通过软件层面的优化实现性能上的提升,同时保持成本的可控和性能的稳定性。而He3DB产品的研发初期,我们除了需要保证它的上限处于业内主流水平 ,其实更关注的是它的下限表现,因为我们期望最终实现的不仅是在能力上全面超越RDS,同时在全场景使用下,成本也要明显优于RDS。
2024-04-10 15:46:35
537
原创 数据仓库发展历史与架构演进
但是数据仓库从概念上看是一个面向主题、集成、相对稳定和反映历史变化的数据集合,在数据仓库中信息是不同的业务系统中进行集成,并经过一系列加工、整理和汇总等过程,形成规范性的关于确定主题的一致的全局信息,可以对这些数据进行频繁的可重复的分析。数据仓库的演进变革的因素有很多,例如快速的业务模式与群体规模的数据量带来的大数据处理技术、互联网的发展带来的数据源及数据类型的增多、人工智能的发展带来数智的融合、云计算交付模式的出现需要的细粒度的资源管理与隔离等、业务实时性的要求等都会带来数据仓库架构的变化。
2024-04-10 15:45:14
710
原创 什么是“算力网络”?
网被软件定义,网的功能成为了平台上的选项,在操作云的时候,点点按钮,就可以调用网的功能,对网进行配置。但是它的实现方式,不同于“云计算+通信网络”的传统方式,而是将算力资源彻底“融入”通信网络,以一个更整体的形式,提供最符合用户需求的算力资源服务。在这一阶段,因为边缘计算的出现,云计算已经不能单独代表算力了,所以,和“云”有关的词,逐渐变成了“算”。在单点算力无法持续倍增的情况下,盘活现有的算力资源,是解决算力不足问题的唯一办法。这时,云和网属于“初恋”,双方还是强调各自的主体身份、合作关系,所以,叫做。
2024-04-10 15:42:26
457
原创 OpenVPN的点对点简单实现
把服务端的ca.crt、client.crt、client.key、ta.key四个文件拷贝到客户端的统一目录下(默认安装目录为C:\Program Files\OpenVPN\config\),并在该目录下新建client.ovpn配置文件,配置内容为。改动三:创建密码检查脚本,目录在/etc/openvpn/server/user/checkpsw.sh。改动四:客户端删掉client.crt和client.key两个证书文件,并对配置文件进行修改。改动一:修改服务端server.conf配置文件。
2024-04-10 15:35:08
1097
原创 一种优秀的分层架构设计-COLA
展示层(Presentation Layer):负责以 Rest 的风格接收 Web 请求,然后将请求路由给 Application 层执行,并返回视图模型(View Model),其载体通常是数据传输对象(Data Transfer Object, DTO);通过不断探索,我们发现良好的分层结构,良好的包结构定义,可以帮助我们治理混乱不堪的业务应用系统。在COLA架构中,制定了一系列的命名规范,以便通过名称就能知晓该类的作用和职责范围,从而极大的提升代码的可理解性,提升代码审查的效率。
2024-04-10 15:23:29
761
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人