Dubbo实现的源码分析

  categories:java资料  tags:  author:

1.      Dubbo概述

Dubbo是阿里巴巴开源出来的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及作为SOA服务治理的方案。它的核心功能包括:

#remoting:远程通讯基础,提供对多种NIO框架抽象封装,包括“同步转异步”和“请求-响应”模式的信息交换方式。

#Cluster: 服务框架核心,提供基于接口方法的远程过程调用,包括多协议支持,并提供软负载均衡和容错机制的集群支持。

#registry: 服务注册中心,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

由于Dubbo团队的文档和代码都非常优秀,所以更多关于dubbo的方方面面请参考网站http://code.alibabatech.com/wiki/display/dubbo/Home-zh

这里我们只是补充一下从源码具体实现角度来看的某些细节方面,包括Invoker、ExtensionLoader等方面。任何官方已经介绍过的细节,我们不做画蛇添足,官方文档已经足够详实了,这篇文档的定位是补充实现的相关细节,是基于我在往Dubbo添加web service协议过程中,所碰到过的一些困难。

 

2. 服务提供者暴露一个服务的详细过程

上图是服务提供者暴露服务的主过程:

首先ServiceConfig类拿到对外提供服务的实际类ref(如:HelloWorldImpl),然后通过ProxyFactory类的 getInvoker方法使用ref生成一个AbstractProxyInvoker实例,到这一步就完成具体服务到Invoker的转化。接下来就是 Invoker转换到Exporter的过程。

Dubbo处理服务暴露的关键就在Invoker转换到Exporter的过程(如上图中的红色部分),下面我们以Dubbo和RMI这两种典型协议的实现来进行说明:

 

Dubbo的实现

Dubbo协议的Invoker转为Exporter发生在DubboProtocol类的export方法,它主要是打开socket侦听服务,并接收客户端发来的各种请求,通讯细节由Dubbo自己实现。

 

RMI的实现

RMI协议的Invoker转为Exporter发生在RmiProtocol类的export方法,它通过Spring或Dubbo或JDK来实现RMI服务,通讯细节这一块由JDK底层来实现,这就省了不少工作量。

 

3. 服务消费者消费一个服务的详细过程

上图是服务消费的主过程:

阅读全文

Play Framework框架概述

  categories:资料  tags:  author:

有别于其他臃肿的企业级 Java 框架,简洁的 Play 框架提供另外一种选择,它关注于开发者的效率和 RESTful 风格的架构。Play 是 敏捷软件开发的完美伴侣。

Play 框架的目标是让基于 Java 的 web 应用开发变得更加容易,让我们看一下它是怎么做到的。

没有痛苦的 Java 框架

Play 是一个纯 Java 的框架,它让你保持使用你喜欢的开发工具和类库。如果你已经是一个使用 Java 平台的开发者,

那么你不需要切换到另一种语言,其他 IDE 或者其他类库, 而仅仅是切换到一个效率更高的 Java 环境!


修改 bug 后自动重新加载

Java 平台因为较低的开发效率,已经是声名狼藉了,主要的原因就是重复和繁琐的“编译-打包-部署”的周期。

这就是为什么我们重新对这种开发周期进行了思考,并且通过 Play 让开发变得更有效率。

Play 框架自动编译

阅读全文

使用Spring的LdapTemplate进行LDAP操作

  categories:资料  author:

本文来源于铁木箱子的博客http://www.mzone.cc
[本文地址] 本文永久地址是:http://www.mzone.cc/article/621.html

最近利用空闲时间研究了一把LDAP,然后用spring进行了一些编程尝试,通过spring的LdapTemplate可以很方便的进行LDAP的CRUD操作。如果你不清楚啥是LDAP的话,可以查询相关资料后再看此文。一般来说LDAP可以用来作为一个用户中心,围绕LDAP可以部署一些应用来共享相同的账号,这个在企业管理中是非常有帮助的,因为企业的内部应用可能是几个到几十个,员工如果有统一的账号密码,那将非常方便。

我也是因为内部需要,围绕LDAP做了一些应用集成,使用的LDAP服务器是apache的DS,标准的LDAP协议,客户端编程用java,使用spring的LdapTemplate类进行操作。使用maven管理的话,在项目中加入如下依赖:

<dependency>
<groupId>com.sun</groupId>
<artifactId>ldapbp</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-ldap</artifactId>
<version>1.1.2</version>
</dependency>

然后就可以使用LDAP进行操作了,当然了也要加入其它的spring对应的包,比如core包等,下面分别说明使用spring的LdapTemplate如何进行操作。注意,在应用之前请先配置好apache-DS服务(请参考文章xxx)。

1、初始化LdapTemplate
private static final LdapTemplate template;
static {
LdapContextSource cs = new LdapContextSource();
cs.setCacheEnvironmentProperties(false);
cs.setUrl(“ldap://192.168.1.188:10389″);
cs.setBase(“dc=mzone,dc=cc”);
cs.setAuthenticationSource(new AuthenticationSource() {
@Override
public String getCredentials() {… 阅读全文

VRRP协议介绍

  categories:linux资料  author:

来源:http://www.linuxidc.com/Linux/2012-12/76886.htm

参考资料: RFC 3768

1. 前言

VRRP(Virtual Router Redundancy Protocol)协议是用于实现路由器冗余的协议,最新协议在RFC3768中定义,原来的定义RFC2338被废除,新协议相对还简化了一些功能。

2. 协议说明

2.1 协议

VRRP 协议是为消除在静态缺省路由环境下的缺省路由器单点故障引起的网络失效而设计的主备模式的协议,使得在发生故障而进行设备功能切换时可以不影响内外数据通 信,不需要再修改内部网络的网络参数。VRRP协议需要具有IP地址备份,优先路由选择,减少不必要的路由器间通信等功能。

VRRP协议 将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个),而在路由器组内部,如果实际拥有这个对外IP的路由器如果工作正常的话就 是MASTER,或者是通过算法选举产生,MASTER实现针对虚拟路由器IP的各种网络功能,如ARP请求,ICMP,以及数据的转发等;其他设备不拥 有该IP,状态是BACKUP,除了接收MASTER的VRRP状态通告信息外,不执行对外的网络功能。当主机失效时,BACKUP将接管原先 MASTER的网络功能。

配置VRRP协议时需要配置每个路由器的虚拟路由器ID(VRID)和优先权值,使用VRID将路由器进行分 组,具有相同VRID值的路由器为同一个组,VRID是一个0~255的正整数;同一组中的路由器通过使用优先权值来选举MASTER,优先权大者为 MASTER,优先权也是一个0~255的正整数。

VRRP协议使用多播数据来传输VRRP数据,VRRP数据使用特殊的虚拟源MAC地 址发送数据而不是自身网卡的MAC地址,VRRP运行时只有MASTER路由器定时发送VRRP通告信息,表示MASTER工作正常以及虚拟路由器 IP(组),BACKUP只接收VRRP数据,不发送数据,如果一定时间内没有接收到MASTER的通告信息,各BACKUP将宣告自己成为 MASTER,发送通告信息,重新进行MASTER选举状态。

2.2 MASTER选举
如果对外的虚拟路由器IP就是路由器本身配置的IP地址的话,该路由器始终都是MASTER;
否则如果不具备虚拟IP的话,将进行MASTER选举,各路由器都宣告自己是MASTER,发送VRRP通告信息;
如果收到其他机器的发来的通告信息的优先级比自己高,将转回BACKUP状态;
如果优先级相等的话,将比较路由器的实际IP,IP值较大的优先权高;
不过如果对外的虚拟路由器IP就是路由器本身的IP的话,该路由器始终将是MASTER,这时的优先级值为255。

2.3 协议状态机

VRRP协议状态比较简单,就三种状态,初始化,主机,备份机。

VRRP协议介绍

初始化:阅读全文

PHP大师的10条开发建议

  categories:资料  author:

来源:http://www.open-open.com/bbs/view/1398389105437

在WEB开发世界里,PHP是最流行的语言之一,从PHP里,你能够很容易的找到你所需的脚本,遗憾的是,很少人会去用“最佳做法”去写一个PHP程序。这里,我们向大家介绍PHP的10种最佳实践,当然,每一种都是经过大师们证明而得出的。

1. 在合适的时候使用PHP – Rasmus Lerdorf

没有谁比PHP的创建者Rasmus Lerdorf明白PHP用在什么地方是更合理的,他于1995年发布了PHP这门语言,从那时起,PHP就像燎原之火,烧遍了整个开发阵营,改变了互联 网的世界。可是,Rasmus并不是因此而创建PHP的。PHP是为了解决WEB开发者的实际问题而诞生的。

和许多开源项目一样,PHP变得流行,流行的动机并不能用正常的哲学来进行解释,甚至流行得有些孤芳自赏。它完全可以作为一个案例,一个解决各种Web问题的工具需求所引起的案例,因此当PHP刚出现的时候,这种工具需求全部聚焦到PHP的身上。

但是,你不能奢望PHP可以解决所有问题。Lerdorf是第一个承认PHP只是一种工具的人,并且PHP也有很多力所不能及的情况。

根据工作的不同来选择合适的工具。我跑了很多家公司,为了说服他们部署和使用PHP,但是这并不意味着PHP对所有问题都适用。它只是可以一个解决大部分问题的front-end脚步语言。

作为一个web开发者,尝试用PHP解决所有问题是不科学的,同时也会浪费你的时间。当PHP玩不转的时候,不要犹豫,试用一下其他的语言吧。

2. 使用多表存储提高规模伸缩性 – Matt Mullenweg

没有人愿意质疑Matt Mullenweg在PHP方面的权威性,他开发了这个星球上最流行的blog系统,(依靠一个强大的社区力量支持): WordPress. 创建Wordpress以后,Matt和他的团队启动了WordPress.com平台,一个基于WordPress MU的免费blog站点。现在,Wordpress.com已经拥有大约400万用户, 这些用户每天提供超过 140,000篇的日志。

如果有人知道如何让网站的规模伸缩自如,这个人一定是Matt Mullenweg。2006年的时候 Matt对Wordpress的数据结构进行了前瞻性的改进,并且解释了为什么Wordpress MU对每个blog使用独立的MYSQL表格, 而不是把所有的blog数据都塞进一个巨大的表格。

我们测试过这个方法,但是发现如果要扩展它的伸缩性,代价太高。如果用一个整体的数据结构,在大流量面前,你将会面临服务器硬件的问题。在MU里面。用户 们都被分布到独立的表格当中,并且可以轻易地组织起来。举个例子,WordPress.com把用户的数据分散存储到4096个数据库中,这些数据库可以 分散大规模的数据访问,实现流量和压力分流。

数据表的可迁移性让代码(blog)可以运行得更快,并且让系统具备更强的伸缩性。依靠强大的缓存策略和灵活的数据库运用策略, Matt向人们展示了时下最流行的Facebook和Wordpress.com都可以在PHP下稳定运行,并且处理惊人的访问量。

3. 千万不要相信用户 – Dave … 阅读全文

素描简介

  categories:儿童画教程  author:

来源:http://www.schoolfree.com/schoolfree/tw/meishu/msjc/sumiao-5.asp

一﹑素描工具

1﹑铅笔﹕美术铅笔的铅芯有不同等级的软硬区别﹒硬的以”H”为代表﹐如﹕1H﹑2H﹑3H﹑4H等﹐前边数字越大﹐硬度越强﹐即色度越淡﹔软的以”B” 为代表﹐如﹕1B﹑2B﹑3B﹑4B﹑5B﹑6B等﹐数字越大软度越强﹐色度越黑﹔学生用铅笔一般是HB形﹐软硬适中﹒对于初学绘画的可从HB到4B中选 择三种类型就可以了﹒
2﹑炭笔﹕炭笔的用法和铅笔相似﹐炭笔的色泽深黑﹐有较强的表现能力﹐是画素描的理想工具﹐用于画人物肖像尤佳﹒但画重了很难擦掉﹒
3﹑木炭条﹕木炭条是用树枝烧制而成﹐色泽较黑﹐质地松散﹐附着力较差﹐画完成后需喷固定液﹐否则极易掉色破坏效果﹒
4﹑炭精棒﹕炭精棒常见的有黑色和赭石色两种﹐质地较木炭条硬﹐附着力较强﹐可用可不用固定液﹒
5﹑橡皮﹕画画用的橡皮一般常用的有香型的较软的橡皮和可塑性橡皮﹐可塑性橡皮如同橡皮泥﹐用起来非常方便﹒
6﹑画板和画夹﹕画板和画夹都有不同的型号﹐大小可随自己的画幅而定﹐初学者选用590X440mm左右的为宜﹒画板比较坚固耐用﹐画夹则方便携带﹐是外出写生的好帮手﹒
7﹑画纸﹕画纸要选用纸面不太光滑且质地坚实的素描纸最佳(图画纸的质地较松软﹐初学者不容易掌握)﹐素描纸的附铅性强﹐且质地坚实﹐可反复擦改不易损坏纸面﹒

 

二 素描中线的表现方法

一﹑握笔

1﹑画画的握笔方法是和平时写字有区别的﹒通常的握笔方法是拇指﹑食指和中指捏住铅笔(如图1)﹐小指作支点支撑在画板上(或悬空)﹐靠手腕的移动来画出线条(如图2)﹒


2﹑只在细部刻画时才会采用象平时写字的握笔姿势﹐但依然是靠小指的支点来移动手腕完成(如图3)﹒

二﹑画板的摆放

1﹑画板的摆放应和视线垂直﹐画者和画板之间﹐应保持到可伸直臂膊的距离﹒这样在画的过程中﹐始终能照顾到全局﹐也避免由于视角的原因造成的透视错误(如图7)﹒
2﹑当画板位置确定后﹐在画的过程中就不要再移动﹐以避免因角度的变化影响画儿的透视改变﹒

三﹑线的种类和注意事项

1﹑在素描中线的表现方式灵活多样﹐也非常丰富﹐可以用排线的方法来表现一个面﹐线的轻重变化形成面的虚实凸凹等复杂的变化﹒这些都需要学习者从练习中去体会﹒
2﹑线的画法是落笔轻﹐中间重﹐收笔轻﹐整个动作一气呵成﹐形成两头虚中间实的线(如图4)﹒这样画出的线容易衔接﹐在整个画的过程中也容易把握整体的效果(如图5)﹒


3﹑带钩的线和两头齐的线在素描当中都是忌讳的﹐这样的线在衔接上会造成明显的接口﹐也容易造成线条的杂乱(如图6)﹒
4﹑排线是初学画画应特别注意的﹒虽说画无定法﹐但在没有达到一定程度时﹐讲究线的排放不但有利于学习的循序渐进﹐同时也是一个很好的学习习惯和方法﹒

三﹕素描中的透视表现

一﹑透视的类型

透视有三种﹕平行透视﹑成角透视﹑散点透视﹒
1﹑平行透视﹕平行透视也叫一点透视﹐即物体向视平在线某一点消失﹒
2﹑成角透视﹕成角透视也叫二点透视﹐即物体向视平在线某二点消失﹒
3﹑散点透视﹕散点透视也叫多点透视﹐即不同物体有不同的消失点﹐这种透视法在中国画中比较常见﹒


二﹑透视在绘画中应注意的一些特性

1﹑近大远小﹕近大远小是视觉自然现象﹐正确利用这种性质有利于表现物体的纵深感和体积感﹐从而在二维的画面上来表现出三维的体积空间﹒
2﹑ 近实远虚﹕由于视觉的原因﹐近处的物体感觉会更清晰﹐而远处的物体感觉会有些模糊﹐这一现象在绘画中也经常用来表现物体的纵深感﹒事实上﹐在绘画过程中﹐ 往往会对近实远虚更加以强调﹒(另外应注意的是﹕并非在所有的绘画过程中都遵守”近实远虚”这一规则﹐在一幅作品中主与次的关系往往更为重要﹐主体物的实 和次体物的虚是更好的视觉导向﹐这也是艺术优于现实的取舍和区别﹒)

四. 素描的色调”黑白灰”

素描的调子

素描的调子

阅读全文

spark基于hadoop集群环境的搭建

  categories:资料  tags:  author:

spark和hadoop都是两个炙手可热的两个项目,都是大名鼎鼎, hadoop的联邦高可用集群已经搭建完毕。

今天基于新版的spark1.3.1并且构建在hadoop2.7上,安装过程如下:

安装前提, 安装好hadoop集群,略。

一. 安装scala

1. 进入下载页面 http://www.scala-lang.org/download/2.11.7.html

2. 下载如下scala版本 http://downloads.typesafe.com/scala/2.11.7/scala-2.11.7.tgz?_ga=1.131438735.1254462619.1436380164

3. 上传的服务器上相关目录

4. 解压缩scala文件 tar -xvf scala-2.11.7.tgz

5. 验证scala,  输入scala -version
Scala code runner version 2.11.7 — Copyright 2002-2013, LAMP/EPFL

— $ scala
Welcome to Scala version

阅读全文

沙漠绿洲

  categories:儿童作品  author:

暑假练习画-沙漠绿洲阅读全文

湖和白桦

  categories:儿童作品  author:

iigrowing.ertonghua002-2

湖边的白桦树… 阅读全文

静思

  categories:儿童作品  author:

iigrowing.ertonghua001-1

坐在花朵上的静思… 阅读全文



快乐成长 每天进步一点点