芥为之舟

Annotation和动态代理-1

今天在集成规则引擎代码的时候,发现一个(些)有趣的问题 类型注解为何频频丢失? 我们的规则引擎通过Annotation实现流程分支和行为的控制,当我将规则使用@Service托管给Spring之后,却出现无法通过引擎规则验证的情况的情况,经过简单的排除,发现是因为通过Spring注入的实例获取Annotation的时候无法正常获取到对应的注解。 A foundAnnotation =...

Java 实现线程超时

在线程执行或者RPC远程调用的时候,常常会需要配置超时属性。典型的场景为:A线程发起一个调用C,并等待调用结果返回,在超过一定时间阈值之后,抛出TimeoutException异常,并中断调用C。这里就隐含了几个条件。 需要发起调用 需要知道何时超时,发出超时信号 进行超时处理,中断调用 根据经典的停机理论,一个线程是无法知道自己何时会终止。同样的,一个线程也无法知道自己...

软件设计中的责任分离

在编码中存在一个职责分离的原则,是说将系统切分成不同的部分,每一个部分实现系统功能的一部分。这个方法在大的系统切分中很容易实现。因为一般而言一个大的系统流程都可以切分成不同的子系统,每一个子系统实现独立的功能,然后通过消息传递或者共享内存的方式连接协同工作。但是同样的原则,在具体的代码中就显得比较难处理。主要的难度在于一个细致的功能点,在代码实现的时候最简单的是将所有的功能都实现在一个类中。...

ZooKeeper Standalone 模式启动分析

Zookeeper服务启动 ZooKeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅、负债均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。 从本质上,Zookeeper类似一个分布式的存储系统,通过以Leader-Followers的模式运行的集群来实现高可用。本文主要分析单机模式的zk的启动流程。...

Basic Paxos理解

Paxos算法的描述和证明都非常简洁,但是核心的概念都非常抽象,如果需要工程化应用于实际的系统中需要完成的工作更多。最近对Paxos的研究,参考了很多互联网上的资料,这篇文章试图对这些参考做一个记录,并提供一个适于我的角度理解的Paxos算法解读。 Paxos解决的问题 如我们在上一篇文章《多副本和分布式一致性》中讨论的,在分布式系统中一个核心的问题:“在多个不可靠的节点中,达成...