ZK

最全的微服务知识科普

╄→гoц情女王★ 提交于 2020-02-26 16:33:37
作者 | 董鹏 阿里巴巴技术专家 微服务 好处:实现跨团队的解耦,实现更高的并发(目前单机只能实现 c10k)不用再拷贝代码,基础服务可以公用,更好的支持服务治理,能够更好的兼容云计算平台。 RPC rpc:像调用本地方法一样调用远程函数; 客户端:一般利用动态代理生成一个接口的实现类,在这个实现类里通过网络把接口名称、参数、方法序列化后传出去,然后控制同步调用还是异步调用,异步调用需要设置一个回调函数; 客户端还需要维护负载均衡、超时处理、连接池管理等,连接池维护了和多个 server 的连接,靠此做负载均衡,当某个服务器宕机后去除该连接。请求上下文维护了请求 ID 和回调函数,超时的请求当回复报文到达后由于找不到请求上下文就会丢弃。 服务端:维护连接,网络收到请求后反序列化获得方法名称,接口名称,参数名称后通过反射进行调用,然后将结果在传回客户端; 序列化的方式:一种是只序列化字段的值,反序列化的时候重新构建对象再把值设置进去,另外一种方式直接将整个对象的结构序列化成二进制。 前者节省空间,后者反序列化速度快,目前的序列化框架也是在反序列化时间和占用空间之间权衡。有点类似哈夫曼编码,或者数据库怎么存储一行一行的数据。 注册中心 一般有 3 种模式: f5 做集中式代理; 客户端嵌入式代理例如 dubbo; 还有一种是综合上面两种,多个客户端共用一个代理

Windows Kafka 配置 -> 启动教程

吃可爱长大的小学妹 提交于 2020-02-26 02:39:49
Windows Kafka 启动教程 修改 boker.id 和 log.dirs 进入kafka目录下,新建文件夹 kafka-logs 与文件夹 zk-dir,进入config目录下,打开server.properties broker.id=1 log.dirs=../kafka-logs 修改 zookeeper.properties 找到 dataDirs,改为 dataDir=../zk-dir 启动 ZooKeeper 使用 powerShell 或 cmd 或 git Bash 打开到安装 kafka 的目录下,黏贴一下命令,执行便可 bin/windows/zookeeper-server-start.bat config/zookeeper.properties 启动 Kafka 重新打开一个 powerShell 或 cmd 或 git Bash,同样 cd 到 kafka 的安装目录下。输入一下命令。 bin/windows/kafka-server-start.bat config/server.properties 启动完成 创建 topic 创建 test 的 topic bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions

Druid 0.17 入门(2)—— 安装与部署

我是研究僧i 提交于 2020-02-26 01:46:48
在Druid快速入门其实已经简单的介绍过最简化配置的单节点部署,本文我们将详细描述Druid的多种部署方式,对于测试开发环境可以选用轻量的单机部署方式,而生产环境我们最好选用集群部署的方式,确保系统的高可用性。 一、单机部署 Druid提供了一组可以参考的配置和单机部署的启动脚本。 nano-quickstart micro-quickstart small medium large xlarge micro-quickstart 尺寸适合笔记本电脑等小型机器,目的是用于快速评估使用情况。 nano-quickstart 适合更小的配置,面向具有1个CPU和4GB内存的计算机。它旨在在资源受限的环境(例如小型Docker容器)中进行有限的评估。 单服务器参考配置 Nano-Quickstart:1个CPU,4GB RAM 启动命令: bin/start-nano-quickstart 配置目录: conf/druid/single-server/nano-quickstart 微型快速入门:4个CPU,16GB RAM 启动命令: bin/start-micro-quickstart 配置目录: conf/druid/single-server/micro-quickstart 小型:8 CPU,64GB RAM(〜i3.2xlarge) 启动命令: bin/start-small

zk-SNARKs零知识证明的8种构建介绍与对比

你。 提交于 2020-02-25 23:53:26
zk-SNARK是一个快速发展的领域,仅在过去的两个月里,就宣布了数个突破性的zk-SNARK构建。曾经必须的可信设置现在已经是冗余的了,这意味着可以使用任何计算。然而关于这些新的zk-SNARK构建的资料很难找到。在这片文章中,我将比较这些新出现的zk-SNARK构建,并在以后不定期更新。 <!--more--> 像zk-SNARK这样的零知识证明有很多应用:Zcash利用零知识证明来保护隐私,Coda和Mir利用零知识证明将整个区块链压缩到只有几K字节,0x和Matter则利用零知识证明将许多交易封装为以太坊 上的单一证明。如果你还不了解零知识证明,可以看一下这里的 解释 。 相关链接: 以太坊 | 比特币 | EOS | Tendermint Core | Hyperledger Fabric | Omni/USDT | Ripple 1、可信设置 传统的zk-SNARK,例如Groth16有一个主要的缺点:依赖于一个公共的参考字符串,该字符串使用一次性可信设置创建。该设置创建一个供证明方和验证方同时使用的参考字符串。这里面有三个主要的问题: 可信设置生成的“有毒废料”,如果泄露的话,可以被用于生成无法 检测的伪造证明。多方计算通常会忽略这个问题,但是仪式的协调 异常复杂。 可信设置创建的参考字符串通常绑定到一个电路(基本上就是程序)。 不可能为任何计算创建一个单独的可信设置

ZK实现分布式锁

喜夏-厌秋 提交于 2020-02-25 23:47:46
摘要 实现思路: 先去判断锁目录是否存在,不存在则创建锁目录及锁节点,存在则检查是否是自己持有锁,是自己持有则返回成功,不是自己持有则创建自己的锁节点。 去检查是否是自己持有锁,是自己持有锁,则返回成功;不是自己持有锁,则侦听上一个节点的状态变化,直到超时为止;上一个节点状态发生变化时,接着去检查是否轮到自己持有锁,依次循环。 跟 Redis分布式锁 的差异点对比: 本文实现的zk分布式锁是公平锁,上面redis实现的分布式锁是非公平锁。(redis也能实现公平锁,但是上文的redis锁没有实现) 本文实现的zk分布式锁不会出现业务超时导致锁失效的问题,上面的redis锁会出现这个问题。(redis锁能通过异步线程实现锁自动延时,但是上文的redis锁没有实现) 本文的zk锁跟上文的redis锁都支持可重入 比较下来,redis锁的性能更高一些 分布式锁源码 maven依赖 <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.10</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1

简述watcher

爱⌒轻易说出口 提交于 2020-02-25 23:39:11
watcher :watcher在ZK是一个核心功能,watcher可以监控目录节点的数据变化以及子目录的变化,一旦这些状态发生变化时,服务器就会通知所有设置在这个目录节点上的watcher,从而每个客户端都很快知道它所关注的目录节点的状态发生变化,而做出相应的反应。 来源: oschina 链接: https://my.oschina.net/u/4167465/blog/3166071

Hive安装

╄→尐↘猪︶ㄣ 提交于 2020-02-25 15:33:47
下载上传apache-hive-2.1.1-bin.tar.gz文件并解压 tar -zxvf apache-hive-2.1.1-bin.tar.gz -C /export/servers 配置环境变量 vi /etc/profile export HIVE_HOME=/export/servers/apache-hive-2.1.1-bin export PATH=$PATH:$HIVE_HOME/bin source /etc/profile hive文件配置 进入配置文件目录 # >cd /home/bigdata/hive/conf 将hive-default.xml.template文件拷贝并重命名成hive-site.xml # >mv hive-default.xml.template hive-site.xml 清空文件中<configuration></configuration>之间的内容并加入下列内容: <property> <name>hive.metastore.schema.verification</name> <value>false</value> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://机器名:3306/hive

ZK实现分布式锁步骤

北城余情 提交于 2020-02-23 10:52:17
ZK实现分布式锁步骤 a:所有需要竞争资源的进程,都在ZK一个持久化节点创建一个临时的有序的子节点 b:每个子节点阻塞并监听自己上一个子节点,如果上一个删除的时候,说明自己可以获取锁进行操作(上一个删除后还要判断下自己是不是最小的节点,如果不是,再去监听自己前一个节点) c:如果当前获取锁的节点由于网络原因或者系统故障不可用了,因为是临时节点,连接不可用的时候会自动删除节点,可以有效防止死锁的情况 来源: CSDN 作者: 414丶小哥 链接: https://blog.csdn.net/u010838785/article/details/104455358

zookeeper的客户端常用操作

非 Y 不嫁゛ 提交于 2020-02-18 22:31:55
一,查看当前zookeeper的版本: [root@localhost conf]# echo stat|nc 127.0.0.1 2181 Zookeeper version: 3.5.6-c11b7e26bc554b8523dc929761dd28808913f091, built on 10/08/2019 20:18 GMT 说明:架构森林是一个专注架构的博客,对应的源码可以访问这里获取 https://github.com/liuhongdi/ 说明:作者邮箱: 371125307@qq.com 二,启动zookeeper客户端 [root@localhost conf]# zkCli.sh 三,使用 ls 命令来查看当前 ZooKeeper 中所包含的内容 [zk: localhost:2181(CONNECTED) 0] ls / [zookeeper] 四,创建一个新的 znode [zk: localhost:2181(CONNECTED) 1] create /lockdemo 'demo content' Created /lockdemo [zk: localhost:2181(CONNECTED) 2] ls / [lockdemo, zookeeper] 五,获取一个znode的value [zk: localhost:2181(CONNECTED) 3

实现一个简易的RPC

本秂侑毒 提交于 2020-02-10 20:45:41
  之前写了一些关于RPC原理的文章,但是觉得还得要实现一个。之前看到一句话觉得非常有道理,与大家共勉。不是“不要重复造轮子”,而是“不要发明轮子”,所以能造轮子还是需要造的。   如果大家还有不了解原理的,可参考我之前写的“ RPC原理 ”,点击即可通过“飞机票”过去。   这篇文章的梗概如下:   1. 介绍一下这篇RPC的大致梗概。   2. 说一下这篇文章需要的技术和实现。   3. 用测试用例测试一下。 一、梗概   这篇RPC主要提示了服务注册,服务发现,同步调用,异步调用,回调功能。这些功能已经足够学习RPC使用了,对其中的原理就了解的非常清楚了。 二、技术和实现   采用的技术有Netty, Zookeeper, Protostuff, Spring,Cglib,Log4j这些基本就能够达到这个功能。   Netty的作用就是用于客户端向服务端发送请求,服务端接收请求后进行处理,Netty是一个基于异步事件处理的程序,客户端和服务端采用的LengthFieldBasedFrameDecoder,这种解码方法是最通用的,也就是把长度写到数据包中,即 Length + Data,用这种解码方法解决拆包粘包的问题。   Zookeeper的作用是用于服务的注册,分布式解决方案中的很重要的一个工具。里边主要做两件事,一个是创建一个永久的节点,然后再永久的节点下边创建临时节点