微服务技术选型

存储模型

  1. 关系数据库:mysql,postgresql。主从结构,以文件存储为主,索引使用b+树。适合结构化数据
  2. 文档数据库:mongodb
    • 适合非结构化业务,非常灵活
    • 不支持事务,4.0开始支持
  3. 内存数据库:redis(缓存,KV)
    1. hash:hset key f v
    2. zset:hashtable+skiplist
  4. 分布式一致性工具:etcd,zookeeper。KV存储,配置管理,服务发现,分布式锁,通知监听,分布式自增序列等功能
    1. eted: 使用raft协议。底层KV存储使用bbolt。
    2. zookeeper:zab协议,类似paxos
  5. 本地KV:
    • LSM模型:leveldb,rocksdb
    • B树:bolt,bbolt
  6. elasticsearch
    • TODO

队列选型:

  1. kafka
    • 包含:broker,topic,partition,producer,consumer,consumer group
    • 性能较高,顺序读写日志。10万级别/s
    • 单播广播都支持,一个topic可以由一个或多个consumer group消费,每个consumer属于一个consumer group
    • 高可用:主从模式。通过zookeeper选举leader
  2. rabbitmq
    • producer,exchanger(topic,direct,fanout),queue,consumer
    • 性能较高,内存+文件。万级别/s
    • 广播单播都支持
    • 高可用:镜像模式,外面加haproxy

服务发现

  • 嵌入式
  1. eureka
    • 服务端:java
    • 客户端:java,golang,nodejs
  2. consul:
    • 服务端:golang
    • 客户端:golang,java,nodejs,etc.
  3. etcd,zookeeper:
    • 分布式一致性工具,可以实现服务发现,需要做一定工作
    • 相比eureka,consul,这类工具比较强大,除了服务发现,还有locking,kv存储等
  • 非入侵

    通过容器进行服务发现,一般都是通过Linux网络VIP+IPVS方式

  1. docker-swarm
  2. k8s

网关

  • zuul
  • kong
  • traeffic

监控

  • prometheus