Skip to content

品优购项目文档

品优购相关配置模块

linux系统部署服务

  • 本机IP:192.168.12.1
  • 虚拟机对应的网卡(VMnet 8) - centOS练习安装
    • 用户名:root 密码:123456
    • 虚拟机IP:192.168.12.132
  • 虚拟机对应的网卡(VMnet 8) - pinyougou项目使用
    • 用户名:root 密码:123456
    • 虚拟机IP:192.168.12.131
  • linux系统(192.168.12.131)的MySQL
    • 账号:root
    • 密码:Root_123
  • linux系统上开启动zookeeper注册中心
    • 命令:/usr/local/dubbo-zookeeper/bin/zkServer.sh start
    • 查看是否开启:/usr/local/dubbo-zookeeper/bin/zkServer.sh status
  • linux系统上的Dubbo监控中心
    • linux系统开启服务命令:/usr/local/web/tomcat-dubbo-monitor/bin/startup.sh
    • url:http://192.168.12.131:8080
    • 用户名:root 密码:root
  • linux系统上的solr中心
  • ActiveMQ消息中间件

项目各模块配置url与域名


  • 本机pinyougou-manager-web 运营商后台管理
  • 本机pinyougou-shop-web 商家后台管理
  • 本机pinyougou-portal-web 门户网站
  • 本机pinyougou-search-web 搜索系统
  • 本机pinyougou-item-web 商品详情系统
  • 本机pinyougou-user-web 用户中心系统
  • 本机CAS 中央认证系统(tomcat部署)
  • 本机pinyougou-cart-web 购物车系统
  • 本机pinyougou-seckill-web 秒杀系统
  • Nginx相关命令(window系统)
shell
# 用cmd进入nginx所在的根目录:
start nginx # 启动
nginx -s stop # 停止
nginx -s reload # 重新启动

项目总结、技术列表

项目总结

电商行业

  • 模式:
    • B2C: 商家对个人
    • B2B: 商家对商家
    • C2C: 个人对个人
    • P2P: 个人对个人的信贷
    • O2O: 线上与线下
    • F2C: 工厂对个人
    • B2B2C: 商家对商家对个人
  • 技术特点:
    • 技术新、技术范围广、分布式、高并发、高可用、集群、负载均衡、海量数据。
  • 相关概念:
    1. 高可用(High Availability):通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。
    2. 分布式:一个业务拆分成多个子业务,部署在不同的服务器上。
    3. 高并发:并发数量高,访问量大。
    4. 集群:指的是将多台服务器集中在一起,完成同一业务。
    5. 负载均衡:集群中所有的节点都处于活动状态,它们分摊系统的工作负载。

DUBBO分布式服务框架

  • 连接方式: 注册中心(zookeeper)
  • 监控中心: 查看当前的服务(暴露的服务、引用的服务)
    • 说明:dubbo底层采用 RPC + SOA 实现。
    • RPC: Remote Procedure Call Protocol远程过程调用协议
    • SOA: Service Oriented Architecture面向服务架构
  • dubbo的RPC传输数据序列化方式:Hessian二进制序列化方式.
  • Hessian是一个轻量级的remoting onhttp工具,
  • 使用简单的方法提供了RMI的功能。
  • 相比WebService,Hessian更简单、快捷。
  • 采用的是二进制RPC协议,因为采用的是二进制协议,
  • 所以它很适合于发送二进制数据。

MyBatis相关

  1. 通用Mapper(数据访问接口需继承Mapper<T>),简化单表的CRUD操作
  2. 分页插件PageHelper

Nginx反向代理服务器

  • 静态资源(服务器)
  • 负载均衡(集群)
    • 调度算法: 轮询、权重(weight)、ip哈希值(ip_hash)

FastDFS分布式文件服务器

  1. tracker server 追踪服务器
  2. storage server 存储服务器
  • 操作相关:
    • storageClient.upload_file() 上传文件
    • storageClient.download_file() 下载文件
    • storageClient.delete_file() 删除文件

Redis非关系型数据库(mongoDB)

  1. redis是一个开源的高性能键值对数据库.
  2. 值的数据类型
    • 字符串string
    • 散列类型hash (字段与值)
    • 列表类型list (有序元素可以重复)
    • 集合类型set (无序元素不能重复)
    • 有序集合zset (有序元素不能重复)
  3. 订阅与发布
  4. redis存储方案(rdb, aof)
  5. redis主从配置
  6. 使用RedisTemplate操作redis(默认端口6379)
  7. Linux搭建Redis集群(6台Redis)
    • 3台主服务器 + 3台从服务器
      • 3台主服务器分片存储数据,达到高并发
      • 3台从服务器做备份,达到高可用
    • 最多可使用16384台Redis做集群(16384个节点)

Spring-Data-Redis整合Jedis

  1. 单机版配置
  2. 集群版配置

单点登录(CAS)

  1. 实现登录功能
    1. 生成TGC存入Cookie
    2. 将用户登录信息TGT存储到Session
    3. 返回ST服务票据给客户端
    4. 客户端通过ST获取登录名,把登录名存储到客户端Session
  2. 实现退出功能
    1. 配置单点退出过滤器
    2. 删除用户浏览器TGC登录凭证的Cookie
    3. 删除CAS服务端Session中TGT登录票据
    4. 删除所有客户端Session中的登录用户名

js跨域(ip或者端口不同)

解决方案CORS(jsonp)

Solr(全文检索服务器)

  1. SolrHome: Solr存储所有引索库的目录(主目录).
  2. SolrCore: Solr存储一个索引库的目录.
    • data: 索引库文件夹
    • config(schema.xml 字段与字段类型配置文件、solrconfig.xml 当前SolrCore全局配置文件)
  3. 通过solrj操作solr.
  4. solr集群solrcloud
    • 3台zookeeper + 4台solr
    • 3台zookeeper通过选举选出1个leader(领袖)与2个follower(追随),达到高可用. (至少3台zookeeper)
    • 4台Solr: 分成两片达到高并发,其中每一片都有主(master)、从(slave)达到高可用.

ActiveMQ消息队列(服务器与服务器之间通信)

把一些耗时业务进行异步处理,提高系统的吞吐量。

  1. JMS(Java Message Service)java消息服务
  2. 消息模式(点对点queue、订阅与发布topic)
  3. 消息生产者MessageProducer(生产消息,发送到ActiveMQ消息服务器)
  4. 消息消费者MessageConsumer(消费消息,接收ActiveMQ消息服务器上的消息)
  • 注意:
    • 消息队列采用先进先出,从而保证先进的消息先消费。
  • 说明:实现商品数据同步到【搜索系统】与【商品详情系统】
    • 运营商后台管理系统发送mq消息,搜索系统与商品详情系统接收mq消息,并进行消息的异步处理
    • 搜索系统实现商品的索引同步.
    • 商品详情系统实现商品的静态化页面同步.

FreeMarker模版引擎

  1. freemarker可充当视图呈现技术使用
  2. 基本语法、表达式与运算符、内置指令、内置函数、处理空值
    • 说明:动态页面静态化,提高服务器的响应性能.

购物车系统

  1. 登录状态实现购物车(将数据存储到redis中)
  2. 未登录实现购物车(将数据存储到Cookie中)
  3. 购物车数据合并

部署相关

  1. 一个子系统(一台tomcat),并发数为:200-300/s(每秒)
    • 说明:如果要处理并数为2000/s (需用10台tomcat集群)
  2. 服务器配置(至少三台):
    • 第一台服务器:数据库 + Redis: 8核 + 2T + 32G
    • 第二台服务器:服务层(tomcat) + FastDFS + Solr: 8核 + 2T + 32G
    • 第三台服务器:表现层(tomcat) + Nginx: 8核 + 1T + 32G

技术列表

  1. Spring(4.3.10): JavaEE核心框架
  2. Spring MVC(4.3.10): MVC框架
  3. MyBatis(3.4.1): 数据持久层框架
  4. Spring Security(4.2.3):安全框架
  5. Spring Boot(1.5.6): 微框架
  6. dubbo(2.5.7): 分布式服务框架
  7. zookeeper(3.4.11): 分布式协调服务
  8. Redis(4.0.8): 非关系型数据库(缓存服务器)
  9. Jedis(2.9.0): 操作Redis的Java客户端框架
  10. Spring Data Redis(1.8.6): 操作Redis框架
  11. CAS(4.2.7): 单点登录服务
  12. Nginx(1.11.13): 反向代理服务器
  13. Lucene(4.10.3): 全文检索框架
  14. Solr(4.10.3): 全文检索服务
  15. SolrJ(4.10.3): 操作Solr的Java客户端框架
  16. Spring Data Solr(1.5.6): 操作Solr框架
  17. FastDFS(1.25): 分布文件服务器
  18. HttpClient(4.5.3): 可以在Java代码中发送http请求或获取响应的框架
  19. ActiveMQ(5.14.5)【RabbitMQ. Kafka】: 消息队列,服务器之间通信
  20. FreeMarker(2.3.26): 模版引擎,视图呈现技术,可以作为静态化技术
  21. Mycat(1.6): 数据库中间件(分库分表)
  22. kindeditor(4.1.10): 富文本编辑器
  23. angular(1.6.9):MVC前端框架
  24. jQuery(1.11.3): Ajax框架

项目在linux系统中软件启动命令

shell
1. dubbo注册中心zookeeper:

   /usr/local/dubbo-zookeeper/bin/zkServer.sh start   [启动]
   /usr/local/dubbo-zookeeper/bin/zkServer.sh restart [重启]
   /usr/local/dubbo-zookeeper/bin/zkServer.sh stop    [停止]
   /usr/local/dubbo-zookeeper/bin/zkServer.sh status  [状态]

   查看zookeeper进程:ps -ef | grep zookeeper
   强制杀死进程:kill -9 进程号


2. dubbo监控中心:

   /usr/local/web/tomcat-dubbo-monitor/bin/startup.sh
   /usr/local/web/tomcat-dubbo-monitor/bin/shutdown.sh

   查看tomcat进程:ps -ef | grep tomcat


3. fastdfs分布式文件系统:

   a. 启动tracker追踪服务器
      /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

   b. 启动storaged存储服务器
      /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

   c. 启动nginx访问storaged中存储的文件
      /usr/local/nginx/sbin/nginx

   d. 文件存储路径
	  /home/fastdfs/fdfs_storage/data

      查看fastdfs进程号: ps -ef | grep fdfs
      查看nginx进程号:ps -ef | grep nginx
      强制杀死进程:kill -9 进程号

4. redis数据库:

   a. redis单机版启动:
      cd /usr/local/redis/bin && ./redis-server redis.conf
      单机版redis的ip与端口
      	192.168.12.131:6379

   b. redis集群版启动(6台redis实现分布式缓存)
      cd /usr/local/redis/redis-cluster && ./start-all.sh
      查看redis进程号: ps -ef | grep redis
      集群版redis的ip与端口
          192.168.12.131:7001
          192.168.12.131:7002
          192.168.12.131:7003
          192.168.12.131:7004
          192.168.12.131:7005
          192.168.12.131:7006

5. solr全文检索服务器:
   a. solr单机版启动:
      /usr/local/solr/tomcat-solr/bin/startup.sh
      /usr/local/solr/tomcat-solr/bin/shutdown.sh
   b. solr集群版启动(分布式检索):
      3台zookeeper集群:
      /usr/local/solr/solr-cloud/zookeeper01/bin/zkServer.sh restart
      /usr/local/solr/solr-cloud/zookeeper02/bin/zkServer.sh restart
      /usr/local/solr/solr-cloud/zookeeper03/bin/zkServer.sh restart

      /usr/local/solr/solr-cloud/zookeeper01/bin/zkServer.sh status
      /usr/local/solr/solr-cloud/zookeeper02/bin/zkServer.sh status
      /usr/local/solr/solr-cloud/zookeeper03/bin/zkServer.sh status

      4台tomcat集群:
      /usr/local/solr/solr-cloud/tomcat-solr01/bin/startup.sh
      /usr/local/solr/solr-cloud/tomcat-solr02/bin/startup.sh
      /usr/local/solr/solr-cloud/tomcat-solr03/bin/startup.sh
      /usr/local/solr/solr-cloud/tomcat-solr04/bin/startup.sh

      /usr/local/solr/solr-cloud/tomcat-solr01/bin/shutdown.sh
      /usr/local/solr/solr-cloud/tomcat-solr02/bin/shutdown.sh
      /usr/local/solr/solr-cloud/tomcat-solr03/bin/shutdown.sh
      /usr/local/solr/solr-cloud/tomcat-solr04/bin/shutdown.sh

      查看tomcat进程:ps -ef | grep tomcat

6. ActiveMQ消息中间件:

   /usr/local/activemq/bin/linux-x86-64/activemq start
   /usr/local/activemq/bin/linux-x86-64/activemq restart
   /usr/local/activemq/bin/linux-x86-64/activemq stop
   /usr/local/activemq/bin/linux-x86-64/activemq status

   查看activemq进程号: ps -ef | grep activemq

# 总的启动命令:
/usr/local/sbin/pyg_start.sh

# 把全部启动命令写入pyg_start.sh文件中:
vi /usr/local/sbin/pyg_start.sh

/usr/local/solr/solr-cloud/zookeeper01/bin/zkServer.sh restart
/usr/local/solr/solr-cloud/zookeeper02/bin/zkServer.sh restart
/usr/local/solr/solr-cloud/zookeeper03/bin/zkServer.sh restart
/usr/local/dubbo-zookeeper/bin/zkServer.sh restart
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
/usr/local/nginx/sbin/nginx
cd /usr/local/redis/bin && ./redis-server redis.conf
cd /usr/local/redis/redis-cluster && ./start-all.sh
/usr/local/solr/tomcat-solr/bin/startup.sh
/usr/local/activemq/bin/linux-x86-64/activemq restart
/usr/local/solr/solr-cloud/tomcat-solr01/bin/startup.sh
/usr/local/solr/solr-cloud/tomcat-solr02/bin/startup.sh
/usr/local/solr/solr-cloud/tomcat-solr03/bin/startup.sh
/usr/local/solr/solr-cloud/tomcat-solr04/bin/startup.sh

# 添加可执行权限:
chmod u+x /usr/local/sbin/pyg_start.sh

# 动态查看tomcat启动日志
tail -f /usr/local/solr/tomcat/logs/catalina.out

# 停止防火墙
systemctl stop firewalld.service

# 启动防火墙
systemctl start firewalld.service

# 禁止防火墙开机启动
systemctl disable firewalld.service

# 启用防火墙开机启动
systemctl enable firewalld.service

# 查看Linux版本号
cat /etc/redhat-release

配置hosts文件

# 项目二配置域名
127.0.0.1  manager.moon.com
127.0.0.1  www.moon.com
127.0.0.1  moon.com
127.0.0.1  shop.moon.com
127.0.0.1  search.moon.com
127.0.0.1  image.pinyougou.com
127.0.0.1  item.moon.com
127.0.0.1  user.moon.com
127.0.0.1  sso.moon.com
127.0.0.1  cart.moon.com
127.0.0.1  seckill.moon.com

补充

  • day06 运营商后台-商品分类功能(新增、修改、删除)
  • day07 优化最后商品录入的逻辑,修改为不要循环插入数据
  • day08
    1. 修改商品时回显的bug,因为新增时监听分类下拉框的值变化,变化就清空相应的扩展属性与规格选项的值,导致修改时数据商品的三级分类不能回显。如果不监听清空数据,双会出现分类下拉框数据变化后,扩展属性与规格选项的显示与值有问题。
    2. 待优化:运营商在商品审核模块中,删除商品时,只将商品SPU表(tb_goods)的is_delete字段修改为1,但没有修改对应的SKU表(tb_item)的数据,没有将对应good_ids下的所有状态修改为1
    3. 商家后台的商品删除功能未完成
    4. 待优化运营商、商家的修改商品的审核、删除、上下架的状态的sql,尝试能不能全部共用一条修改的sql
  • day09
    • 在广告管理中也涉及到文件上传的功能,目前的做法是将商家后台的文件上传uploadController复制到运营商后台,这个如果需要修改的地方则要重复写两次,想是否能将文件上传部分的做到一个服务(或者微服务,可以实践使用spring cloud)
    • 在广告内容修改有一个bug,不勾选“是否有效”时,还是绑定到对象是勾选的值。
  • day12
    • 关键字搜索“销量排序”与“评价排序”未完成
    • 分布式事务处理的问题:在最后一节更新索引索的内容中,在服务运营商的工程做商品审核中,分别调用了商家服务审核与搜索服务更新索引,如果更新索引时发生了异常,之前的商家服务审核商品的事务不会回滚,因为框架配置的事务管理中在同一个服务、同一个service中才会回滚。所以后面需要研究分布式事务如何处理【后面引入消息中件间,将更新索引的与运营商后台解耦了,但还是存在商品审核通过后,但索引库更新失败的问题】
  • day15
    • 注册时表单都没有做详细的校验,还有需要完成获取短信没有做倒数90秒无法操作的设置
  • day18
    • 订单的收件人地址增加、修改与删除功能待实现
  • day19
    • 支付日志显示,在运营商后台显示的功能未实现
  • day20
    • 秒杀商品后台管理功能
      • 商家提交秒杀商品申请,录入秒杀商品数据,主要包括:商品标题、原价、秒杀价、商品图片、介绍等信息。
      • 运营商审核秒杀申请,审核后在秒杀页面显示

Git库-项目仓库相关分支说明

Github仓库

  • shh://git@github.com:MooNkirA/pinyougou.git
    • master分支:空内容
    • ITheima-develop分支:原版本
    • moon-develop分支:第二次重做项目的版本(已按教程完成)
    • moon-cloud-develop分支:将原来的项目,修改成SpringBoot与SpringCloud架构(由moon-develop分支创建)
    • pyg-test-develop分支:品优购相关技术测试项目

I know where dry desert ends, green grass grows · MooN