您的位置:首页 > 其它

服务化的时代已经来临:学习dubbo有感

2013-11-22 10:27 141 查看
IT行业日新月异,疯狂的发展速度令人感慨万分,与之带来的挑战也更加明显!如夸张到不可思议的大数据,愈发膨胀的服务等等等等,都是我们要去面对学习解决的问题,当然如果你只是去开发简单的项目 并一直如此,你可能就没有必要去面对这些。去应对挑战,学习新的技能是个很愉快但也掺杂痛苦的过程,首先你要确定自己的方向,没有方向你连前进的路都找不到,只会有拔剑四顾心茫然的迷茫。

大数据方面已经有了好多稳定的框架,并且资料很是丰富,有一点你可能需要清楚,这只是用来处理数据的,但处理数据的究极目标是什么?无非是展示给人来看,这就是需要来实现的服务。服务实现或许很是简单,一个表的增删改查就可以是一个服务,这就又有了一个很重要也很棘手的问题,这就是如果你的服务越来越多,调用越来越复杂,你该如何去解决这个问题!,这就引出了服务化的概念!

什么是服务化,我个人理解是:改变原有的mvc开发模式和思想,把之前的纵向开发演变为调用服务的横向开发,不是把所有的实现都放到一个工程里,而是把一些服务层的东西抽取出来,注册后一个公用的服务,在需要的地方调用!这种理解可能与事实变差很远,希望高手给与指点。

我们为什么要用服务化?或者说什么时候要用到服务化,这才是大家真正关心的问题!

一个大的项目有多个子业务工程和业务库(每个业务库归属一个业务工程),但工程之间的好多数据是要共享的,比如一个业务库的数据是其他几个业务工程也需要的东西,这就涉及到表的同义词或是数据库分中心之类,项目越来越大,表的结构也不可能一层不变,数据库的耦合越来越紧,感觉压抑的喘不过气,想要解耦数据库的关联怎么办?用服务化!

一个公司的几个项目之间没有很多的数据库耦合,但有一些数据交互,通常会选择使用webservice或是ejb之类,这涉及到一个开发量和更改量的问题(题外话:个人表示很不喜欢webservice,就算用工具生成,调用代码也繁琐),接口的变化会严重影响两个工程的其他功能应用,或者一个工程挂掉或是重启,直接导致了调用服务的不可用!想要斩断这些藕断丝连,我死你也别想活的关系咋办?用服务化!

功能越来越丰富,项目越来越庞大,需要的资源也就越来越多,对服务器的要求也就更高!传统的应对方案就是加硬件,换服务器,这跟大数据处理的起源一个概念,硬件的价格会成指数级的上升!想要 马跑的快,草呢还不能吃的太好(你吃的太好我挣什么钱呀),怎么办?用服务化!

服务化的大饼画的这儿漂亮,好多公司和团队都想着去吃一口,那我们该如何去实现服务化呢?阿里巴巴推出了一个dubbo的开源框架,专门的来实现服务化!dubbo的开发或者说是集成很是简单漂亮,它依赖于spring(官方推荐,你不用spring也可以用,只是调用api,个人感觉调用api很不好,麻烦不说,很多东西要自己控制,容易出漏子),你可以很简单的集成到自己的工程中,只需要简单加入jar包或是依赖,然后改变或是加入你的spring配置,你原有的代码不需要或是很小的改动就能实现服务的发布!

服务的发布有什么用呢?这就是服务化的核心了(纯个人感觉,欢迎拍砖)!服务发布注册后,你可以提供你的接口和bean的java文件给想要调用你的用户,在他们的工程中配置好你的服务(只需要简单的在spring文件中配置两三行,或是直接用api调用)为一个bean,然后可以像调用普通spring的bean一样去调用你发布的服务,简单的令人发指!当然jar或者依赖还有dubbo基本配置是不可少的,

看上去好简单吧,别犹豫去dubbo的官方看下,然后走一个简单的例子,你可能会惊喜的叫出来!至于其他的你能想到或是需要的一些东西,dubbo都已经提供,如集群使用,负载均衡,监控,管理等等等等,一应具有!

学习探索服务化的过程不单单是学习框架的过程,还有一些知识经验思想的进步与积累,关于服务化的其他一些想法和建议,会在之后的文章中提到,希望大家多多指点谢谢!

附上dubbo的依赖(包括使用zookeeper作为注册中心的依赖):

<properties>
<spring.version>3.1.1.RELEASE</spring.version>
<log4j.version>1.2.12</log4j.version>
<slf4j.version>1.6.1</slf4j.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.sourceEncoding>UTF-8</project.reporting.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
<exclusions>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
</dependencies>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: