大型电商:项目简介(带过)
项目背景
电商模式
市面上有5种常见的电商模式 B2B、B2C、C2B、C2C、O2O
B2B 模式
B2B(Business to Business),是指商家和商家建立的商业关系,如阿里巴巴
B2C 模式
B2C(Business to Consumer) 就是我们经常看到的供应商直接把商品买个 用户,即 “商对客” 模式,也就是我们呢说的商业零售,直接面向消费销 售产品和服务,如苏宁易购,京东,天猫,小米商城
C2B 模式
C2B (Customer to Business),即消费者对企业,先有消费者需求产生 而后有企业生产,即先有消费者提出需求,后又生产企业按需求组织生产
C2C 模式
C2C (Customer to Consumer) 客户之间把自己的东西放到网上去卖 。 如淘宝、咸鱼
O2O 模式
O2O 即 Online To Offline,也即将线下商务的机会与互联网 结合在一起,让互联网成为线上交易前台,线上快速支付,线上优质服务, 如:饿了么,美团,淘票票,京东到家
谷粒商城
谷粒商城是一个B2C模式的电商平台,销售自营商品给客户
项目架构图
项目微服务架构图
前后分离开发,分为内网部署和外网部署,外网是面向公众访问的。访问前端项目,可以有手机APP,电脑网页;内网部署的是后端集群,前端在页面上操作发送请求到后端,在这途中会经过Nginx集群,Nginx把请求转交给API网关(springcloud gateway)(网关可以根据当前请求动态地路由到指定的服务,看当前请求是想调用商品服务还是购物车服务还是检索服务),从路由过来如果请求很多,可以负载均衡地调用商品服务器中一台(商品服务复制了多份),当商品服务器出现问题也可以在网关层面对服务进行熔断或降级(使用阿里的sentinel组件),网关还有其他的功能如认证授权、限流(只放行部分到服务器)等。
到达服务器后进行处理(springboot为微服务),服务与服务可能会相互 调用(使用feign组件),有些请求可能经过登录才能进行(基于OAuth2.0的 认证中心。安全和权限使用springSecurity控制)
服务可能保存了一些数据或者需要使用缓存,我们使用redis集群(分片+哨兵集 群)。持久化使用mysql,读写分离和分库分表。
服务和服务之间会使用消息队列(RabbitMQ),来完成异步解耦,分布式事务
的一致性。有些服务可能需要全文检索,检索商品信息,使用ElaticSearch。
服务可能需要存取数据,使用阿里云的对象存储服务OSS。
项目上线后为了快速定位问题,使用ELK对日志进行处理,使用LogStash收集业务里的各种日志,把日志存储到ES中,用Kibana可视化页面从ES中检索出相关信息,帮助我们快速定位问题所在。
在分布式系统中,由于我们每个服务都可能部署在很多台机器,服务和服务可能相互调用,就得知道彼此都在哪里,所以需要将所有服务都注册到注册中心。服务从注册中心发现其他服务所在位置(使用阿里Nacos作为注册中心)。
每个服务的配置众多,为了实现改一处配置相同配置就同步更改,就需要配置中心,也使用阿里的Nacos,服务从配置中心中动态取配置。
服务追踪,追踪服务调用链哪里出现问题,使用springcloud提供的Sleuth、Zipkin、Metrics,把每个服务的信息交给开源的Prometheus进行聚合分析,再由Grafana进行可视化展示,提供Prometheus提供的AlterManager实时得到服务的警告信息,以短信/邮件的方式告知服务开发人员。
还提供了持续集成和持续部署。项目发布起来后,因为微服务众多,每一个都打包部署到服务器太麻烦,有了持续集成后开发人员可以将修改后的代码提交到github,运维人员可以通过自动化工具Jenkins Pipeline将github中获取的代码打包成docker镜像,最终是由k8s集成docker服务,将服务以docker容器的方式运行。
微服务划分图
反映了需要创建的微服务以及相关技术。
前后分离开发。前端项目分为admin-vue(工作人员使用的后台管理系统)、
shop-vue(面向公众访问的web网站)、app(公众)、小程序(公众)
商品服务:商品的增删改查、商品的上下架、商品详情
支付服务
优惠服务
用户服务:用户的个人中心、收货地址
仓储服务:商品的库存
秒杀服务
订单服务:订单增删改查
检索服务:商品的检索ES
中央认证服务:登录、注册、单点登录、社交登录
购物车服务
后台管理系统:添加优惠信息等
项目技术&特色
前后分离开发,并开发基于vue的后台管理系统 SpringCloud全新的解决方案 应用监控、限流、网关、熔断降级等分布式方案,全方位涉及 透彻讲解分布式事务,分布式锁等分布式系统的难点 压力测试与性能优化 各种集群技术的区别以及使用 CI/CD 使用
项目前置要求
学习项目的前置知识
熟悉SpringBoot以及常见整合方案 了解SpringCloud 熟悉 git maven 熟悉 linux redis docker 基本操作 了解 html,css,js,vue 熟练使用idea开发项目