Orleans 2.0 官方文档 —— 6.6 部署 -> Consul部署

使用Consul作为会员身份提供程序

Consul简介

Consul是一个分布式、高可用性和数据中心感知的服务发现平台,包括简单的服务注册、健康检查、故障检测和键/值存储。它建立在这样的前提下:即数据中心中的每个节点都运行一个Consul代理,该代理充当服务器或客户端,通过可扩展的gossip协议进行通信。

这里有一个非常详细的Consul介绍,包括与类似的解决方案比较。

Consul是用GO编写的,是开源的;已编译的下载,适用于Mac OS X,FreeBSD,Linux,Solaris和Windows

为什么选择Consul?

作为Orleans成员资格提供程序,当您需要交付一个on-premise的解决方案时,Consul是一个不错的选择,它不需要您的潜在客户拥有现有基础架构一个合作的IT提供商。Consul是一个非常轻量级的单一可执行文件,没有依赖项,因此可以很容易地构建到您自己的中间件解决方案中。当Consul已经是您发现、检查和维护微服务的解决方案时,与Orleans成员身份完全集成是有意义的,这样既简单又易于操作。因此,我们在Consul(也称为“Orleans Custom System Store”)中实施了一个成员表,该表与Orleans的集群管理完全集成。

安装Consul

Consul.io上有非常广泛的、关于建立一个稳定的Consul集群的文档,在这里重复这一点是没有意义的; 但为了您的方便,我们提供了本指南,以便您可以非常快速地让Orleans与一个独立的Consul代理一起运行。

1)创建一个文件夹以将Consul安装到例如C:\Consul

2)创建一个子文件夹:C:\Consul\Data (如果它不存在,Consul不会创建它)

3)下载 Consul.exe并将其解压缩到C:\Consul\

4)在C:\Consul\下打开命令提示符

5)输入 Consul.exe agent -server -bootstrap -data-dir "C:\Consul\Data" -client=0.0.0.0

agent指示Consul运行承载服务的代理进程。如果没有这个,Consul进程将尝试使用RPC来配置正在运行的代理。

-server将代理定义为服务器而不是客户端(Consul 客户端是承载所有服务和数据的代理,但没有投票权来决定集群的管理节点,也不能成为集群的管理节点。

-bootstrap 必须引导集群中的第一个(并且只引导第一个!)节点,以使其承担集群的管理权。

-data-dir [path] 指定存储所有Consul数据的路径,包括集群的成员身份表

-client=0.0.0.0 通知Consul在哪个IP上打开服务。

还有许多其他参数,以及使用json配置文件的选项。有关选项的完整列表,请参阅Consul文档。

6)通过在浏览器中打开服务端点,验证Consul是否正在运行,并准备好接受来自Orleans的成员身份请求。

Orleans的配置

服务器

目前,“自定义”成员资格提供程序的OrleansConfiguration.xml配置文件存在一个已知问题,无法正确解析。因此,在启动Silo之前,您必须在xml中提供一个占位符SystemStore,然后在代码中配置提供程序。

OrleansConfiguration.xml

<OrleansConfiguration xmlns="urn:orleans">
    <Globals>
        <SystemStore SystemStoreType="None" DataConnectionString="http://localhost:8500" DeploymentId="MyOrleansDeployment" />
    </Globals>
    <Defaults>
        <Networking Address="localhost" Port="22222" />
        <ProxyingGateway Address="localhost" Port="30000" />
    </Defaults>    
</OrleansConfiguration>

代码

public void Start(ClusterConfiguration config)
{
    _siloHost = new SiloHost(System.Net.Dns.GetHostName(), config);

    _siloHost.Config.Globals.LivenessType = GlobalConfiguration.LivenessProviderType.Custom;
    _siloHost.Config.Globals.MembershipTableAssembly = "OrleansConsulUtils";
    _siloHost.Config.Globals.ReminderServiceType = GlobalConfiguration.ReminderServiceProviderType.Disabled;

    _siloHost.InitializeOrleansSilo();
    var startedok = _siloHost.StartOrleansSilo();
    if (!startedok)
        throw new SystemException(String.Format("Failed to start Orleans silo '{0}' as a {1} node", _siloHost.Name, _siloHost.Type));

    Log.Information("Orleans Silo is running.\n");
}

或者,您可以完全在代码中配置silo。

客户

客户端配置更简单

ClientConfiguration.xml

<ClientConfiguration xmlns="urn:orleans">
    <SystemStore SystemStoreType="Custom" CustomGatewayProviderAssemblyName="OrleansConsulUtils" DataConnectionString="http://192.168.1.26:8500" DeploymentId="MyOrleansDeployment" />
</ClientConfiguration>

客户端SDK

如果您有兴趣使用Consul进行自己的服务发现,则可以使用客户端SDK,它适用于大多数的流行语言。

实施细节

成员身份表提供程序使用带CAS的Consul的键/值存储功能。当每个silo启动时,它会记录两个KV条目,一个包含Silo的详细信息,另一个保存上一次Silo它还活着的报告(后者是指诊断“我还活着”的条目,而不是直接在silo之间发送且不写入表中的故障检测的心跳)。所有对表的写入都使用CAS执行,以提供并发控制,这是Orleans的集群管理协议所必需的。在Silo运行后,您可以在Web浏览器中的此处查看这些条目,这将显示如下内容:

[
    "orleans/MyOrleansDeployment/192.168.1.26:11111@191780753",
    "orleans/MyOrleansDeployment/192.168.1.26:11111@191780753/iamalive"
]

您会注意到键是以“orleans/”为前缀的,这在提供程序中是硬编码的,旨在避免键空间与Consul的其他用户发生冲突。每个键都可以通过将其键名称(当然没有引用)附加到Consul KV根,来实现读取。这样做,会为您呈现以下内容:

[
    {
        "LockIndex": 0,
        "Key": "orleans/MyOrleansDeployment/192.168.1.26:22222@191780753",
        "Flags": 0,
        "Value": "[BASE64 UTF8 Encoded String]",
        "CreateIndex": 10,
        "ModifyIndex": 12
    }
]

解码字符串,为您提供实际的Orleans成员身份的数据:

http://localhost:8500/v1/KV/orleans/MyOrleansDeployment/[SiloAddress]

{
    "Hostname": "[YOUR_MACHINE_NAME]",
    "ProxyPort": 22222,
    "StartTime": "2016-01-29T16:25:54.9538838Z",
    "Status": 3,
    "SuspectingSilos": []
}

http://localhost:8500/v1/KV/orleans/MyOrleansDeployment/[SiloAddress]/IAmAlive

"2016-01-29T16:35:58.9193803Z"

当客户端连接时,它们使用uri,在一个HTTP GET中读取集群中所有silo的KV  http://192.168.1.26:8500/v1/KV/orleans/MyOrleansDeployment/?recurse

限制

Orleans扩展成员协议(表的版本和ETag)

Consul KV目前不支持原子更新。因此,Orleans Consul成员身份提供程序,只实现了基本的Orleans成员身份协议,并不支持扩展成员资格协议,如这里的描述。此扩展协议是作为附加但非必要的silo连接验证而引入的,并作为尚未实现的功能的基础。如果您的基础架构配置正确,您将不会因缺乏支持而受到任何不利影响。

多个数据中心

Consul的键值对目前尚未在Consul数据中心之间进行复制。有一个单独的项目来解决这个问题,但尚未证明它可以支持奥尔良。

在Windows上运行时

当Consul在Windows上启动时,它会记录以下消息:

==> WARNING: Windows is not recommended as a Consul server. Do not use in production.

这仅仅是因为在Windows环境中运行时,对测试的程度不够充分,而不是因为任何实际已知问题而显示。在决定Consul是否适合您之前,请先阅读此处讨论

潜在的未来发展

1)证明Consul KV复制项目,能够在WAN环境中的多个Consul数据中心之间,支持Orleans集群。

2)在Consul中实施提醒器表。

3)实施扩展成员协议。Consul背后的团队确实计划实施原子操作,一旦此功能可用,就可以消除提供程序的限制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值