SlapOS协议
SlapOS基于SLAP协议,是每个SlapOS从节点用于通过http联系主服务器的轮询协议。联系主服务器的四个不同目的:
- 定义容量;
- 收集要安装的软件列表;
- 收集要配置的计算机分区列表;
- 发布会计/使用信息。
在启动时,节点会联系安装期间指定的Master,并通知Master启动过程已完成。它还提供一个可用计算机分区列表,以及相应的标识符和IPv6地址。set capacity request(设置容量请求)每24小时重新发送一次,以防网络配置更改,虽然这种情况不太可能发生。
每隔5分钟,节点就会请求应该安装的软件列表。由于SlapOS节点和SLAP协议是无状态的,因此交换的值是Promise ,而不是该进行的操作(请参阅了解SlapOS Promises )。因此,SlapOS Master返回预期要安装在节点上的完整软件列表,而不考虑是否已经安装了此类软件。但是,如果已安装的软件不再在列表中,则表示应将其删除。
每隔5分钟,SlapOS从节点还会请求要配置的计算机分区列表。这两个请求由不同的进程处理,因为安装软件可能需要几分钟(预编译和已缓存)到几个小时(重新编译架构),而配置只需几秒或更短时间。每一次请求计算机分区列表最终将导致重新配置所有分区。如果较大的服务器包含300个分区,每个分区的配置需要一秒钟,则重新配置所有分区就需五分钟。SlapGRID尝试优化分区配置,只更新自上次运行以来已更改的那些分区。但是,如果不得已要对服务器上所有分区进行配置,则配置将在单个线程和进程上运行,以确保系统不会崩溃,并且服务器的大多数核心都仍可独立运行,而不会进行软件配置。
计算机分区上的会计/使用信息每天会收集一次。在计算机分区中运行的软件实例生成TioXML格式的使用和事件报告文件。所有文件都汇总并发布到SlapOS Master,然后生成会计和计费信息。交换的会计信息是非常抽象的,包括物理使用(CPU,RAM,磁盘等),虚拟使用(用户数量,交易处理服务数量) 和事件(X秒内无法访问数据) 。TioXML格式易于扩展,以涵盖任何可能的计费要求。
在撰写此文时,正在考虑使用HTTP长轮询或Web Socket扩展get-cp-list请求,以使系统更具反应性,减少轮询SlapOS Master的频率。尽管如此,Slap协议可能永远不会包括提供即时云资源。 这应该是基于预测或安全的预分配来完成,而不是按需分配。顺着这个思路,减慢资源供应可能有助于降低可用云资源不确定性的风险,从而提高整体云系统韧性。除此之外,还需要了解是否可以通过基于HTTP的推送协议实现更高的可扩展性,以及这种协议是否能够抵御洲际互联网传输路径上的频繁网络中断。
计算机分区配置文件
每个计算机分区由专用IPv6地址 ,专用本地(内部) IPv4地址 ,专用Tap接口( slaptapN ),专用用户( slapuserN
)和专用目录( /srv/slapgrid/slappartN
)组成。此外,也可使用专用块设备和可路由的IPv4地址。
SlapOS通常配置为使用IPv6地址。虽然没有要求,但IPv6极大地简化了公共云和私有云应用程序的SlapOS部署。在私有设置中,无需设置端口复杂的重定向隧道,IPv6便可互连SlapOS从节点。在公共云情况下,IPv6使用更具弹性的协议和更宽的扁平地址空间替换现有的公司隧道(VPN)。IPv6寻址可以帮助在一台计算机上分配数百个IPv6地址。因此,每个正在运行的服务都可以拥有不同的IPv6地址,而无需更改其默认端口设置,并简化了每个计算机分区的网络流量计算。
所有这些都可以通过IPv4或通过VPN实现,但是IPv4地址已枯竭。除此之外,它也更复杂,弹性也更低,因此不可能在一台计算机上分配众多公共IPv4地址。
尽管IPv6用于在SlapOS公共云或私有云上的全局互连进程,但在编写本文时,大多数现有软件与IPv6尚不兼容。原因各不相同:或是因为IP地址存储在3个整数的结构中;或是由于IPv6 URL不使用间隔号,因而无法被识别。由于这些原因,每个计算机分区都有一个专用的本地,不可路由的IPv4地址。
传统软件将使用代理机制监听此IPv4地址,该代理机制在IPv6和IPv4之间创建桥接。在HTTP(s)应用程序的情况中,通常使用Frontend(Caddy)来执行此任务,Frontend同时也用作应用防火墙(mod_security)和安全设置器(TLS)。对于其他协议,使用Stunnel(加密连接)可达到相同目的(详细信息,请参阅以下内容)。
对于另一种类型的应用程序,IP不是合适的ISO级别。 在这些情况下,可以使用模拟物理以太网接口的Tap接口。此接口通常与其中一个服务器的物理以太网接口桥接。虚拟化软件(如KVM)经常用Tap来访问外部网络(例如SlapOS提供的KVM)。但是Tap也可以用于其他应用程序,例如虚拟专用网络或需要直接以太网接入的虚拟交换机。在有100个分区的计算机上,Tap接口通常名slaptap0,slaptap1,...slaptap99
。
...
每个计算机分区都与一个用户和一个目录相连。在有100个分区的计算机中,用户名为slapuser0, slapuser1...slapuser99;目录名
为/srv/slapgrid/slappart0,/srv/slapgrid/slappart1,.../srv/slapgrid/slappart99
目录/srv/slapgrid/slappart0
属于用户(或组) slapuser0
,依此类推。 slapuser0
能够访问/srv/slapgrid/slappart0
的文件,而slapuser1
无法访问这个文件,因为他只能访问存储在/srv/slapgrid/slappart1
的文件。同样的,Tap接口slaptap0
属于slapUser0
,Tap接口slaptap1
属于slapuser1
,依此类推。
对于某些应用程序,可能需要将某些分区附加到原始块设备,以便在某些KVM配置下能最大化磁盘I / 0性能,并能直接访问SSH磁盘的物理分区。这种可能性已被包含在SlapOS的设计中,尽管在撰写本文时尚未完全实现。
因此,计算机分区被配置为不能访问另一计算机分区上的任何信息。SlapOS中的访问权限有三个不同的级别: 全局访问,仅限计算机分区访问和仅限超级用户访问。SlapOS从节点通常是全局硬件状态,具有全局访问权限,因此无需进一步用户化即可安装监视软件。
在计算机分区上运行的每个软件都可以访问由同一用户拥有的计算机分区的所有文件。在计算机分区中运行的软件不可能访问或修改超级用户拥有的文件。根据一般设计规则,SlapOS不会向应用程序或计算机分区授予任何超级用户权限。只有SlapGRID和Supervisord可以以超级用户权限执行。