CAP:Consistency(数据强一致性)、Availability(其中一台机器故障其他的可以提供服务)、Partitiontolerance(机器间因网络延迟等问题不能同步,确保都可以提供服务),因为分布式微服务集群基本上是要求的所以一般都是在CP 或者 AP 之间做选择。 CA本来就矛盾。
BASE:基本可用(Basically Available) 软状态(Soft State) 最终一致性(Eventual Consistency)
由于BASE理论需要在一致性和可用性方面做出权衡,因此涌现了很多关于一致性的算法和协议:1、两阶段提交 2、三阶段提交 3、Paxos算法 4、Zab协议
官网下载zookeeper(AP、CP),解压。修改zoo_sample.cfg文件名为zoo.cfg 打开两个窗口:运行服务端:./zkServer.sh start ../conf/zoo.cfg 客户端:./zkCli.sh
zookeeper单机集群配置:
分别配置三台服务器:
mkdir -p /tmp/zookeeper/data_1
mkdir -p /tmp/zookeeper/data_2
mkdir -p /tmp/zookeeper/data_3
mkdir -p /tmp/zookeeper/logs_1
mkdir -p /tmp/zookeeper/logs_2
mkdir -p /tmp/zookeeper/logs_3
echo "1" > /tmp/zookeeper/data_1/myid
echo "2" > /tmp/zookeeper/data_2/myid
echo "3" > /tmp/zookeeper/data_3/myid
zoo1.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper/data_1
clientPort=2181
dataLogDir=/tmp/zookeeper/logs_1
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
zoo2.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper/data_2
clientPort=2182
dataLogDir=/tmp/zookeeper/logs_2
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
zoo3.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper/data_3
clientPort=2183
dataLogDir=/tmp/zookeeper/logs_3
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
服务配置好后 分别启动服务./zkServer.sh start ../conf/zoo1.cfg (配置了三台服务器,当只启动了zookeeper1时会zookeeper.out会出现错误日志,提示无法在选举地址localhost/127.0.0.1:3888打开频道至2,只要启动zookeeper2就好了,这与选举的过半机制有关,配置了三台包括leader本身,那么需要有至少两台启动)
微服务:更偏向于服务的划分,如用户服务和订单服务分别有自己的服务和数据库,服务间利用rpc调用。
分布式:更偏向于机器的划分,地区的划分