- 首先,这放假几天一直没事,想学学大数据,但是基础不行,有一个大神给我说过一句话" 基础将决定你将来回走的多远,多深 "所以基础很重要。
- 在网上找一个项目。但是环境一点都一样,我也不能直接copy源码吧!而且我还要把学的SSM框架好好回顾一下,也是对原来的基础的一个总结。
- 就算是跟着老师一起做,问题还是一大顿。写这个也是为了这个,方便我以后看看。
一,耦合度,一个简单的例子。
- 传统架构一个项目,各个功能会糅杂在一起,系统内部的功能模块耦合度很高,那什么是耦合度高,举个例子吧:这还是我在一本书上看的;
以卖衣服为例吧,衣服有男女之分,并且要统一的进行折扣管理
//卖衣服的接口 public interface Scloths{ //获取衣服名 public String getName(); //获取/衣服的类别 public String getType(); //获取衣服的价格 public int getValue(); }
那是不是有卖男衣服的类和卖女装的类
public class ManCloths implements Ccloths{ //鞋子名 private String name; //鞋子类型 private String type; //鞋子价格 private int value; //省略get,set方法以及构造器 }
public class GirlCloths implements Ccloths{ //鞋子名 private String name; //鞋子类型 private String type; //鞋子价格 private int value; //省略get,set方法以及构造器 }
没有实现接口啊,,在仔细看看!
那么问题来了, 我要统一对衣服进行降价的处理,假如我们有这么多的可能
- 男装原价大于200元的打八折,原价大于100打九折
- 女装原价大于200打七折,原价大于100的打八折
那么应该怎么处理这个折扣处理呢?
- 第一种,直接在接口Ccloths中直接添加GetPriceDown()的方法方法。
想一想这个方法行不行?我当时就以为这个就可以啊 ,程序可以运行啊。当然对于小程序可以跑,但是对于一个大的项目来说,这样就是不可以的,我为了这个功能要修改一个接口,这还不算,还要修改他的实现类,假如这个接口中还有一些其他的其他的方法,就和买衣服没什么关系,那我的实现类是不是还要实现他的方法。我不需要还要实现,是不是有点难受,那这里是不是就体现出耦合度了,修改一处就必须要修改其他的地方,如此循环是不会进入死循环,那你的项目还怎么写,怎么进行项目功能的增加,扩展,是不是不好维护,这就好比是传统的架构,牵一发而动全身,内部每个功能模块的牵扯(耦合)太多了。
- 第二种方法,简单说下,在男女服装类中添加折扣方法GetPriceDown(),
是不是相对简单一些,无需在进行其他的修改。但不是最好的,
- 第三种方法,那就是在原有的基础上增加两个类并继承男女服装类,专门用于折扣处理,在里面覆盖父类的getValue()方法
那这种方法修改的代码量最少,想要什么功能增加继承类就可以,覆盖父类的方法,思维扩散下,对于一个大型项目,这个思想,他的扩展性就很好,内部代码的关联就少了很多,进行升级的时候仅需要修改少量的代码。
这上面的列子仅仅是一种设计模式,但这个列子已经很好的说明了耦合度这个问题, 分布式系统远远不止这些。
传统架构存在的问题:
- 开发、维护代码比较困难,无法针对每个模块的特性做优化,系统内部的功能模块之间的耦合度太高了,这在上面已经说明了
- 无法做服务器的水平扩展
比如一些项目打包都是放在Tomcat中,而这些Tomcat是放在linux服务器上的 ,当然服务器架构不会这么简单。这个和我访问网站存储会话有关,假如我们在京东网页版买东西,在我们登陆后,这个会话是不是记住了我的信息,当你要进行付款的时候,肯定会确认是哪一个人吧,那这个登录和付款是两个(模块)功能,通过session联系,但是要进行服务器的扩展,就是多部署几个Tomcat在服务器上,Tomcat和Tomcat之间又不能进行session联系,那么就会出错,在登录的时候你的信息还是你,那么你在付款的时候可能就是另一个人的信息 (ps: 解释仅是参照一些资料,大概是个这个意思。)
3.无法存储海量数据 都不能水平扩展怎么进行海量存储,硬盘也就那么大。
那么分布式架构的优势就很明显。但是有些新的问题,我不太懂就不写了,我怕把自己绕进去。
二,主要还是我遇到的问题
使用IDEA,maven创建一个分布式的项目步骤。我在这搞了一天多,TMD!还是自己不行 ,对家伙什都玩不6
直接来一条连接吧,不重复造轮子!有人总结就拿来用,按照这位大神的步骤就可以了:
转载:https://blog.csdn.net/sinat_34344123/article/details/79080601
2,创建好了,就应该导入依赖 ,装天到Tomcat,网上的资料还是有点杂我自己吧便后的target删除后又重新编译装载了一遍下面是过程图,可能与你不一样,但是有些经验还是有用的,毕竟是我查资料,再自己发挥。
这个主要知道一个项目的目录结构,注意这里面没有target文件,我已经删除了且删除了Tomcat8的配置
第一张
这个图没什么说的 进入Project Structure
这个紧接着上面的弹出来的,前面几个步骤主要是向Tomcat中添加war(自动压缩的)
装载好war,就可以点击运行 ,最好先update(养成一个习惯,无论做完什么操作都先update,再run Tomcat)
一般情况,不论前面多买努力,到这一步,多少会出点错,不然对不起你呀!!!
我遇到错先自己看看,能看懂就先自己改一改,不行再去百度,谷歌。我建议啊,不要一遇到错误就去论坛找大神,还有在上面
很花时间,除非你是在没有办法。有时候按照那些大神的操作,不但没有好,反而错误越来越多,有时候直接系统蹦了,这个我深有感悟,尤其是在学linux时(现在暂时打算学了),linux不像Java啊,那都是命令行,而且linux没有回收站,删了就删了,结果不对,反而系统崩了,我找谁啊 ,MD!!!!!!。如果写一块代码十分钟,去bug花一个小时或者更长,我建议你重新换个角度去写,不值当。网上大神是多,但是符合你的错误的是在很少,基本错误都差不多。自己那么奇葩的错误可能都没有,回头还得自己来
所以自己多看看,多分析。
上面的错大概是说类没有加载到吧,那肯定是相关的包没有导入啊,我又想了一下,这肯定是在装载war的时候没有加上去,一般不会是你的依赖没有导入,用maven管理,parent里面都是写好的啊,本地仓库肯定是有的,没有也都下载完整了。我自己都怕jar导入多了重复了,自然不会想没有导入jar,在Tomcat上运行,要把项目的war装载上去,war上没有相关的文件,自然会报错。操作具体如下,就会在class文件就会多相关依赖的文件,这都是环环相扣的,web-->service --->mapper-->pajo,这些肯定都要导入,
先update 在运行,就会有目标文件target,里面的classes就编译后的文件。但是是不是还是少一个文件文件名就是你war包的名字,也就时说你的jsp页面等的资源没有加载到target中,那么以后部署的时候就会有问题,但是没有那个文件程序依然可以在Tomcat上跑 ,我就是这种情况,为了以后不麻烦,这是应为esclipse会自动将静态文件加到class中,但是idea不行啊,所以要填加一块代码,如果你是按照上面那个链接的操作,或许会和我一样,你的parent的pom.xml没有相关的插件,那就添加下面的代码
<build> <finalName>${project.artifactId}</finalName> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.0.0</version> </plugin> <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.20.1</version> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.0</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> </plugins> </pluginManagement> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build>
这以上是我自己根据日志进行的一些排查,可以略过
这只是个人经验,希望有帮助。 如果以上有写的不对,欠缺的地方,望指出,一起学习,共勉!!!!!!!!!。