- 该技术能否满足功能需求和性能需求
- 该技术是否成熟
- 社区活跃度如何,用户量如何
- 学习和应用成本
- 法律风险(license问题)
以下选型均是在满足功能需求和性能需求、技术成熟、以及无法律风险的基础上,着重对比社区活跃度、学习和应用成本、技术功能。
选型示例1:
Java | Go | |
社区活跃度 | 非常活跃 | 活跃 |
学习和应用成本 | 低 | 一般 |
面向对象 | 支持 | 基于结构体 |
函数重载 | 支持 | 不允许 |
接口实现方式 | 显式 | 隐式 |
协程 | 第三方类库 | 默认支持 |
性能 | 一般 | 高,上下文切换代价小 |
语言生态 | 非常丰富,Spring生态圈 | 一般,工具性为主 |
选型示例2:
Maven | Gradle | |
社区活跃度 | 活跃 | 活跃 |
学习和应用成本 | 低 | 高 |
语言 | XML配置 | Groovy语言,灵活性高 |
插件 | 插件多 | 一般 |
选型示例3:
Vue | React | |
社区活跃度 | 活跃(star 195k) | 活跃(star 187k) |
学习和应用成本 | 低,文档清晰有序 | 高 |
代码风格 | HTML、JS、CSS组合 | JSX(all in JavaScript) |
数据绑定 | 双向绑定 | 单向绑定 |
数据驱动视图 | 响应式编程 | 函数式编程 |
组件化 | 支持 | 支持 |
UI生态 | 丰富 | 丰富 |
选型示例4:
Ant Design Vue | ElementUI | |
社区活跃度 | 活跃 | 活跃 |
学习和应用成本 | 一般 | 一般 |
设计价值观 | 自然、确定性、意义感、生长性 | 一致、反馈、效率、可控 |
文档 | 设计原则和设计模式清晰 | 缺少人机交互深度 |
组件数量 | 丰富 | 丰富 |
单元测试覆盖率 | 87% | 81% |
选型示例5:
原生开发 | flutter | |
社区活跃度 | 活跃 | 活跃 |
学习和应用成本 | 高(分别开发iOS和Android) | 低(一套代码) |
使用语言 | Java/Kotlin,Objective-C/Swift | Dart |
性能 | 高 | 接近原生 |
热重载 | 可热重载,较复杂 | 支持 |
选型示例6:
Nacos | Consul | Zookeeper | Eureka | |
社区活跃度 | 非常活跃 | 活跃 | 活跃 | 停止维护 |
学习和应用成本 | 低 | 高(Go语言) | 低 | 低 |
CAP | AP/CP | CP | CP | AP |
是否可用作配置中心 | 支持 | 需扩展 | 需扩展 | 不支持 |
雪崩保护 | 支持 | 不支持 | 不支持 | 支持 |
自动注销实例 | 支持 | 不支持 | 支持 | 支持 |
访问协议 | HTTP/DNS | HTTP/DNS | TCP | HTTP |
多数据中心 | 支持 | 支持 | 支持 | 支持 |
跨注册中心同步 | 支持 | 支持 | 不支持 | 不支持 |
SpringCloud集成 | 支持 | 支持 | 支持 | 支持 |
Dubbo集成 | 支持 | 支持 | 支持 | 不支持 |
选型示例7:
Redis | Memcached | |
社区活跃度 | 活跃 | 一般 |
学习和应用成本 | 低 | 低 |
数据类型 | String、list、hash、set、zset | 简单的key-value结构 |
持久性 | 支持(RDB、AOF) | 不支持 |
分布式存储 | 支持集群方式水平扩展 | 支持分布式存储 |
线程/进程 | 单线程通信,避免不必要的上下文切换与竞争 | 支持多线程,可扩展 |
快照备份 | 支持 | 不支持 |
Key的Value限制 | 512M | 1M |
选型示例8:
ElasticSearch | Solr | |
社区活跃度 | 活跃(star、commit、issue) | 一般(搜索趋势) |
学习和应用成本 | 低(易于部署和使用,配置简单) | 高 |
实时搜索、动态数据 | 性能高 | IO阻塞,效率低 |
静态搜索 | 一般 | 对不变数据搜索,速度更快 |
分布式架构和高可用 | 内部协议支持,无需其它中间件 | 基于第三方组件zookeeper |
查询DSL | JSON | JSON、XML等 |
搜索引擎框架 | Lucene | Lucene |
选型示例9:
RocketMQ | Kafka | RabbitMQ | |
社区活跃度 | 活跃 | 活跃 | 一般 |
学习和应用成本 | 一般 | 一般 | 高 |
开发语言 | Java | Java、Scala | Erlang |
可用性 | 高(分布式架构) | 高(基于zookeeper,未来版本会去掉zookeeper) | 高(集群部署) |
可靠性 | 同步刷盘、异步刷盘 | 异步刷盘 | 同步刷盘 |
性能 | 很好,十万级 QPS | 非常高,百万级QPS | 一般,万级QPS |
定时消息 | 支持 | 不支持 | 支持 |
事务消息 | 支持 | 不支持 | 不支持 |
顺序消息 | 支持 | 支持 | 不支持 |
消息回溯 | 支持 | 不支持 | 不支持 |
消息重试 | 支持 | 不支持 | 支持 |
死信队列 | 支持 | 不支持 | 支持 |
应用场景 | 订单交易、消息推送 | 实时计算、数据采集 | 吞吐量无要求 |
选型示例10:
MySQL | PostgreSQL | |
社区活跃度 | 活跃 | 活跃 |
学习和应用成本 | 低 | 低 |
使用许可 | GPL | 类BSD/MIT许可 |
实现语言 | C/C++ | C |
存储引擎 | 多个存储引擎 | 单个存储引擎 |
事务(ACID) | 支持 | 支持 |
非关系数据 | 支持JSON | 支持JSON、地理空间数据等 |
并行处理 | 支持 | 支持 |
数据复制 | 支持 | 支持 |
架构 | 多线程 | 多进程 |
应用优势 | 快速和易用性 | 大型和复杂的操作 |