如何通过Thick或Thin客户端部署C#实现的Ignite Service?
Ignite C#服务跨节点部署相关说明
Thick/Thin客户端部署服务的可行性
- Thin客户端不支持直接部署服务:Thin客户端是轻量接入端,没有完整的集群节点能力,不具备类传输、服务部署调度的权限,无法完成服务部署操作。
- Thick客户端理论支持部署服务,但不推荐生产环境使用:Thick客户端作为集群的客户端节点,虽然能调用服务部署API,但客户端节点生命周期通常不稳定(比如开发机关机、进程退出),且容易出现程序集版本不一致问题,会导致服务调度异常。生产环境建议直接通过服务端节点完成服务部署。
C#服务跨机器部署的具体实现
本地运行时部署能正常运行,本质是本地进程可以直接加载当前目录下的C#服务程序集;远程服务端通过独立批处理启动,核心要解决的是服务端节点可正确加载编写完成的C#服务程序集的问题,有两种成熟方案:
方案1:配置文件静态部署(生产环境首选)
这是稳定性最高的部署方式,操作步骤:
- 将C#服务项目编译生成的所有文件(包含项目自身dll、依赖的第三方dll,排除Ignite自带的基础依赖库),拷贝到所有服务端节点的固定目录,例如服务端运行目录下新建的
custom_services文件夹。 - 修改服务端批处理启动时加载的Ignite配置文件(通常是
appsettings.json或XML格式的配置文件),在服务配置段添加自定义服务的定义,C#类必须填写完整的全限定类名+程序集名称,JSON配置示例如下:
{ "Ignite": { "ServiceConfigurations": [ { "Name": "OrderProcessService", "TypeName": "MyApp.Services.OrderProcessService, MyApp.Services", "TotalCount": 2, "MaxPerNodeCount": 1 } ] } }
- 重启服务端的批处理启动进程,节点启动时会自动扫描加载对应路径下的程序集,完成服务初始化部署。
注意:所有承载该服务的服务端节点,必须放置版本完全一致的服务程序集,否则会出现类加载失败、序列化异常等问题。
方案2:运行时动态部署(测试环境适用)
如果需要从开发机直接给远程集群部署服务,省去手动拷贝文件、重启节点的步骤,可以通过对等类加载能力实现:
- 提前修改所有服务端节点的Ignite配置,开启对等程序集加载:将
PeerAssemblyLoadingMode设置为CurrentAppDomain。 - 开发机使用Thick客户端连接集群,客户端侧同样开启对等类加载配置,调用
Deploy方法部署服务时,客户端会自动将当前进程加载的服务程序集传输到服务端节点,服务端动态加载程序集后即可启动服务。
注意:动态部署时如果修改了服务代码,需要同步更新服务配置的版本号,否则集群会识别为已有旧版本服务,不会加载新的程序集。
内容的提问来源于stack exchange,提问作者Justin Mathew
相关产品推荐
相关产品推荐

