架构师不会架构选型,能行吗?


如果你在做选型方面的工作 , 或者想了解一些现在正在流行的技术 , 那么这篇文章正好适合你 。
架构师不会架构选型,能行吗?
本文插图
图片来自 Pexels
本篇内容涵盖 14 个方面 , 涉及上百个框架和工具 。 会有你喜欢的 , 大概也会有你所讨厌的家伙 。
这是我平常工作中打交道最多的工具 , 大小公司都适用 。 如果你有更好的 , 欢迎留言补充:

  • 消息队列
  • 缓存
  • 分库分表
  • 数据同步
  • 通讯
  • 微服务
  • 分布式工具
  • 监控系统
  • 调度
  • 入口工具
  • OLT(A)P
  • CI/CD
  • 问题排查
  • 本地工具
消息队列
架构师不会架构选型,能行吗?
本文插图
推荐:
  • 吞吐量优先选择 Kafka 。
  • 稳定性优先选择 RocketMQ 。
  • 物联网:VerneMQ 。
一个大型的分布式系统 , 通常都会异步化 , 走消息总线 。消息队列作为最主要的基础组件 , 在整个体系架构中 , 有着及其重要的作用 。 异步通常意味着编程模型的改变 , 时效性会降低 。
Kafka 是目前最常用的消息队列 , 尤其是在大数据方面 , 有着极高的吞吐量 。 而 RocketMQ和 RabbitMQ , 都是电信级别的消息队列 , 在业务上用的比较多 。
相比较而言 , ActiveMQ 使用的最少 , 属于较老一代的消息框架 。 Pulsar 是为了解决一些 Kafka 上的问题而诞生的消息系统 , 比较年轻 , 工具链有限 。 有些激进的团队经过试用 , 反响不错 , 但实际使用并不多 。
MQTT 具体来说是一种协议 , 主要用在物联网方面 , 能够双向通信 , 属于消息队列范畴 , 推荐使用 VerneMQ 。
缓存
架构师不会架构选型,能行吗?
本文插图
推荐:
  • 堆内缓存使用默认的 Caffeine 。
  • 分布式缓存采用 Redis 的 Cluster 集群模式 , 但要注意使用限制 。
数据缓存是减少数据库压力的有效途径 , 有单机 Java 内缓存 , 和分布式缓存之分 。
对于单机来说 , Guava 的 LoadingCache 和 ehcache 都是些熟面孔 , 不过 SpringBoot 选择了 Caffeine 作为它的默认堆内缓存 , 这是因为 Caffeine 的速度比较快的原因 。
对于分布式缓存来说 , 优先选择的就是 Redis , 别犹豫 。 由于 Redis 是单线程的(6.0 支持多线程 , 但默认不开启) , 并不适合高耗时操作 。
所以对于一些数据量比较大的缓存 , 比如图片、视频等 , 使用老牌的 Memcached 效果会好的多 。
JetCache 是一个基于 Java 的缓存系统封装 , 提供统一的 API 和注解来简化缓存的使用 。 类似 SpringCache , 支持本地缓存和分布式缓存 , 也是简化开发的利器 。
分库分表
架构师不会架构选型,能行吗?
本文插图
推荐:ShardingSphere 中的 Sharding-JDBC 。
分库分表 , 几乎每一个上点规模的公司 , 都会有自己的方案 。 目前 , 推荐使用驱动层的 Sharding-JDBC(已经进入 Apache) , 或者代理层的 Mycat 。 如果你没有额外的运维团队 , 又不想花钱买其他机器 , 那么就选前者 。
如果分库分表涉及的项目不多 , Spring 的动态数据源是一个非常好的选择 。 它直接编码在代码里 , 直观但不易扩展 。
如果只需要读写分离, 那么 MySQL 官方驱动里的 Replication 协议 , 是更加轻量级的选择 。
上面的分库分表组件 , 都是大浪淘沙 , 最终的优胜品 。 这些组件不同于其他组件选型 , 方案一旦确定 , 几乎无法回退 , 所以要慎之又慎 。


推荐阅读