当前位置: 首页 > news >正文

广州做网站价位wordpress博客注册

广州做网站价位,wordpress博客注册,松江做网站需要多少钱,软件技术专业专升本考试科目单机环境下可以利用jvm级别的锁#xff0c;比如synchronized、Lock等来实现锁#xff0c;如果是多机部署就需要一个共享数据存储区域来实现分布式锁 一、分布式锁实现方式 1、基于数据库实现分布式锁 可以用数据库唯一索引来实现 2、基于redis实现分布式锁 redis实现的分…单机环境下可以利用jvm级别的锁比如synchronized、Lock等来实现锁如果是多机部署就需要一个共享数据存储区域来实现分布式锁 一、分布式锁实现方式 1、基于数据库实现分布式锁 可以用数据库唯一索引来实现 2、基于redis实现分布式锁 redis实现的分布式锁始终会有一些问题即便使用多数写入主节点挂了数据丢失还是会存在加锁问题就是主节点宕机客户端无法感知 3、基于zookeeper实现分布式锁 1实现方式一 使用临时节点创建成功获取锁否则监听临时节点有个问题比如1000个线程只有一个会加锁成功当删除临时节点时999个线程都会去竞争 2实现方式二 公平锁的实现 4、Curator可重入分布式锁工作流程 从InterProcessMutex类找到acquire()加锁方法 public void acquire() throws Exception {if (!this.internalLock(-1L, (TimeUnit)null)) {throw new IOException(Lost connection while trying to acquire lock: this.basePath);}} 1加锁  private boolean internalLock(long time, TimeUnit unit) throws Exception {// 获取当前线程Thread currentThread Thread.currentThread();// threadData类型是ConcurrentMap从threadData中去拿LockData加锁对象InterProcessMutex.LockData lockData (InterProcessMutex.LockData)this.threadData.get(currentThread);// 如果拿到了 证明之前加锁了lockCount重入次数1if (lockData ! null) {lockData.lockCount.incrementAndGet();return true;} else {// 没有拿到开始从zookeeper上创建lock节点String lockPath this.internals.attemptLock(time, unit, this.getLockNodeBytes());// 创建成功 加锁成功把对象放到threadData中if (lockPath ! null) {InterProcessMutex.LockData newLockData new InterProcessMutex.LockData(currentThread, lockPath);this.threadData.put(currentThread, newLockData);return true;} else {// 加锁失败return false;}}}private static class LockData {// 持有锁的线程final Thread owningThread;// 在zookeeper的锁路径final String lockPath;// 线程加锁次数final AtomicInteger lockCount;private LockData(Thread owningThread, String lockPath) {this.lockCount new AtomicInteger(1);this.owningThread owningThread;this.lockPath lockPath;}} 2创建节点返回路径 String attemptLock(long time, TimeUnit unit, byte[] lockNodeBytes) throws Exception {long startMillis System.currentTimeMillis();Long millisToWait unit ! null ? unit.toMillis(time) : null;byte[] localLockNodeBytes this.revocable.get() ! null ? new byte[0] : lockNodeBytes;// 重试次数int retryCount 0;String ourPath null;boolean hasTheLock false;boolean isDone false;while(!isDone) {isDone true;try {// 创建临时有序节点ourPath this.driver.createsTheLock(this.client, this.path, localLockNodeBytes);// 创建的节点是否为最小节点hasTheLock this.internalLockLoop(startMillis, millisToWait, ourPath);} catch (NoNodeException var14) {// 加锁失败 重试设置重试策略if (!this.client.getZookeeperClient().getRetryPolicy().allowRetry(retryCount, System.currentTimeMillis() - startMillis, RetryLoop.getDefaultRetrySleeper())) {throw var14;}isDone false;}}return hasTheLock ? ourPath : null;} public String createsTheLock(CuratorFramework client, String path, byte[] lockNodeBytes) throws Exception {String ourPath;// 是否要给节点设置属性 创建的都是临时有序节点if (lockNodeBytes ! null) {ourPath (String)((ACLBackgroundPathAndBytesable)client.create().creatingParentContainersIfNeeded().withProtection().withMode(CreateMode.EPHEMERAL_SEQUENTIAL)).forPath(path, lockNodeBytes);} else {ourPath (String)((ACLBackgroundPathAndBytesable)client.create().creatingParentContainersIfNeeded().withProtection().withMode(CreateMode.EPHEMERAL_SEQUENTIAL)).forPath(path);}return ourPath;} private boolean internalLockLoop(long startMillis, Long millisToWait, String ourPath) throws Exception {boolean haveTheLock false;boolean doDelete false;try {if (this.revocable.get() ! null) {((BackgroundPathable)this.client.getData().usingWatcher(this.revocableWatcher)).forPath(ourPath);}while(this.client.getState() CuratorFrameworkState.STARTED !haveTheLock) {// 将子节点进行排序ListString children this.getSortedChildren();// 截取创建的节点的序号String sequenceNodeName ourPath.substring(this.basePath.length() 1);// 判断是否为最小序号PredicateResults predicateResults this.driver.getsTheLock(this.client, children, sequenceNodeName, this.maxLeases);if (predicateResults.getsTheLock()) {// 加锁成功haveTheLock true;} else {// 拿到上一个节点的路径String previousSequencePath this.basePath / predicateResults.getPathToWatch();synchronized(this) {try {// 监听上一个节点((BackgroundPathable)this.client.getData().usingWatcher(this.watcher)).forPath(previousSequencePath);if (millisToWait null) {// 等待this.wait();} else {millisToWait millisToWait - (System.currentTimeMillis() - startMillis);startMillis System.currentTimeMillis();if (millisToWait 0L) {// 超时等待this.wait(millisToWait);} else {doDelete true;break;}}} catch (NoNodeException var19) {}}}}} catch (Exception var21) {ThreadUtils.checkInterrupted(var21);doDelete true;throw var21;} finally {if (doDelete) {this.deleteOurPath(ourPath);}}return haveTheLock;} 3解锁 public void release() throws Exception {Thread currentThread Thread.currentThread();InterProcessMutex.LockData lockData (InterProcessMutex.LockData)this.threadData.get(currentThread);if (lockData null) {// 分布式场景下什么情况都可能有 所以判断一下throw new IllegalMonitorStateException(You do not own the lock: this.basePath);} else {// 重入次数减1int newLockCount lockData.lockCount.decrementAndGet();if (newLockCount 0) {if (newLockCount 0) {throw new IllegalMonitorStateException(Lock count has gone negative for lock: this.basePath);} else {try {// 这里之前应该还有个大于0的判断 在curator5.1.0zookeeper 3.9.0版本去掉了this.internals.releaseLock(lockData.lockPath);} finally {this.threadData.remove(currentThread);}}}}} 5、总结 优点Zookeeper分布式锁如InterProcessMutex具备高可用、可重入、阻塞锁特性可解决失效死锁问题 缺点因为需要频繁的创建和删除节点性能上不如redis 在高性能、高并发场景下不建议用Zookeeper的分布式锁。而由于Zookeeper的高可靠性因此在并发量不是太高的应用场景下还是推荐使用Zookeeper的分布式锁 二、服务注册与发现 1、设计思路 2、实现注册中心的优缺点 优点 高可用性ZooKeeper是一个高可用的分布式系统可以通过配置多个服务器实例来提供容错能力。如果其中一个实例出现故障其他实例仍然可以继续提供服务。强一致性ZooKeeper保证了数据的强一致性。当一个更新操作完成时所有的服务器都将具有相同的数据视图。这使得ZooKeeper非常适合作为服务注册中心因为可以确保所有客户端看到的服务状态是一致的。实时性ZooKeeper的监视器Watcher机制允许客户端监听节点的变化。当服务提供者的状态发生变化时例如上线或下线客户端会实时收到通知。这使得服务消费者能够快速响应服务的变化从而实现动态服务发现。 缺点 性能限制ZooKeeper的性能可能不如一些专为服务注册中心设计的解决方案如nacos或Consul。尤其是在大量的读写操作或大规模集群的情况下ZooKeeper可能会遇到性能瓶颈。 3、整合Spring Cloud Zookeeper实现微服务注册中心  Spring Cloud Zookeeper 第一步在父pom文件中指定Spring Cloud版本 parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.3.2.RELEASE/versionrelativePath/ !-- lookup parent from repository -- /parent propertiesjava.version1.8/java.versionspring-cloud.versionHoxton.SR8/spring-cloud.version /properties dependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependency/dependencies /dependencyManagement 注意 springboot和springcloud的版本兼容问题 第二步微服务pom文件中引入Spring Cloud Zookeeper注册中心依赖 !-- zookeeper服务注册与发现 -- dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-zookeeper-discovery/artifactIdexclusionsexclusiongroupIdorg.apache.zookeeper/groupIdartifactIdzookeeper/artifactId/exclusion/exclusions /dependency!-- zookeeper client -- dependencygroupIdorg.apache.zookeeper/groupIdartifactIdzookeeper/artifactIdversion3.8.0/version /dependency 注意 zookeeper客户端依赖和zookeeper sever的版本兼容问题 Spring Cloud整合Zookeeper注册中心核心源码入口 ZookeeperDiscoveryClientConfiguration 第三步 微服务配置文件application.yml中配置zookeeper注册中心地址 spring:cloud:zookeeper: connect-string: localhost:2181discovery:instance-host: 127.0.0.1 注册到zookeeper的服务实例元数据信息如下 注意如果address有问题会出现找不到服务的情况可以通过instance-host配置指定 第四步整合feign进行服务调用 RequestMapping(value /findOrderByUserId/{id}) public R findOrderByUserId(PathVariable(id) Integer id) {log.info(根据userId:id查询订单信息);//feign调用 R result orderFeignService.findOrderByUserId(id);return result; }
http://wiki.neutronadmin.com/news/296968/

相关文章:

  • 有哪些做短租的网站好口碑好网站制作公司哪家好
  • 企业网站的优化和推广方法建立网站专栏
  • 关于做网站的外语文献抖音搜索排名
  • 烟台专业网站制作公司安宁网站建设熊掌号
  • oa网站建设推广开发网站公司地址
  • 大麦网建设网站的功能定位ps制作博客网站界面
  • 下载网站后台成都市住房和城乡建设厅官方网站
  • 家谱网站的首页怎么做购物网站建设方案书
  • 怎么做一张图片的网站关于做摄影的网站
  • 新余门户网站开发万词霸屏百度推广seo
  • 网站弹出代码谷歌应用商店app下载
  • 广州海外建站左旗网站建设
  • dede电影网站源码有和wind一样做用网站
  • 神华公司两学一做网站桂林市教科所
  • 苏州城乡建设网站查询系统手机如何创建网页链接
  • 深圳自适应网站建设报价wordpress更改页脚社交图标
  • 网站制作公司有哪些新泰网站制作
  • 做任务的正规网站卖东西怎么做网站
  • 如何自创网站连云港网站推广优化
  • 手机购物网站开发教程wordpress数据库修改密码
  • 网页开发和网站开发一样吗怎么制作动画视频教程
  • 为该网站做自适应怎样到国外做合法网站法网站
  • 网站开发人员知乎网站建设德尔普
  • wordpress 热门排行江东外贸seo网站建设
  • 营销网站怎么做宝和网站建设
  • 没有收款接口网站怎么做收款ci wordpress cms
  • 安徽省建设工程造价信息网站要怎样建设网站
  • 泉州教育平台网站建设建设银行怎么从网站上改手机号码
  • 网站流量用完了哈尔滨网站建设贴吧
  • 淘宝网站建设策划案在线营销型网站建设