Circuit进程管理完全指南:从基础到高级应用

【免费下载链接】circuit Circuit: Dynamic cloud orchestration http://gocircuit.org 【免费下载链接】circuit 项目地址: https://gitcode.com/gh_mirrors/ci/circuit

Circuit是一个动态云编排平台,提供强大的进程管理能力,让开发者和运维人员能够轻松地在集群环境中创建、监控和控制进程。本指南将从基础概念开始,逐步深入到高级应用,帮助你掌握Circuit进程管理的核心技能。

什么是Circuit?

Circuit是一个可编程的平台即服务(PaaS)和基础设施即服务(IaaS),专为云应用的服务和主机管理、发现、同步和编排而设计。它的核心思想是将整个集群视为一个封闭系统,通过统一的接口进行管理。

Circuit的程序视图

Circuit的主要特点包括:

  • 开箱即用地支持单数据中心和多数据中心部署
  • 系统流量的认证和安全性
  • 基于TCP和UDP多播的内部节点发现
  • 零配置/盲重启,便于主机配置
  • 全局、视角一致的键/值空间
  • 在物理主机超高 churn 率下的一致性保证
  • 命令行和程序化API访问
  • 与Docker的集成

Circuit的核心概念

架构概览

Circuit系统由多个Circuit服务器组成,这些服务器在集群中的机器上运行,形成一个高效、抗 churn 的网络。每个Circuit服务器负责代表用户托管一组控制原语,称为"元素"。

Circuit的层次结构

锚点(Anchors)

所有服务器的层次结构由一个全局Circuit根锚点逻辑统一,其子女是各个Circuit服务器层次结构。锚点类似于文件系统目录,可以有任意数量的子锚点,但最多只能存储一个元素。

一个典型的锚点路径如下:

/X317c2314a386a9db/hi/charlie

路径的第一个组件是托管叶子锚点的Circuit服务器的ID。

元素(Elements)

创建和交互Circuit元素是用户控制和反映其分布式应用的机制。主要元素类型包括:

  • 进程元素(Process elements):用于在托管Circuit服务器上执行、监控和同步OS级进程
  • 通道元素(Channel elements):类似于Go中的通道,是一种同步原语
  • Docker元素(Docker elements):用于管理Docker容器
  • DNS元素(DNS elements):用于创建和配置DNS服务器

快速开始:安装与启动

安装Circuit

Circuit由一个小型二进制文件组成,可以为Linux和Darwin构建。假设已经安装了Go语言编译器,可以通过以下命令构建和安装Circuit二进制文件:

go get github.com/gocircuit/circuit/cmd/circuit

启动Circuit服务器

可以使用以下命令异步启动Circuit服务器(可以按任意顺序):

circuit start -if eth0 -discover 228.8.8.8:7711

-if选项指定要绑定的网络接口,-discover选项指定用于自动服务器发现的UDP多播通道的IP地址。

加入现有Circuit集群

要将新服务器加入现有Circuit集群,首先在第一台机器上启动服务器:

circuit start -a 10.0.0.1:11022

服务器将在标准输出上打印自己的Circuit URL,类似于:

circuit://10.0.0.1:11022/78517/Q56e7a2a0d47a7b5d

然后在另一台机器上使用-j选项加入这个服务器:

circuit start -a 10.0.0.2:11088 -j circuit://10.0.0.1:11022/78517/Q56e7a2a0d47a7b5d

两个主机的Circuit系统

基础操作:使用命令行工具

Circuit二进制文件同时充当命令行客户端,允许你与Circuit集群交互。

连接到Circuit集群

有两种方式可以向工具提供拨号服务器地址:

  1. 使用多播发现:
circuit ls -discover 228.8.8.8.8:7711 /
  1. 使用-d选项指定服务器地址:
circuit ls -d circuit://10.0.0.1:11022/78517/Q56e7a2a0d47a7b5d /

连接到服务器的Circuit客户端

列出集群资源

要列出整个Circuit集群锚点层次结构,可以使用:

circuit ls /

你可能会得到如下响应:

/X88550014d4c82e4d
/X938fe923bcdef2390

这些根级锚点对应于Circuit服务器。

Circuit服务器对应根级锚点

进程管理基础

创建进程

要在选定的集群机器上运行新进程,首先查看可用的机器:

circuit ls /...
/X88550014d4c82e4d
/X938fe923bcdef2390

然后运行新的ls进程:

circuit mkproc /X88550014d4c82e4d/pippi << EOF
{
  "Path": "/bin/ls",
  "Args":["/"]
}
EOF

进程元素代表OS进程

查看进程状态

要查看进程状态,可以使用peek命令:

circuit peek /X88550014d4c82e4d/pippi

与进程交互

关闭标准输入(表示无意向其写入):

cat /dev/null | circuit stdin /X88550014d4c82e4d/pippi

读取输出:

circuit stdout /X88550014d4c82e4d/pippi

终止进程

从锚点层次结构中删除进程元素:

circuit scrub /X88550014d4c82e4d/pippi

Docker容器管理

Circuit可以创建、管理和同步Docker容器,并将相应的"docker元素"附加到锚点文件系统中的路径。

启用Docker支持

要允许创建docker元素,任何服务器都必须使用-docker开关启动:

circuit start -if eth0 -discover 228.8.8.8:7711 -docker

创建Docker容器

使用工具创建和执行新的Docker容器:

circuit mkdkr /X88550014d4c82e4d/docky << EOF
{
  "Image": "ubuntu",
  "Memory": 1000000000,
  "CpuShares": 3,
  "Lxc": ["lxc.cgroup.cpuset.cpus = 0,1"],
  "Volume": ["/webapp", "/src/webapp:/opt/webapp:ro"],
  "Dir": "/",
  "Entry": "",
  "Env": ["PATH=/usr/bin"],
  "Path": "/bin/ls",
  "Args": ["/"],
}
EOF

Docker元素类似于进程

Docker元素命令与进程的命令相同:stdinstdoutstderrpeekwait

高级应用:进程间通信

创建通道

通道元素是类似于Go中的通道的同步原语,其发送和接收端可从Circuit集群中的任何位置访问。

创建通道:

circuit mkchan /X88550014d4c82e4d/this/is/charlie 3

最后的参数是通道缓冲区容量。

通道元素驻留在Circuit服务器的内存中

验证通道创建

circuit peek /X88550014d4c82e4d/this/is/charlie

这应该会打印出类似以下内容:

{
  "Cap": 3,
  "Closed": false,
  "Aborted": false,
  "NumSend": 0,
  "NumRecv": 0
}

发送和接收消息

向通道发送消息:

circuit send /X88550014d4c82e4d/this/is/charlie < some_file

从通道接收消息:

circuit recv /X88550014d4c82e4d/this/is/charlie

实际案例:构建高可用服务

服务发现与负载均衡

Circuit提供了DNS元素,可以创建和动态配置一个或多个DNS服务器元素:

circuit mkdns /X88550014d4c82e4d/mydns

添加资源记录:

circuit set /X88550014d4c82e4d/mydns "miek.nl. 3600 IN MX 10 mx.miek.nl."

监控服务器加入和离开

Circuit提供了两种特殊的元素类型@join@leave,称为"订阅",用于在新的Circuit服务器加入系统或其他服务器离开时通知你:

circuit mk@join /X88550014d4c82e4d/watch/join
circuit mk@leave /X88550014d4c82e4d/watch/leave

接收加入通知:

circuit recv /X88550014d4c82e4d/watch/join

实现Watchbot:自修复服务

Circuit允许在流程编排方面具有非凡的灵活性。例如,"watchbot"教程展示了如何在集群中实现半弹性的自持机制。

简单的watchbot实现可以在以下位置找到: tutorial/watchbot

更复杂的版本,展示了通道的使用: tutorial/watchbot-with-chan

安全配置

默认情况下,Circuit服务器和客户端通过明文TCP进行通信。支持基于HMAC的对称认证, followed by an asymmetric RC4流密码。

启用加密

使用-hmac命令行选项指向包含Circuit私钥的文件:

circuit start -a 10.0.0.1 -hmac .hmac

生成新的私钥

circuit keygen

总结

Circuit提供了一个强大而灵活的平台,用于管理和编排分布式系统中的进程和服务。通过本指南,你已经了解了Circuit的核心概念、基本操作和高级应用。

无论是简单的进程管理还是复杂的分布式系统编排,Circuit都能提供直观而强大的工具来简化你的工作流程。通过结合进程、Docker容器、通道和DNS元素,你可以构建高度可用、弹性的云应用。

Circuit角色分离

要深入了解更多高级功能和最佳实践,请查阅官方文档和示例代码:

  • Go客户端文档:github.com/gocircuit/circuit/client
  • 教程:github.com/gocircuit/circuit/client/tutorial
  • 命令行工具实现:github.com/gocircuit/circuit/cmd/circuit

【免费下载链接】circuit Circuit: Dynamic cloud orchestration http://gocircuit.org 【免费下载链接】circuit 项目地址: https://gitcode.com/gh_mirrors/ci/circuit

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐