1. 课程计划
第十三天:
- 系统部署
- 项目总结
- 面试中的问题
2. 项目部署
2.1 项目架构讲解
2.2 网络拓扑图
2.3 系统部署
2.3.1 部署分析
e3-manager
e3-manager-web
e3-portal-web
e3-content
e3-search
e3-search-web
e3-item-web
e3-sso
e3-sso-web
e3-cart-web
e3-cart
e3-order
e3-order-web
需要26台服务器。 26
Mysql 2
Solr 7
Redis 6
图片服务器 2
Nginx 2
注册中心 3
Activemq 2
共需要50台服务器。
搭建伪分布式。
2.3.2 服务器规划
项目 服务器数量 虚拟机 ip
----------------------------------------------------------------------------------------------------------------------
Mysql 2 1 171
Solr 7 1 166
Redis 6 1 160
图片服务器 2 1 133
Nginx 2 1 141
注册中心 3 1 160
Activemq 2 1 167
e3-manager 8080
e3-content 8081
e3-search 8082
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 135
e3-sso 8080
e3-cart 8081
e3-order 8082
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 136
e3-manager-web 8080
e3-portal-web 8081
e3-search-web 8082
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 137
e3-item-web 8080
e3-sso-web 8081
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 138
e3-cart-web 8080
e3-order-web 8081
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 139
2.3.3 域名规划
序号 | 工程名 | 域名 |
1 | e3-manager-web | manager.e3mall.cn |
2 | e3-portal-web | |
3 | e3-search-web | search.e3mall.cn |
4 | e3-item-web | item.e3mall.cn |
5 | e3-sso-web | sso.e3mall.cn |
6 | e3-cart-web | cart.e3mall.cn |
7 | e3-order-web | order.e3mall.cn |
2.3.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文件。
1.修改数据库连接地址为虚拟机的数据库地址192.168.25.170(先配置好虚拟机mysql和数据库名和数据)
2.修改pom文件 新增以下内容(url为部署的地址ip和端口号根据部署的位置更改,后面的不变):
<url>http://192.168.25.170:8080/manager/text</url>
<username>tomcat</username>
<password>tomcat</password>
3.如果项目中有localhost的访问方式 全局搜索替换成部署位置的域名
<build> <plugins> <!-- 配置Tomcat插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <configuration> <port>8081</port> <path>/</path> <url>http://192.168.25.170:8080/manager/text</url> <username>tomcat</username> <password>tomcat</password> </configuration> </plugin> </plugins> </build> |
第二步:使用maven build命令进行部署。
第一次部署:tomcat7:deploy 目录不存在时使用
第二次部署:tomcat7:redeploy 目录存在时使用
部署的路径是“/”会把系统部署到webapps/ROOT目录下。
部署工程跳过测试加 -DskipTests:
clean tomcat7:redeploy -DskipTests
通过dubbo服务查看工程是否发布成功
2.3.5 工程部署
每个工程运行在不同的tomcat上,修改tomcat的端口号。
2.4 反向代理的配置
测试时使用域名访问网站,需要修改host文件。
所有的域名应该指向反向代理服务器。
通过返回代理服务器 配置域名 转发到配置的tomcat端口
配置hosts文件:
192.168.25.141 manager.e3mall.cn
192.168.25.141 www.e3mall.cn
192.168.25.141 search.e3mall.cn
192.168.25.141 item.e3mall.cn
192.168.25.141 sso.e3mall.cn
192.168.25.141 cart.e3mall.cn
192.168.25.141 order.e3mall.cn
反向代理的配置:
#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.e3mall.cn { server 192.168.25.137:8080; } upstream www.e3mall.cn { server 192.168.25.137:8081; } upstream search.e3mall.cn { server 192.168.25.137:8082; } upstream item.e3mall.cn { server 192.168.25.138:8080; } upstream sso.e3mall.cn { server 192.168.25.138:8081; } upstream cart.e3mall.cn { server 192.168.25.139:8080; } upstream order.e3mall.cn { server 192.168.25.139:8081; }
server { listen 80; server_name manager.e3mall.cn;
#charset koi8-r;
#access_log logs/host.access.log main;
location / { proxy_pass http://manager.e3mall.cn; index index.html index.htm; } } server { listen 80; server_name www.e3mall.cn;
#charset koi8-r;
#access_log logs/host.access.log main;
location / { proxy_pass http://www.e3mall.cn; index index.html index.htm; } } server { listen 80; server_name search.e3mall.cn;
#charset koi8-r;
#access_log logs/host.access.log main;
location / { proxy_pass http://search.e3mall.cn; index index.html index.htm; } } server { listen 80; server_name item.e3mall.cn;
#charset koi8-r;
#access_log logs/host.access.log main;
location / { proxy_pass http://item.e3mall.cn; index index.html index.htm; } } server { listen 80; server_name sso.e3mall.cn;
#charset koi8-r;
#access_log logs/host.access.log main;
location / { proxy_pass http://sso.e3mall.cn; index index.html index.htm; } } server { listen 80; server_name cart.e3mall.cn;
#charset koi8-r;
#access_log logs/host.access.log main;
location / { proxy_pass http://cart.e3mall.cn; index index.html index.htm; } } server { listen 80; server_name order.e3mall.cn;
#charset koi8-r;
#access_log logs/host.access.log main;
location / { proxy_pass http://order.e3mall.cn; index index.html index.htm; } }
}
|
3. 项目总结
4. 面试中的问题回答
4.1 网站并发数:
1000-2000左右并发。
4.2 人员配置
产品经理:3人,确定需求以及给出产品原型图。
项目经理:1人,项目管理。
前端团队:5人,根据产品经理给出的原型制作静态页面。
后端团队:20人,实现产品功能。
测试团队:5人,测试所有的功能。
运维团队:3人,项目的发布以及维护。
4.3 开发周期
采用迭代开发的方式进行,一般一次迭代的周期为一个月左右。
4.4 Sku
最小库存量单位。
Sku==商品id
4.5 电商活动倒计时方案:
- 确定一个基准时间。可以使用一个sql语句从数据库中取出一个当前时间。SELECT NOW();
- 活动开始的时间是固定的。
- 使用活动开始时间-基准时间可以计算出一个秒为单位的数值。
- 在redis中设置一个key(活动开始标识)。设置key的过期时间为第三步计算出来的时间。
- 展示页面的时候取出key的有效时间。Ttl命令。使用js倒计时。
- 一旦活动开始的key失效,说明活动开始。
- 需要在活动的逻辑中,先判断活动是否开始。
4.6 秒杀方案:
- 把商品的数量放到redis中。
- 秒杀时使用decr命令对商品数量减一。如果不是负数说明抢到。
- 一旦返回数值变为0说明商品已售完。