基于 Docker 开发的 PaaS 平台 DINP

Apache
Google Go
Linux
2015-02-09
UlricQin

DINP是又一个基于Docker开发的PaaS平台。

DINP 包含如下组件:

  • dinp-server master组件,控制集群中所有计算节点

  • dinp-agent Agent,部署在所有计算节点,收集各个节点运行状态和container列表

  • dinp-builder 编配平台,负责把用户代码打包为Docker image

  • dinp-dash Dashboard,用户操作的入口

  • dinp-router 负责请求的路由等功能

  • dinp-hm Health Monitor,对APP的rs进行7层健康检查

  • dinp-common 公共函数、数据结构

之所以用了“又”字,是因为现在的PaaS平台着实很多,DINP只不过是又造了个轮子,下面给大家说说这个轮子与其他轮子的不同点。

1. DINP只接管web应用
PaaS平台是个规范性很强的平台,app要用PaaS托管,必须要满足1、2、3...n条规范才可以。web应用通常无状态,逻辑简单,部署方式统一故而可以使用PaaS托管。但对于一些分布式大型软件、复杂的rpc服务,部署架构复杂,并不适合用PaaS托管。有所为有所不为,DINP只接管web应用。

2. DINP不接管代码的编译环节
像tsuru之类的PaaS,从代码的push就开始接管了。他们通常要求用户把代码push到指定repo的指定分支,以此触发git receiver,git receiver与后端其他组件协同,拉取用户最新代码,下载dependency,编译,打包等等。但是在国内,因为一些原因,下载dependency是一个很费劲的过程。如果这个动作放到平台来做,用户每次要上线了都要等待一个漫长的过程是不可接受的。

所以,DINP不接管代码的编译环节,需要用户自己通过科学上网的方式搞定。比如Java,用户把最终的war包扔给DINP即可,而不能是扔一堆.java源文件和pom.xml;比如Golang,用户把编译好的二进制扔给DINP即可,而不能扔一堆.go源文件;比如Python,用户最好提前下载好相关lib库,然后加入环境变量,而不是提供一个pip_requirements.txt,当然,对于一些特别容易安装的lib库,用户提供一个pip_requirements.txt也未尝不可,DINP也支持,但是不推荐。

3. DINP够简单
如果你对Docker比较熟悉,那DINP对你来说会很简单,我们并没有做太多事情,你理解起来也会相对轻松。PaaS中需要一个通用打包规范,我们使用了Dockerfile;PaaS中需要一个SCM存放发布包,我们使用了Docker Registry;PaaS中需要一个container来run app,我们使用了Docker。另外PaaS中需要一个七层router,我们使用了CloudFoundry提供的gorouter。DINP的绝大部分组件都是Golang写的,静态编译的语言部署起来超方便。Dashboard和UIC是用Java写的,基于JFinal框架,很简单的,相信我

4. DINP的架构


a. 用户把代码打包为.tar.gz,交给Builder打包为一个Docker image
b. 拿到Builder产出的Docker image去Dashboard创建一个App,设置好实例数、内存大小、image地址,O了。Dashboard把用户填写的这些信息写入MySQL
c. Server定期从MySQL同步用户期望的数据,姑且称之为desired state
d. 部署在所有计算节点的Agent与Server之间有心跳通信,收集本机的剩余内存量和container列表,姑且称之为real state
e. Server对比desired state和real state,发现某个App的实例数少了就去调度新的计算节点创建新实例,如果发现某个App实例数多了,就干掉多余的实例
f. Server同时会分析real state,组织出路由信息写入redis
g. Router定期从redis中获取路由信息
h. Router通常部署多个,前面部署LVS,注册一个域名,比如apps.io,把*.apps.io这个泛域名解析到LVS VIP,整个流程就通了

5. 服务接入
如果你玩过CloudFoundry,会很敏感的发现,DINP没有接管MySQL、Memcache、Redis、MQ等等服务。为什么呢?我们的想法是这样的:专业的人做专业的事,在公司里,MySQL、Redis之类的服务已经有DBA团队运维管理了很久了。他们是最懂的人,他们已经形成了一整套成熟的部署规范,运维流程。只要提供一个连接地址,一个账号让PaaS上的App连上去就行了,何必非要把MySQL与DINP做很强的关联整合呢

补充
DINP在公司内部小规模用了几个月,没有出什么问题,大家可以玩一玩了。


基于Docker实现PaaS平台
课程学习地址:http://www.xuetuwuyou.com/course/166
课程出自学途无忧网:http://www.xuetuwuyou.com

一、课程用到的软件
1.CentOS-7-x86_64-Minimal-1511.iso
2.apache-tomcat-7.0.47
3.docker-1.12.3.tgz
4.eclipse-jee-neon-R-win32-x86_64 eclipse-jee-neon-R-win32-x86_64
5.jdk1.7_49
6.CXF3.1.7
7.Spring4.2.5
8.Spring-Security4.0.4

二、课程目标
Docker是一种开源的应用容器引擎,使用Docker可以快速地实现虚拟化,并且实现虚拟化的性能相对于其他技术来说较高。并且随着云计算的普及以及对虚拟化技术的大量需求,使得云计算人才供不应求,所以一些大型企业对Docker专业技术人才需求较大,在此背景下,制作本课程,目的是让更多的学员能够熟悉Docker,熟悉云计算,胜任日常企业的开发、运维工作。本课程从实战角度出发,让学员能从实战中学习到:
1.了解Docker的基本框架原理
2.迅速掌握Docker的基本操作、使用Dokcer实现虚拟化,并且懂得相应的配置知识
3.掌握Docker集群管理与常见PaaS层构建的解决方案
4.通过完整的项目实战,全面的演示了基于Docker实现Paas平台,尤其是秒级扩缩容、高安全等特性


三、适用人群
开发人员、架构师、运维工程师、对容器虚拟化有兴趣的朋友。

四、课程内容及目录
1.Docker简介与单机部署
2.Docker镜像管理基本操作
3.Docker镜像管理高级操作1
4.Docker镜像管理高级操作2
5.Docker容器管理实战
6.Docker网络管理实战
7.Docker数据管理实战
8.Docker核心之数据管理(实战1)
9.Docker核心之数据管理(实战2)
10.Docker集群管理之服务实战
11.Docker集群管理之跨主机解决方案实战
12.Docker集群管理之案例实战
13.Docker私有仓库管理实战
14.CXF核心编程1
15.CXF核心编程2
16.CXF核心编程3
17.Spring整合CXF实战
18.项目实战之架构设计与环境搭建
19.项目实战之基于Docker集群发布PaaS平台
20.项目实战之基于公私钥匙加密制作数字证书
21.项目实战之基于公私钥匙加密实现数字签名
22.项目实战之基于公私钥匙加密实现数字签名协议分析与SSL传输
23.项目实战之基于SpringSecurity实现认证与授权
24.项目实战之基于Docker实现平台高并发与高可用
25.课程总结

的码云指数为
超过 的项目
加载中

评论(13)

LiangShao
LiangShao
写了一篇非常详细的搭建过程图。https://github.com/chinesejie/gogogo
感谢分享
感谢分享
基于Docker实现PaaS平台 课程出自学途无忧网:http://www.xuetuwuyou.com 课程学习地址:http://www.xuetuwuyou.com/course/166
ynudtg
ynudtg
最近1年不更新了吗? #DINP#
leo108
leo108
写了一篇DINP的搭建步骤,有需要的可以参考http://leo108.com/pid-2109.asp #DINP#
leo108
leo108
看起来不错,就是要再装一个UIC太蛋疼 #DINP#
dfar2008
dfar2008
这个安装好简单,可以参考一下。https://csphere.cn/docs/1-installation.html #DINP#
dfar2008
dfar2008
这个paas的设计理念适合我的想法,不要接管mysql这些东西,可以在阿里云上搭建吗? #DINP#
极度_冰寒
极度_冰寒
打算深入DINP DINP
UlricQin
UlricQin 软件作者
sunnytu
sunnytu
试试看 DINP

暂无资讯

3
回答
关于dinp的部署问题

@UlricQin 你好,我在搭建dinp时碰见个问题 麻烦咨询一下您. 由于参考的是这个帖:http://leo108.com/pid-2109.asp...

2015/08/06 11:14
2
回答
​请问您的builder工程现在还能正常编译吗?
tobegit3hub 的回答 2016/02/17 09:10
最佳答案
原因是beego版本更新到1.6.0后,API不兼容,需要dinp项目代码更新,参考https://groups.google.com/forum/#!topic/beego-framework/GwwFXnLACT8 go get -u github.com/beego/bee go get...
3
回答
build问题-go import cycle not allowed

@UlricQin 你好,想跟你请教个问题: [root@saint4 builder]# go get ./... package github.com...

2015/06/03 17:42
1
回答
DINP ​配置文档

@UlricQin 你好 请问 有DINP 配置文档吗?

2015/03/30 13:41
2
回答
关于pull image的问题

@UlricQin 你好,想跟你请教个问题:server在pull image时报错,如下: 2015/02/27 14:21:32 compare.go...

2015/02/27 14:25

没有更多内容

加载失败,请刷新页面

没有更多内容

OSChina 技术周刊第二十二期 —— DUBBO 配置规则详解

每周技术抢先看,总有你想要的! 移动开发 【翻译】为你的 Android 应用增加本地搜索功能 前端开发 【软件】AngularJS 的剪贴板扩展 ngClip 【软件】国际化和本地化 JavaScript 库 Globaliz...

2015/02/16 07:28
233
0
小米开源监控系统OpenFalcon应对高并发7种手段

小米开源监控系统OpenFalcon应对高并发7种手段 原创 2016-04-01 秦晓辉 高可用架构 编者按:本文是秦晓辉在 3 月 27 日数人云“百万并发”活动的演讲,授权「高可用架构」首发。转载请注明来...

2016/07/18 15:04
741
0

没有更多内容

加载失败,请刷新页面

没有更多内容

返回顶部
顶部