说明:传统项目中我们的Controller、Service、DAO、POJO都写在一个工程中,在分布式的项目中我们将每个模块分开。
项目分前台和后台两个部分:
前台是普通用户看到的网站,比如你看到的淘宝页面就是前台。
后台是公司内部的管理人员使用的,用于管理商品信息,比如淘宝的店主需要编辑商品。
父工程:分布式架构中,通常设计一个父工程,父工程中不写业务代码,只在pom文件中配置jar包的版本信息。所有的工程都继承它,从父工程中获取jar包版本信息。这样在jar包升级的时候,我们只要修改父工程的pom文件,而不需要修改每个子工程。
DAO和Service:数据层和服务层都分开写两个模块,通过面向接口的形式编程。其中Service以服务的形式发布出去,Service只提供业务接口,没有界面。表现层是web网站还是app都和它没有关系。同一个数据接口可以被多个表现层复用。
表现层:Controller和View。Controller从Service中获取数据并展示给用户View。View并不一定是html页面,也可以是单纯的json数据,如安卓或Ios的数据接口。Controller提供json数据给app,由app在手机界面上展示给用户。
分布式的好处:
比如一个项目中有以下几个模块:注册登录、用户信息修改、商品搜索和下单支付。非分布式项目里我们把这四个模块写到一个工程中。如果其中一个模块修改,就要重新部署整个工程。而且在实际运营中发现,搜索模块用的最高,其次是支付。注册和登录用的并不多。比如双十一的时候,用户都是提前注册的老用户,登录后系统记录了用户的登录状态。所以多数的用户都在搜索商品和下单支付。一台服务器的性能有限,假设能承载50个用户,如果有100个用户来,我们就要加一台服务器。这个叫做负载。负载均衡是把同一个工程部署到多台服务器上,由一个入口的应用判断要把请求分配到哪台服务器。但是前面我们已经说过,注册和登录用的并不多,真正需要加负载的是搜索和支付。根据实际情况,可能搜索使用的频率更大于支付。非分布式的项目里,整个工程一起打包部署,代码都写到一个工程中,注册和登录占用了分配给搜索和支付的资源。分布式的项目可以按模块或者功能拆分代码。比如我们把注册登录和信息修改写到一个工程里;商品搜索写到一个工程;支付写一个工程。根据运营的情况给每个模块加负载,注册登录分1台服务器,搜索加10台,支付加5台。而且修改了其中的一个模块,只要重新部署这个模块所在的服务器就可以,不会影响其他模块服务器的运行。
当然并不是说分布式就一定好,如果工程比较小的话,写成分布式的反而会消耗系统的性能。根据实际情况来设计整个项目的架构。在项目设计的初期,要考虑工程的可扩展性。
下面简单说明创建一个分布式系统的流程:
1.创建父工程
不使用模板,直接创建maven工程,父工程travel-parent的打包方式是pom
父工程里不写代码,只写jar包配置,其它子工程继承travel-parent,从这里引用jar包,方便管理整个分布式架构中的jar包版本。
创建工程后需要发布工程,这样其它的工程就可以继承父工程了。在idea右侧的菜单中双击install
2.创建通用工程
不使用模板,创建通用工程travel-common,这个工程中存放实体类和一些通用的工具类。
此工程要继承travel-parent,打包方式是jar
3.创建后台管理聚合工程
后台管理中,将dao接口、service接口、service实现类写到三个模块中
其中travel-manager是pom聚合工程
其余三个是model模块,每个model都有一个自己的pom.xml
创建的方法是在travel-manager上右键->New->Module
3.1travel-manager
travel-manager的pom.xml,继承travel-parent
3.2travel-manager-dao
travel-manager-dao的打包方式是jar,即创建工程的时候不需要模板
3.3travel-manager-interface
travel-manager-interface的打包方式是jar,即创建工程的时候不需要模板
3.4travel-manager-service
travel-manager-service是web工程,打包方式是war,创建工程时需要选用webapp模板
4.创建后台web工程
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/aiops/290690.html