More issues

Dinky

前言 Dinky 是一款开源的 Flink 作业管理与开发平台,整体设计轻量、易用,能够统一管理多个 Flink 集群。 开发者可以通过 Web 控制台直接在线编写和调试 Flink SQL,并在完成开发后一键提交到指定的 Flink 集群执行作业,大大降低了实时计算任务的开发和运维成本。 官网地址 https://github.com/DataLinkDC/dinky 功能描述 Dinky 内置 整库同步能力,可以将微服务系统中的数据库表数据同步到实时数仓,从而有效解决微服务架构下的数据孤岛问题。 同时,Dinky 支持 多版本 Flink SQL 的开发与管理,并提供 数据血缘分析能力,帮助开发者更清晰地了解数据流向及依赖关系,便于问题排查与系统维护。 整体来看,Dinky 在实时数据开发、任务管理以及数据治理方面的功能较为完善,是一款非常实用的 Flink 数据开发平台,值得在实时数仓项目中进行使用和推广。
2 min read

Canal 组件

前言 Canal 是阿里巴巴开源的一款 基于 MySQL Binlog 的数据实时订阅与消费组件,常用于实现数据库变更数据捕获(CDC,Change Data Capture)。 在实际业务场景中,数据库中的数据变更往往不仅仅用于业务读写,还可能需要同步到其他系统,例如: * 实时数据同步(数据库 → 数据仓库) * 数据变更推送到 MQ(Kafka / RocketMQ) * 构建实时数据分析或监控系统 * 搜索引擎数据同步(如 Elasticsearch) 为了实现这些能力,Canal 通过 模拟 MySQL Slave 的方式订阅 Binlog 日志,解析出数据库的增删改操作,并将这些变更数据实时推送给下游消费系统,从而实现数据的准实时同步。 目前市面上常见的 CDC 组件主要包括: * Canal * Debezium * Flink CDC Canal 目前只支持MySQL数据库。5.x
2 min read

Polaris Mesh

PolarisMesh 提供了完整的微服务治理能力,是腾讯开源的一站式云原生服务治理平台。平台围绕 服务注册与发现、流量治理、容错保护以及配置管理 等核心能力,为微服务架构提供稳定可靠的运行基础。通过 PolarisMesh,服务实例可以自动完成注册与发现,同时结合智能负载均衡策略,实现请求在多实例之间的合理分配,从而提升系统整体的稳定性与吞吐能力。 PolarisMesh支持多语言、多框架的云原生服务治理平台 服务管理、流量管理、故障容错、配置管理、可观测性 GitHub 查看文档 立即体验 一站式服务治理平台 北极星为服务治理提供一站式解决方案,覆盖服务注册中心、服务网格和配置中心的功能,提供业务监控、流量监控、事件中心和操作记录等全方位的可观测性能力,帮助用户快速构建微服务架构。 支持异构技术栈和环境 通过 Proxyless 和 Proxy 两种形态实现服务发现和治理,提供多语言 SDK、开发框架、Java Agent 和网格代理等接入方式,支持虚拟机、容器和混合云等部署环境,满足不同业务场景和开发模式。 支持常用开发框架 提供
6 min read

阿里 ask 集群

前言 阿里云ASK(Alibaba Cloud ACK)集群是阿里云提供的托管式Kubernetes服务。它基于开源的Kubernetes项目,为用户提供了一个简便易用、弹性伸缩、高可用性和安全可靠的容器化部署和管理平台,相当于无服务器Kubernetes容器服务。您无需购买节点即可直接部署容器应用,无需对集群进行节点维护和容量规划,并且根据应用配置的CPU和内存资源量进行按需付费。ASK集群提供完善的Kubernetes兼容能力,同时降低了Kubernetes使用门槛,让您更专注于应用程序,而不是管理底层基础设施。 什么是容器服务 Serverless 版ACK Serverless_容器服务 Kubernetes 版 ACK-阿里云帮助中心本文介绍阿里云容器服务 Serverless 版的产品简介、核心优势、与ACK集群对比、应用场景、核心功能等信息,帮助您快速了解ACK Serverless集群。 ASK集群中的Pod基于阿里云弹性容器实例ECI运行在安全隔离的容器运行环境中。每个Pod容器实例底层通过轻量级虚拟化安全沙箱技术完全强隔离,容器实例间互不影响。 A
4 min read

架构设计原则

在进行系统架构设计时,通常需要从多个维度综合考虑系统能力。一个优秀的系统架构不仅要满足当前业务需求,还需要能够适应未来的业务增长和技术演进。常见需要重点关注的设计原则包括以下几个方面。 可扩展性 系统设计应该具备良好的可扩展能力,能够支持未来业务增长和需求变化。架构在设计时通常需要采用模块化、分层架构等方式,使系统可以在不影响整体稳定性的情况下方便地增加新功能、扩展数据规模或支持更多用户。 可靠性 系统设计需要具备较高的可靠性,能够保证系统在长期运行中的稳定性和可用性。架构设计通常需要考虑故障恢复机制、容错机制以及数据备份策略,以确保在系统出现异常时能够快速恢复业务。 一个高可靠系统通常需要具备以下能力: * 自动侦测故障 * 自动修复问题 * 自动切换(Failover) 通过这些机制可以最大程度减少系统故障对业务造成的影响。 极致性能 系统架构还需要关注性能设计,确保系统能够快速响应用户请求,并处理大量并发操作。常见的性能优化手段包括: * 合理的数据结构与算法设计 * 缓存机制 * 负载均衡 * 并发控制 在实际系统中,性能通常通过 TP
6 min read

Ent-ORM

前言 Ent 是由 Facebook(现 Meta)开发的一款基于 Go 语言的 ORM 框架。最初 Ent 作为 Facebook 内部项目被设计和实现,用于解决大型系统中数据模型复杂、关系众多以及数据访问层难以维护的问题。随着 Facebook 内部系统规模的不断扩大,传统 ORM 在 类型安全、查询可维护性以及复杂关系建模方面逐渐暴露出一定局限性,因此 Facebook 设计了一套全新的 ORM 方案——Ent。 Ent 的核心理念是 Schema First + Code Generation。开发者首先通过 Go 代码定义数据模型 Schema,然后通过代码生成工具生成完整的数据访问层代码,包括实体结构体、查询构建器、关系操作以及 CRUD 方法。由于大部分逻辑在 编译阶段生成并校验,
5 min read

Kratos

前言 Kratos是一款基于Go语言的开源微服务框架,由Bilibili开源并维护。提供了微服务所需的服务发现,注册,HTTP,GRPC,限流,配置中心等常用功能。框架设计合理,轻量,易上手。 框架优点 1. 高性能 Kratos框架使用Go语言的协程和高效的并发模型,能够支持高并发场景。此外,Kratos框架还使用了自研的GRPC框架,相比其他框架,能够更快地处理请求和响应。 2. 简单易用 Kratos框架提供了丰富的文档和示例,易于上手。框架的设计也非常简单,不需要开发者掌握过多的概念和技术。 3. 模块化设计 Kratos框架提供了一系列的模块,如配置、日志、数据库等,方便开发者快速搭建微服务。此外,Kratos框架还支持插件化开发,可以根据需要自行开发插件,扩展框架的功能。 4. 高度可定制化 Kratos框架提供了丰富的配置选项,可以根据不同的需求进行定制化配置。此外,Kratos框架还支持自定义中间件、拦截器等,开发者可以根据需要进行自行开发。 KratosKratos 具体功能 1. 微服务注册与发现:
4 min read

Neo4j 图形数据库

前言 Neo4j 是一款高性能的图数据库,它采用 图形数据模型(Graph Model) 来存储和处理数据。与传统的关系型数据库相比,Neo4j 更擅长处理复杂关系型数据,特别适用于 关系密集型数据场景。 在很多业务系统中,数据之间往往存在大量关联关系,例如: * 社交网络中的好友关系 * 推荐系统中的用户与商品关系 * 知识图谱中的实体关系 * 网络安全中的攻击路径分析 在这些场景下,如果使用传统关系型数据库进行查询,往往需要大量 Join 操作,查询复杂度和性能都会迅速下降。而图数据库可以直接通过关系进行遍历,因此在处理复杂关系时效率更高。 收费模式 Neo4j Graph Database & Analytics – The Leader in Graph DatabasesConnect data as it’s stored with Neo4j. Perform powerful, complex queries at
3 min read

数据库分类

数据库可以从多个维度进行分类,不同的分类方式反映了数据库在数据模型、处理能力、部署方式、存储介质以及应用场景等方面的差异。理解这些分类,有助于在实际系统架构设计中选择合适的数据库方案 按数据模型分类 关系型数据库(RDBMS) 关系型数据库以表(Table)作为核心数据结构,通过行和列组织数据,并使用 SQL(Structured Query Language) 进行数据查询和管理。 不同表之间通过**主键(Primary Key)和外键(Foreign Key)**建立关系,从而实现复杂的数据关联查询。 特点: * 数据结构清晰,强约束 * 支持复杂查询(Join、聚合等) * 支持事务和 ACID 特性 * 适合结构化数据存储 典型数据库: MySQL、PostgreSQL、Oracle、SQL Server 等。 非关系型数据库(NoSQL) NoSQL(Not
4 min read

防重复提交

使用Token令牌机制可以有效地防止CSRF攻击和重复提交。在提交表单时,服务器会生成一个Token令牌,并将其存储在Redis中。然后,将这个Token令牌作为表单的一个隐藏字段或URL参数传递给客户端。客户端提交表单时,将这个Token令牌一并提交给服务器。服务器在处理表单时,会检查这个Token令牌是否正确,并在处理完表单后删除这个Token令牌。这种方式可以有效地防止重复提交和CSRF攻击,但是需要注意保护Token令牌的安全性,否则可能会被攻击者利用。 Token令牌机制是一种常用的Web应用程序防止重复提交和CSRF攻击的方法。它的基本思想是在每次提交表单时,服务器会生成一个Token令牌,并将其存储在Redis中。然后,将这个Token令牌作为表单的一个隐藏字段或URL参数传递给客户端。客户端提交表单时,将这个Token令牌一并提交给服务器。服务器在处理表单时,会检查这个Token令牌是否正确,并在处理完表单后删除这个Token令牌。 Token令牌机制的实现步骤如下: 在服务器端生成一个Token令牌,并将其存储在Redis中。Token令牌可以使用随机数、UUI
3 min read

Docker 原理

Docker 内部架构可以分为以下几个组件: 组件 描述 Docker Daemon Docker 的主要组件,是一个守护进程,负责管理容器的创建、启动、停止、删除等操作。 Docker Client 与 Docker Daemon 交互的命令行工具,用户可以使用该工具发送命令来操作 Docker 容器。 Docker Registry 存储 Docker 镜像的中央仓库,可以通过 Docker Client 从该仓库中拉取所需的镜像。 Docker Image 容器的基础,是一个只读的文件系统,包含了应用程序、依赖库和配置文件等。可以通过 Dockerfile 文件创建。 Docker Container Docker 镜像的一个实例,包含了一个完整的文件系统、运行时环境和系统工具。 Docker Daemon 和 Docker
6 min read

Mysql 时间四舍五入

MySQL的DATETIME类型是精确到秒的,而Java的LocalDateTime类型是精确到纳秒的。因此,在将MySQL的DATETIME类型存入Java的LocalDateTime类型时,会发生四舍五入的情况。 例如,如果MySQL的DATETIME类型为2022-01-01 12:34:56.789,当它被存入Java的LocalDateTime类型时,会被四舍五入到2022-01-01 12:34:57。 为了避免这种情况,可以使用Java的java.sql.Timestamp类型来存储MySQL的DATETIME类型。这个类型也是精确到纳秒的,与LocalDateTime类型匹配,不会出现四舍五入的问题。
1 min read

数据结构:栈

栈(Stack)是一种先进后出(LIFO)的数据结构,它只允许在栈顶进行插入和删除操作。栈可以用数组或链表来实现。 在栈中,插入和删除操作通常称为入栈(push)和出栈(pop)。当插入一个元素时,它被放置在栈顶,当删除一个元素时,它是从栈顶删除的。栈顶是栈中最新添加的元素,栈底是栈中最早添加的元素。 栈的应用非常广泛,例如,计算机中的函数调用和递归调用都是通过栈来实现的。当一个函数被调用时,它的参数、返回地址和局部变量等信息被压入栈中,当函数返回时,这些信息又从栈中弹出。 以下是栈的基本操作: push(element):将一个元素压入栈顶。 pop():从栈顶弹出一个元素。 top():返回栈顶元素,但不对栈进行修改。 isEmpty():判断栈是否为空。 size():返回栈中元素的个数。 栈的时间复杂度为O(1),因为所有操作都是在栈顶进行的。但是,栈的空间复杂度为O(n),因为需要存储所有元素。 在计算机中,栈(Stack)被广泛应用于函数调用、
2 min read

数据湖 Iceberg

目前比较流行的开源数据湖 Iceberg。 数据湖是一个用于存储结构化和非结构化数据的集中式数据存储库,它可以存储各种类型的数据,包括传统的关系型数据、半结构化数据、非结构化数据等。数据湖的主要特点是具有高度的灵活性和可扩展性,能够方便地进行数据的存储和处理。 相比之下,传统的数据仓库主要用于存储结构化数据,它们通常采用关系型数据库进行存储和管理。数据仓库的主要特点是具有高度的规范化和结构化,能够保证数据的准确性和一致性。但是,数据仓库的缺点在于它们不够灵活,无法存储和处理非结构化或半结构化数据,而且难以进行扩展和升级。 数据湖相比数据仓库的优势主要有以下几点: 1. 存储不受限制:数据湖可以存储各种类型的数据,包括传统的结构化数据、半结构化数据、非结构化数据等。这使得数据湖更加灵活,适用于不同类型和规模的数据存储需求。 2. 处理速度更快:数据湖通常采用分布式存储和计算技术,能够实现高速数据处理和分析。而传统的数据仓库则往往需要进行多次数据转换和计算,导致处理速度较慢。 3. 成本更低:数据湖通常采用开源技术,如Hadoop、Spark等,成本相对较低,而传统的数据仓库
4 min read

Flink CDC 组件

背景 Flink CDC(Change Data Capture)是 Apache Flink 生态中的一个重要组件,用于实时捕获数据库中的数据变更,并将这些变更转换为数据流进行处理。在现代数据架构中,CDC 技术被广泛用于构建实时数据同步、实时数据仓库以及事件驱动系统。 与传统的数据同步方式(如定时全量同步)相比,CDC 能够通过读取数据库的 Binlog / WAL 等变更日志 来捕获数据变化,从而实现低延迟、低侵入的数据同步。 什么是 CDC CDC(Change Data Capture)即 变更数据捕获,它的核心思想是: 当数据库中的数据发生 INSERT / UPDATE / DELETE 操作时,将这些变化记录下来,并实时传递到下游系统。 在实际的数据架构中,CDC 常用于: * 数据库 → 数据仓库(实时数仓) * 数据库
3 min read

常见 Ingress 对比

本次来对比一下k8s集群中经常使用到的一些 ingress 组件,ingress 它充当了集群中 HTTP 和 HTTPS 流量的入口点。Ingress 可以将流量路由到 Kubernetes 集群内的不同 Service 上,从而实现负载均衡和流量控制的功能。 Ingress 的工作原理是通过将 HTTP 和 HTTPS 请求映射到 Service 上来实现的。在 Kubernetes 中,Service 是一种用于将流量路由到 Pod 的资源对象。当 Ingress 接收到来自外部的 HTTP 或 HTTPS 请求时,它会根据请求中的主机名和路径信息,在 Ingress 规则中进行匹配,并将请求路由到相应的 Service 上。 要使用 Ingress,需要先安装 Ingress 控制器。
2 min read

初探 Server-Mesh

前言 本次技术分享只做技术宏观思维与认知上的分享,具体配置细节与部署不在此次讨论范围。 讨论点: 1、微服务的局限性 2、了解 Server-Mesh 功能与实现方式 3、目前基于 Server-Mesh 而实现的 Serverless 我们最熟悉,最常用的 Java,Spring-Cloud,Spring-Cloud-Alibaba 等技术体系,归属于传统微服务的架构设计,此设计存在SDK强耦合问题,每次底层SDK版本的更新极大可能影响到业务层面的服务稳定性。SDK与代码环境强耦合,就会存在居多限制,不能完整的运用市面上不同语言与其对应的生态组件来做更擅长的领域,例如:灵活快速的Go,Python语言并对应其携程,爬虫,神经网络等等组件。严谨并且0垃圾回收的Rust语言,更适合企业级中间件高效率低内存占用场景。所以每种语言有它各自的优势与生态环境,以更长远的发展来看,大体量的龙头企业将会把业务部署与实现落地到不同的语言上进行迭代是一种趋势。 传统微服务体系图: 并且如今JVM引以为傲的跨操作系统优势,其特性也被K8S,Docker,Containerd,CRI-O,K
19 min read

线程池核心线程数-计算方式

线程池的工况一般分为三种场景: 计算密集型 需要大量的计算,对 CPU 高占用率,CPU Loading 90-100%,除开 CPU需要读/写I/O(硬盘/内存),但这些 I/O 只需要很短的时间就可以完成,更多的是 CPU 需要进行很多数据运算,数学运算,CPU Loading 很高的场景。 例如数据分析,数据流处理,此类程序运行的过程中,CPU占用率一般都很高。 假如在单核CPU情况下,线程池有6个线程,但是由于是单核CPU,所以同一时间只能运行一个线程,考虑到线程之间还有上下文切换的时间消耗,还不如单个线程执行高效。所以,单核 CPU 处理计算密集型程序,就不要使用多线程了。 假如是6个核心的CPU,设置6个线程数,理论上运行速度可以提升6倍(但实际上达不到,多线程之间有并发以及需要优化的地方)。每个线程都有 CPU 来运行,并不会发生等待
5 min read

InnoDB 之 BufferPool 详解

BufferPool官方文档: MySQL :: MySQL 8.0 Reference Manual :: 15.5.1 Buffer Pool 在InnoDB存储引擎中,为了提高MySQL服务性能,减少磁盘IO次数,故此所有的DML操作均是在内存中的 BufferPool 中完成。最后通过服务的异步刷盘策略把修改数据落盘到磁盘中。 为什么需要设计 BufferPool ?这里我想一般有计算机基础知识的人都知道,内存和硬盘的效率是天差地别的,对于CPU来说硬盘的传输以及响应时间性能太低下,故此 MySQL 设计出了 BufferPool 来映射磁盘中的真实数据,并在内存中进行数据的管理与操作,这样执行DML语句的效率不就起飞了吗?至于是如何保障内存中的 BufferPool 数据在宕机,掉电的场景不会出现丢失(物理打击除外😃,大力出奇迹,硬盘都给你扬了),之前我的文章中也有所讲解: MySQL 执行链路当客户端SQL语句提交给 MySQL 服务器时首先需要建立连接,连接器会与客户端进行连接,并校验用户身份信息,权限信息,如果权限通过,则通过SQL分析器对SQL语句进行语义分
17 min read

随心笔记

技术无止境 创新不停驻