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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/392243.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

怎样让MCU/SFU视频会议ovmedia 接入GB28281监控视频参会互动

在国内视频应用对GB监控接入是常规操作,很多系统需要接入监控视频交互处理。我们以ovmedia视频会议为例做一个接入互动。 GB28181协议在流媒体系统较为普及,我们以开源SRS系统对接监控端再接入会议(也可以用商用GB流平台,操作基本…

Midjourney绘图欣赏系列(五)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子,它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同,Midjourney 是自筹资金且闭源的,因此确切了解其幕后内容尚不…

React18原理: React核心对象之ReactElement对象和Fiber对象

React中的核心对象 在React应用中,有很多特定的对象或数据结构.了解这些内部的设计,可以更容易理解react运行原理列举从react启动到渲染过程出现频率较高,影响范围较大的对象,它们贯穿整个react运行时 如 ReactElement 对象如 Fi…

OpenAl 视频生成模型 —— Sora技术报告解读

这里是陌小北,一个正在研究硅基生命的碳基生命。正在努力成为写代码的里面背诗最多的,背诗的里面最会写段子的,写段子的里面代码写得最好的…厨子。 写在前面 早上醒来,就看到OpenAl推出的视频模型Sora炸锅了,感觉所…

Windows环境部署nginx 文件服务器

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 在Windows环境下使用nginx部署简单的文件服务器 一、版本 1. Windows 使用版本 2. nginx 使用版本 选择Mainline Version版本 二、nginx配置 1. 下载 https://nginx.org/en/download.…

leetcode日记(31)缺失的第一个正数

挺简单的困难题 class Solution { public:int firstMissingPositive(vector<int>& nums) {sort(nums.begin(),nums.end());int nnums.size();int i0;bool b0;if(nums[0]>0) b1;int p1;for(;i<n;i){if(i1>0&&i1<nums.size()&&nums[i]<…

Switch开关(antd-design组件库)简单使用

1.Switch开关 开关选择器。 2.何时使用 需要表示开关状态/两种状态之间的切换时&#xff1b; 和 checkbox 的区别是&#xff0c;切换 switch 会直接触发状态改变&#xff0c;而 checkbox 一般用于状态标记&#xff0c;需要和提交操作配合。 组件代码来自&#xff1a; 开关 Swit…

专业140+总410+合工大合肥工业大学833信号分析与处理综合考研经验电子信息与通信工程,真题,大纲,参考书。

经过一年努力奋战&#xff0c;今年初试总分410&#xff0c;其中专业课833信号分析与处理综合&#xff08;ss和dsp&#xff09;140&#xff08;感谢信息通信Jenny老师去年的悉心指导&#xff09;&#xff0c;数一130&#xff0c;顺利上岸&#xff0c;被合工大录取&#xff0c;看…

18-k8s控制器资源-cronjob控制器

job控制器是执行完一次任务&#xff0c;就结束&#xff1b; cronjob控制器&#xff0c;是基于job控制器&#xff0c;定期频率性执行任务&#xff1b;等同于linux系统中的crontab一样&#xff1b; 1&#xff0c;编辑cronjob资源清单 [rootk8s231 pi]# vim cronjob.yaml apiVers…

【Python如何在列表中随机抽出一个元素】

1、python代码如下&#xff1a; import random a [2, 4, 8, 9, "whats up"] q random.choice(a) # 随机从列表a中输出一个元素 b random.choices(a) # 随机从列表a中取出一个元素输出一个列表 lucky_num random.randint(1, 50) # 随机从1-50中取出一个整数包…

GuitarPro8激活许可证24位下载

Guitar Pro是一款专业的吉他制谱软件&#xff0c;现在已更新至Guitar Pro8&#xff0c;新增了支持添加音频轨道、支持嵌套连音符、直观的效果器视图、让指法一目了然的音阶示意图等实用新功能。下面我们来看Guitar Pro8 如何安装激活。 Guitar Pro 8.1官方中文解锁版如何安装 …

Qt的安装

下载安装包 我们选择Open Source的版本。 可以从https://www.qt.io/download-open-source直接下载最新版本&#xff0c;对于想要选择特定版本&#xff0c;或者尝试beta版功能的用户&#xff0c;也可以从https://download.qt.io选择自己需要的版本。 如果你的网速可以的话&am…

系统集成商如何成功集成 MDR

安全系统集成商在为各行业组织设计、安装和维护复杂的安全解决方案方面发挥着关键作用。 在运营技术(OT) 中&#xff0c;物理和数字环境比以往任何时候都更加交织在一起&#xff0c;需要额外保持警惕来检查威胁检测和响应。随着网络威胁日益丰富和复杂&#xff0c;许多客户现在…

21-k8s中pod的调度-污点和污点容忍

一、污点的概念 所谓的污点&#xff0c;就是给k8s集群中的节点设置的污点&#xff0c;通过设置污点&#xff0c;来规划资源创建时所在的节点&#xff1b; 污点的类型解释说明PreferNoshedule 节点设置这个五点类型后&#xff1b; 表示&#xff0c;该节点接受调度&#xff0c;但…

MCU看门狗

目录 一、独立看门狗(IWDG) 1、IWDG 主要作用 2、IWDG 主要特性 3、编程控制 4、注意地方 二、窗口看门狗(WWDG) 1、窗口看门狗作用&#xff1a; 2、窗口看门狗产生复位信号有两个条件&#xff1a; 3、WWDG 框图 4、WWDG 将要复位的时间 5、编程控制 一、独立看门…

记一次有趣的逻辑漏洞挖洞经历

前言 前几天在网上冲浪的时候无意间看到了一个Edu的站点&#xff0c;是一个很常见的类似MOOC的那种在线学习系统&#xff0c;对外开放&#xff0c;同时有注册和登录功能。对于我这种常年低危的菜鸡来说&#xff0c;这是最愿意看到的&#xff0c;因为一个Web网站有了登录功能&a…

VMware Workstation下载安装

一、VMware Workstation的简介 VMware Workstation是一种虚拟化软件&#xff0c;允许用户在单台PC上创建和运行多个虚拟机。它支持不同操作系统的同时运行&#xff0c;提供灵活的网络配置和资源管理&#xff0c;方便开发、测试和部署应用程序&#xff0c;提高工作效率和资源利用…

20-k8s中pod的调度-nodeSelector节点选择器

一、概念 我们先创建一个普通的deploy资源&#xff0c;设置为10个副本 [rootk8s231 dns]# cat deploy.yaml apiVersion: apps/v1 kind: Deployment metadata: name: dm01 spec: replicas: 10 selector: matchLabels: k8s: k8s template: metadata: …

LeetCode LCR 085. 括号生成

题目链接https://leetcode.cn/problems/IDBivT/description/ 正整数 n 代表生成括号的对数&#xff0c;请设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 class Solution {public List<String> generateParenthesis(int n) {List<String>…

16.Qt 工具栏生成

目录 前言&#xff1a; 技能&#xff1a; 内容&#xff1a; 1. 界面添加 2. 信号槽 功能实现 参考&#xff1a; 前言&#xff1a; 基于QMainWindow&#xff0c;生成菜单下面的工具栏&#xff0c;可以当作菜单功能的快捷键&#xff0c;也可以完成新的功能 直接在UI文件中…