创建此文档是为了向开发人员及用户介绍SlapOS。文档将解释什么是SlapOS, 简短演示并概述SlapOS系统的架构,然后会指出使用此系统的不同方法。
本节介绍SlapOS基础知识,SlapOS背后的理念以及SlapOS的适用情况。
SlapOS是单语言会计及服务开通操作系统的缩写。 它是一种通用的操作系统,可在分布式POSIX基础设施(Linux,xBSD)上使用,无需虚拟化就可提供和管理软件服务。SlapOS是在自由网站协议下发布的自由软件。
如果你需要运行超过20个同一应用的实例或需要运行10个以上服务器,SlapOS则是为你量身打造的。SlapOS可在各种场景下提供解决方案,例如:
简化后,SlapOS运行一个机器网络。Master(COMP-ROOT)包含软件版本目录,这些软件在网络节点上(COMP-0,1,2,3)安装并实例化。Master追踪服务消费并具有对特定服务管理和开具发票的功能。
与“一切都是文件”的Unix不同,SlapOS是一个“一切都是进程”的云操作系统。若需管理数千个具有数千个进程的服务器,或是多个版本的数百个不同的应用程序,SlapOS则是为您量身打造的,它可以使整个管理过程具体明确,自动化并且可控制。
使用Buildout软件编写一个简单的配方,SlapOS就可以将任何软件应用程序(开源或专有)转变为可靠的SaaS或PaaS平台。除了实例服务开通和监控之外,SlapOS还提供了一个仪表盘来提供用户注册,支持请求,开具发票和付款功能。
SlapOS的理念是由ViFiB提出的, ViFiB是“分布式云计算”的首批提供商之一。
SlapOS的第一个想法是考虑“一切都是一个进程”。系统由各种进程组成,这些进程基于各种协议(HTTP,memcached等)进行信息交换。
SlapOS的第二个想法是,若想创建可靠且高效的云计算系统,最佳方案是遵循互联网的原始原则:分配性和简单性。SlapOS不试图建立可靠数据中心,以达到99.999%的可用性,因为这样的数据中心需要冗余的网络,电力,人力等。而是聚合不可靠的主机,例如家庭云或低成本专用服务器,通过联合他们,达到99.999%的可靠性。SlapOS实际上比传统的云操作更可靠,因为通过选择独立的服务器,SlapOS可以降低由于电气故障,政治决策等导致的重大系统中断的风险。当然,也可以使用SlapOS更有效地操作传统数据中心。
SlapOS的第三个想法是:为了确保冗余,数据复制或节能,任何智能进程都应该由应用程序本身而不是基础设施来实现。这符合互联网的原始理念:“愚蠢”的网络运行智能的应用。当然,考虑到用户使用或数据特性,也可以制定冗余和节能的优化方案。
本节将借助截图,演示如何通过ViFiB(SLAP网络协议的创建者)请求软件服务。ViFiB领导的SlapOS项目是基于巴黎十三大Christophe Cérin教授的科学思想(XIII)。
除了为客户开发自定义实现之外,ViFiB还提供SlapOS的参考实现,把软件即服务(SaaS),虚拟机和联合基础设施即服务(IaaS)托管给ViFiB的母公司Nexedi。此SlapOS实现为全球多个Nexedi办事处的开发人员提供各种软件服务。
在SlapOS仪表盘上登录后,用户可以使用左侧面板中的“Services(服务)”菜单请求新的软件服务。
Services(服务)部分显示实例化服务列表。这些服务可以是完整的业务应用程序(例如:ERP5,Drupal,XWiki);或是明确定义的网络服务(例如:memcached,cloudooo,Frontend),作为某个面向服务的架构(SOA)的组成部分;虚拟机(例如:KVM)又或者是其他IaaS(基础设施即服务)供应商的一个实例(例如:Amazon EC2)。
实例化一项新服务,请在子菜单中单击“add(添加)”。
在Vifib软件目录上加载可用服务产品列表。选择要实例化的服务。
一旦选择服务后,还必须选择软件版本。SlapOS能够提供相同应用程序的多个版本的多个实例,(例如:用户可以使用MySQL 5.0,MySQL 5.1 亦或是 MariaDB, SkySQL)。
对于每个应用程序可用的版本数量,SlapOS没有限制。 这对于常常需要修补文件或更改基础软件的编译选项的生产系统十分重要。SlapOS与传统的GNU / L inux发行版不同,因为它不定义什么是“标准MySQL”,“标准Java”,或是“标准Apache”。根据经验,为了在云上构建可扩展的系统,必须对某些软件做一些微小但重要的改动。因此除了Linux内核及核心库之外,所有GNU/Linux发行版都是不可靠的。
例如:在为了符合发行指南的进程中,一些GNU / Linux发行版向打包软件添加影响单元测试的系统错误。并且在发行版的错误跟踪页面显示无计划修复此错误,因为没有符合版本指南的解决方案。从GNU / Linux发行版的角度来看,这是有意义的,但对于构建生产系统,却无法接受。
在请求和实例化服务之前,我们为众多软件提供特定配置参数。手动选择网络节点将覆盖SlapOS Master的自动分配服务。
单击Proceed(继续)触发请求。一旦软件已经安装在所选节点的计算机分区中并可以使用,其连接参数将在先前看到的服务器列表中的新条目上发布。
请注意 ,当仅是在内部使用时,SlapOS的Vifib实现对软件实例或消费不记费。如有需要,这些功能很容易集成。
以下部分简要介绍SlapOS的架构。在understanding the SlapOS architecture可以获得更详细的概述。
SlapOS架构使用两种类型的服务器:SlapOS Master( COMP-ROOT )和SlapOS Nodes( COMP-0,1,2,3 )。 COMP-0 节点具有特殊状态,因为它不仅为主节点Master提供服务也为网络上的其他节点提供服务。
SlapOS Master通知每个节点它应该安装哪个软件,以及运行哪个软件的实例。每个节点向SlapOS Master提供每个软件的每个实例的消费信息。
基于开始日期和结束日期(这两个日期代表了每个应用程序的执行帧的时间序期),同时也基于每个应用程序的资源使用情况,SlapOS Master可以为每个SlapOS用户的具体使用情况计费。
当前的SlapOS构架是基于单个冗余主节点,便于管理数千台服务器。SlapOS的后续版本也将依赖SlapOS Master的分布式实现。
SlapOS节点运行一个名为“SlapOS Kernel”的小内核。该内核包含一个最小的GNU / Linux发行版,SlapGrid守护程序,引导应用程序的Buildout环境,以及管理进程的Supervisord。
通过使用OpenSuSE和SuSE Studio服务,SlapOS内核的当前实现得以创建。并且此实现足够小以适应USB密钥。
SlapOS主节点只是一个安装了ERP5的标准SlapOS节点。
ERP5 “云引擎”是ERP5开源ERP的扩展,它除了具有计费和财务功能外,还提供运营IaaS(基础设施即服务),SaaS(软件即服务)或PaaS(平台即服务)公司所需的所有标准业务流程。ERP5 云引擎可以单独使用,也可以与其他业务应用程序结合使用。
ERP5云引擎主要任务是持续追踪所有可用的SlapOS节点,列出可以请求服务的所有软件和版本,并定义如何安装(哪个版本的哪个应用可以被安装在哪个SlapOS节点);确定一个给定的应用程序如何实例化;并持续跟踪某个实例具体在哪个节点上运行。ERP5云引擎有时也被称为“SlapGRID云引擎”。
ERP5云引擎还为用户提供注册SaaS(软件即服务),PaaS(平台即服务)或IaaS(基础设施即服务)的订阅进程;用户也可通过电子商务门户网络订购和访问实例。ERP5还含有一个CRM界面来处理支持请求以及一套完整的财务系统。
ERP5云引擎可以使用基于标准协议(例如:SyncML,REST,SOAP,XML-RPC,LDAP或MySQL)的标准接口连接到现有系统。 ERP5 云引擎也支持大多数单点登录(SSO)的实现。
在初始安装SlapOS节点之后,通过名为“配方(recipes)”和“软件版本(Software Releases)”,用户可以请求实例化一个给定且可用的软件的实例。
SlapOS已经为许多常见软件(MySQL,Apache,memcached等)提供了默认配方。但是,建议用户使用自己的编译选项和特殊的构建配置来创建自己的配方。例如,可以为MediaWiki特定版本创建一个配方,而为OS Commerce创建另一个配方。 每个配方都可以使用自己的自定义编译选项嵌入自己所在版本的Apache,MySQL。这样,配方就是独立的,并且在创建者的控制下。
软件版本号被定义为git存储库的URL和版本号。git储存库含有构建一个完整软件应用程序所需的一组配方。此存储库被称为buildout directory(构建任务目录) 。软件版本号还确定了一个签名,以确保已下载的构建任务目录包含正确文件。
安装软件版本的进程依赖SlapOS内核的两个组件:SlapGRID和Buildout。 SlapGRID从SlapOS Master处请求应安装在SlapOS节点上的软件列表,SlapOS Master传回要安装的软件版本。SlapGRID下载所选软件版本的构建任务目录并运行buildout(构建任务)命令。Buildout命令下载所需的所有源代码和依赖项来编译配方中定义的软件应用程序,编译所有源代码(使用缓存加速编译)并在/ opt的子目录中安装软件应用程序二进制文件和库。
一旦在SlapOS节点上安装了所需的应用程序,就可以创建所谓的“软件实例”。
“软件实例”的概念是指现代服务器可以轻松运行同一软件的多个独立进程。使用IPv6,可以十分轻松的地将数百个独立IP地址与每个服务器相关联。每个应用程序的每个实例都有一个IPv6地址。此外,因为所有应用程序共享相同的数据库,所以运行相同软件的另一个实例的内存占用很小,这与虚拟机情况不同。
因此,可以在单个SlapOS节点上运行超过200个同一软件的实例。在TioLive服务(已停产)中,标准双CPU服务器上可以运行200个ERP5开源ERP实例。
本节将从安装到创建配方来介绍如何使用SlapOS,并指明相关文档。
$ sudo su
# wget https://deploy.erp5.net/slapos && bash slapos
安装SlapOS的最简单方法是单线安装程序。SlapOS Master安装步骤详见 installing the COMP-ROOT.
可以使用 installing the COMP-0来设置第一个所需的网络节点COMP-0, installing COMP-123 概述 "常规" 网络节点设置步骤。若想达到最少设置,则无需安装常规节点。
class Recipe(BaseSlapRecipe):
def_createConfigurationString(self):
instance_parameterdict = self.computer_partition\
getInstanceParameterDictu()
ip = isntance_parameter_dict['ip_list'][0][1]
tcp_port = 51000
self.computer_partition.setConnectionDict(
dict(ip=ip,tcp_port=tcp_port
)
return '-|%s -p %s -U 0' (ip, tcp_port)
def_install(self):
self.wrapper_template_location = pkg_resources.resource_filename(
__name__, os.path.join('template','wrapper.in')
)
self._createRunningWrapper(dict(
real_binary = self.options['server_binary'],
configuration_string = self.createConfigurationString()
))
return [] # nothing to return to buildout
为SlapOS创建配方也非常简单。在上面的示例中,实例化了一台缓存服务器。为了启用这项服务,只需使用SlapOS Master返回的连接信息,简单地生成一个启动脚本。
> python
from slapos.slap import slap
import memcache
s = slap()
s.initializeConnection(
"https://nexedivifib1.dyn.majimoto.net:40443/erp5/portal_salp"
)
cp = s.registerComputerPartition("nexedivifib8", "slappart197")
ncp = cp.request(
"https://nexedivifib1.dyn.majimoto.net:40443/erp5/web_site_module/erpypi/
memcached_software_profile-0.0.3.cfg", "memcached", "memcached_server 1")
[...]
connection = ncp.getConnectionDict()
mc = memcache.Client(['%s:%s' % (
connection['ip'], connection['tcp_port'])])
mc.set("some_key", "Some Value")
value = mc.get("some_key")
SLAP协议本身很容易调用SLAP库。在上面的示例中,初始化了SlapOS Master的一个新连接并且实例化了现有的计算机分区对象。然后,请求缓存服务器实例,并且一旦实例化,就可以开始访问和使用。
computer_id = 'COMP-X'
frontend_software_release_url = 'https://lab.nexedi.com/nexedi/slapos/raw/master
/software/apache-frontend/software.cfg'
supply(frontend_software_release_url, computer_id)
request(
software_release=frontend_software_release_url,
shared=True,
partition_parameter_kw={
'url': "https://[IPV6]:2199/",
'https-only': 'true'
}
)
SlapOS还提供Slap console(控制台) 和iPython记事本壳层,允许通过终端提供软件和请求实例。在上面的示例中展示了请求从属Frontend(Caddy)实例。
SlapOS旨在实现最大兼容性。SlapOS默认发行版已包含许多NoSQL技术,数据库,运行时和应用服务器的配方。新的配方也很容易从成千上万现有社区已创建的构建任务配方中获得。
我们可以从别的配方那里获得灵感,再根据自己的需要进行调整,从而创建自己的配方。例如,为SlapOS创建一个高性能LAMP配方,我们可以重新使用Apache,MySQL,Varnish,ha-proxy的几个现有配方并将它们组合在一起,以便PHP应用可以分布在多个服务器上,共享两个配置为冗余模式的MySQL数据库。从1增加到2到3再增到100,只是改变配方的参数,在SlapOS云操作系统上实例化的Apache节点的数量也会跟着变化。剩下的工作就交给SlapOS。