NetCore服务虚拟化01(集群组件Sodao.Core.Grpc)
一. 起始
去年.NetCore2.0的发布,公司决定新项目采用.NetCore开发,当作试验。但是问题在于当前公司内部使用的RPC服务为Thrift v0.9 + zookeeper版本,经过个性化定制,支持了异步,但也因为如此,这么多年来一直没有去升级,导致迁移工作很复杂(历史遗留项目太多,有各种语言的,目前只有.net体系的开发人员)。另外一点公司本身是做电商服务的,很多东西依赖了阿里的数据,阿里要求数据不能够出聚石塔,我们将所有相关的应用迁移到了聚石塔,随之问题也来了,聚石塔只开放了80端口,这么多的Thrift服务需要开放端口,机房与聚石塔之间的交互就很头疼了,如果改成http请求的话,代价以及各类成本较高。经过一段时间的调研,决定采用grpc作为新的RPC服务框架,原因有以下几点:
(1)支持多语言
(2)支持http/2,80端口可用
但是grpc需要做集群支持,也经过一段时间的研究,决定抛弃zookeeper,采用consul来作为注册中心,至于原因,有很多方面。
二. 组件Sodao.Core.Grpc
为了让grpc实现集群部署,自行开发了通用组件Sodao.Core.Grpc,其依赖于Grpc + Consul,代码已开源,详见github
https://github.com/mojinxun/core-grpc
https://gitee.com/overt/core-grpc
三. 简单介绍使用
1. Nuget包引用
Nuget版本:V 1.0.0
框架支持: Framewok 4.5 - 4.7 / NetStandard 2.0
Install-Package Sodao.Core.Grpc -Version 1.0.0
2. 配置信息
(1)服务端配置信息 (NetCore / Framework)
NetCore配置案例 appsettings.json
{ "GrpcServer": { "Service": { "Name": "SodaoGrpcServiceApp", 服务名称使用服务名称去除点 "Host": "service.g.lan", 专用注册的域名 (可选) "HostEnv": "serviceaddress", 环境变量配置(可选,同上) "Port": 10001, 端口:与端田申请 "Consul": { "Path": "dllconfigs/consulsettings.json" Consul路径,不配置将不注册,为单点项目 } } }}
Framework配置案例 app.config
// 添加section<configSections><section name="grpcServer" type="Sodao.Core.Grpc.GrpcServerSection, Sodao.Core.Grpc" /></configSections> // 添加节点<grpcServer><service name="SodaoGrpcServiceApp" port="10005" host="专用注册的域名 (可选)" hostEnv="环境变量配置(可选,同上)"><registry><consul path="dllconfigs/Consul.config" /></registry></service></grpcServer>
(2)客户端配置信息
NetCore
命名:[命名空间].dll.json 文件夹(dllconfigs)
Framework
(3)Consul配置文件
NetCore
{"ConsulServer": {"Service": {"Address": "http://consul.g.lan" // 默认8500端口 } }}
Framework
<?xml version="1.0" encoding="utf-8" ?><configuration><configSections><section name="consulServer" type="Sodao.Core.Grpc.ConsulServerSection, Sodao.Core.Grpc"/></configSections><consulServer><service address="http://consul.g.lan"></service></consulServer></configuration>
3. 服务端的使用
(1)NetCore
// 原因:服务启动的时候是一个单例,那么所有服务之下的全部是单实例,而数据层需要使用多实例
(2)Framework 4.6
直接调用GrpcServiceManager来启动
4. 客户端使用
(1)NetCore
强制依赖注入模式
配置文件默认使用 [命名空间].dll.json 可通过vs.menu工具生成nuget包
注入中直接调用如下
var res = _grpcClient.Client.Ask(new Service.Grpc.AskRequest() { Key = "abc" });
(2)Framework
客户端代理类,编译在Dll中,类似于ThriftProxy,源码如下,可忽略
使用代理类执行
ClientManager.Instance.[Method]
原文地址:https://www.cnblogs.com/mojinxun/p/10050303.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
NetCore服务虚拟化01(集群组件Sodao.Core.Grpc)相关推荐
- redis在Windows下以后台服务一键搭建集群(多机器)
redis在Windows下以后台服务一键搭建集群(多机器) 一.概述 此教程介绍如何在windows系统中多台机器之间布置redis集群,同时要以后台服务的模式运行.布置以脚本的形式,一键完成.多台 ...
- HeartBeat 集群组件概述
Heartbeat 是一个基于Linux开源的高可用集群系统.主要包括心跳服务和资源接管两个高可用集群组件.心跳监测服务可以通过网络链路和串口进行,而且支持冗余链路, 它们之间相互发送报文来告诉对方自 ...
- 云图说|OLAP开源引擎的一匹黑马,MRS集群组件之ClickHouse
摘要:ClickHouse是俄罗斯公司Yandex在2016年开源的高性能.开源联机分析列式数据库管理系统.开源后,凭借卓越的分析性能.极好的线性扩展能力和丰富的功能,被业界公认为实时分析领域OLAP ...
- 源码分析Dubbo Invoker概述----服务发现、集群、负载均衡、路由体系
Invoker,负载网络调用组件,底层依懒与网络通信,Invoker主要负责服务调用,自然与路由(比如集群)等功能息息相关,本节先从整体上把控一下Dubbo服务调用体系,服务发现.集群.负载均衡.路由 ...
- Heartbeat(v1、v2、pacemaker)集群组件概述
一.什么是Heartbeat Heartbeat 是一个基于Linux开源的高可用集群系统.主要包括心跳服务和资源接管两个高可用集群组件.心跳监测服务可以通过网络链路和串口进行,而且支持冗余链路, 它 ...
- 如何将单机版的Eureka服务改为集群版Eureka服务
Eureka 集群原理 基本原理 上图是来自eureka的官方架构图,这是基于集群配置的eureka: 处于不同节点的eureka通过Replicate进行数据同步 Application Servi ...
- 【SpringCloud】三、Nacos服务注册+配置管理+集群搭建
文章目录 一.认识Nacos 1.安装 2.服务注册和发现 3.服务分级存储模型 4.负载均衡策略--NacosRule 5.服务实例的权重设置 5.环境隔离namespace 6.Eureka和Na ...
- 云图说丨OLAP开源引擎的一匹黑马,MRS集群组件之ClickHouse
摘要:ClickHouse是俄罗斯公司 Yandex 在2016年开源的高性能.开源联机分析列式数据库管理系统.开源后,凭借卓越的分析性能.极好的线性扩展能力和丰富的功能,被业界公认为实时分析领域 O ...
- 微服务注册发现集群搭建——Registrator + Consul + Consul-template + nginx
在互联网应用领域,服务的动态性需求十分常见,这就对服务的自动发现和可动态扩展提出了很高的要求. 微服务系统动辄上万个服务,而且还要动态伸缩.以人工写好的IP.Port 硬编码脚本的方式无法做到大规模自 ...
最新文章
- 从指定文件夹里COPY指定的一批文件列表(TXT文件)
- 入门十大Python机器学习算法(附代码)
- 图解Win7下PowerShell初步使用
- Python批量删除错误图片、修改文件名以及删除重复图片
- 2025年全球5G设备将达到14亿部 但4G仍占主导地位
- Moodle中的角色与权限控制
- 1.Spring框架入门
- Windows Azure 云计算服务: 怎样按需选择并计算它将花费多少钱呢?
- Centos如何通过yum安装php7
- ECMA-262 6th Edition
- Disruptor 极速体验
- 乐优商城(09)--商品详情
- 混合线性规划matlab,matlab求解混合的非线性规划软件说明
- azure java sdk_用于 Azure 媒体服务的 Java SDK 使用入门 | Microsoft Docs
- leetcode题解日练--2016.8.6
- 《财务共享服务》读书笔记
- android 手机 apk安装失败对应码
- html+css模仿微信主页面
- 如何解决hao.123.com的挟持网页(篡改网站主页)
- 第一节:linux 开发AI算法以及libtorch部署算法详细教程-环境搭建