19-01 技术选型的道与术

系列目录导航👉

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

  • 根据实际业务管理的需要,对硬件、软件以及所要用到的技术进行规格的选择
  • 狭义上的技术选型:团队决定选用哪种技术去解决问题,比如选用某个技术语言、某个技术框架去开发项目
  • 广义上的技术选型:泛指项目实施过程中的各种技术决策
    • 制定了技术方案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生态相关的技术
      • 指定好团队的技术规范,让大家知道什么是不允许做的:例如禁止使用多个微服务共享一个数据库的方案、远程通信必须使用轻量级且能跨平台的协议
组织架构
  • 康威定理:组织沟通方式会通过系统设计表达出来
  • 项目架构其实是团队沟通协作方式而产生的一个结果
  • 结合当前团队组织架构的特点:考虑选用的技术再最终技术架构中的位置、与当前团队沟通结构的匹配程度
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值