天火技术博客

Coding for Free

BasicAI 标注数据质检实现方案
qa

BasicAI 标注数据质检实现方案

BasicAI 是全球首个开源多模态训练数据平台,通过提供 AI 赋能的软件工具、数万项目提炼的本体中心和丰富的数据治理特性,来加速多模态训练数据的处理效率,进而提高 AI 工程师的建模效率。 业务背景在现今 AI 大模型流行的时代,大部分算法都是开源的,用于训练模型的标注数据的质量变得尤为重要。要想得到高质量的人工标注数据,需要对标注数据进行全方位质检,比如检查标注对象属性是否缺失、标注对象大小是否满足需求、标注对象重叠程度等。标注对象数据量非常大,一个包含 100 万个 Data 的数据集,假设每个 Data 标注出 30 个对象,那么就会产生 3000 万个对象,对于拥有成千上万数据集的 BasicAI SaaS,很容易就会达到百亿,甚至千亿级别。要对这么大的数据量进行分析,只能求助于大数据系统,然而传统的基于 Hadoop 生态的大数据系统过于复杂,不适合小团队和简单业务场景,经过调研分析,最终我们选择了 Doris 这款 OLAP

BasicAI 工作流标注绩效实现方案
performance

BasicAI 工作流标注绩效实现方案

BasicAI SaaS 的工作流标注是为了满足专业的标注团队对大量数据进行标注,既然是团队工作,那么就需要监管团队成员的工作进度和质量,也就是工作绩效管理。由于工作绩效需要细到标注对象(Object)的粒度,并且还需要按工作阶段和时间周期统计,导致计算逻辑非常复杂,并且计算量也很大。工作绩效还用于给标注人员结算工资,因此其准确性要求也很高。

企业数据中台建设指南
数据中台

企业数据中台建设指南

最近几年,数据中台的概念满天飞,但很多企业仍然没有完全理解什么是数据中台,以及如何建设数据中台。本文首先从大数据发展历史的角度,引出数据中台出现的必然性,并将其和数据仓库、大数据平台进行了对比。然后给出了一份建设数据中台的指南,包括什么样的企业需要数据中台,以及建设数据中台需要的方法论、技术支撑和组织架构。

企业数据仓库技术架构
数据仓库

企业数据仓库技术架构

数据仓库自上世纪九十年代提出以来,技术架构一直在不断更新,尤其是进入二十一世纪以来,随着大数据相关技术的发展,数据仓库架构经历了多次升级。本文首先讲解了数据仓库的一些基本知识,包括什么是数据仓库、数据仓库和数据库的区别、数据仓库中的一些基本概念,以及数据仓库包含的层级,接着对各代数据仓库的架构一一进行讲解,从传统数仓,到大数据数仓,再到实时数仓,直到最新的湖仓一体。

Kubernetes + GitLab 微服务应用自动化部署
kubernetes

Kubernetes + GitLab 微服务应用自动化部署

Docker 简化了单个服务的部署,Kubernetes 通过强大的容器编排能力使得运维人员可以轻松管理成千上万的容器,这些容器归属于多个服务,而这些服务又组合形成了多个应用。从代码到运行中的应用,需要经历构建、打包、测试和部署等阶段,如果每个步骤都手动执行,无疑会消耗研发人员的大量时间。本文讲解如何使用 GitLab CI/CD 来自动部署微服务应用到 Kubernetes 集群。

Spring Cloud 微服务开发指南
spring cloud

Spring Cloud 微服务开发指南

如同 Spring Boot 在 Java Web 开发领域中的统治地位,Spring Cloud 在 Java 微服务应用开发领域中同样处于垄断地位。软件系统从单体升级到微服务架构,随之会出现各种分布式系统所特有的问题,包括服务注册发现、认证授权、限流熔断、调用追踪等。Spring Cloud 提供了各种组件来解决这些问题,本文将通过升级改造一个单体 API 服务为微服务架构来讲解部分核心组件的用法。

Spring Boot API 服务测试指南
spring boot

Spring Boot API 服务测试指南

Spring Boot 除了简化了 Spring 应用的开发,同时也简化了 Spring 应用的测试。它内置支持各种常用测试工具,包括 Spring Test、JUnit、TestNG、Mockito、AssertJ 等。本文将讲解如何编写单元测试和集成测试来保障 Spring Boot API 应用不同层级代码的质量,其中会涉及到使用嵌入式的 H2 数据库来测试 Repository,通过 Mock 依赖接口来对用例进行单元测试,以及对应用整体进行 API 集成测试。

Spring Boot API 服务开发指南
spring boot

Spring Boot API 服务开发指南

Spring Boot 大大简化了使用 Spring 框架开发 Web 应用时的配置工作,使用它只需添加相关依赖包,即可通过零配置或少量配置来运行一个 Web 应用。本文将使用 Spring Boot 来开发一个 API 服务,同时支持 REST 和 GraphQL 两种协议。内容包括使用 Querydsl 来替换 JPQL 以便以类型安全的方式动态构建 SQL,配置 Spring Security 以支持 REST API 认证授权,使用切面来保障 GraphQL API 的安全性,以及使用干净架构来保障业务代码的稳定性和可测试性。

干净架构最佳实践
干净架构

干净架构最佳实践

干净架构(The Clean Architecture)是 Bob 大叔在 2012 年提出的一种适用于复杂业务系统的软件架构方式。干净架构的理念非常精炼,其中最核心的就是向内依赖原则。由于其并没有规定实施细节,因此采用不同语言和框架的软件系统都可以采用这种架构方式。这带来了很大的灵活性,但同时也增加了开发人员的实践难度。本文以一个 Java 语言(Spring Boot 框架)开发的 API 服务,以及一个 Dart 语言(Flutter 框架)开发的移动应用为例,来阐述干净架构的具体实施,期望对大家理解干净架构有所帮助。

使用 IoC 容器来简化业务对象的管理
控制反转

使用 IoC 容器来简化业务对象的管理

有过复杂业务应用编写经验的开发人员都知道业务对象的创建是一件比较麻烦的事儿。这些应用中存在着大量的业务对象,它们之间有着复杂的依赖关系,导致模块之间很容易出现循环依赖。此外,有些对象还有单例要求,依赖之间还有顺序要求,这些更加重了问题的严重性。这种情况下就需要有一种手段来简化业务对象的管理,包括创建和获取,IoC(Inversion of Control)容器正是为此而生。IoC 容器要求被管理的对象支持依赖注入(Dependency Injection),以便给这些对象注入其依赖的对象。本文先对控制反转和依赖注入的概念作简单介绍,然后重点讲解它们在各种语言里的实际用法。

云原生监控系统 Prometheus 入门
prometheus

云原生监控系统 Prometheus 入门

Prometheus 是一个开源监控系统,它前身是 SoundCloud 的告警工具包。从 2012 年开始,许多公司和组织开始使用 Prometheus。该项目的开发人员和用户社区非常活跃,越来越多的开发人员和用户参与到该项目中。目前它是一个独立的开源项目,且不依赖于任何公司。为了强调这点和明确该项目治理结构,Prometheus 在 2016 年继Kurberntes 之后,加入了 云原生计算基金会(Cloud Native Computing Foundation)。 Prometheus 介绍 主要特性 之所以 Prometheus 现在这么受欢迎,主要是因为它具备如下特性: 多维度数据模型 灵活的查询语言 不依赖任何分布式存储 常见方式是通过拉取方式采集数据 也可通过中间网关支持推送方式采集数据 通过服务发现或者静态配置来发现监控目标 支持多种图形界面展示方式 系统架构 下面这张图描述了 Prometheus 的整体架构,以及其生态中的一些常用组件。 Prometheus Server 采用拉取方式从监控目标直接拉取数据,或者通过中间网关间接地拉取监控目标推送给网关的数据。它在本地存储抓取的数据,

Netty 高性能网络协议服务器开发
netty

Netty 高性能网络协议服务器开发

本文通过一个实例来讲解如何使用 Netty 框架来开发网络协议服务器,项目使用 Gradle 工具来构建和运行,并且支持 Docker 部署。项目代码已在 GitHub 开源,JW Netty Demo。 Netty 简介 Netty 是一个异步、事件驱动的网络应用框架,使用它可以快速开发出可维护良好的、高性能的网络协议服务器。它大幅简化和流程化了网络编程,比如 TCP 和 UDP 套接字服务器开发。难能可贵的是,在保证快速和易用性的同时,使用 Netty 开发的应用并没有丧失可维护性和性能。 上图是来自于官网的 Netty 架构图,可以看到整体结构非常清晰,每一层各司其职。 项目介绍 本项目实现了一个用来接收和存储传感器数据的 TCP 网络协议服务器。这些数据由连接在硬件设备上的传感器采集,然后由硬件设备上报到服务器。一个硬件设备可以连接多个传感器,每次上报硬件设备会把所有传感器的数据一并上报。服务端需要计算所有传感器数据的平均值,并保存起来。这是一个典型的物联网数据采集场景。 协议

使用 VS Code 来开发和调试 Python 程序
vscode

使用 VS Code 来开发和调试 Python 程序

Visual Studio Code(简称 VSCode)是微软出品的一款支持多种语言的免费 IDE(集成开发环境)。VSCode 轻量而强大,支持 Windows、macOS 和 Linux。内置支持 JavaScript、TypeScript 和 Node.js,并且拥有一个丰富的插件生态系统来支持其它语言(C/C++、C#、Java、Python、PHP、Go 等)和运行时(.Net 和 Unity 等)。本文将讲解如何使用 VSCode 来进行 Python 开发。 安装和配置 VSCode 的安装很简单,从官网下载对应平台的安装包,然后按照正常软件一样安装即可。后面操作的快捷键将以 macOS 平台为例,Windows 平台对应的快捷键大多数只需把

Tornado API 服务开发
tornado

Tornado API 服务开发

本文讲述如何使用 Tornado Web 框架来开发一个简单的 API 服务,以及如何使用 Docker 工具来构建镜像和部署服务。项目代码已在 GitHub 开源,JW Tornado Demo。 Tornado 介绍 Tornado 是一个 Python Web 框架,同时也是一个异步网络库。通过使用非阻塞网络 IO,它可以轻松处理上万连接,这使得它非常适合长轮询、WebSockets,以及需要为每一个用户维护一个连接的应用。 Tornado 还实现了 HTTP 协议的客户端(AsyncHTTPClient)和服务端(HTTPServer),可以用它来发起和接收 HTTP 请求。因为它提供了 HTTPServer,所以用它编写的 HTTP 服务(亦即 Web 应用)不再依赖其它应用容器(比如 Gunicorn)