分布式编程

Posted 一梦先知

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式编程相关的知识,希望对你有一定的参考价值。

①分布式应用程序简介

  分布式应用程序就是指应用程序分布在不同计算机上,通过网络来共同完成一项任务,通常为服务器/客户端模式。更广义上理解“分布”,不只是应用程序,还包括数据库等,分布在不同计算机,完成同一个任务。

 

②分布式的作用
   分散服务器的压力
    大型系统中,模块众多,并发量大,仅用一个服务器承载往往会发生压力过大而导致系统瘫痪的情况。可以在横向和纵向两方面来进行拆分,把这些模块部署到不同的服务器上。这样整个系统的压力就分布到了不同的服务器上。
    l 横向:按功能划分。
    l 纵向:N层架构,其中的一些层分布到不同的服务器上。

   提供服务,功能重用
    使用服务进行功能重用比使用组件进行代码重用更进一层。举例来说,如果在一个系统中的三个模块都需要用到报表功能,一种方法是把报表功能做成一个单独的组件,然后让三个模块都引用这个组件,计算操作由三个模块各自进行;另一种方法是把报表功能做成单独的服务,让这三个模块直接使用这个服务来获取数据,所有的计算操作都在一处进行,很明显后者的方案会比前者好得多。
    服务不仅能对内提供还能对外提供,如果其他合作伙伴需要使用我们的报表服务,我们又不想直接把所有的信息都公开给它们。在这种情况下组件方式就不是很合理了,通过公开服务并对服务的使用方做授权和验证,那么我们既能保证合作伙伴能得到他们需要的数据,又能保证核心的数据不公开。 

 

③实践操作(eclipse  Maven项目)

  1>创建工作环境——配置

    Java环境变量:Window——>preference——>Java——>Installed JRE(找到安装好的jdk)

    Maven:Window——>preference——>Maven——>User Settings——>Global Settings(在maven中config目录下找到settings.xml)

    General:Window——>preference——>general——>workspace(改变编码格式设为UTF-8)

  2>创建maven工程

    configure页面中,packging打包为(jar:纯java文件  pom:父工程文件  war:web文件)

    

    |1|先创建一个父工程,packging选择为pom,此工程只有src与pom.xml,将所有工程配置(jar包)全放在此工程里统一管理,其余工程为其子工程。这里列举常用的版本依赖代码如下:

技术分享图片
  1 <!-- 设置工程依赖版本号 -->
  2     <properties>
  3         <junit.version>4.12</junit.version>
  4         <spring.version>4.3.14.RELEASE</spring.version>
  5         <mybatis.version>3.4.5</mybatis.version>
  6         <mybatis.spring.version>1.3.1</mybatis.spring.version>
  7         <mybatis.paginator.version>1.2.15</mybatis.paginator.version>
  8         <pagehelper.version>3.4.2-fix</pagehelper.version>
  9         <mysql.version>5.1.32</mysql.version>
 10         <slf4j.version>1.6.4</slf4j.version>
 11         <jackson.version>2.4.2</jackson.version>
 12         <druid.version>1.1.8</druid.version>
 13         <httpclient.version>4.3.5</httpclient.version>
 14         <jstl.version>1.2</jstl.version>
 15         <servlet-api.version>2.5</servlet-api.version>
 16         <jsp-api.version>2.0</jsp-api.version>
 17         <joda-time.version>2.9.9</joda-time.version>
 18         <commons-lang3.version>3.3.2</commons-lang3.version>
 19         <commons-io.version>1.3.2</commons-io.version>
 20         <commons-net.version>3.3</commons-net.version>
 21         <jsqlparser.version>0.9.1</jsqlparser.version>
 22         <commons-fileupload.version>1.3.1</commons-fileupload.version>
 23         <jedis.version>2.7.2</jedis.version>
 24         <solrj.version>4.10.3</solrj.version>
 25         <dubbo.version>2.5.3</dubbo.version>
 26         <zookeeper.version>3.4.7</zookeeper.version>
 27         <zkclient.version>0.1</zkclient.version>
 28         <activemq.version>5.11.2</activemq.version>
 29         <freemarker.version>2.3.23</freemarker.version>
 30         <quartz.version>2.2.2</quartz.version>
 31     </properties>
 32 
 33 <!-- 管理工程依賴jar包的版本號 -->
 34     <dependencyManagement>
 35         <dependencies>
 36             <!-- 单元测试 -->
 37             <dependency>
 38                 <groupId>junit</groupId>
 39                 <artifactId>junit</artifactId>
 40                 <version>${junit.version}</version>
 41                 <scope>test</scope>
 42             </dependency>
 43             <!-- 日志处理 -->
 44             <dependency>
 45                 <groupId>org.slf4j</groupId>
 46                 <artifactId>slf4j-log4j12</artifactId>
 47                 <version>${slf4j.version}</version>
 48             </dependency>
 49 
 50             <!-- Apache COMMONS工具组件 -->
 51             <dependency>
 52                 <groupId>org.apache.commons</groupId>
 53                 <artifactId>commons-lang3</artifactId>
 54                 <version>${commons-lang3.version}</version>
 55             </dependency>
 56             <dependency>
 57                 <groupId>org.apache.commons</groupId>
 58                 <artifactId>commons-io</artifactId>
 59                 <version>${commons-io.version}</version>
 60             </dependency>
 61             <dependency>
 62                 <groupId>commons-net</groupId>
 63                 <artifactId>commons-net</artifactId>
 64                 <version>${commons-net.version}</version>
 65             </dependency>
 66 
 67             <!-- 时间操作组件 -->
 68             <dependency>
 69                 <groupId>joda-time</groupId>
 70                 <artifactId>joda-time</artifactId>
 71                 <version>${joda-time.version}</version>
 72             </dependency>
 73 
 74             <!-- JSP相关 -->
 75             <dependency>
 76                 <groupId>jstl</groupId>
 77                 <artifactId>jstl</artifactId>
 78                 <version>${jstl.version}</version>
 79             </dependency>
 80             <dependency>
 81                 <groupId>javax.servlet</groupId>
 82                 <artifactId>servlet-api</artifactId>
 83                 <version>${servlet-api.version}</version>
 84                 <scope>provided</scope>
 85             </dependency>
 86             <dependency>
 87                 <groupId>javax.servlet</groupId>
 88                 <artifactId>jsp-api</artifactId>
 89                 <version>${jsp-api.version}</version>
 90                 <scope>provided</scope>
 91             </dependency>
 92             <!-- 文件上传组件 -->
 93             <dependency>
 94                 <groupId>commons-fileupload</groupId>
 95                 <artifactId>commons-fileupload</artifactId>
 96                 <version>${commons-fileupload.version}</version>
 97             </dependency>
 98 
 99             <!-- Jackson Json处理工具包 -->
100             <dependency>
101                 <groupId>com.fasterxml.jackson.core</groupId>
102                 <artifactId>jackson-databind</artifactId>
103                 <version>${jackson.version}</version>
104             </dependency>
105 
106             <!-- httpclient -->
107             <dependency>
108                 <groupId>org.apache.httpcomponents</groupId>
109                 <artifactId>httpclient</artifactId>
110                 <version>${httpclient.version}</version>
111             </dependency>
112 
113             <!-- quartz任务调度框架 -->
114             <dependency>
115                 <groupId>org.quartz-scheduler</groupId>
116                 <artifactId>quartz</artifactId>
117                 <version>${quartz.version}</version>
118             </dependency>
119 
120             <!-- Mybatis -->
121             <dependency>
122                 <groupId>org.mybatis</groupId>
123                 <artifactId>mybatis</artifactId>
124                 <version>${mybatis.version}</version>
125             </dependency>
126             <dependency>
127                 <groupId>org.mybatis</groupId>
128                 <artifactId>mybatis-spring</artifactId>
129                 <version>${mybatis.spring.version}</version>
130             </dependency>
131             <dependency>
132                 <groupId>com.github.miemiedev</groupId>
133                 <artifactId>mybatis-paginator</artifactId>
134                 <version>${mybatis.paginator.version}</version>
135             </dependency>
136             <dependency>
137                 <groupId>com.github.pagehelper</groupId>
138                 <artifactId>pagehelper</artifactId>
139                 <version>${pagehelper.version}</version>
140             </dependency>
141             <!-- MySql -->
142             <dependency>
143                 <groupId>mysql</groupId>
144                 <artifactId>mysql-connector-java</artifactId>
145                 <version>${mysql.version}</version>
146             </dependency>
147             <!-- 连接池 -->
148             <dependency>
149                 <groupId>com.alibaba</groupId>
150                 <artifactId>druid</artifactId>
151                 <version>${druid.version}</version>
152             </dependency>
153             <!-- Spring -->
154             <dependency>
155                 <groupId>org.springframework</groupId>
156                 <artifactId>spring-context</artifactId>
157                 <version>${spring.version}</version>
158             </dependency>
159             <dependency>
160                 <groupId>org.springframework</groupId>
161                 <artifactId>spring-beans</artifactId>
162                 <version>${spring.version}</version>
163             </dependency>
164             <dependency>
165                 <groupId>org.springframework</groupId>
166                 <artifactId>spring-webmvc</artifactId>
167                 <version>${spring.version}</version>
168             </dependency>
169             <dependency>
170                 <groupId>org.springframework</groupId>
171                 <artifactId>spring-jdbc</artifactId>
172                 <version>${spring.version}</version>
173             </dependency>
174             <dependency>
175                 <groupId>org.springframework</groupId>
176                 <artifactId>spring-aspects</artifactId>
177                 <version>${spring.version}</version>
178             </dependency>
179             <dependency>
180                 <groupId>org.springframework</groupId>
181                 <artifactId>spring-jms</artifactId>
182                 <version>${spring.version}</version>
183             </dependency>
184             <dependency>
185                 <groupId>org.springframework</groupId>
186                 <artifactId>spring-context-support</artifactId>
187                 <version>${spring.version}</version>
188             </dependency>
189 
190             <!-- Redis客户端 -->
191             <dependency>
192                 <groupId>redis.clients</groupId>
193                 <artifactId>jedis</artifactId>
194                 <version>${jedis.version}</version>
195             </dependency>
196             <!-- solr客户端 -->
197             <dependency>
198                 <groupId>org.apache.solr</groupId>
199                 <artifactId>solr-solrj</artifactId>
200                 <version>${solrj.version}</version>
201             </dependency>
202             <!-- dubbo相关 -->
203             <dependency>
204                 <groupId>com.alibaba</groupId>
205                 <artifactId>dubbo</artifactId>
206                 <version>${dubbo.version}</version>
207             </dependency>
208             <dependency>
209                 <groupId>org.apache.zookeeper</groupId>
210                 <artifactId>zookeeper</artifactId>
211                 <version>${zookeeper.version}</version>
212             </dependency>
213             <dependency>
214                 <groupId>com.github.sgroschupf</groupId>
215                 <artifactId>zkclient</artifactId>
216                 <version>${zkclient.version}</version>
217             </dependency>
218             <dependency>
219                 <groupId>org.apache.activemq</groupId>
220                 <artifactId>activemq-all</artifactId>
221                 <version>${activemq.version}</version>
222             </dependency>
223             <dependency>
224                 <groupId>org.freemarker</groupId>
225                 <artifactId>freemarker</artifactId>
226                 <version>${freemarker.version}</version>
227             </dependency>
228         </dependencies>
229     </dependencyManagement>
230     
231     <build>
232         <!-- 工程插件管理 -->
233         <pluginManagement>
234             <plugins>
235                 <plugin>
236                     <groupId>org.eclipse.jetty</groupId>
237                     <artifactId>jetty-maven-plugin</artifactId>
238                     <version>9.0.0.v20130308</version>
239                 </plugin>
240             </plugins>
241         </pluginManagement>
242         <plugins>
243             <!-- 资源文件拷贝插件 -->
244             <plugin>
245                 <groupId>org.apache.maven.plugins</groupId>
246                 <artifactId>maven-resources-plugin</artifactId>
247                 <version>2.7</version>
248                 <configuration>
249                     <encoding>UTF-8</encoding>
250                 </configuration>
251             </plugin>
252             <!-- java编译插件 -->
253             <plugin>
254                 <groupId>org.apache.maven.plugins</groupId>
255                 <artifactId>maven-compiler-plugin</artifactId>
256                 <version>3.2</version>
257                 <configuration>
258                     <source>1.8</source>
259                     <target>1.8</target>
260                     <encoding>UTF-8</encoding>
261                 </configuration>
262             </plugin>
263         </plugins>
264     </build>
设置版本依赖

(其中包含jetty插件,测试时常用jetty插件服务器,方便快捷,代码层级:build——pluginManagement——plugins——plugin)

      |2|创建子工程(如常用工具集comments,选择jar包),此时要填写父工程相关信息。其pom.xml中有父工程的描述,包括版本号和groupId

    |3|单个子工程中模块的创建,选择maven module并创建,如果需要引用其他工程(如dao层需要引用entity中的javaBean),则在pom.xml中加上相关依赖。

      (其中web工程的pom.xml中需要将jetty配置引过来)

    

    









以上是关于分布式编程的主要内容,如果未能解决你的问题,请参考以下文章

使用 Pygments 检测代码片段的编程语言

面向面试编程代码片段之GC

如何在 Django Summernote 中显示编程片段的代码块?

以编程方式将按钮添加到片段

solr分布式索引实战分片配置读取:工具类configUtil.java,读取配置代码片段,配置实例

译文:18个实用的JavaScript代码片段,助你快速处理日常编程任务