简单了解 RPC 实现原理
时下很多企业应用更新换代到分布式,一篇文章了解什么是 RPC。
原作者梁飞,在此记录下他非常简洁的 rpc 实现思路。
时下很多企业应用更新换代到分布式,一篇文章了解什么是 RPC。
原作者梁飞,在此记录下他非常简洁的 rpc 实现思路。
《深入理解 java 虚拟机》第二版中对 String.intern()
方法的讲解中所举的例子非常有意思
不了解 String.intern() 的朋友要理解他其实也很容易,它返回的是一个字符串在字符串常亮池中的引用。直接看下面的 demo
1 | public class Main { |
两者输出的结果如下:
1 | true |
我用的 jdk 版本为 Oracle JDK7u45
。简单来说,就是一个很奇怪的现象,为什么 java
这个字符串在类加载之前就已经加载到常量池了?
我在知乎找到了具体的说明,如下:
1 | package sun.misc; |
而 HotSpot JVM 的实现会在类加载时先调用:
1 | public final class System{ |
原来是 sun.misc.Version 这个类在起作用。
看一段代码:
1 | public class Main { |
这段代码会输出什么?
多线程在使用 system.out.println
时要留一个有意思的地方
乐观锁的概念就不再赘述了,不了解的朋友请自行百度谷歌之,今天主要说的是在项目中如何使用乐观锁,做成一个小 demo。
持久层使用 jpa 时,默认提供了一个注解 @Version
先看看源码怎么描述这个注解的
1 |
|
简单来说就是用一个 version 字段来充当乐观锁的作用。
先来设计实体类
1 | /** |
最近开发的分布式 (使用 motan) 项目中使用 zookeeper 作为服务中心来提供注册服务 (@MotanService
) 和发现服务(@MotanRefer)
, 虽然 motan 这个 rpc 框架对服务模块进行了很好的封装,但是以防以后会出现定制化的需求,以及对服务更好的监控,所以有必要了解一下 zookeeper 的基本知识和使用方法。关于 zookeeper 的知识点,网上很多的博客都已经介绍的很详尽了,我写这篇的博客的用意其实也就是将一些零散的却很精妙的博客整理出来,方便以后查阅。短篇以 cp 的方式,长篇的以 url 的方式。
ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 Hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper 的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
ZooKeeper 包含一个简单的原语集,提供 Java 和 C 的接口。 ZooKeeper 代码版本中,提供了分布式独享锁、选举、队列的接口。—- 百度百科
一开始看的云里雾里的,幸好我之前搞过一点 hadoop,对他的生态体系有所了解,这才大概知道他想说什么。提炼几个关键词,并且加入我后面学习的理解,总结一下就是 –
zookeeper 是一个组件,需要安装客户端和服务端,一般用于解决分布式开发下的一些问题。化抽象为具体,你可以把整个 zookeeper 理解成一个树形数据结构,也可以理解为一个文件系统的结构,每个叶子节点都会携带一些信息 (data),并且也可能会携带一些操作 (op)。分布式场景中,每一个客户端都可以访问到这些叶子节点,并且进行一些操作。我们所有使用 zookeeper 的场景几乎都是在 CRUD 某一个或者某些叶子节点,然后会触发对应的操作… 即 zookeeper 本身可以理解为一个 shareData。
—- 来自于博主的口胡
学一个新的中间件的最好方法是先在脑子里面有一个想法:我为什么要学他,是想解决什么问题,他大概是个什么东西,我觉得打开思路的最好方式是看几篇博客 (大多数情况你一开始看不懂,但是混个眼熟),然后看视频,这里我自己是了解过了 zookeeper 原生的 api 之后看了极客学院 的视频
Update your browser to view this website correctly.&npsb;Update my browser now