分布式问题:
分布式:尽可能在并发的情况下,由多系统协调,快速,有效的完成某个指定任务。
Java——处理服务。
可扩展:性能没有上限。
服务器是分布式,但客户端不是;服务器维不同的客户端提供相同质量的服务。
========分布式核心组成
【1】锁
【2】数据原子性
【3】生产消费问题
===========分布式特点:
【1】可靠性,服务器容灾。
【2】可扩展性:无限扩展,不停机,操作简单。
【3】透明性:对外统一接口
===========分布式应用的挑战
===分布式锁
-竞争机制、排他机制——共享资源多台机器竞争
-死锁
===服务治理
-服务发现:消费服务
-服务发布:生产服务
====
-不一致:数据部分失败。
架构师:理念上的深度!对于系统,功能的理解!!
观察者模式:zk的核心功能,监听数据的变化:对于亿级数据的!!
服务管理框架:分布式协调服务——管理大型主机。
=======zookeeper
数据同步
原子性解析
===========
协调和同步机制——竞争条件和死锁使用故障安全同步方法进行处理,对于数据不一致性,使用原子性解析!
===========zk架构
-客户端与服务器之间是存在心跳检测的
-最小节点数为3!!
-leader不是固定的——选举机制!
===========znode
-configworkers命名空间
-每个znode的存储上限是1M
-存储同步数据并描述znode的元数据
-命名空间的stat——一个znode的元数据
-版本号——数据同步的重要参数
-ACL权限——读写、密码
-zxid:唯一 //时间戳和zxid共同管理zk的数据事务,并且可以有效的监控数据状态
-数据长度:
===========znode类型
-持久节点:除非特别设置,否则一直存在。
-临时节点:不允许有子节点。且在选举机制中占据重要作用。客户端断开则自动删除。
-顺序节点:在锁定和同步中起重要作用。-支持持久与临时。
===========session会话
-fifo顺序执行
-会话凭证:服务器提供会话凭证。
-客户端和服务器之间发送定时心跳检测,确保会话有效。
-
==========zk的监听
-服务器数据 因为任何原因发生更改时,客户端都会收到通知
-监听数据修改和子项更改
-一次更改只会触发一次监听,如果需要持续监听,当通纸抵达后,需要重新注册监听。
===========zk应用场景
-数据地发布和订阅:kafka
-服务协调:独占锁,完成后销毁znod(对应一把锁)
-分布式锁:临时有序锁
-集群管理:集群机器监控——保障机器存活性的监控。
命令汇总:
mkdir -p zkdir/server1
[root@macro2 server1]# touch myid
[root@macro2 server1]# echo "1" > myid=============启动服务
[root@macro2 conf]# zkServer.sh start zoo01.cfg
ZooKeeper JMX enabled by default
Using config: /hadoopserver/zookeeper-3.4.9/bin/../conf/zoo01.cfg
Starting zookeeper ... STARTED=============客户端连接
[root@macro2 conf]# zkCli.sh -server 192.168.92.102:2181
Connecting to 192.168.92.102:2181=============查看当前节点
ls /zookeeper
[quota]
[zk: 192.168.92.102:2181(CONNECTED) 3] create /testnode01 test1
Created /testnode01
[zk: 192.168.92.102:2181(CONNECTED) 4] stat /testnode01========创建临时节点
[zk: 192.168.92.102:2181(CONNECTED) 9] create -e /testnode03 test4
Created /testnode03
[zk: 192.168.92.102:2181(CONNECTED) 10] stat /testnode03
cZxid = 0x200000005
ctime = Sun Aug 30 19:00:29 CST 2020
mZxid = 0x200000005
mtime = Sun Aug 30 19:00:29 CST 2020
pZxid = 0x200000005
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x1743f0057d10000
dataLength = 5
numChildren = 0==============创建持久节点
[mrtest, zookeeper, testnode01, testnode02]
[zk: 192.168.92.102:2181(CONNECTED) 1] create -s /testnode01/node test
Created /testnode01/node0000000000
[zk: 192.168.92.102:2181(CONNECTED) 2] create -s /testnode01/node test
Created /testnode01/node0000000001
分布式组件
-用API和功能性使用
-优化:充分发挥组件的性能
Tips:Nacos-dynamic service discovery, service configuration, service metadata and traffic management
Nacos:DNS 和基于 RPC 的服务发现(可以作为springcloud的注册中心)、动态配置服务(可以做配置中心)、动态 DNS 服务。
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务发现、服务配置管理、服务及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构(例如微服务范式、云原生范式)的服务基础设施。
微服务:
微服务引擎(MSE)是一个面向业界主流开源微服务框架 Spring Cloud、Dubbo 的微服务平台,包含治理中心、托管注册/配置中心。 治理中心:通过 JavaAgent 技术使得您的应用无须修改代码和配置就可以享有产品提供的全面的微服务治理能力。 托管注册/配置中心:提供高可用、免运维的 ZooKeeper、Nacos 和 Eureka 等集群,完全兼容开源产品标准接口。