自 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. java 选择结构if

    图1-1      if…else if…else语句的流程图 选择结构if语句与三元运算转换 三元运算符,它和if-else语句类似,语法如下: 判断条件 ? 表达式1 : 表达式2 三元运算符会得 ...

  2. fiddler设置抓取HTTPS协议数据包

    1.打开工具里的选项 2.选择弹窗中的HTTPS选项,如下图进行勾选 3.若浏览器显示不安全链接则需要添加证书 提示如下点击确定证书安装成功,可以查看安装的证书,点击Action 下图即可查看fidd ...

  3. 使用Windbg调试系统弹出的内存不可读错误

    步骤: 1. 使用Windbg挂钩到崩溃的进程上面 2. 使用~*k列出所有线程 3. 搜索UnhandledExceptionFilter所在的线程 4. 使用~ns切换到上面崩溃所在的线程,n为线 ...

  4. Docker系列(一):Docker简单介绍

    Docker简介: 多语言和框架:支持多语言和框架以及语言框架的扩展机制 多服务:开放的核心服务以及服务的扩展机制 多云和多IaaS技术:支持多种IaaS技术和多云的部署,包括公有云和私有云 Dock ...

  5. CSS 属性1

    CSS列表属性 list-style:列表样式,取值:none.去掉项目符号或编号前面的各种符号. CSS边框属性:每个元素都可以加边框线  border-left:左边框线.   格式:border ...

  6. npm使用入门

    NPM使用入门 npm 就是node package manager node的包管理工具 我们通过npm install 模块 来安装模块,缩写:npm i 模块,注意,低版本的node可能需要np ...

  7. ELK5.2+kafka+zookeeper+filebeat集群部署

    架构图 考虑到日志系统的可扩展性以及目前的资源(部分功能复用),整个ELK架构如下: 架构解读 : (整个架构从左到右,总共分为5层) 第一层.数据采集层 最左边的是业务服务器集群,上面安装了file ...

  8. Git合并时遇到冲突或错误后取消合并

    当合并分支时遇到错误或者冲突,分支旁边会多出“|MERGING”这个东西 有这个状态存在时,会导致后面想要再合并的时候提示如下 所以需要先取消这次合并,使用“git merge --abort”命令

  9. C# EF去除重复列DistinctBy

    在网上看了LinQ有DistinctBy方法,实际在用的时候并没有找到,后来参照了该网站才发现写的是拓展方法 https://blog.csdn.net/c1113072394/article/det ...

  10. 如何在Vue项目中使用Element组件

    [前提] 1.安装webpack    cnpm install webpack -g 2.安装vue/vue-cli    cnpm install vue vue-cli -g 3.初始化vue  ...