Arganzheng's Blog

stay hungry, stay foolish

使用zookeeper实现分布式锁

大家也许都很熟悉了多个线程或者多个进程间的共享锁的实现方式了,但是在分布式场景中我们会面临多个Server之间的锁的问题,实现的复杂度比较高。利用基于google chubby原理开发的开源的zookeeper,可以使得这个问题变得简单很多。下面介绍几种可能的实现方式,并且对比每种实现方式的优缺点。 1. 利用节点名称的唯一性来实现共享锁 ZooKeeper抽象出来的节点结构是一个和un...

ZooKeeper简介

Zookeeper的简介 ZooKeeper是一个构建在Paxos算法上的高可用的分布式数据管理与系统协调框架,提供了一系列原语集,更上层的应用可以用它来实现同步,配置管理,名称服务,Master选举,分布式锁,分布式队列等。 zookeeper提供如下服务保证 顺序一致性: client的updates请求都会根据它发出的顺序被顺序的处理 原子性: 一个update操作要么...

开放平台鉴权以及OAuth2.0介绍

OAuth 2.0 协议 OAuth是一个开发标准,允许用户授权第三方网站或应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的内容。 OAuth 2.0不兼容1.0。 协议的参与者 RO (resource owner): 资源所有者,对资源具有授权能力的人。 RS (resource server): 资源服务器,...

闭包

匿名函数 (x: Double) => 3 * x 可以看到,函数就是接收输入,执行算法,返回结果。由于输入都是参数,所以函数其实是无状态的。 我们可以把这个函数存放在变量中: val triple = (x: Double) => 3 * x 这就跟你用def一样: def triple = (x: Double) => 3 * x 存放变量中就是命名...

JVM类加载器与ClassNotFoundException和NoClassDefFoundError

说明 本文内容基本来着参考文章。 在我们日常的项目开发中,会经常碰到ClassNotFoundException和NoClassDefFoundError这两种异常,对于经验足够的工程师而言,可能很轻松的就可以解决,但是却不一定明白为何要去这么做,本博客将从java虚拟机类加载的角度让大家彻底理解ClassNotFoundException和NoClassDefFoundError这两种异...

Java虚拟机学习笔记

Java内存区域 程序计数器 对于一个运行中的Java程序而言,其中的每一个线程都有它自己的PC寄存器,它是该线程启动时创建的。 PC寄存器大小是一个字长,既能够持有一个本地指针,也能够持有returnAddress。 当线程执行某个Java方法时,PC寄存器总是指向下一条将被执行指令的“地址”。 如果一个线程正在执行一个...

海量服务之——灰度发布

为什么要灰度发布 互联网服务变动频繁,发布周期短。速度与质量总是难以双全。 灰度发布能降低发布风险,减少影响范围。 降低对测试的依赖,减少线下自测的数据构造成本。 方便集中监控日志,全量发布由于各层负载均衡的作用,很难跟踪一条完整的调用链路。 可以灰度测试帐号,测试账户通过之后再灰度真实用户帐号,进一步降低发布的风险和影响。 方便回滚。 不能...

HTTPS原理

HTTPS通讯流程 客户端发出安全会话请求(会同时将自己支持的一套加密规则发送给服务器) 服务器从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给客户端。证书里面包含了服务器地址,加密公钥,以及证书的颁发机构等信息。 客户端获得服务器CA证书之后浏览器要做以下工作: 用已知的CA列表来验证证书的合法性(颁发证书的机构是否合法,证...

巧用TheadLocal

应用场景 需要增加参数,但是不想或者不能修改接口。 放置一些线程不安全,但是反复构建会比较耗内存或者CPU的对象,同步访问又会导致锁竞争。比如SimpleDateFormat。 实现原理 本质上就是一个以threadId为key的Map。 实战例子——Spring Transaction Manager 事务管理可能会跨越好几个Service方法,如何在这些Servic...

SLA和QoS在RPC/OpenAPI容器中的作用

其实OpenAPI和RPC本质上是一样的,只是由于OpenAPI是对外开放的,而RPC一般是内部服务调用。两者的考虑点不同,所以在通信协议和序列化方式上有些不同。 作为一个RPC框架或者一个OpenAPI容器,它是连接服务消费者和服务器提供者的桥梁。他其实只是一个请求的转发而已。他的服务质量取决与服务提供者的服务质量。然而因为是一个容器,为了保证消费者的权利,同时也是为了保证其他服务提供者...