- 项目落地 - 《选择项目工具的方法论》
本文属于专栏《构建工业级QPS百万级服务》
提纲:
- 选择大概率能完成业务目标的工具
- 选择最适合的工具
- 制作最适合的工具
本文所说的项目工具,泛指业务软件开发,所依赖的第三方提供的成熟的资源。包括但不限于开发语言、编辑工具、编译工具、三方库、方法论。使用项目工具的目的是为了按时高质量完成项目。
第一阶段:选择大概率能完成业务目标的工具。这里为什么不是选择每个环节都用最优的工具,如果能做到,当然最好。但是一个人的知识是有局限的,而环境是不断变化的,做到每个环节最优,是需要大量精力,且需要承担风险的,另外不同的工具最擅长解决不同的问题,在工程初期,我们很难预估所有的关键问题在哪里。
一个实践的例子是。在2020年的时候,我负责设计搭建一个新的服务,其中json解析的工具,我选择了RapidJson,而实际上性能显著提升的simdjson、yyjson在2019年、2020年相继出现了,从今天的角度回看,似乎我的选型是错误的。但是引入没有经过大量使用和验证的三方库,是有风险的,比如稳定性是否足够,在极端情况下的性能和正确性。这些都是需要花精力去验证的,项目中有很多依赖项,我的资源和时间不足以去做这么详细的论证,在大部分的工业软件中,我们也没法做到完美。选择大概率没问题的工具,适用于项目中大部分的环节。
站在2024年2月的时间点,如果现在需要开发一个同样的服务,我是如何选择用什么库解析呢。首先目前各自的官网上,simdjson给的性能测试如图1,yyjson给的性能测试如图2。处于一个各自说自己好的情况,我相信测试结论,但是得到结论所使用的各自的应用版本和输入数据集不同,所以是各自有擅长的场景。截止2024年2月17日,simdjson在github的🌟是18.1k,而yyjson是2.8k,当然这不能说明simdjson比yyjson好,但是这能说明,大概率,在大部分场景simdjson比yyjson更好。
图1
图2
第二阶段:选择最适合的工具。选择大概率正确的工具,核心原因是因为资源和时间不够。但如果,我的服务大部分CPU都用在了json解析上,那大概率正确就不够了,在关键的环节,我们应该显著倾斜更多的资源。这个时候我们需要依赖我们的业务特性做详细的验证和测试,对含有大量的数字的json数据,与含有大量字符的json数据,不同库表现是不一样的。最好的办法是,积累大量的线上数据,做离线的情况下,做验证。有时候这种验证没有办法做,因为前置链路在架构设计初期,还没有数据,所以我们只能被迫回退到选择大概率能完成项目目标的工具。
第三阶段:制作最适合的工具。市面上工具,是针对大部分问题的通用解决方案。不一定是每个业务的最优解,在深入解决业务关键问题的时候,认识到问题的本质,才能找到最合适的办法。比如在业务中,数据协议的作用是让上下游通过确定的协议解析网络的二进制数据,那就不要把视野局限在json协议上,自定义的二进制协议获取更快。比如业务中传输的一连串id,json格式为:{"UserIDs": "123,232,4434,2342"}。为了极致的性能我们的数据规格可以改为"4,123,232,4434,2342",代表着,有4个id,分别是123,232,4434,2342。这里一共是1个2字节的数字,加上4个4字节的数字,解析的时候按字节解析。虽然我们自己设计的协议不通用,不易读,但是性能好,也就是在业务中,我们增加了程序复杂度,减少了资源成本。而这里没有最优,只有最适合。
相关文章:

- 项目落地 - 《选择项目工具的方法论》
本文属于专栏《构建工业级QPS百万级服务》 提纲: 选择大概率能完成业务目标的工具选择最适合的工具制作最适合的工具 本文所说的项目工具,泛指业务软件开发,所依赖的第三方提供的成熟的资源。包括但不限于开发语言、编辑工具、编译工具、三方…...

美国突然致敬中本聪
作者:秦晋 有点看不懂美国的神操作。 2月16日,据《Bitcoin Magazine》报道,比特币的竞争对手、美国参议员伊丽莎白-沃伦对比特币的立场突然180度大转弯。由反对立场转为支持立场。让很多行业媒体出乎意料,甚至惊掉下巴。 报道称&a…...

精品springboot基于大数据的电脑主机硬件选购助手-可视化大屏
《[含文档PPT源码等]精品基于springboot基于大数据的电脑主机硬件选购助手[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功! 软件开发环境及开发工具: Java——涉及技术: 前端使用技术&a…...
全量和已占用字符集 、字符串统计
题目描述: 全量和已占用字符集 、字符串统计(分值100) 给定两个字符集合,一个是全量字符集,一个是已占用字符集,已占用字符集中的字符不能再使用。 要求输出剩余可用字符集。 输入描述 输入一个字符串 一…...

什么是智慧公厕,智慧公厕有哪些功能
1.什么是智慧公厕? 随着智慧城市的快速发展,公共厕所作为城市基础设施的一部分,也在逐步升级转型。那么,什么是智慧公厕?智慧公厕作为智慧城市的重要组成部分,将公共厕所的建设、设计、使用、运营和管理等…...

给定n个结点m条边的简单无向图,判断该图是否存在鱼形状的子图:有一个环,其中有一个结点有另外两条边,连向不在环内的两个结点。若有,输出子图的连边
题目 思路: #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e18 * 3, maxm 4e4 …...

深入理解lambda表达式
深入理解ASP.NET Core中的中间件和Lambda表达式 var builder WebApplication.CreateBuilder(args); var app builder.Build(); app.Use(async (context, next) > { // Add code before request. await next(context);// Add code after request.}); 这段C#代码是用于设…...

删除 Windows 设备和驱动器中的 WPS网盘、百度网盘等快捷图标
在安装诸如WPS软件、百度云盘、爱奇艺等客户端后,Windows 的“我的电脑”(或“此电脑”)中的“设备和驱动器”部分会出现对应的软件图标。这种情况被许多技术人员视为不必要的干扰,因此许多用户想要知道如何隐藏或删除这些图标。 …...

【深度学习:DICOM 注释工具】在 DICOM 注释工具中寻找的 7 个功能
【深度学习:DICOM 注释工具】在 DICOM 注释工具中寻找的 7 个功能 原生 DICOM 支持原生 3D 注释易于使用的界面DICOM 图像的自动注释质量控制功能审计跟踪SOC2 和 HIPAA 合规性 如果您尝试为医疗 AI 模型创建训练数据,您可能已经使用了免费的开源工具&am…...
Spring Boot与Kafka集成教程
当然可以,这里为您提供一个简化版的Spring Boot与Kafka集成教程: 新建Spring Boot项目 使用Spring Initializr或您喜欢的IDE(如IntelliJ IDEA, Eclipse等)新建一个Spring Boot项目。 添加依赖 在项目的pom.xml文件中,…...

基于飞腾ARM+FPGA国产化计算模块联合解决方案
联合解决方案概述 随着特殊领域电子信息系统对自主创新需求的日益提升,需不断开展国产抗恶劣环境计算整机及模块产 品的研制和升级。特殊领域电子信息系统的自主创新,是指依靠自身技术手段和安全机制,实现信息系统从硬 件到软件的自主研发…...

关于DVWA靶场Could not connect to the database service的几种解决办法
总的来说这个问题都是 config 配置文件没有修改正确 一般修改数据库的用户名和密码与 phpstudy 一致并且添加了 key 就能初始化成功的 但是我还遇到过另一种情况,修改了上面的东西依旧无法连接到数据库 Could not connect to the database service. Please check …...
已解决ModuleNotFoundError: No module named ‘paddle‘异常的正确解决方法,亲测有效!!!
已解决ModuleNotFoundError: No module named paddle异常的正确解决方法,亲测有效!!! 文章目录 问题分析 报错原因 解决思路 解决方法 总结 在人工智能和深度学习领域,PaddlePaddle是由百度发起的开源平台&#…...

并发编程之深入理解JVM并发三大特性
并发编程之深入理解JVM&并发三大特性 并发编程解决的问题 多线程同步(一个线程需要等待另一个线程的结果,一个线程依赖于另一个线程),互斥(一个资源只能一个线程使用),分工(…...

helm部署gitlab-runner问题解决
关于.gitlab-ci.yml中build镜像时,docker守护进程未启动错误 问题截图 解决方法 conf.toml添加 [[runners.kubernetes.volumes.host_path]]name "docker"mount_path "/var/run/docker.sock"read_only falsehost_path "/var/run/dock…...

[嵌入式系统-28]:开源的虚拟机监视器和仿真器:QEMU(Quick EMUlator)与VirtualBox、VMware Workstation的比较
目录 一、QEMU概述 1.1 QEMU架构 1.2 QEMU概述 1.3 什么时候需要QEMU 1.4 QEMU两种操作模式 1.5 QEMU模拟多种CPU架构 二、QEMU与其他虚拟机的比较 2.1 常见的虚拟化技术 2.1 Linux KVM 2.2 Windows VirtualBox 2.3 Windows VMware workstation 三、VirtualBox、VM…...

计算机组成原理:存储系统【三】
🌈个人主页:godspeed_lucip 🔥 系列专栏:计算机组成与原理基础 🚀1 只读存储器ROM✈️1.1 总览✈️1.2 各种ROM✈️1.3 计算机内部重要的ROM✈️1.4 总结 🚀2 主存储器与CPU的连接🛩️2.1 总览&…...
学习Android的第十三天
目录 Android TextClock 文本时钟控件 TextClock 控件主要属性和方法 简单的 TextClock 参考文档 Android AnalogClock 控件 AnalogClock 属性 Android Chronometer 计时器 Chronometer 属性 Chronometer 主要方法 范例: 完整的计时器 范例: …...

【开源】SpringBoot框架开发学校热点新闻推送系统
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 新闻类型模块2.2 新闻档案模块2.3 新闻留言模块2.4 新闻评论模块2.5 新闻收藏模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 新闻类型表3.2.2 新闻表3.2.3 新闻留言表3.2.4 新闻评论表3.2.5 新闻收藏表 四、系统展…...

代码随想录刷题笔记 DAY 28 | 复原 IP 地址 No.93 | 子集 No.78 | 子集 II No.90
文章目录 Day 2801. 复原 IP 地址(No. 93)1.1 题目1.2 笔记1.3 代码 02. 子集(No. 78)2.1 题目2.2 笔记2.3 代码 03. 子集 II(No. 90)3.1 题目3.2 笔记3.3 代码 Day 28 01. 复原 IP 地址(No. 9…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
高防服务器价格高原因分析
高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...