19-01 技术选型的道与术

news2024/11/27 9:15:48

系列目录导航👉

什么是技术选型,技术选型的重要性

  • 根据实际业务管理的需要,对硬件、软件以及所要用到的技术进行规格的选择
  • 狭义上的技术选型:团队决定选用哪种技术去解决问题,比如选用某个技术语言、某个技术框架去开发项目
  • 广义上的技术选型:泛指项目实施过程中的各种技术决策
    • 制定了技术方案A & B,选择其中一套
    • 每个技术决策都是技术选型

案例

案例一:C轮跨境电商企业

  • 贸然使用Service Mesh Istio
  • 直接在开发环境中部署
  • 不能很好的Hold住,遇到问题项目就延迟,经过很长时间适应期才正式上线
  • 启发:决定采纳某个技术之前,做好调研,并尝试小规模引入,积累经验,经过验证后再大规模采用

案例二:某头部电商企业

  • 早期使用Struts2.X,大规模使用标签 & OGNL
  • 高并发场景下表现糟糕 👉 单机性能上不去
  • 为什么要提升单机性能
    在这里插入图片描述
  • 启发:使用某个技术,甚至某个技术的功能点时,应经过一个较为严谨的测试

技术选型的误区

  • 不尊重需求
  • 面向流行趋势编程
  • 面向牛叉(简历)编程
  • 过度考虑
  • 把看到的当事实

技术选型的步骤

在这里插入图片描述

明确问题与目标

  • 当前遇到的问题是什么?
  • 技术选型的目标是什么?
  • 是否要引入额外的技术
    • 奥卡姆剃刀原理:如无必要,勿增实体
    • 一般来说,如果能在现有技术的基础上能够想办法实现目标,就不要贸然去引入新的技术
  • 拓展技术视野的途径
    • 在这里插入图片描述

对比技术的方法

技术相关的因素

  • 官方活跃度:决定了在使用过程中遇到bug能否得到官方的支持
  • 社区活跃度:决定了今后在使用中遇到问题,能否很快得到帮助
    • 搜索引擎关键词条目数
    • 谷歌趋势、百度指数
    • GitHub Star数
    • 第三方社区:ITeye、Spring4all、DockOne、Jdon…
  • 可维护性:如果维护性不好,千万不要使用
  • 学习曲线
    • 学习难不难
    • 开发难不难
    • 结合当前团队的技术特点以及熟练程度来考虑
  • 性能:响应时间,TPS,存储容量,网络传输带宽要求等
    • 性能测试工具评测(JMeter、nGrinder、Gatling…)
    • 参考已有的性能评测文章
  • 安全性
    • 检查它有多少的安全补丁以及严重程度,尤其是短期的安全补丁
    • eg:FastJSON、Struts2.X
    • 借助一些漏洞扫描工具,扫描是否有漏洞,eg:Tsunami
  • 优先选用熟悉的技术
    • 而非高端的技术
    • “接地气”

技术意外的因素

  • 是否有大规模使用并成功的案例:侧面论证技术的成熟性、实践证明了能用在生产
  • 是否能够快速招募到人才
  • 考虑并平衡各方利益:如果技术选型的过程中,某个利益相关的发言人没有参加过,就可能会导致不考虑他们的决策
  • 法律问题
    • 商用解决方案 or 开源解决方案
    • License问题
    • 在这里插入图片描述

项目、团队、技术选型的映射关系

项目维度

生命周期

  • 短生命周期
    • 门槛低、简单易上手、开发速度快的技术
    • 开发过程也可相对自由
    • 糙快猛
  • 长生命周期
    • 首先考虑可维护性
    • 优先考虑成熟稳定的技术

项目地位

  • 边缘性项目
    • 影响面相对较小,有一定的故障容忍度
    • 项目的技术试验田
    • 尝试比较新颖的技术或者方案
  • 核心项目
    • 稳定优先,做相对保守的技术选型
    • 优先选用比较成熟,团队内部已积累足够经验,同时有比较好的技术支持的技术。

项目新旧

  • 新项目
    • 在这里插入图片描述
  • 老项目:优先选择能喝现有技术体系无缝融合的技术
    • 降低学习成本
    • 降低项目的风险
    • 便于后期沉淀到技术体系中去

探索性项目

  • 不确定性高
  • 既要快速
  • 也要考虑到可维护性
  • 优先保障简单性
  • 不做太多预留
  • 市场现状:初期只考虑快,等到项目爆发增长了之后,再把重心往可维护性偏移
  • 通过业务敏感度、技术嗅觉、直觉,做技术上的预判

守成型的项目

  • 稳定优先,不要轻易引入新技术
  • 如果要引入新技术,则引入能够无缝地融入当前技术体系,且有人精通的技术
  • 格局已定,不值得折腾

团队维度

技术实力

  • 较强
    • 可结合项目的情况,一定程度上选择相对新颖的技术
    • 新技术往往代表技术趋势,代表更高的生产力
  • 薄弱
    • 继续在现有的技术体系之下发展,不要做过多的折腾
    • 尽量平滑,控制在现有技术体系的范围之内,减少适应成本,降低风险
    • 增强团队交付纪律,定好技术上的约束
    • 走出技术薄弱的困境
      • 定期组织团队内的技术分享
      • 组织技术比赛
      • 1带n,梳理技术上的榜样

团队规模

  • 小规模团队
    • 优先考虑技术的简单性、实施成本和效率
  • 大规模团队
    • 团队人员能力层次不齐,汉南照顾到所有人的情况
    • 很难去听取每个人的建议和意见
    • 很难作出符合所有人利益的决定
    • 沟通噪声很大
    • 通过领域驱动设计等等思想,细分问题域
      • 把细分出来的问题,分给多个小规模团队去承接
      • 将问题交由各个团队自治,由各个团队主导去做技术选型
    • 如果无法细分,并指派给各个小团队:
      • 定好战略方向、战术方向、技术方向
      • 定好规约,把技术选型局限到一定范围内:例如只允许使用Java平台下的技术、只允许使用Spring生态相关的技术
      • 指定好团队的技术规范,让大家知道什么是不允许做的:例如禁止使用多个微服务共享一个数据库的方案、远程通信必须使用轻量级且能跨平台的协议

组织架构

  • 康威定理:组织沟通方式会通过系统设计表达出来
  • 项目架构其实是团队沟通协作方式而产生的一个结果
  • 结合当前团队组织架构的特点:考虑选用的技术再最终技术架构中的位置、与当前团队沟通结构的匹配程度

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android12之模板类单例模式实现原理(一百五十二)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

openGauss 年度大型开发者会议来袭,快来看看都有哪些SIG组参加!

openGauss Developer Day 2023 将于5月26日在北京举办。作为大会的重要环节, SIG组版本规划工作会议 将汇聚社区各个SIG 组的用户与开发者,与大家见面,共同讨论开源数据库的技术发展与创新。属于开发者的狂欢日,期待大家的到…

CMAKE命令详解

目录 CMake 语法 案例: 面试中给可能会问的问题和回答: 总结: CMake 是一个用于构建和管理跨平台软件项目的开源工具。它使用名为 CMakeLists.txt 的文本文件来描述项目的构建过程。 CMake 语法 当使用 CMake 构建项目时,可以…

数据库索引结构(1)概念

常见的索引 主键和二级索引 MySQL学习笔记-主键索引和二级索引_mysql中主键索引和二级索引的区别_爱因诗贤的博客-CSDN博客 MYSQL-主键索引与二级索引_mysql二级索引存在哪个文件_青苔小榭的博客-CSDN博客 采用主键索引的好处:如果元素的位置发生修改,那…

华为OD机试真题 Java 实现【组合出合法最小数】【2023Q1 200分】

一、题目描述 给一个数组,数组里面都是代表非负整数的字符串,将数组里所有的数值排列组合拼接起来组成一个数字,输出拼接成的最小的数字。 二、输入描述 一个数组,数组不为空,数组里面都是代表非负整数的字符串&…

解读智慧城市建设的关键角色:GIS技术的应用与优势

近年来,随着城市化进程的加快和信息技术的迅猛发展,智慧城市成为了城市发展的重要方向。而在智慧城市建设中,地理信息系统(GIS)技术的应用正发挥着越来越重要的作用。GIS技术以其独特的地理空间分析能力,为…

龙芯2K1000实战开发-项目整体框架介绍

文章目录 概要整体架构技术名词解释技术细节小结概要 本项目主要以龙芯2k1000为CPU实现整个系统的管理,主要实现数据交换、时间同步和数据监控等功能。项目中龙芯作为一部分存在,考虑到项目涉密的原因,不能将整个项目的应用背景及项目整体方案做介绍,只能将龙芯过程开发做一…

NSSCTF之Web篇刷题记录(12)

NSSCTF之Web篇刷题记录[12] [NCTF 2018]签到题:[鹤城杯 2021]EasyP:[NSSCTF 2022 Spring Recruit]ezgame:[GXYCTF 2019]Ping Ping Ping:[SWPUCTF 2021 新生赛]finalrce:[NISACTF 2022]checkin: NSSCTF平台:…

程序员成长之路有哪些绝对不能踩的坑?

文章目录 一、你在编写代码时,会特别注意哪些流程?二、你在工作过程中踩过哪些坑?你是如何处理的呢?三、结合自身工作经验,分享一下程序员有哪些要避免的坑吧。总结 程序员编写高质量、可维护、安全且高效的代码&#…

【Python文本处理】基于运动路线记录GPX文件解析,心率、速度、时间、功率、踏频、海拔等参数的生成和更改

【Python文本处理】基于运动路线记录GPX文件解析,心率、速度、时间、功率、踏频、海拔等参数的生成和更改 GPX文件本身其实就是坐标、海拔、时间、心率等综合性的xml文件 如图: 海拔:ele 时间:time 心率:heartrate 功…

推荐5个非常强大的ChatGPT浏览器插件|你的生产力提高工具

近期,ChatGPT变得越来越热门,为此,许多浏览器插件也随之问世。这些基于ChatGPT的浏览器插件大大提高了ChatGPT的能力,使得我们能够更高效地在平时的上网、工作和学习中获得帮助,从而节省了大量时间。 今天我来给大家介…

168天,从外包转岗到阿里测开岗.....

本人毕业于某普通二本院校非计算机专业,跨专业入行测试,至今有近 5年工作经验。 第一份测试工作是在腾讯做了两年外包。总体感受就是 这份工作缺乏归属感,心里总有一种落差,进步空间不大, 接触不到核心技术&#xf…

分享以MM32SPIN0280单片机为主控洗衣机方案

洗衣机是利用电能产生机械作用来洗涤衣物的清洁电器,按驱动方法有3类,直接驱动,皮带驱动,波轮式驱动。 主变一体洗衣机方案以MM32SPIN0280为主控 MCU规格: -ArmCortex-M0内核,最高工作频率可达96MHz -128…

软件测试面试至今0 offer的小伙伴,问题到底出在哪儿?

转眼已是五月中旬,求职招聘季也快要结束啦,如果没点真技术 真本事,不了解点职场套路,在今年行情下,找工作可是难上加难。 现在点开微博或者脉脉,只要搜索“招聘”,用“惨不忍睹”来形容也不为过…

《计算机组成原理》期末复习一文总结

文章目录 第1讲:概论一、课程内容课程简介课程教材慕课堂二、课程组成结构计算机系统组成计算机软硬件概念以运算器为中心现代计算机的存储器为中心 硬件各部分关系内存基本组成运算器基本组成累加器(相当于寄存器) 控制器组成 第2讲&#xf…

[VRTK4.0]设置OpenXRCameraRig

学习目标: 演示如何设置Unity项目以支持OpenXR,以及如何安装VRTK v4TiliaUnitvXRFrameWork用于OpenXR的CameraRig。还展示了如何设置Tilia TrackedAlias预制件可轻松访问底层CameraRig功能。 流程: 步骤一: 我们现在要将我…

【数项级数】敛散性判别

阅读本篇之前,建议可以先看一下上一篇文章哦! 【数项级数】无穷个数相加一定是个数吗? 柯西收敛准则判断级数敛散性 基本思想利用柯西收敛准则判断级数是否收敛推论:定理 基本思想 在上一篇文章中,初识数项级数&#…

如果要走网络安全这方面,需要考哪些证呢?

网络工程师VS网络安全工程师,哪个能带你走上人生巅峰? 众所周知,网络安全是以技术为核心的行业,年薪的多少是和技术挂钩的,但是很多没有工作经验的或者想转行到网安的大学生想要找到一份好工作,一个含金量…

Unity 灯光组件Light

灯光简介 在 Hierarchy 窗口右键,选择 Light,再选择具体的灯光类型,在 Inspector 窗口查看灯光组件如下: Type:灯光类型,主要有:Directional(平行光)、Spot(聚…

【OpenStack】初识

云计算中的操作系统,负责计算能力 三大核心组件:子项目nova负责计算能力、neutron(Quantum):Networking网络、Swift:Storage 存储 共享服务:认证服务、数据库服务等 api、dashboard浏览器界面 主要组件: 1. 2. OpenSt…