SpringCloud mesos+Marathon 上部署经验总结

marathon +mesos 上 SpringCloud云端部署微服务经验总结:

  1. 如果采用SDN+mesos-dns动态域名解析,配置变得非常灵活有效,因为每个docker 实例有唯一IP,所以端口都可以设置一样的,或者根据需要设置.
    2. SpringBoot 里类似 port: ${PORT:8761} 配置必须替换掉,或者从环境变量显式传递参数。
    3. health 健康检查 必须手动确认后再部署,因为这个依赖于不同的具体应用对外暴露的api 。如果没有可以自己创建一个controller 类,暴露一个可以验证的健康状态的,比如 /whattime
    如果找不到合适的app检查方法,就自己写一个. 可以自己放在applicaiton 类里。
    @RequestMapping("/whattime")
    public String index() {
    return "The time is "+new Date();
    }

  2. 有多个配置文件的zone1,zone2, 可以通过修改marathon app json 里的env 配置传入. “env”: { “downloadURL”: “http://download-nginx-data.data.marathon.mesos/sample-spring-cloud-comm/feign-with-discovery/account-service/account-service-1.0-SNAPSHOT.tgz”, “spring.profiles.active”: “zone1” },

  3. app 里配置的localhost 必须相应的改成对应的应用的域名,如 spring:
    profiles: zone1
    eureka:
    instance:
    metadataMap:
    zone: zone1
    client:
    serviceUrl:
    defaultZone: http://discovery-service.feign-with-discovery.sample-spring-cloud-comm.test.marathon.mesos:8761/eureka/
    preferSameZoneEureka: true

  4. 可以直接删除实例然后部署更快. 如果直接修改配置文件,速度要慢很多

  5. 在测试环境里,最小化资源需求,最小化可运行实例,可以设置为内存128MB,CPU 0.5,如果不能运行再调节大一点。这个取决于你用的docker 镜像. 我用的镜像是: ”image": “common-docker-starter:openjdk-8u191-jdk-alpine3.8”

  6. 容器时间和主机同步( marathon 里如何设置这个参数, 目前我还没解决这个问题)
    docker 镜像时间和主机同步的办法
    -v /etc/localtime:/etc/localtime

SpringCloud mesos+Marathon 上部署经验总结_第1张图片

SpringCloud mesos+Marathon 上部署经验总结_第2张图片

SpringCloud mesos+Marathon 上部署经验总结_第3张图片

你可能感兴趣的:(Spring,Cloud,微服务)