查看原文
其他

Swan1.0发布,功能、测试、Demo一个都不能少丨数人云Mesos开源调度器

2017-07-03 数人云 数人云

关于Swan



数人云Swan是基于Mesos实现的开源应用调度框架,帮助用户轻松发布应用,实现应用的滚动更新,并根据用户指定的策略做应用的健康检测和故障转移。


2016.11.08,继数人云容器管理面板Crane后,数人云Mesos调度器Swan正式开源;


2017.06.30,经过半年多的打磨,Swan在性能和功能方面有了巨大的提升,我们正式发布Swan 1.0。



功能List

 ▼


• Application Management

• ScaleUp/ScaleDown

• Rolling update

• Rollback

• Mesos-based health checks

• HA

• Event Subscription

• Compose

• Calico-based IP-Per-Task

• Schedule strategy




重点功能解析

 ▼


➤➤➤  1. Application Management 应用管理

应用管理做为Swan的基本功能,也是最重要的功能,本次重构做了进一步提升,精简了数据结构,并通过数据库读写和逻辑优化,使得功能更加稳定。

应用管理主要包括以下几点功能:


1)应用的CRUD

属于应用基本操作,重构对CRUD的逻辑做了很多优化,减少不必要的数据库读写,提升了性能。


2)扩缩

扩缩将之前的两个接口合为了一个,使用上更简单。同时支持了对独立IP的支持,支持扩实例过程中,用户输入IP列表为新增的实例注入单独IP。


IP的管理目前是静态的,由用户输入,后期将做成自动的IPAM,只需用户在发应用时指定一个网络即可,可以做到自动的获取IP,释放IP,避免人为输入IP的麻烦。


扩缩还有一个改进—更清楚的错误信息,如果扩缩失败,用户可明确查看出错原因,提升了用户体验。


3)更新

更新与Marathon有一点不同,可指定需要更新的实例数,且如果考虑灰度,还可传入一个新版本流量占全部流量的百分比,做到控制更新版本实例的流量。


更新失败目前的策略是会停止更新,由用户来选择回滚,主要考虑到用户会比较关心失败的原因,如果自动回滚,错误现场可能会被冲掉。当然,后期计划做成可配置的。


4)回滚

新版回滚作为一个独立接口,且现在回滚时支持要回滚到的版本号,默认如果不传版本ID,可回滚到上一版本,如果传了,则回滚的版本ID指定的版本。这样做的目的是为了更灵活,虽然大部分情况下都是回滚到上一版本,但通过版本号可以实现跨版本回滚。


➤➤➤  2. Mesos-Based Health Checks 健康检查

实现了基于Mesos的健康检查,Swan最初是自己做的健康检查,后来考虑到性能的问题,决定还是采用Mesos的健康检查。之前基于Mesos的健康检查存在部分Bug和问题,在最新的版本应该已经做了修复,二是基于Mesos的健康检查目前只能配置一个,不支持多个Mesos,现阶段数人云的开发同事也正在对这一功能进行开发。


健康检查目前支持三种:HTTP、 TCP,Command,现在Swan上都能做很好的支持。不过Command还是有个坑,就是Mesos默认会切换到容器的Namespace中执行Command,那么问题来了,如果你要执行的Command在容器镜像中没有那就杯具了,Command检测就会失败。所以这种方式不推荐,最好用HTTP或TCP。


➤➤➤  3. HA 高可用

目前Swan高可用是基于Zookeeper做Leader选举。之前做过一版基于Raft协议,感觉Hold不住,索性换了Zookeeper,好在Mesos目前也是用Zookeeper,这样反而更简单。


Leader选举的基本原理是多个Swan同时去Zookeeper的一个目录下创建一个自增长序列的临时节点, 该节点在客户端断开一段时间以后会被Zookeeper自动删除。通过比较自增序列,找出序列最小的节点,最小的也就是最先创建的,谁最先创建谁就是Leader,选出Leader之后,其余节点去监控Leader的事件,如果Leader断开,创建的节点会被删除,其他节点在收到该事件时再重新开始Leader选举,依次来完成Leader的选举过程。


目前来说,用此方式做的Leader选举,在Swan这边测试的还是比较稳定,暂时没出现选举失败或出错等BUG。


➤➤➤  4. Event Subscription 事件机制

事件机制是通过对外暴露一个Event接口来实现。当有客户端连接到该接口后,Swan会实时发送Task的变更事件,新建或状态更新等给客户端。重构主要精简了事件的数据结构。


➤➤➤  5. Compose 编排

Compose是Swan新增的一个功能。主要是支持Docker Compose V3的编排。Docker Compose V3是Docker借助Swan的分布式特性而实现的分布式编排引擎,Swan借助与自身的DNS功能,也能够解析Compose  V3的Spec来做分布式跨主机编排。


➤➤➤  6. Calico-based IP-Per-Task 基于Calico的独立IP

Calico IP主要是通过Calico来创建网络,然后通过创建应用时选择网络,手动填入Task的IP来实现。内部是通过Docker的--ip参数来传入IP,网络间的通信由Calico来做,而且是一个手动的IPAM。之后可能会考虑做成自动的IPAM,更方便用户的使用。


➤➤➤  7. Schedule strategy 调度策略

调度策略是这次重构新加入的功能,主要是为了提高调度的灵活性和资源的利用率,加入了Random、Spread、Binpack三种调度策略。




亮点功能

 ▼


➤➤➤  调度策略,Swan支持Random、Spread、 Binpack:


  • Random策略是指发任务时随机选择一台Agent来发,优点是策略简单,无法控制任务的均匀分布,从而是主机的资源使用无法均匀。

 

  • Spread是指每次发任务都选择资源剩余最多的Agent中的一个来发,这样可以把Task根据主机资源相对均匀的发到各个Agent上。

 

  • Binpack是指每次发任务都选择剩余资源最少的Agnet中的一个来发,这样可以尽量把Task占满一个机器,减少资源碎片的产生,更有利于主机资源的利用,缺点是当机器负载升高时会出现一些问题。


Swan默认是Spread策略,目的是为了均匀的使用主机资源,从而达到性能的最大化。  


➤➤➤  PROXY:


  • PROXY的角色是作为应用的访问入口,为应用的提供一致的访问方式,不论应用后端容器的增删变化。


  • PROXY支持基于权重对后端容器进行负载均衡流量分配,支持基于访问源IP的会话保持。


  • PROXY同时支持L4/L7代理,L7代理还允许设置自定义的访问域名。


  • PROXY允许通过HTTP REST API对代理设置进行热更新,无需重启或Reload。


  • PROXY对访问进行详细的数据统计, 通过Stats API,可以方便查看全局,应用,容器的累积/实时请求数,进出流量,在线连接等统计数据。


➤➤➤  DNS:


DNS 通过订阅调度器的Event事件, 在内存中维护一份记录数据, 为每个应用提供高效的DNS 记录和SRV记录解析,方便应用之间通过域名进行服务发现。




Swan的未来

 ▼


➤➤➤  1. 加强Agent功能

通过加强Agent功能来辅助调度器来做一些事情,比如上报Mesos Agent主机的负载来为调度做选择,或是查询Mesos Agent主机上的容器数等等,具体的功能还在进一步细化中。


➤➤➤  2. 优化(新加)调度策略

通过Agent查询负载来做基于机器负载的调度策略,或通过Agent查询容器数来做基于容器数的调度策略,或者是实现其他的调度策略。


➤➤➤  3.KVM支持

通过开发Excutor和调度器结合来创建基于KVM的虚拟主机。


➤➤➤  4.优化应用管理

进一步优化应用管理的逻辑和策略,来提升Swan应用管理的能力。




性能测试

 ▼


Swan&Marathon管理不同数量容器实例时CPU的占用对比:


Swan&Marathon管理不同数量容器实例时内存的占用对比:


Swan&Marathon管理不同数量容器实例时ZK的CPU占用对比:


Swan&Marathon管理不同数量容器实例时ZK的内存占用对比:


Swan&Marathon管理不同数量容器实例时Mesos的CPU占用对比:


Swan&Marathon管理不同数量容器实例时Mesos的内存占用对比:


健康状态依据:


Master主机资源:2C 8G

Marathon页面操作3秒响应

Master 主机 CPU < 70% &&Memory < 70% && IO < 70%

注:此为内测数据,仅供参考。



Swan Demo


Build and Start & App Management:


https://v.qq.com/txp/iframe/player.html?vid=s0520pksvcy&width=500&height=375&auto=0


以上为Swan 1.0 版本更新内容、性能测试及Demo。加小数微信:xiaoshu062  可进一步交流,同时欢迎在Github上Star&Fork。

Github地址:https://github.com/Dataman-Cloud/swan  



相关阅读:


Swan,另一个长期运行任务的调度器(转给Mesos/Marathon爱好者)

吾家Swan初长成|数人云Mesos开源调度器



活动推荐:


5月&6月,数人云分别在深圳和北京做了两场关于DevOps&SRE落地实践的深度分享。

7月15日,话题将在上海继续,三位业内大牛结合实例,和你面对面分享《DevOps&SRE超越传统运维之道》


点击阅读原文报名活动

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存