摘要:差异基于的服务提供和消费基于的服务注册和发现的负载均衡是可以调控,只是能调权重,其他需要可控的都需要自己写插件但是的吞吐量比大很多,可以根据业务选择用哪种方式。
差异
基于Nginx的服务提供和消费
基于zookeeper的服务注册和发现
zk的负载均衡是可以调控,nginx只是能调权重,其他需要可控的都需要自己写插件;但是nginx的吞吐量比zk大很多,可以根据业务选择用哪种方式。
服务端注册1.创建WEB API 程序,使用NuGet下载ZookeeperNet安装包
2.WEB API 我只提供了一个测试方法
public class DataIndexController : ApiController { [HttpGet] public ListGetList() { List result = new List (); result.Add("111"); result.Add("222"); return result; } }
3.WEB API Global文件中注册服务地址到Zookeeper
public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { GlobalConfiguration.Configure(WebApiConfig.Register); GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); CreateZkNode(); } ////// 注册服务节点 /// private void CreateZkNode() { ZkHelper zk = new ZkHelper(); string node = AppSettingsHelper.GetStringValue("ServiceNode"); ///创建节点 zk.CreateNode(node, "data"); } }
ZkHelper核心代码如下
连接ZooKeeper并创建监听
zk = new ZooKeeper(ZkConnectString, new TimeSpan(0, 0, 0, CONST_TIMEOUT), new Watcher());
创建Zookeeper临时节点和永久节点
if (index == lt.Count - 1) { ///叶节点设置临时节点 zk.Create(path, "".GetBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.Ephemeral); } else { ///父节点设置永久节点 zk.Create(path, "".GetBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.Persistent); }
创建Zookeeper监听类
public class Watcher : IWatcher { public void Process(WatchedEvent @event) { if (@event.Type == EventType.NodeDataChanged) { Console.WriteLine(@event.Path); } if (@event.Type == EventType.NodeChildrenChanged) { Console.WriteLine(@event.Path); } } }
监听分 数据变化和节点变化
4.将web api部署三套
5.利用ZooInspector工具查看Zookeeper节点信息
此时服务地址已经注册上去了
如果我们将IIS应用程序池停止或者网站停止,响应的临时节点也会删掉
具体数据一致性可以参考https://www.cnblogs.com/leesf...
客户端服务发现static void Main(string[] args) { string result = string.Empty; string strService = ZKService.Instanc.GetNode(ZKService.zkNode); if (!string.IsNullOrEmpty(strService)) { result = WebHelper.Get(string.Format("http://{0}//api/dataindex/getlist", strService)); } System.Console.WriteLine(result); System.Console.Read(); }
加群895244712,免费获取架构师进阶学习资料
ZkHelper核心代码
public string GetNode(string path) { string result = string.Empty; try { var stat = zk.Exists(path, true); if (stat != null) { //取得/root节点下的子节点名称,返回Listvar childData = zk.GetChildren(path, true).OrderBy(l => l).ToList(); if (childData.Count > 0) { Random random = new Random(); int index = random.Next(0, childData.Count); result = childData[index]; } } } catch (Exception e) { throw e; } return result; }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/72251.html
摘要:的服务治理平台发源于早期的个人项目。客户端发现模式要求客户端负责查询注册中心,获取服务提供者的列表信息,使用负载均衡算法选择一个合适的服务提供者,发起接口调用请求。系统和系统之间,少不了数据的互联互通。随着微服务的流行,一个系统内的不同应用进行互联互通也是常态。 PowerDotNet的服务治理平台发源于早期的个人项目Power.Apix。这个项目借鉴了工作过的公司的服务治理方案,站在...
摘要:是一个相对比较新的微服务框架,年才推出的版本虽然时间最短但是相比等框架提供的全套的分布式系统解决方案。提供线程池不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务器雪崩的问题。通过互相注册的方式来进行消息同步和保证高可用。 Spring Cloud 是一个相对比较新的微服务框架,...
摘要:可简单地认为它是的扩展,负载均衡自然成为不可或缺的特性。是基于开发的服务代理组件,在使用场景中,它与和整合,打造具备服务动态更新和负载均衡能力的服务网关。类似的特性在项目也有体现,它是另一种高性能代理的方案,提供服务发现健康和负载均衡。 摘要: Cloud Native 应用架构随着云技术的发展受到业界特别重视和关注,尤其是 CNCF(Cloud Native Computing Fo...
摘要:可简单地认为它是的扩展,负载均衡自然成为不可或缺的特性。类似的特性在项目也有体现,它是另一种高性能代理的方案,提供服务发现健康和负载均衡。 Dubbo Cloud Native 实践与思考 分享简介 Cloud Native 应用架构随着云技术的发展受到业界特别重视和关注,尤其是 CNCF(Cloud Native Computing Foundation)项目蓬勃发展之际。Dubbo...
阅读 3446·2021-11-25 09:43
阅读 1003·2021-11-15 11:36
阅读 3294·2021-11-11 16:54
阅读 3918·2021-09-27 13:35
阅读 4323·2021-09-10 11:23
阅读 5538·2021-09-07 10:22
阅读 3009·2021-09-04 16:40
阅读 748·2021-08-03 14:03