小公司 一般玩不起 k8s 但是 微服务以及容器 整合 还是肯定要做的
docker swarm 和 spring cloud 整合在一起 ,说实在就不是一个好的方案 。
spring cloud 依赖 他的服务注册发现 。 docker swarm 通过 service mess 分发请求 。 呵呵哒 ,最大问题 spring cloud 注册中心的 serivce ip 是内网 ip 外网 无法访问 。 也就是说 外网 访问 必须通过 service mess 方式
那么 如果 把我们 spring cloud 服务发现 ,以及 docker swarm service mesh 去掉 。
通过代理方式 去做 loaderbalance 。外部流量直接走代理 ,然后 分发内部service 不走 service mesh
以下两种方式 都要好好研究下
方案1 基于 consul 的istio 。 为每个容器 创建 envoy 代理 。 istio 整个体系 很强大 , 但是 他和docker swarm 的整合 其实不太好 。 看下是否能够 更新整个服务的 路由 配置 是否方便。
方案2 docker swarm + traefik cluster , 利用 docker swarm roll update 更新 traefik 配置 以及热跟新的能力 。 traefik 作为服务发现 ,路由 ,限流能力 , 对于业务来讲的 没必要去关心 服务发现注册 ,熔断这些事情。 把请求 丢到 traefik 让它负责去管 想的是挺好 ,但是 估计 性能 以及服务整体熔断 估计有问题 。 traefik 易成为瓶颈

方案 3 docker swarm + traefik + spring cloud + spring cloud config 也能 配置 动态刷新 ,但问题 是 是否好用 ,那就未必了 。
不得不吐槽 docker swarm 能力 还是 弱 , 比如 想多个容器 公用一个namespace , docker swarm 还不支持 ,k8s 人家 强多了 。 比如我想 给 每个容器添加一个代理 。 docker swarm 必须 创建 service后 , 在在每个node 上添加 代理 。 而且 , service 更新后 , 代理会失效 , 这有意义? 非常垃圾
还是基于现实情况 来改吧 。 swarm , 代理从每个容器 一个 , 可以变成每个节点一个 。 也就是说 基于host 模式 overlay 网络 , 每个node上 有一个traefik 。这样 可以使用 docker swarm 的能力
网友评论