1. 商城项目介绍
项目介绍:
谷粒商城是一个B2C模式的电商平台,销售自营商品给客户。
项目微服务架构图:
项目微服务架构说明:
1. 前后分离开发,分为内网部署(后端集群)和外网部署(前端项目,包括手机APP),外网是面向公众访问的。
2. 前端在页面上操作发送请求到后端,在这途中会经过Nginx集群,Nginx把请求转交给API网关(springcloud gateway)(网关可以根据当前请求动态地路由到指定的服务,看当前请求是想调用商品服务还是购物车服务还是检索服务),从路由过来如果请求很多,可以负载均衡地调用商品服务器中一台(商品服务复制了多份),当商品服务器出现问题也可以在网关层面对服务进行熔断或降级(使用阿里的sentinel组件),网关还有其他的功能如认证授权、限流(只放行部分到服务器)等。
3. 到达服务器后进行处理(springboot为微服务),服务与服务可能会相互调用(使用feign组件),有些请求可能经过登录才能进行(基于OAuth2.0的认证中心。安全和权限使用springSecurity控制)
4. 服务可能保存了一些数据或者需要使用缓存,我们使用redis集群(分片+哨兵集群)。持久化使用mysql,读写分离和分库分表。
5. 服务和服务之间会使用消息队列(RabbitMQ),来完成异步解耦,分布式事务的一致性。有些服务可能需要全文检索,检索商品信息,使用ElaticSearch。
6. 服务可能需要存取数据,使用阿里云的对象存储服务OSS。
7. 项目上线后为了快速定位问题,使用ELK对日志进行处理,使用LogStash收集业务里的各种日志,把日志存储到ES中,用Kibana可视化页面从ES中检索出相关信息,帮助我们快速定位问题所在。
8. 在分布式系统中,由于我们每个服务都可能部署在很多台机器,服务和服务可能相互调用,就得知道彼此都在哪里,所以需要将所有服务都注册到注册中心。服务从注册中心发现其他服务所在位置(使用阿里Nacos作为注册中心)。
9. 每个服务的配置众多,为了实现改一处配置相同配置就同步更改,就需要配置中心,也使用阿里的Nacos,服务从配置中心中动态取配置。
10. 服务追踪,追踪服务调用链哪里出现问题,使用springcloud提供的Sleuth、Zipkin、Metrics,把每个服务的信息交给开源的Prometheus进行聚合分析,再由Grafana进行可视化展示,提供Prometheus提供的AlterManager实时得到服务的警告信息,以短信/邮件的方式告知服务开发人员。
11. 还提供了持续集成和持续部署。项目发布起来后,因为微服务众多,每一个都打包部署到服务器太麻烦,有了持续集成后开发人员可以将修改后的代码提交到github,运维人员可以通过自动化工具Jenkins Pipeline将github中获取的代码打包成docker镜像,最终是由k8s集成docker服务,将服务以docker容器的方式运行。
微服务划分图:
微服务划分图说明:
1. 反映了需要创建的微服务以及相关技术。
2. 前后分离开发。前端项目分为admin-vue(工作人员使用的后台管理系统)、shop-vue(面向公众访问的web网站)、app(公众)、小程序(公众)
3. 商品服务:商品的增删改查、商品的上下架、商品详情
4. 支付服务
5. 优惠服务
6. 用户服务:用户的个人中心、收货地址
7. 仓储服务:商品的库存
8. 秒杀服务
9. 订单服务:订单增删改查
10. 检索服务:商品的检索ES
11. 中央认证服务:登录、注册、单点登录、社交登录
12. 购物车服务
13. 后台管理系统:添加优惠信息等
项目技术:
1. 前后分离开发,并开发基于vue的后台管理系统
2. SpringCloud全新的解决方案
3. 应用监控、限流、网关、熔断降级等分布式方案
4. 分布式事务,分布式锁等
5. 压力测试与性能优化
6. 各种集群技术的区别以及使用
7. CI/CD 使用