分布式系统的出现主要用来解决大型项目中的大数据以及系统性能的问题。它是一种基于网络的系统互联,通过将多台服务器(web服务器和数据库服务库)配置在联通的网络中实现各个系统的互操作,然后通过负载均衡将大数据均匀的分摊到各个服务器,从而缓解单独服务器的压力,达到提高系统性能的目的。下面我们来分析分布式系统开发的整个过程,所需要解决的问题以及解决问题的方法。


1.选择开发模式。以高效平台项目为例,在该项目中我们采用的是颗粒开发模式。通过将一个个的小功能做成颗粒,然后将这些小颗粒组装成为一个具有一定功能的大型项目。对于这些颗粒的构建所采用的构建工具是maven,通过maven将各个颗粒构建成为一个个具有特定功能的jar包。然后通过各个jar包的组合形成具有一定功能的应用。


2.颗粒管理。随着项目的不断开发,jar包的数量会迅速增长。此时如何对这些颗粒进行管理就成了摆在我们面前的最为主要的问题。那么如何解决这个问题呢?我们可以借助已有的第三方中间件来实现复杂的jar包管理,一般来讲就是我们常说的伺服器。在高效平台的开发中我们选用的是Nexus。他通过三维坐标定位的方式来确定每个jar包的位置,在我们的maven项目中都有一个pom文件,只要在pom文件中的<dependencis>标签中添加相应的jar的坐标,就可以实现对该jar的引用。


3.解决各系统之间的互操作问题。分布式系统的一个最大的特点就是系统间的互操作,在高效平台项目中我们同样要解决这个问题。比如该系统中的两个子系统:基础系统和考试系统。考试系统需要从基础系统取得学生将其放入自己的数据库中作为考生,而另外一个子系统评教系统同样需要取得学生将其放入自己的数据库作为参评考生。如何解决不同系统间的通讯问题呢?我们采用的是webservice作为中间服务层实现数据的传递。也就是通过将取得考生这个功能发布称webservice,各个系统通过调用webservice来实现数据的间接传递。


4.部署分布式web服务器。分布式服务器的部署有两种方式。第一种方式为在一台电脑上部署一个JBoss服务器开启多个实例,将每个具体项目部署到不同的实例中。第二中当然就是在每一台电脑上部署一个JBoss服务器,将每个项目部署到每个JBoss中。虽然第一种方式会开启多个jvm进程,各系统之间的访问方式也是远程访问,在概念上来说属于分布式,但是这样做却很难体现分布式的好处,原因就在于硬件性能是固定的,这就好比几个人分一个苹果一样,这样并不能提高系统的性能。二第二种方式更像是每个人都有一个苹果,不用和别人分享。两种方式的效率当然不能同日而语。


5.部署数据库服务器。数据库服务器的部署和web服务器的部署很类似,最好的方式当然是每个子系统都拥有自己的一个或多个数据库服务器,当各个系统同时使用的时候,这样做不但能够大大提高访问数据库的效率,更为重要的是通过负载均衡甚至可以对每个子系统在进行负载分化,从而解决大数据问题,理论上来讲,只要有足够的服务器,再大的数据量都可以通过负载均衡的方式得到解决。


6.项目进度管理。分布式系统的开发大多属于大型项目,并且各个子系统的开发是同时进行的,如何对整个项目(包括各个子系统)的进度进行管理呢?对于项目管理同样有很多很好的工具。我们采用的是禅道,confluence,JIRA。这几款项目进度管理软件都能够很好的进行任务分配,任务完成度分析,以及对任务进度管理。


7.持续集成。分布式系统的开发所带来的必然问题是版本的不断更新。如何对各个系统进行不间断的集成测试又是分布式系统开发所要解决的另外一个重要问题。同样可以采用第三方集成工具来解决这个问题。我们采用的是jenkins来实现系统的持续集成。jenkins结合SVN完美解决maven项目的持续集成问题。

虽然到目前为止高效平台项目已经结束了,但还是有很多地方需要优化,主要有以下几点:

1.分布式web服务器以及分布式数据库的部署。在本项目中我们的JBoss和数据库服务器都部署在了同一台机器上,并且一个JBoss开启的是四个实例,各个系统的数据库在同一个DBMS中,这样所带来的弊端第一是没能很好的体现分布式系统的优势,在系统性能上与真正意义上的分布式项目还是有很大的差距的。第二是多用户同时使用多系统时(如评教和考试同时进行的时候),由于机器支撑JBoss的四个实例以及支撑DBMS的运行本省就会耗费大量的系统资源,此时再加上大量用户访问数据库会不停地打开和关闭数据库连接,这个过程是非常痛苦的,所耗费的系统资源也是非常大的,在这种情况下机器很容易死掉。

 

2.webservice数据传递。webservice是实现各个系统之间互操作的重要技术,但是数据的传递由于是通过网络,所以必须要进行序列化。在高校平台中传递的实体,与字符串序列化后的效率相比,传递实体的效率显然是很低的。将所要传递的数据转化成json字符串是一种很好的解决方式。

 

3.经常访问的数据需要加缓存。添加缓存主要是为了防止频繁访问数据库,提高系统性能。在这个项目中考生信息,试题信息都是访问比较频繁的地方,可以通过添加缓存来缓解服务器压力