.NETCore微服务之:基于Consul实现服务治理
本篇文章为.NETCore实现企业级微服务架构技术点介绍
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名与空间、雅安服务器托管、营销软件、网站建设、芜湖网站维护、网站推广。
Consul是一个分布式,高可用、支持多数据中心的服务注册、发现、健康检查和配置共享的服务软件。
由 HashiCorp 公司用 Go 语言开发 推出的开源产品
用于实现分布式系统的服务发现、服务隔离、服务配置。
这些功能中的每一个都可以根据需要单独使用,也可以同时使用所有功能。Consul 官网目前主要推 Consul 在服务网格中的使用。
与其它分布式服务注册与发现的方案相比:
Consul 的方案更“一站式”——内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具。
Consul 本身使用 go 语言开发,具有跨平台、运行高效等特点,也非常方便和 Docker 配合使用。
与市面上其他系统比较如下:
使用Consul 的优势
使用 Raft 算法来保证一致性, 比复杂的 Paxos 算法更直接。相比较而言, zookeeper 采用的是 Paxos, 而 etcd 使用的则是 Raft。
支持多数据中心,内外网的服务采用不同的端口进行监听。多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟, 分片等情况等。zookeeper 和 etcd 均不提供多数据中心功能的支持。
支持健康检查。etcd 不提供此功能。
支持 http 和 dns 协议接口。zookeeper 的集成较为复杂, etcd 只支持 http 协议。
官方提供 Web 管理界面, etcd 无此功能。
Consul 保持了 CAP 中的 CP,保持了强一致性和分区容错性。
Consul 支持 Http\gRPC\DNS 多种访问方式。
Consul的主要特点:
Service Discovery :服务注册与发现
服务注册: 简单理解,就是有一个注册中心,我们的每个服务实例启动时,都去注册中心注册一下,告诉注册中心我的地址,端口等信息。同样的服务实例要删除时,去注册中心删除一下,注册中心负责维护这些服务实例的信息。
服务发现: 既然注册中心维护了各个服务实例的信息,那么客户端通过注册中心就很容易发现服务的变化了。
有了服务注册与发现,客户端就不用再去配置各个服务实例的地址,改为从注册中心统一获取。
那注册中心又是怎么保证每个地址的可用状态呢,假如某个实例挂了怎么办呢?原则上挂掉的实例不应该被客户端获取到,所以就要提到: 健康检查 。
健康检查: 每个服务都需要提供一个用于健康检查的接口,该接口不具备业务功能。服务注册时把这个接口的地址也告诉注册中心,注册中心会定时调用这个接口来检测服务是否正常,如果不正常,则将它移除,这样就保证了服务的可用性。
常见注册中心: 有 Consul、ZooKeeper、etcd、Eureka。
Consul用Golang实现。
因此具有天然可移植性(支持Linux、windows和Mac OS X)。
安装包仅包含一个可执行文件,方便部署,与Docker等轻量级容器可无缝配合。
此外,关于Consul的架构以及相关的角色,如下图所示:
以Server模式运行的Consul Agent节点用于维护Consul集群的状态。
官方建议每个Consul Cluster至少有 3个或以上的运行在Server Mode的Agent,Client节点不限 。
Consul支持多数据中心,每个数据中心的Consul Cluster都会在运行于Server模式下的Agent节点中选出一个Leader节点。
这个选举过程通过Consul实现的raft协议保证,多个 Server节点上的Consul数据信息是强一致的。
处于Client Mode的Consul Agent节点比较简单,无状态,仅仅负责将请求转发给Server Agent节点。
上一篇参考 .NETCore微服务系列:
.NETCore微服务系列:基于Polly 实现API服务保护
下一篇为大家介绍 .NETCore微服务系列:
SkyWalking构建调用链监控
go语言以后会不会成为主流web开发语言?
不会,目前的趋势是前后端分别,现在很多地方,很多公司已经基本达成了这样的目标,结果是前端通过JavaScript来完成相关的所有的工作,后端的实现相对比较复杂,可以通过golang或者Java或者点虐 core等开发语言完成,也就是说web开发完全基于js而不是其他语言。所以相关工作可以从其他语言忽略,js变成相关领域语言
特斯拉为何使用点虐 core技术框架?为何不用java/go等?
在linux下,同等硬件点虐 core性能是java的2-3倍!国外公司不傻,不会因为哪边人多用哪个。
本文标题:go语言和netcore go语言和python的区别
分享地址:http://lswzjz.com/article/ddipjch.html