私は飼育係がわからないのですか?それは問題では、これを見ては十分ですしません

青「をクリックして、世界の目のケア製品、」星に設定されています

奥行き値システムは、渡されました!

ソース|  あなたがそれを望む何を言います

ソース|   juejin.im/post/5d0bd358e51d45105e0212db

対象として春には、いくつかの前には、いくつかの時間のために、このテーマの分散高い同時実行も多くのことを言うことができます大きくなっているが、また、穴を開くために、そしてゆっくりと、サブPはそれに従ってくださいです。I、いや、ほとんどの人のような学習者ではなく、説教で、より自分自身の学習のまとめのと権限を持っていないし、間違った変更、人々はシンプルが私の意図で見えるようにしようと、合計しますもしあれば、ミアンはここにも私たちは一緒に進行させることを願って、最高です。

高並行分散開発技術システムは、国内のインターネット企業の使用からRPCが、見つけることができ、すでに非常に大きいダボは、ZKは最も基本的なスキル要件です。飼育係について、あなたはまだありませんダボそれに印象レジストリ?それが動作しますか?クラシックシナリオそれは?最初の3人の問題ではなく、自分のアイデアや万一に答えを理解していなかったために、その後、私はあなたがエントリに行く助け、そしてあなたがより良いインタビューで答えを行くので、この知識を深めることができると思います。

いくつかの単語の男が話題に言いました

1.同時環境の挑戦

我々は、マルチスレッドを学ぶとき、インターネットがチャートを持って覚えていることは非常に興味深いです

実際には、我々は来ていない高同時処理サービスの片面の事件を解決するために、各サービス上でプログラムを実行するのと同じ、プロセスにクラスタ上の複数のサーバ上で実行されている同じアプリケーションをスレッドを置きます。これらの状況に対処しようとする試みは、我々はこのような多くの問題に直面するだろう

例えば、我々は今、すべてのマシンが一貫した設定情報を共有することを保証するために、どのように、クラスタサーバの3ですか?

この変更を知覚し、タスクを引き継ぐためにどのように他のマシン、マシンがハングアップすることがありますか?

ユーザーの突然の爆発は、機械のニーズは、ストレスを解消するために増加するが、クラスタを再起動せずに行う方法は、マシンの追加が完了しましたか?

分散システム、どのように効果的な(ネットワークがすぐにではない、それは、何の遅延信頼性がありませんされていない)を書き込むための同じネットワークファイル上の複数のサービスの連携?

この時点では、コラボレーションツールのための同様のプロセス・スレッドの調整メカニズムを作成する必要があり

2.飼育係の紹介

①名前飼育係の起源

このような多くの猫のようにアイコンが、tomcatに、ハイブのみスズメバチ、などであるとして、オープンソースプロジェクトは、apacheの動物画像に基づいており、飼育係の仕事は、これらの動物の行動を調整することです

②飼育係の紹介

飼育係は、ログ内の実装永続メモリに格納され、それはデータを特徴とする分散アプリケーション用の高性能コーディネーションサービスです。これは、分散ロック・サーバーのZooKeeperサービスは、お互いを理解しなければならないなど、一様中央レジスタに設定された分散私たちが達成するのを助けることができますメモリツリー構造、高いスループットと低遅延に似ています。彼らは、メモリ内の画像の状態を維持するだけでなく、トランザクションログと永続ストレージのスナップショット。限り、ほとんどのサーバーが利用できるよう、ZooKeeperのサービスを使用することができます。ZooKeeperのは、単一のクライアント・サーバに接続されています。クライアントは接続、取得応答を通じて要求を送信し、取得したモニタイベントのダニを送信し、TCPコネクションを維持します。あなたは、サーバーとのTCP接続を中断した場合、クライアントは他のサーバーに接続します。

③飼育係のインストール(Linuxの下)

1.JDK版本需要在1.6以上
2.下载:https://archive.apache.org/dist/zookeeper/zookeeper-3.5.2/zookeeper-3.5.2.tar.gz
3.解压后的conf目录,增加配置文件zoo.cfg
4.启动服务端 bin/zkServer.sh start
5.测试,客户端连接:bin/zkCli.sh -server 127.0.0.1:2181
zoo.cfg的关键配置有3个:
    tickTime=2000:一次心跳的基本时间,
    dataDir:数据与日志的存放处
    clientPort:端口号

④飼育係の機能は、

1.データ構造が簡単です

、ファイルシステムのツリー構造などのUnix系、各ディレクトリがのznodeノードになるが、それは、両方のフォルダとして見ることができ、ファイルシステムとは異なり、ファイルもデータを格納するために考えることができるが、我々は通常、まだそれがノード呼び出す必要はありませんいわゆる急落をフォルダ。

注:ノードの下の子ノードの名前と同じではない、そして、任意の開始を持っている/開始、最後である名前が標準化され、そのパスが相対パスの概念ではなく、パスは絶対的である、それは、データが格納されますサイズが限られています

2.データモデルの特長

レベル名前空間::既にサブノードと関連するデータを含むことができ、ルートノード、絶対パスのznodeための/に、上記のUNIXファイル・システムと同様記載されている一意の名前が標準化されたネーミング、サブタイプ4種類:永続的な、秩序データを一時的に、時間的順序の後、ノードは言及を構成します

3.命名規則

以下の制限ノード名に加えて、あなたは、任意のUnicode文字を使用することができます。

1. null字符(\u0000)不能作为路径名的一部分;

2. 以下字符不能使用,因为它们不能很好地显示,或者以令人困惑的方式呈现:\u0001 - \u0019和\u007F - \u009F。

3. 不允许使用以下字符:\ud800 - uf8fff, \uFFF0 - uFFFF。

4. “.”字符可以用作另一个名称的一部分,但是“.”和“..”不能单独用于指示路径上的节点,因为ZooKeeper不使用相对路径。

下列内容无效:“/a/b/. / c”或“c / a / b / . . /”。

5. “zookeeper”是保留节点名。

4.いくつかのコマンド

私のコンピュータは、ウィンドウシステムであるので、私は飼育係のデモバージョンへのウィンドウを探したので

まず大まかに各ディレクトリの内容を説明

bin ---> 包括了linux和window的运行程序的运行目录
conf ---> zookeeper的配置zoo.cfg
contrib ---> 其他一些组件和发行版本
dist-maven ---> maven发布下的一些jar包
docs ---> 文档
lib ---> 库
recipe ---> 一些应用实例
src ---> zookeeper的源码,因为zookeeper是java写出来的

スタートzkServer.cmdのbinディレクトリに移動し、あなたがzkClient.cmdを開始することができ、私は、一般的な入力ヘルプでは、-helpを勉強する方法を知りませんでした、-hこれらの手順は、次のマップに行くことができます助けます私は、クライアントの入力コマンドにあった-help

コマンドはそれほど発揮されていない比較的単純であるため、そのようなLSとしてパス/問題は、/ rootディレクトリであることに注意することが唯一の注意点は、/ ZK 123を作成すると、各コマンドの条件に頼って、例えば、親を作成して提供する必要がありますノード、ノード削除時間ノードが子ノードを持つというようにすることはできません?

順序5.Zookeeper重要な機能---

オファーの時間を追跡するためのさまざまな方法は、番号ごとに取り付けられたZooKeeperの更新は、この数は、クライアント、zoo.cfg上の複雑な同期プリミティブを実装することができZooKeeperの厳密な順序手段の全ての業務で順番に説明czxid、バージョンを反映しています構成内のダニ

  • Zxid:Zxid1以下Zxid2よりも、それがなければなりませんZxid1はZxid2に前に起こった場合Zxidと呼ばれるユニークなトランザクションID、各書き込み要求対応で飼育係は、それは、グローバルかつ秩序あります

  • version numbers :版本号,对节点的写请求都会导致该节点的3种版本号增加(其实套路和乐观锁差不多),dataVersion(对znode数据的更改次数),cversion(对znode子节点的更改次数),aclVersion(对znode ACL的更改次数

  • ticks :当使用多服务器Zookeeper时,服务器使用一个“滴答”来定义事件的时间,如状态上传,会话超时等,它通过最小会话超时(默认是滴答时间x2)间接公开,如果客户端请求超过这个时间,那客户端就不再能连接上服务器端

  • real time:Zookeeper并不使用真实时间

你可以使用stat path或者ls2来查看这些信息

cZxid:创建该节点的zxid
ctime:该节点的创建时间
mZxid:该节点的最后修改zxid
mtime:该节点的最后修改时间
pZxid:该节点的最后子节点修改zxid
cversion:该节点的子节点变更次数
dataVersion:该节点数据被修改的次数
aclVersion:该节点的ACL变更次数
aphemeraOwner:临时节点所有者会话id,非临时的为0
dataLength:该节点数据长度
numChildren:子节点数

这些数据都在从侧面告诉我们,zookeeper是一个协调者

6.zookeeper的第二个特点---可复制

数据可复制,可备份。zookeeper可以快速地搭建一个集群,内部自带了这样的一些工具与机制,我们只需要设置一些配置即可,保证服务可靠,不会成为单点故障

7.zookeeper的第三个特点---迅速

zookeeper的一些特点可以应用于大型分布式系统

3.zookeeper的理论

① zookeeper的会话机制

Session会话

1.一个客户端连接一个会话,由zookeeper分配唯一会话id
2.客户端以特定的时间间隔发送心跳以保持会话有效,
3.超过会话超时时间未收到客户端的心跳,则判断客户端无效(默认2倍tickTime)
4.会话中额请求是FIFO(先进先出原则)的顺序执行

② znode的数据构成

节点数据:存储的基本信息(状态,配置,位置等)
节点元数据:stat命令下的一些数据
数据大小:限制1M

③ znode的节点类型

1.持久节点:直接通过create path value所创建
2.临时节点:create -e path value
3.顺序节点:create -s path value

注意
    1.session会话失效时,临时节点就会被删除
    2.顺序节点的创建,后为10位十进制序号,每个父节点拥有一个计数器,这个计数器也是有限制的,到2147483647之后将溢出
    3.顺序节点在会话结束仍然存在

④ Watch监听机制

客户端能在znodes上设置watch,监听znode的变化,包括增删改查,通过stat path ,ls2 path get path皆可查看

触发watch事件的条件有4种,create,delete,change,child(子节点事件)

watch的重要特性

1.仅一次性:watch触发后会立即删除,要持续监听变化的话就要持续提供设置watch,这也是watch的注意事项

2.有序性:客户端先得到watch通知才可查看变化结果

watch的注意事项

1.刚刚提及到的它的仅一次性

2.获取事件和发送watch,获取watch,这些请求有可能存在延时,所以不能绝对可靠得到每个节点发生的每个更改

3.一个watch对象只会被通知一次,如果一个watch同时注册了多个接口(exists,getData),如果此时删除节点,虽然这个事件对exists和getData都有效,但是watch只会被调用一次

阻塞线程唤醒机制—客户端可以被动接受其他客户端进程状态通知

⑤ zookeeper的特性

1.顺序一致性(Sequential Consistency),保证客户端操作是按顺序生效的;

 2.原子性(Atomicity),更新成功或失败。没有部分结果。

 3.单个系统映像,无论连接到哪个服务器,客户端都将看到相同的内容

 4.可靠性,数据的变更不会丢失,除非被客户端覆盖修改。

 5.及时性,保证系统的客户端当时读取到的数据是最新的。

finally

通过上面的阐述应该我们对于zookeeper有了一个初步的认识,之后会陆续说说分布式锁,集群还有一些场景的应用

发布了25 篇原创文章 · 获赞 1 · 访问量 9702

おすすめ

転載: blog.csdn.net/weixin_45727359/article/details/104666975