- 项目落地 - 《选择项目工具的方法论》

news/2024/4/18 17:51:04

        本文属于专栏《构建工业级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更好。

2d695212e8e1490c9d7bc73375c1aa83.png

图1 

2e00288d8ae54b968979c3a3d1be730f.png

图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字节的数字,解析的时候按字节解析。虽然我们自己设计的协议不通用,不易读,但是性能好,也就是在业务中,我们增加了程序复杂度,减少了资源成本。而这里没有最优,只有最适合。


http://www.ppmy.cn/news/1354674.html

相关文章

【漏洞复现-通达OA】通达OA down 未授权员工信息泄露漏洞

一、漏洞简介 通达OA(Office Anywhere网络智能办公系统)是中国通达公司的一套协同办公自动化软件。通达OA down 未授权员工信息泄露漏洞。 二、影响版本 ● 通达OA2017-v11.10 三、资产测绘 ● hunter:app.name"通达 OA" ● 登…

uni-app使用uView打开弹出层后输入框聚焦时placeholder错位问题

这里就不放效果了,大概意思就是在使用uView的popus时,在底部弹出后,如果弹窗中的输入框会造成一瞬间的placeholder文字错位,这个问题的主要是因为uView安全区适配导致 uView相关文档 https://www.uviewui.com/components/safeAr…

tushare DataFrame has no attrbute append

执行 df3 ts.get_k_data(code600519,start2007-01-01) print(df3) 报错如下&#xff1a; Traceback (most recent call last):File "E:\study\git\pythons\test\test_basic_grama\panda_test\test_panda.py", line 29, in <module>df3 ts.get_k_data(code…

stm32--笔记

一、引脚与变量 ​​​​​​​​​​​​​​ 二、STM32时钟 [STM32-时钟系统详解_stm32时钟_KevinFlyn的博客-CSDN博客] 三、定时器中断实验 1、定时器中断实验 ​ stm32关于通用定时器的周期、频率计算公式_stm32tim频率计算_胶囊咖啡的博客-CSDN博客 ​ 【STM32】通用…

Conda管理Python不同版本教程

Conda管理Python不同版本教程 目录 0.前提 1.conda常用命令 2.conda管理python库 不太推荐 pyenv管理Python不同版本教程&#xff08;本人另一篇博客&#xff0c;姊妹篇&#xff09; 0.前提 ①anaconda、miniconda&#xff08;2个的下载仓库&#xff09;在win上推荐前者&a…

10个常考的前端手写题

1. 实现一个简单的 JavaScript 函数&#xff0c;用于判断一个对象是否为空&#xff1a; 判断对象是否为空的函数 这个函数通过遍历对象的所有属性来检查是否有任何实际定义的键。如果在循环中找到了一个键&#xff0c;则立即返回false&#xff0c;表示对象不为空。如果没有找到…

K8s服务发现组件之CoreDNS/NodeLocalDNS /kubeDNS

1 coredns 1.1 概述 1.1.1 什么是CoreDNS CoreDNS 是一个灵活可扩展的 DNS 服务器&#xff0c;可以作为 Kubernetes 集群 DNS&#xff0c;在Kubernetes1.12版本之后成为了默认的DNS服务。 与 Kubernetes 一样&#xff0c;CoreDNS 项目由 CNCF 托管。 coredns在K8S中的用途,…

yum仓库及NFS共享

一、yum仓库简介 1.1 yum实现过程 要有安装包 1.光驱里自带 挂载提供软件包 2.网络下载到本地 3.直接通过网络 1.2 如何实现安装服务 1.yum客户端根据配置文件再yum服务端找到仓库位置 2.yum服务端下载元信息给yum客户端 3.yum客户端找到对应的包的位置给yum服务端 4.yum服务端…

STM32的三种下载方式

之前在keil4下实现了串口和JLINK下载方式&#xff0c;最近尝试STLINK方式&#xff0c;结果ST下载完成后没有反应。 于是将JLINK重新拿出来&#xff0c;结果在台式机上成功的两个案例&#xff0c;在新的笔记本上又嗝屁了。 报Keil jlink cannot load driver JL2CM3.dll错误 找…

【c++】list详细讲解

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟悉list库 > 毒鸡汤&#xff1a;你的脸上云淡…

web前端项目-进击的玉兔【附源码】

进击的玉兔 【进击的玉兔】是一款基于Web前端技术的游戏&#xff0c;其主题和背景与中国的传统文化和神话有关。在游戏中&#xff0c;玩家需要通过解决各种难题和挑战来收集月饼&#xff0c;最终达成游戏目标。 运行效果&#xff1a; HTML源码&#xff1a; <!DOCTYPE h…

【设计模式】4、策略模式

文章目录 一、问题二、解决方案2.1 真实世界的类比2.2 策略模式结构2.3 适用场景2.4 实现方式2.5 优缺点2.6 与其他模式的关系 三、示例代码3.1 go 策略模式是一种行为设计模式&#xff0c;它能定义一系列算法&#xff0c;把每种算法分别放入独立的类中&#xff0c;以是算法的对…

分析:香港2亿港元诈骗案的风险特征及技术检测思路

目录 深度伪造带来的新挑战 如何有效检测深度伪造&#xff1f; 多管齐下的安全策略 据香港公共广播公司报道&#xff0c;一家跨国公司香港分行的一名员工在一次电话会议后被骗支付了2亿港元&#xff08;超过2500万美元&#xff09;的资金。 据介绍&#xff0c;这起骗局始于202…

如何在Django中使用分布式定时任务并结合消息队列

如何在Django中使用分布式定时任务并结合消息队列 如何在Django中使用分布式定时任务并结合消息队列项目背景与意义实现步骤1. 安装Celery和Django-celery-beat2. 配置Celery3. 配置Django-celery-beat4. 定义定时任务5. 启动Celery worker 和 beat6. Celery 指令7. 对接消息队…

Effective Objective-C 学习(三)

理解引用计数 Objective-C 使用引用计数来管理内存&#xff1a;每个对象都有个可以递增或递减的计数器。如果想使某个对象继续存活&#xff0c;那就递增其引用计数&#xff1a;用完了之后&#xff0c;就递减其计数。计数变为 0时&#xff0c;就可以把它销毁。 在ARC中&#xf…

元宇宙专题:元宇宙概念娱乐应用场景案例研究报告 - 体验驱动篇

今天分享的是元宇宙系列深度研究报告&#xff1a;《元宇宙专题&#xff1a;元宇宙概念娱乐应用场景案例研究报告 - 体验驱动篇》。 &#xff08;报告出品方&#xff1a;艾瑞咨询&#xff09; 报告共计&#xff1a;51页 避免刻舟求剑地探索元宇宙概念产品 对于任何一个宏大而…

排序前言冒泡排序

目录 排序应用 常见的排序算法 BubbleSort冒泡排序 整体思路 图解分析 ​ 代码实现 每趟 写法1 写法2 代码NO1 代码NO2优化 时间复杂度 排序概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递…

南非公司注册优势 南非公司开户 南非公司年审

南非公司注册优势 1、南非是非洲蕞大的经济体&#xff0c;具有巨大的市场潜力&#xff1b; 2、南非对外国投资提供多项优惠政策&#xff0c;包括土地租赁优惠、技术支持等&#xff1b; 3、南非拥有非洲蕞优-质的基础设施&#xff0c;包括交通运输、电力供应和通信网络等&…

XMall 开源商城 SQL注入漏洞复现(CVE-2024-24112)

0x01 产品简介 XMall 开源电商商城 是开发者Exrick的一款基于SOA架构的分布式电商购物商城 前后端分离 前台商城:Vue全家桶 后台管理:Dubbo/SSM/Elasticsearch/Redis/MySQL/ActiveMQ/Shiro/Zookeeper等。 0x02 漏洞概述 XMall 开源商城 /item/list、/item/listSearch、/sys/…

阿里文档类图像的智能识别,文档分类自定义分类器

阿里云文档类图像智能识别服务为用户提供了强大的文档处理能力&#xff0c;可以将文档图像中的文本内容、表格数据和结构化信息自动识别并提取出来。而自定义分类器则允许用户根据自己的需求&#xff0c;训练出更适合自己场景的文档分类模型。本文将详细介绍阿里云文档类图像智…