技术选型的考虑与分析
由于现在互联网技术快速发展,无论前端还是后端,各领域的技术及框架层出不穷,百花争艳,例如后端的消息队列,就有RabbitMQ、Kafka、Apollo、RocketMQ等,甚至身为NoSql的redis都可以插一脚。如何针对开发需要,选用合适的技术,这值得下一定功夫。
需求分析
做事之前,最重要的就是准确获取需求。技术需求相当于一把标尺,把不适用业务场景的技术排除在外。而技术选型的需求,一般是根据业务需求和行业特性来决定的,例如金融行业,对正确性、稳定性、安全性等要求高,而互联网行业则要求快速迭代,性能高。
业务需求
-
技术领域: 整套技术方案?RPC? 消息队列?………
-
技术要求:吞吐量?可靠性?功能性?跨平台?多语言支持?……
-
行业需求:满足行业协议?满足技术领域协议(如AMQP、JMS1.1规范等)?……
行业特性
资源统筹
公司语言:Java? C#? 多种语言协作?……
公司技术栈:Spring全家桶? Vert.x? ……
团队技术实力:按部就班?有自研能力?参差不齐?
开发时间:临时任务?时间急迫?时间从容?
人才培养:同样符合要求的技术,差别只是相对于成员的难度不同,是否采用有难度的技术进行攻关?
选型要点
要点主要是整体模型涵盖开源许可证、行业认可度、产品活力、服务支持、安全性、兼容性、可维护性、可扩展性、功能性、可靠性、易用性、性能效率等12大类评估属性
参照以下链接:
开源软件成熟度评测报告-分布式消息中间件开源
流行的rpc框架benchmark 2018新春版
许可证
用户使用开源软件进行商业化时,需遵守开源软件许可证条款的规定。
- 许可证查询:维基百科,GitHub
-
许可证规定:一图胜千言
如何选择开源许可证?
活跃度
反映开源软件的可持续性和可进化的能力,主要从开源软件的版本发布情况、开源社区情况、软件的关注情况等方面进行分析。
- 版本发布:GitHub中的releases,关注版本号、代码量和发布时间
- 社区情况:GitHub项目首页中的贡献者、提交量、贡献者等级,还有issue中open与close
- 关注情况:谷歌趋势
行业认可与服务支持
行业认可与服务支持反映开源软件在业界的应用情况和提供专业化服务的情况。主要是对应用集成方案和云计算服务两方面进行分析
- 应用集成方案: 参考主流的集成方案
- 云服务: 参考各云服务提供商相应服务
功能特性
考察候选技术在该应用范畴中的功能比较,例如消息中间件,主要从服务端、生产者、消费者、以及消息传输等四个方面进行对比。
- 功能特性:参照维基百科或谷歌中该技术应用范畴的核心诉求。或者参照各博客的技术对比
性能效率
针对候选技术核心功能的性能评估,例如吞吐率、响应时间等
- 性能评估:参照已存在的性能测试文章,或者自行搭建环境并测试
安全性
主要包括已暴露的安全漏洞情况和安全机制两方面。
- 安全漏洞: 谷歌关键词“技术 + 漏洞”
- 安全机制: 项目feature中获取认证机制、加密机制、认证插件等信息
可扩展性
关注第三方插件以及插件开发,可配置可集成
维护性
关注代码注释规范、管理、监控和测试工具
实施过程
先验证,后使用
引入新技术之前,先验证,把官方demo以及单测代码跑一遍,重点验证和研究自己业务需求的那一块,这一点正如《谈谈技术选型的注意事项》所说
对于未经验证的新技术、新理念的引入一定要慎重,一定要在全方位的验证过后,再大规模的使用。新技术、新理念的出现,自然有它的诱惑,慎重并不代表保守,技术总是在不断前进,拥抱变化本身没有问题,但是引入不成熟的技术看似能带来短期的收益,但是它的风险或者是后期的成本可能远远大于收益。