我在docker中运行java服务,它基本上是一个套接字服务器。我能够使用docker容器运行它,并能够在主机上发布和公开端口,并能够使用客户端进行连接。到目前为止一切都还好。
这个java服务是单线程的,需要这样。因此,为了能够同时处理多个请求,我需要能够扩展它 - 通过动态生成多个docker容器以在不同的端口上运行
我正在考虑编写一个“侦听器”,它将接收来自客户端的请求,在随机端口上生成带有java服务的docker容器,将ip和port共享到客户端,从那时起,客户端将直接连接基于docker的java服务。所以基本上写一个代理来使用docker SDK来处理这个问题。这种方法听起来是否正确?还有其他更好的处理方法吗?
由于
我需要的是"按需扩展" - 每个客户端请求一个新实例。不像扩展负载平衡或高可用性。所以我需要能够将新生成的docker容器的IP和端口共享给客户端,然后客户端可以直接与容器连接。
我设置了Kubernetes并在其上部署了一个虚拟java套接字服务。我有两个节点都有一个公共IP。我确认我能够以两种方式连接到服务器套接字 (1)通过连接到所需主机端口上的服务的负载均衡器 (2)通过连接到容器获取的随机端口上的两个节点的公共ip并映射到所需的主机端口
这意味着如果我在容器启动时写一个脚本来发布容器(节点)ip和它已经获得的随机端口,那么对于像MongoDB这样的外部实体或类似东西,我的经纪人可以分享与客户端程序直接开始通信。
这听起来有用吗?
答案 0 :(得分:0)
你只是重新发明轮子。已有可用的工具来实现您的目标。
Docker本身就有Docker swarm。它是Docker容器的本机容器编排框架。 Docker swarm中的容器实例默认是负载平衡的。
您只需指定容器所需的副本数量,并且将在群组中的所有实例之间对请求进行负载平衡。
客户不应该知道容器的IP是什么。客户端只知道主机IP / DNS和容器正在侦听的端口。然后,客户端对此主机的请求将以循环方式进行负载平衡。