【微服务/淘淘商城实践/SSM框架】13 系统部署 网络拓扑图 伪分布式 hosts配置 反向代理配置 系统拓展

1. 项目架构

【微服务/淘淘商城实践/SSM框架】13 系统部署 网络拓扑图 伪分布式 hosts配置 反向代理配置 系统拓展_第1张图片

应用

manager-web 后台管理系统(activeMQ 更新商品,异步更新solr全文检索库,已经更新商品详情静态化页面)
portal-web 门户
search-web 搜索(solr 全文检索技术)
item-web 商品详情(redis缓存,页面静态化,)
cart-web 购物车(redis,多终端同步保存购物车)
order-web 订单()
SSO-web 单点登录系统(分布式session,jsonp请求验证token)

微服务如下

ContentCategoryService(消费者: manager-web)
ContentService(消费者: manager-web portal-web)
UserService(消费者: order-web sso-web )
ItemCatService(消费者: item-web cart-web manager-web)
ItemService(消费者: manager-web)
SearchService(消费者: search-web )
SearchItemService(消费者:manager-web )
OrderService(消费者: order-web )

2. 网络拓扑图

【微服务/淘淘商城实践/SSM框架】13 系统部署 网络拓扑图 伪分布式 hosts配置 反向代理配置 系统拓展_第2张图片

3. 系统部署分析

  1. Taotao-manager
  2. Taotao-manager-web
  3. Taotao-portal-web
  4. Taotao-content
  5. Taotao-search
  6. Taotao-search-web
  7. Taotao-item-web
  8. Taotao-sso
  9. Taotao-sso-web
  10. Taotao-cart-web
  11. Taotao-order
  12. Taotao-order-web

12个应用,每个应用2个集群,需要24台服务器。 24
Mysql 2(mycat 一主一备 读写分离)
Solr 7(三个Solr实例( 每个实例包括两个Core),组成一个SolrCloud。)
Redis 6(3个组成集群,一主一从,3*2=6)
图片服务器 2(FastDFS Tracker+Storage 1个组,两个成员,成员存放内容一致)
Nginx 2(负载均衡,反向代理,keepalive高可用)
注册中心 3(zookeeper 3台集群,Leader选举)
Activemq 2(Master/Slave 2台 高可用 共享存储原理 3台 负载均衡 Replicated LevelDB Store 基于zookeeper 选举)

共需要48台服务器。

4. 搭建伪分布式

服务器规划

【微服务/淘淘商城实践/SSM框架】13 系统部署 网络拓扑图 伪分布式 hosts配置 反向代理配置 系统拓展_第3张图片

域名规划

【微服务/淘淘商城实践/SSM框架】13 系统部署 网络拓扑图 伪分布式 hosts配置 反向代理配置 系统拓展_第4张图片

Tomcat热部署

可以使用maven实现tomcat热部署。Tomcat启动时 部署工程。
Tomcat有个后台管理功能,可以实现工程热部署。
配置方法:
第一步:需要修改tomcat的conf/tomcat-users.xml配置文件。添加用户名、密码、权限。

<role rolename="manager-gui" />
<role rolename="manager-script" />
<user username="tomcat" password="tomcat" roles="manager-gui, manager-script"/>

第二步:重新启动tomcat。

使用maven的tomcat插件实现热部署:
第一步:配置tomcat插件,需要修改工程的pom文件。

	<build>
		<plugins>
			
			<plugin>
				<groupId>org.apache.tomcat.mavengroupId>
				<artifactId>tomcat7-maven-pluginartifactId>
				<configuration>
					<port>8081port>
					<path>/path>
					<url>http://192.168.25.135:8080/manager/texturl>
					<username>tomcatusername>
					<password>tomcatpassword>
				configuration>		
			plugin>
		plugins>
	build>

第二步:使用maven命令进行部署。

tomcat7:deploy
tomcat7:redeploy

部署的路径是“/”会把系统部署到webapps/ROOT目录下。
部署工程跳过测试:

clean tomcat7:redeploy -DskipTests

工程部署

每个工程运行在不同的tomcat上,修改tomcat的端口号。

反向代理的配置

访问举例

  1. 用户访问 manager.taotao.com
  2. 通过域名配置 ,访问192.168.25.141:80
  3. 通过nginx反向代理
    upstream manager.taotao.com {
    server 192.168.25.137:8080;
    }
    跳转 : 192.168.25.137:8080(到达manager应用)

测试时使用域名访问网站,需要修改host文件。

所有的域名应该指向反向代理服务器。

192.168.25.141 manager.taotao.com
192.168.25.141 www.taotao.com
192.168.25.141 search.taotao.com
192.168.25.141 item.taotao.com
192.168.25.141 sso.taotao.com
192.168.25.141 cart.taotao.com
192.168.25.141 order.taotao.com

nginx反向代理的配置:


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    upstream manager.taotao.com {
	server 192.168.25.137:8080;
    }
    upstream www.taotao.com {
	server 192.168.25.137:8081;
    }
    upstream search.taotao.com {
	server 192.168.25.137:8082;
    }
    upstream item.taotao.com {
	server 192.168.25.138:8080;
    }
    upstream sso.taotao.com {
	server 192.168.25.138:8081;
    }
    upstream cart.taotao.com {
	server 192.168.25.139:8080;
    }
    upstream order.taotao.com {
	server 192.168.25.139:8081;
    }
    
   server {
        listen       80;
        server_name  manager.taotao.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass   http://manager.taotao.com;
            index  index.html index.htm;
        }
    }
    server {
        listen       80;
        server_name  www.taotao.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass   http://www.taotao.com;
            index  index.html index.htm;
        }
    }
    server {
        listen       80;
        server_name  search.taotao.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass   http://search.taotao.com;
            index  index.html index.htm;
        }
    }
    server {
        listen       80;
        server_name  item.taotao.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass   http://item.taotao.com;
            index  index.html index.htm;
        }
    }
    server {
        listen       80;
        server_name  sso.taotao.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass   http://sso.taotao.com;
            index  index.html index.htm;
        }
    }
    server {
        listen       80;
        server_name  cart.taotao.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass   http://cart.taotao.com;
            index  index.html index.htm;
        }
    }
    server {
        listen       80;
        server_name  order.taotao.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass   http://order.taotao.com;
            index  index.html index.htm;
        }
    }
    

    

}

5. 项目拓展

电商活动倒计时方案:

1、确定一个基准时间。可以使用一个sql语句从数据库中取出一个当前时间。SELECT NOW();
2、活动开始的时间是固定的。
3、使用活动开始时间-基准时间可以计算出一个秒为单位的数值。
4、在redis中设置一个key(活动开始标识)。设置key的过期时间为第三步计算出来的时间。
5、展示页面的时候取出key的有效时间。Ttl命令。使用js倒计时。
6、一旦活动开始的key失效,说明活动开始。
7、需要在活动的逻辑中,先判断活动是否开始。

秒杀方案:

1、把商品的数量放到redis中。
2、秒杀时使用decr命令对商品数量减一。如果不是负数说明抢到。
3、一旦返回数值变为0说明商品已售完。

你可能感兴趣的:(微服务,分布式,java,负载均衡,nginx)