基于Mesos、Docker、Marathon实现的可伸缩微服务思路

前言

今天主要和大家分享一个基于Mesos、Docker、Marathon进行微服务话改造的思路。

服务发现在整个架构中扮演了非常重要的角色。大家都知道服务发现分为客户端服务发现与服务端服务发现。而提到服务发现又不能不提到服务注册,服务注册分为自注册方式与第三方注册方式。相信很多人已经接触过dubbo,dubbox,Zeroc Ice这些rpc框架了。就以dubbo为例,dubbo就可以使用Zookeeper进行服务发现,是典型的客户端服务发现,并且采用了自注册方式进行服务注册。今天就是基于dubbo给大家提供一个思路。

主要问题

在mesos的环境中,我们每个机器会启动多个实例,并且实例有可能会在不同的机器之间漂移,并且物理端口,网络资源有限。不像使用物理机器一样,直接将应用配置与机器进行绑定,如:每个机器启动一个或多个实例,其绑定的ip,端口可以写死在配置文件中。

解决方法

使用Docker的环境变量来解决该问题,因为Marathon在启动任务时会在Docker中自动注入任务相关环境变量,如PORT0,PORT1,HOST等,而其中的PORT0,PORT1是Marathon自动分配的Service Port,不用担心不同的项目(多Docker实例在同一台物理机)会分到相同port。在实际应用中可以使用Host模式启动容器,直接拿环境变量中PORT0等属性对项目进行初始化。

Demo:我使用Docker的Host方式启动容器,并使用Marathon自动分配的Service Port进行端口绑定,之后将服务信息自注册到Zookeeper中,其他客户端就可以通过Zookeeper内容发现服务信息,并进行服务调用。
dubbo配置文件样例:


<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <dubbo:application name="dubbo-service" />

    <dubbo:registry client="zkclient" address="zookeeper://v.lipg.cn:2181" />

    
    <dubbo:protocol name="dubbo" port="${PORT0}" />

    <dubbo:service interface="cn.lipg.test.dubbo.EchoApi" ref="dubboApiImpl" />
beans>

Demo

https://github.com/lipg/Dubbo-Docker-Service

你可能感兴趣的:(Mesos,Marathon,Docker,springboot,微服务,服务化)