分布式

什么是分布式?什么是集群?什么是高并发?什么是高可用?

  • 高并发:指访问量很多的情况下
  • 分布式:分布式指一件事情拆开来做
  • 集群:集群指同样一件事情大家一起做
  • 负载均衡:将请求大概平均分配到不同的tomcat中去
  • 高可用:对服务器进行备份,避免系统挂掉

总结:在我们高并发的情况下,我们可以使用集群,分布式,在负载均衡的作用下达到一种高可用的目的

海量数据的入门级别

1024b=1kb
1024kb=1Mb
1024Mb=1Gb
1024Gb=1Tb
1024Tb=1pb
海量数据的入门级别就是1pb

电商模式

B2B:商家到商家
B2C:商家到用户
C2C:用户到用户
B2B2C:商家到商家到用户
O2O:线上到线下
P2P:个人对个人的信贷

传统架构的缺点

  1. 功能耦合度高,指当需要维护某一个功能时,其他功能可能因此也需要做一定的调整
  2. 系统维护成本高,当需要维护某一个功能时,就需要停掉整个系统,造成大量的损失
  3. 如果并发量大,无法解决高并发的问题,
针对第三点,我们可以采用负载均衡+集群的方法解决

假设一个服务器为500并发,则两个服务器就是1000并发,使用负载均衡+集群可以解决高并发问题但是使用集群+负载均衡仍然存在一些问题

  1. 用户存在重复登录的问题
    当用户访问经负载均衡到服务器1登录,在服务器1上保存session,但是当用户第二次请求时,可能就请求到服务器2上,服务器2上并没有用户的session,用户就会被服务器2打回登录页面重新登录
    解决办法可以使用session共享,但是比较消耗资源,宽带,它的服务能力是先增加后下降,所以集群的节点数量不能太多,一般5个左右)
  2. 系统无法有效进行水平扩展(如果要对系统进行维护扩展,就需要对所有的服务器都进行维护拓展)

分布式

什么是集群?

相当于同一个工程代码拷贝多份部署到多台服务器,每台服务器单独独立部署运行。

什么是分布式?

按照功能点把系统拆分,拆分成独立的功能模块,可以单独为某一个功能模块添加服务器,需要系统之间的配合通信才能完成整个业务逻辑
解决问题:

  1. 解决了传统系统间功能耦合度高的问题,当只需要维护某一个功能的时候,只需要维护对应功能的服务器即可
  2. 解决了传统系统维护成本高的问题,当某一块功能出现问题时,只需要停掉对应功能的服务器即可,其他功能依然不影响使用
  3. 解决高并发问题,将登陆系统独立出来成一个单点登录系统,专门用于登录,身份认证,其他系统只需要向单点登录系统通讯询问即可。

优点:

  1. 把模块拆分,使用接口通信,降低模块之间的耦合度
  2. 把项目拆分成若干个子项目,不同的团队负责不同的子项目
  3. 增加功能时只需要再增加一个子项目,调用其他系统的接口就可以。
  4. 可以灵活的进行分布式部署

缺点:

  1. 系统之间交互需要使用远程通信,需要开发接口,增加工作量
  2. 各个模块有一些通用的业务逻辑无法公用(SOA架构可以解决)
基于SOA的架构

SOA指面向服务的架构,将工程分为服务层工程和表现层工程,服务层包含业务逻辑,只需要对外提供服务即可,表现层只需要调用服务层的服务,处理与页面交互即可。

SOA架构的结构

  • **-parent:父工程,打包方式pom,管理jar包的版本号,项目中所有工程都应该继承父工程。
  • **-common:通用的工具类,打包方式jar
  • **-manager:服务层工程。聚合工程。打包方式pom
    • **-manager-dao:打包方式jar
    • **-manager-pojo:打包方式jar
    • **-manager-interface:为表现层提供业务接口,打包方式jar
    • **-manager-service:打包方式jar
  • **-manager-web:表现层工程,打包方式war

SSM框架版的SOA架构的搭建(idea版,以taotao商城为例)

  1. 创建一个空的文件夹taotao

  2. 创建model父工程taotao-parent,管理jar包版本,打包成pom

    • spring和springmvc的10个jar包
    • spring的jdbc
    • spring对于声明式和注解式事务的支持spring-tx
    • spring对消息队列的支持spring-jms
    • jsp相关的3个jar包
    • 文件上传的jar包
    • redis缓存支持的jar包
    • solr客户端支持的jar包
    • dubbo相关的jar包
    • 数据库连接池durid的jar包
    • mysql的支持jar包
    • mybatis的jar包
    • spring支持mybatis的jar包
    • mybatis支持的分页的jar包
    • 日志处理
    • 单元测试
    • httpclient的jar包
    • Json数据支持的jar包
    • Apache工具组件
    • 时间操作组件
    <groupId>com.taobao</groupId>
    <artifactId>taobao-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <!--集中定义依赖版本号-->
    <properties>
        <!--单元测试-->
        <junit.version>4.12</junit.version>
        <!--spring和springmvc等-->
        <spring.version>5.1.5.RELEASE</spring.version>
        <aspectjweaver.version>1.9.2</aspectjweaver.version>
        <aopalliance.version>1.0.0</aopalliance.version>
        <!--mybatis-->
        <mybatis.version>3.4.6</mybatis.version>
        <!--spring的Mybatis的支持-->
        <mybatis.spring.version>1.3.2</mybatis.spring.version>
        <!--分页-->
        <mybatis.paginator.version>1.2.15</mybatis.paginator.version>
        <pagehelper.version>5.1.2</pagehelper.version>
        <!--mysql-->
        <mysql.version>6.0.6</mysql.version>
        <!-- 日志处理 -->
        <slf4j.version>1.7.25</slf4j.version>
        <!--json数据-->
        <jackson.version>2.9.8</jackson.version>
        <!-- 连接池 -->
        <druid.version>1.1.10</druid.version>
        <!--httpclient-->
        <httpclient.version>4.3.5</httpclient.version>
        <!--前端支持-->
        <jstl.version>1.2</jstl.version>
        <servlet-api.version>2.5</servlet-api.version>
        <jsp-api.version>2.0</jsp-api.version>
        <!-- 时间操作组件 -->
        <joda-time.version>2.9.9</joda-time.version>
        <!-- Apache工具组件 -->
        <commons-lang3.version>3.4</commons-lang3.version>
        <commons-io.version>1.3.2</commons-io.version>
        <commons-net.version>3.3</commons-net.version>
    
        <jsqlparser.version>0.9.1</jsqlparser.version>
        <!-- 文件上传组件 -->
        <commons-fileupload.version>1.3.1</commons-fileupload.version>
        <!-- Redis客户端 -->
        <jedis.version>2.9.0</jedis.version>
        <!-- solr客户端 -->
        <solrj.version>7.4.0</solrj.version>
        <!-- dubbo相关 -->
        <dubbo.version>2.5.3</dubbo.version>
        <zookeeper.version>3.4.6</zookeeper.version>
        <zkclient.version>0.10</zkclient.version>
        <activemq.version>5.10.0</activemq.version>
        <freemarker.version>2.3.23</freemarker.version>
    
        <!-- quartz任务调度框架 -->
        <quartz.version>2.3.0</quartz.version>
    </properties>
    <!--管理版本的标签-->
    <dependencyManagement>
        <dependencies>
            <!-- 时间操作组件 -->
            <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>${joda-time.version}</version>
        </dependency>
            <!-- Apache工具组件 -->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>${commons-lang3.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-io</artifactId>
                <version>${commons-io.version}</version>
            </dependency>
            <dependency>
                <groupId>commons-net</groupId>
                <artifactId>commons-net</artifactId>
                <version>${commons-net.version}</version>
            </dependency>
            <!-- Jackson Json处理工具包 -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson.version}</version>
            </dependency>
            <!-- httpclient -->
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>${httpclient.version}</version>
            </dependency>
            <!-- quartz任务调度框架 -->
            <dependency>
                <groupId>org.quartz-scheduler</groupId>
                <artifactId>quartz</artifactId>
                <version>${quartz.version}</version>
            </dependency>
            <!-- 单元测试 -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
            <!-- 日志处理 -->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <!-- Mybatis -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>${mybatis.spring.version}</version>
            </dependency>
            <dependency>
                <groupId>com.github.miemiedev</groupId>
                <artifactId>mybatis-paginator</artifactId>
                <version>${mybatis.paginator.version}</version>
            </dependency>
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper</artifactId>
                <version>${pagehelper.version}</version>
            </dependency>
            <!-- MySql -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <!-- 连接池 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>
            <!-- Spring -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</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-core</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-expression</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.aopalliance</groupId>
                <artifactId>com.springsource.org.aopalliance</artifactId>
                <version>${aoplliance.version}</version>
            </dependency>
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>${aspectjweaver.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jms</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <!-- JSP相关 -->
            <dependency>
                <groupId>jstl</groupId>
                <artifactId>jstl</artifactId>
                <version>${jstl.version}</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
                <version>${servlet-api.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jsp-api</artifactId>
                <version>${jsp-api.version}</version>
                <scope>provided</scope>
            </dependency>
            <!-- 文件上传组件 -->
            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>${commons-fileupload.version}</version>
            </dependency>
            <!-- Redis客户端 -->
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>${jedis.version}</version>
            </dependency>
            <!-- solr客户端 -->
            <dependency>
                <groupId>org.apache.solr</groupId>
                <artifactId>solr-solrj</artifactId>
                <version>${solrj.version}</version>
            </dependency>
            <!-- dubbo相关 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>${dubbo.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>${zookeeper.version}</version>
            </dependency>
            <dependency>
                <groupId>com.github.sgroschupf</groupId>
                <artifactId>zkclient</artifactId>
                <version>${zkclient.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.activemq</groupId>
                <artifactId>activemq-all</artifactId>
                <version>${activemq.version}</version>
            </dependency>
            <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>${freemarker.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
  3. 创建model通用工具项目taotao-common,父类工程为taotao-parent,打包jar包,根据父类工程导入相应的依赖

    	<parent>
            <artifactId>taobao-parent</artifactId>
            <groupId>com.taobao</groupId>
            <version>1.0-SNAPSHOT</version>
            <relativePath>../taobaoparent/pom.xml</relativePath>
        </parent>
        <modelVersion>4.0.0</modelVersion>
        <artifactId>taobao-common</artifactId>
        <packaging>jar</packaging>
    
        <dependencies>
            <!-- 时间操作组件 -->
            <dependency>
                <groupId>joda-time</groupId>
                <artifactId>joda-time</artifactId>
                <version>${joda-time.version}</version>
            </dependency>
            <!-- Apache工具组件 -->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>${commons-lang3.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-io</artifactId>
                <version>${commons-io.version}</version>
            </dependency>
            <dependency>
                <groupId>commons-net</groupId>
                <artifactId>commons-net</artifactId>
                <version>${commons-net.version}</version>
            </dependency>
            <!-- Jackson Json处理工具包 -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson.version}</version>
            </dependency>
            <!-- httpclient -->
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>${httpclient.version}</version>
            </dependency>
            <!-- quartz任务调度框架 -->
            <dependency>
                <groupId>org.quartz-scheduler</groupId>
                <artifactId>quartz</artifactId>
                <version>${quartz.version}</version>
            </dependency>
            <!-- 单元测试 -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
  4. 创建taotao-manager,父类工程为taotao-parent,此工程为一个聚合工程,其下的工程有taotao-dao,taotao-pojo,taotao-service,taotao-interface,需要导入taotao-common的依赖,打包为pom

  5. taotao-dao,taotao-pojo,taotao-service,taotao-interface的父工程都是taotao-manager,打成jar包,taotao-pojo不需要引入什么依赖,但是对于分布式项目而言,taotao-pojo下面的所有实体类都需要序列化,包括json数据的类也要序列化taotao-dao和taotao-interface都需要引入taotao-pojo的依赖,taotao-service需要引入taotao-dao和taotao-interface的依赖,其他依赖根据情况添加

  6. taotao-manager-web,父工程taotao-parent,打成war包,引入taotao-manager-interface的依赖即可,其他依赖根据情况添加,并且还需添加tomcat插件

    		<plugins>
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <configuration>
                        <port>8081</port>
                        <path>/</path>
                    </configuration>
                </plugin>
            </plugins>
    

运行项目

  1. 按照顺序依次打包taotao-parent,taotao-common,taotao-manager
    在这里插入图片描述
  2. 运行taotao-manager-web
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值