自 2010 年左右第一次引入以来,Apache ZooKeeper 目前在阿里巴巴集团内部已经有了将近 10 年的发展,使用的场景非常广泛,基于 ZooKeeper 强一致性的特点,被用在了分布式锁、分布式队列、Leader 选举、服务注册发现和配置管理等多个大数据和微服务场景下,包括配置中心,注册中心,分布式框架下,分布式调度框架,分布式消息中间件,分布式数据中间件等。

其中,在微服务场景中,注册中心的地位举足轻重,承载着地址路由的核心功能,常见的有 ZooKeeper,Eureka和 Nacos,在日常的研发中,如果没有接触运维过这些注册中心的开发同学,需要重新花大部分时间学习了解这些组件,并且如果想要在生产环境良好的运行它们,还需要有丰富的运维经验。

为此,阿里云推出了全托管的 ZooKeeper 集群产品

快速部署,开箱即用

在微服务应用开发中,就算是写个简单的 HelloWorld 程序提前验证业务流程,都需要手动预先搭建一套注册中心,搭建的过程中,各种注册中心的多种配置参数,需要了解并且合理设置,如果需要到不同的注册中心,搭建的方式又不能通用,完成一个简单微服务接口的开发,花了 80% 的时间在环境的搭建上面。

MSE 提供了一键开通集群的能力,基于云原生 K8s 资源底座,3 分钟左右,你就可以拥有一套属于自己的注册中心集群,微服务引擎的交付物,非常简单,就是一个连接串,后面已经帮你做好了负载均衡,高可用检测等等,目前 MSE 支持 ZooKeeper 注册中心,如果你有其他注册中心的需求,请肆无忌惮的告诉我们,可以在开通页面选择你需要的。

安全高效的连通方案

微服务引擎支持两种网络连通方案,公网实例和 VPC 专有网络,公网实例模式会给集群申请一个可供公网环境访问的域名,默认是有网络安全策略限制,无法访问的,需要用户自己额外配置白名单策略,这样最大限度的提升了系统的安全等级;VPC 专有网络,是阿里云的私网环境,网络的隔离性更加彻底,只有用户自己的专有网络,才能与微服务引擎实例连通,同时,网络延时,更加低,网络访问质量高效。

两种不同的网络方案 ,覆盖了用户日常的使用场景,在非阿里云网络环境下,可以通过公网模式,进行日常开发与测试,正式生产时,再切换至高效的专有网络模式。

实用的节点管理

微服务引擎提供了节点数据管理的可视化页面,ZooKeeper 的数据结构,在内存中是一颗树,我们将它一比一的在页面上呈现出来,这样就能直观形象的看到整个内存数据的状态,同时支持了可以在页面上对内存数据进行,增加,删除,更新,查询的常规操作。

在新增节点的时候,支持自动创建父目录,删除父节点的时候,支持递归删除下面的子节点,所见即所得,非常方便,是 ZooKeeper 原生客户端强功能有力的补充。

白屏化参数设置

白屏化的运维,能够最大限度的降低线上安全事故,通过工具自动化,降低人带来的不确定性操作,微服务引擎,提供了注册中心常用的配置项修改功能,可以直接通过页面上进行更改操作,更改完之后,一键重启生效。ZooKeeper 目前支持常用的配置项如下所示,同时还支持超级用户的设置,在你对 ZooKeeper 节点使用了 ACL 策略时,如果忘记了策略密码,可以通过超级用户的方式,访问加密数据。

高可用能力

微服务引擎实例,默认使用的是多可用区部署,这意味着,具备了多区域的容灾能力,在某个可用区出现系统性故障时,可以最大限度的保证整体服务的连续可用性。

微服务引擎的资源底座,依托于容器服务 ACK,是一款久经考验的商业化产品,同时也是阿里集团内规模化最大的在线服务容器组件,能够支持节点宕机自动恢复,磁盘使用的是阿里云的高性能云盘,保证在节点出现故障事,数据的完备性。

兼容原生接口

微服务引擎支持的注册中心,原则之一,就是完全兼容原产品的接口和功能,无需修改代码,对用户使用完全透明,如果需要切回原产品,也是无缝切换,不存在使用壁垒,给用户最大的选择。

Dubbo 应用集成 MSE

接下来,通过开发一个日常的 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 集群,大大提高了研发效率,专注于业务,微服务引擎目前处于公测期间,完全免费,申请地址点击这里,欢迎体验。

本文作者:中间件小哥

原文链接

本文为云栖社区原创内容,未经允许不得转载。

阿里云提供全托管 ZooKeeper的更多相关文章

  1. [cnBeta]阿里云推出全栈IPv6解决方案 加速推进下一代互联网应用

    https://www.cnbeta.com/articles/tech/795695.htm 访问: 阿里云 - 最高1888元通用代金券立即可用 作为国内首个全面支持IPv6的云厂商,过去5个月, ...

  2. [PHP] 阿里云 Composer 全量镜像

    阿里云 Composer 全量镜像 镜像地址:https://mirrors.aliyun.com/composer/

  3. 切换composer国内镜像 Laravel China停用,切换阿里云composer全量镜像

    composer config -g repo.packagist composer https://packagist.phpcomposer.com Laravel China 镜像完成历史使命, ...

  4. 阿里云弹性Web托管的URL重写问题

    今天将ThinkPHP写的网站搭到阿里云的弹性Web托管服务器上,出现路由问题 诸如访问 www.xxx.com/home/index.html会发生错误如下 页面报错: No input file ...

  5. HTTPS上线过程说明(阿里云提供免费证书)

    一.上马HTTPS的原因: ①.苹果App Store强制其平台上的app均要使用HTTPS ②.网站经常被劫持,用户和领导希望使用HTTPS ③.跟随HTTPS的大趋势 二.应用上马HTTPS之部门 ...

  6. 更改CentOS 7更新源为国内阿里云提供的源

    1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.下载新的CentOS-Base ...

  7. 利用阿里云提供的镜像快速更换本地的yum源

    打开网页:http://mirrors.aliyun.com/ 从“ 文件列表 ”找到自己的系统: Mirror Last update Help CPAN 2015-07-15 15:36:50   ...

  8. 阿里云ECS hadoop+spark+zookeeper+hive code-server 集群搭建

    懒得重新排版然后发到博客了.用在线文档看吧 https://www.kdocs.cn/l/srV6o8rABW9V 用线上IDE(code-server)写scala的时候,出现BUG可以参考下面两篇 ...

  9. 安装阿里云github提供的修改版minikube

    由于kubenetes域名背墙(gcr.io),如kubernetes-dashboard服务依赖不能正常使用. $ docker pull gcr.io/google_containers/paus ...

随机推荐

  1. MySQL Download

    { http://www.wampserver.com/#wampserver-64-bits-php-5-6-25-php-7 }

  2. 「题解」:X国的军队

    问题 A: X国的军队 时间限制: 1 Sec  内存限制: 256 MB 题面 题面谢绝公开. 题解 简单贪心. 按照存活的士兵数量(即参加战斗的士兵数量减去阵亡的士兵数量)排序. 若存活士兵数量相 ...

  3. js 定位到某个锚点的方法

    html页面内可以设置锚点,锚点定义 Html代码  ? 1 <a name="firstAnchor">&nsbp;</a> 锚点使用 Html代 ...

  4. .net core, docker 在vs2019开发过程中的问题以及解决办法

    .net core, docker 在vs2019开发过程中的问题以及解决办法 记录下来,帮助Ta人~ 1.vs调试,快Build完后提示Docker 端口:xxxx,xxxx,xxxx占用 解决办法 ...

  5. 面试系列 30 如何自己设计一个类似dubbo的rpc框架

    其实一般问到你这问题,你起码不能认怂,因为既然咱们这个课程是短期的面试突击训练课程,那我不可能给你深入讲解什么kafka源码剖析,dubbo源码剖析,何况我就算讲了,你要真的消化理解和吸收,起码个把月 ...

  6. C++自己用模板减少工作量

    今天写代码,遇到这样一个类似如下的需求: auto componentClassSavedByPLC = std::make_shared<ComponentClassSavedByPLC> ...

  7. 帝国cms学习

    手册地址1 手册地址2 入门 安装: 将下载的upload里的文件上传到网站更目录 然后 域名/e/install/index.php Warning: Use of undefined consta ...

  8. Linux 实用指令(7)--Linux 磁盘分区、挂载

    目录 Linux 磁盘分区.挂载 1 分区基础知识 1.1 分区的方式: 1.2 windows 下的磁盘分区 2 Linux分区 2.1 原理分析 2.2 磁盘说明 2.3 使用lsblk指令查看当 ...

  9. 2019-8-31-dotnet-core-发布只带必要的依赖文件

    title author date CreateTime categories dotnet core 发布只带必要的依赖文件 lindexi 2019-08-31 16:55:58 +0800 20 ...

  10. [sonata admin] argument "$code" of method

    2. CREATING AN ADMIN 按照这里,在 AppBundle中的Controller创建了 CategoryAdmin 类,当运行 php bin/console server:star ...