技术选型
- 基础设施选型
- 云平台或 IDC (互联网数据中心)
- 编程语言 - JAVA / Python
- 数据库 - MySQL / Oracle / MongoDB
- 框架和库选型
- 前后端开发框架 - springboot / springcloud
- 核心类库 - JDK 版本
- 中间件选型
- 负载均衡 - Nginx / HAproxy
- 消息中间件 - RabbitMQ / Kafka / RocketMQ
- 缓存中间件 - Redis / Memcached
- 第三方服务选型
- 短信
- 第三方消息推送 - 微信、公众号、APP
影响因素
- 项目因素
- 项目规模
- 重要程度
- 时间要求
- 团队因素
- 开发人员技术栈
- 最熟悉的技术
- 技术因素
- 易用性、可维护性、扩展性、性能
- 技术成熟度
- 社区活跃度
- 框架匹配度
- 其他因素
- 许可协议问题
- 版权问题
项目示例
1、平安证券量盈策略系统
- 项目因素
- 时间急迫
- 功能最小化版本上线
- 持续迭代更新
- 团队因素
- 后端开发人员少,以 java 为主要开发语言
- 前端开发人员没有,后端兼顾开发前端功能
- 技术因素
- 要求能快速开发
- 支持持续快速迭代
- 易于接入第三方库
技术选型
选项 | 可选方案 | 方案比较 | 最终方案 |
---|---|---|---|
前端 | vue、react | 项目组成员对 vue 掌握度较高,且国内使用 vue 的较多,资料齐全 react 主要国外使用较多,没有前端开发不太适合 | vue |
后端 | springboot、springcloud、mybatis、hibernate | 项目要求快速上线,故未加入太多微服务相关组件,使用 springboot 快速开发,项目成员对其掌握程度较高 hibernate 门槛较高,项目组成员对半自动 ORM 框架 mybatis 更熟悉 | springboot、mybatis |
数据库 | MySQL、Oracle、MongoDB | MySQL 免费且开发人员对 MySQL 的相关操作较熟悉,就目前项目来看很适合使用 Oracle 收费服务,项目组成员对其掌握不是很高 MongoDB 不支持事务,且项目组成员对其掌握程度不高 | MySQL |
消息中间件 | RabbitMQ、Kafka、RocketMQ | 由于引入消息中间件会增加系统的复杂度,会耗费不少时间来处理相关逻辑,故暂时未引入消息中间件,后续迭代过程中有必要再加入相关组件 | 无 |
缓存中间件 | Redis、Memcached | Redis支持的数据类型丰富,Memcached 只支持简单的数据类型 Redis 支持多种集群方式,主从、哨兵、Clustor Redis 支持持久化,宕机后重启能够进行数据恢复,Memcached 不支持持久化 项目组成员对 Redis 的了解程度较高 | Redis |
2、翔安法院新版送达系统
- 项目因素
- 项目时间不是很急迫
- 经费充足
- 要求服务化,支持多法院适配及服务公用
- 团队因素
- 后端开发人员齐备,以 java 为主,python 为辅
- 前端有专门的开发,人员较少,前端编写模板,后端可协助前端开发
- 技术因素
- 微服务
- 支持快速上手开发
- 持续迭代更新
技术选型
选项 | 可选方案 | 方案比较 | 最终方案 |
---|---|---|---|
前端 | vue、react、angularjs | 有专门的前端开发,其对 react 较为熟悉,且能够提供组件模板,后端可根据模板协助开发前端 | react |
后端 | springboot、springcloud、springcoud-stream、springcloud-gateway、zuul、springcloud-netflix、springcloud-alibaba、mybatis、hibernate | 要求服务化,且能快速开发 springboot 来开发服务 nacos 可同时作为注册中心和配置中心, eureka 单独作为注册中心,config 单独作为配置中心,管理分散 dubbo 为服务调用RPC框架,使用也简单,openFeign 为服务调用 HTTP 方式,请求头数据太多 springcloud-stream来处理消息 springcloud-gateway 来作为网关,与zuul类似,社区活跃 hibernate 门槛较高,项目组成员对半自动 ORM 框架 mybatis 更熟悉 | springboot、mybatis、nacos、dubbo、springcloud-stream、springcloud-gateway |
数据库 | MySQL、Oracle、MongoDB | MySQL 免费且开发人员对 MySQL 的相关操作较熟悉,就目前项目来看很适合使用 Oracle 收费服务,项目组成员对其掌握度不是很高 MongoDB 不支持事务,且项目组成员对其掌握程度不高 | MySQL |
消息中间件 | RabbitMQ、Kafka、RocketMQ | 微服务化,提供专门的消息服务 引入MQ来进行消息处理 Kafka 需要额外的搭建 ZK 来协调管理 Kafka 集群 RocketMQ 有自己的 nameServer 来协调管理,社区活跃,且经过双11的验证,性能稳定,可直接购买其服务 | RocketMQ |
缓存中间件 | Redis、Memcached | Redis支持的数据类型丰富,Memcached 只支持简单的数据类型 Redis 支持多种集群方式,主从、哨兵、Clustor Redis 支持持久化,宕机后重启能够进行数据恢复,Memcached 不支持持久化 项目组成员对 Redis 的了解程度较高 | Redis |