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

3 篇文章 0 订阅
3 篇文章 0 订阅

前言

今天主要和大家分享一个基于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配置文件样例:

<?xml version="1.0" encoding="UTF-8"?>
<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" />

    <!--重点在这里,我使用的springboot构建的项目,使用${PORT0}会获取系统环境变量PORT0的内容来替换,进行端口绑定-->
    <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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值