自 2010 年左右第一次引入以来,Apache ZooKeeper 目前在阿里巴巴集团内部已经有了将近 10 年的发展,使用的场景很是普遍,基于 ZooKeeper 强一致性的特色,被用在了分布式锁、分布式队列、Leader 选举、服务注册发现和配置管理等多个大数据和微服务场景下,包括配置中心,注册中心,分布式框架下,分布式调度框架,分布式消息中间件,分布式数据中间件等。安全
其中,在微服务场景中,注册中心的地位举足轻重,承载着地址路由的核心功能,常见的有 ZooKeeper,Eureka和 Nacos,在平常的研发中,若是没有接触运维过这些注册中心的开发同窗,须要从新花大部分时间学习了解这些组件,而且若是想要在生产环境良好的运行它们,还须要有丰富的运维经验。网络
为此,阿里云推出了全托管的 ZooKeeper 集群产品。数据结构
在微服务应用开发中,就算是写个简单的 HelloWorld 程序提早验证业务流程,都须要手动预先搭建一套注册中心,搭建的过程当中,各类注册中心的多种配置参数,须要了解而且合理设置,若是须要到不一样的注册中心,搭建的方式又不能通用,完成一个简单微服务接口的开发,花了 80% 的时间在环境的搭建上面。负载均衡
MSE 提供了一键开通集群的能力,基于云原生 K8s 资源底座,3 分钟左右,你就能够拥有一套属于本身的注册中心集群,微服务引擎的交付物,很是简单,就是一个链接串,后面已经帮你作好了负载均衡,高可用检测等等,目前 MSE 支持 ZooKeeper 注册中心,若是你有其余注册中心的需求,请肆无忌惮的告诉咱们,能够在开通页面选择你须要的。框架
微服务引擎支持两种网络连通方案,公网实例和 VPC 专有网络,公网实例模式会给集群申请一个可供公网环境访问的域名,默认是有网络安全策略限制,没法访问的,须要用户本身额外配置白名单策略,这样最大限度的提高了系统的安全等级;VPC 专有网络,是阿里云的私网环境,网络的隔离性更加完全,只有用户本身的专有网络,才能与微服务引擎实例连通,同时,网络延时,更加低,网络访问质量高效。运维
两种不一样的网络方案 ,覆盖了用户平常的使用场景,在非阿里云网络环境下,能够经过公网模式,进行平常开发与测试,正式生产时,再切换至高效的专有网络模式。分布式
微服务引擎提供了节点数据管理的可视化页面,ZooKeeper 的数据结构,在内存中是一颗树,咱们将它一比一的在页面上呈现出来,这样就能直观形象的看到整个内存数据的状态,同时支持了能够在页面上对内存数据进行,增长,删除,更新,查询的常规操做。ide
在新增节点的时候,支持自动建立父目录,删除父节点的时候,支持递归删除下面的子节点,所见即所得,很是方便,是 ZooKeeper 原生客户端强功能有力的补充。微服务
白屏化的运维,可以最大限度的下降线上安全事故,经过工具自动化,下降人带来的不肯定性操做,微服务引擎,提供了注册中心经常使用的配置项修改功能,能够直接经过页面上进行更改操做,更改完以后,一键重启生效。ZooKeeper 目前支持经常使用的配置项以下所示,同时还支持超级用户的设置,在你对 ZooKeeper 节点使用了 ACL 策略时,若是忘记了策略密码,能够经过超级用户的方式,访问加密数据。工具
微服务引擎实例,默认使用的是多可用区部署,这意味着,具有了多区域的容灾能力,在某个可用区出现系统性故障时,能够最大限度的保证总体服务的连续可用性。
微服务引擎的资源底座,依托于容器服务 ACK,是一款久经考验的商业化产品,同时也是阿里集团内规模化最大的在线服务容器组件,可以支持节点宕机自动恢复,磁盘使用的是阿里云的高性能云盘,保证在节点出现故障事,数据的完备性。
微服务引擎支持的注册中心,原则之一,就是彻底兼容原产品的接口和功能,无需修改代码,对用户使用彻底透明,若是须要切回原产品,也是无缝切换,不存在使用壁垒,给用户最大的选择。
接下来,经过开发一个平常的 Dubbo 微服务应用,给你们演示下如何集成 MSE(微服务引擎),下面是部署结构图:
首先,登录微服务引擎官网,申请 1 个 ZooKeeper 集群实例,目前公测阶段,实例是无偿使用的,只须要开通一下服务,不收取任何其余费用:
进入微服务引擎控制台以后,点击“建立实例”按钮,这里咱们选择建立公网实例,配置选择 1 核 2G 。
点击建立以后,进入列表页,这里会展现你全部的集群,刚建立集群,运行状态会变成“启动/加载中”,整个建立过程,在 3 分钟左右,以后你就拥有一个属于本身的 ZooKeeper 的集群了。
mse-f3288e50-p.zk.mse.aliyuncs.com(外)这个连接串,是提供的外网域名,刚生产出来,是访问不了的,由于安全的限制,须要给它加白名单,加白名单的入口,从集群列表页,点击管理,进入管理页面,白名单设置按钮:
白名单的设置规则是,须要把你的公网出口 IP 或者 IP 段,添加进来,才能访问到 ZooKeeper 集群,例如,这次我本机的出口公网 IP 为“42.120.74.119”,那么设置的格式为“42.120.74.119/32”,
获取本机出口公网 IP 的方法,可直接访问 https://www.ip.cn/
设置完以后,可经过以下命令验证,与 Zookeeper 的连通是否成功:
echo mntr |nc mse-f3288e50-p.zk.mse.aliyuncs.com 2181
申请完 ZooKeeper 实例以后,能够开始写一个 DubboProvider ,代码以下:
public class DubboProvider { private final static String ZOOKEEPER_URL = "mse-f3288e50-p.zk.mse.aliyuncs.com"; public static void main(String[] args) throws InterruptedException { ServiceConfig<GreetingService> service = new ServiceConfig<>(); service.setApplication(new ApplicationConfig("first-dubbo-provider")); service.setRegistry(new RegistryConfig("zookeeper://" + ZOOKEEPER_URL + ":2181")); service.setInterface(GreetingService.class); service.setRef(new GreetingsServiceImpl()); service.export(); System.out.println("======dubbo service started"); new CountDownLatch(1).await(); } }
把 ZOOKEEPER_URL 换成你申请的地址连接串便可,可直接启动,启动以后,咱们经过微服务引擎的数据管理页面,能够清晰看到, DubboProvider 将本身的服务元数据,发布在“/dubbo/dubbo.GreetingService/providers/”目录下面,以一个节点(dubbo%3A开头)形式存在, 这是 1 个 ZooKeeper 的临时节点,当把 Provider 的进程关闭后,这个节点会消失,可是父节点不会,能够本身验证一下。
接下来,咱们启动一下 Consumer 节点,须要链接同一个 ZooKeeper 注册中心,从上面订阅刚才发布的接口地址列
表,代码以下:
public class DubboConsumer { private final static String ZOOKEEPER_URL = "mse-f3288e50-p.zk.mse.aliyuncs.com"; public static void main(String[] args) throws InterruptedException { ReferenceConfig<GreetingService> reference = new ReferenceConfig<>(); reference.setApplication(new ApplicationConfig("first-dubbo-consumer")); reference.setRegistry(new RegistryConfig("zookeeper://" + ZOOKEEPER_URL + ":2181")); reference.setInterface(GreetingService.class); GreetingService service = reference.get(); String message = service.sayHello("dubbo"); System.out.println("======"+message); Thread.sleep(Integer.MAX_VALUE); } }
启动以后,咱们经过数据管理页面,能够看到,Consumer 在 ZooKeeper 上面也注册了 1 个节点,在路径“/dubbo/dubbo.GreetingService/consumers/”下面:
同时,它也是属于临时节点,节点名字是通过 URL 编码的,解码后能够看到以下:
除了能够看到注册在 ZooKeeper 上面的数据结构及内容,微服务引擎还提供了 ZooKeeper 常见的监控图,例如客户端连接数,访问ZooKeeper 的 TPS(写操做),QPS(读操做),以下图所示:
经过上面的微服务示例开发,不须要太多的的运维学习成本,很快就拥有了本身的 1 个 ZooKeeper 集群,大大提升了研发效率,专一于业务,微服务引擎目前处于公测期间,彻底免费,申请地址点击这里,欢迎体验。
本文做者:中间件小哥
本文为云栖社区原创内容,未经容许不得转载。