一、项目简介
1、电商模式
常见电商模式:B2B, B2C, C2B, C2C, O2O;
谷粒商城采用B2C模式,销售自营商品给客户
2、项目架构图
3、微服务划分图
3、项目技术点&特色
- 前后端分离开发,拥有基于vue的后台管理系统
- 基于SpringCloud的解决方案
- 应用监控、限流、网关、熔断降级等分布式方案,全方位涉及
- 分析高并发场景的编码方式,运用线程池、异步编排等使用
- 运用集群技术
- ······
4、开发项目需要的前置知识
- 熟悉 SpringBoot 以及常见整合方案
- 了解 SpringCloud
- 熟悉 git,maven
- 熟悉 linux,redis,docker 基本操作
- 了解 html,css,js,vue
- 熟练使用 idea 开发项目
二、分布式基础概念
1、微服务
将大型单体应用,基于服务边界进行拆分,分成多个服务,每个服务独立部署运行,通常使用轻量级机制通信,比如HTTP API
来一个让人害怕的图~~:
2、集群&分布式&节点
集群是物理形态,分布式是工作方式。
一堆服务器干着同样的活,就是集群;每个服务器都干着不同的活就是分布式。
例如:京东是一个分布式系统,众多业务运行在不同的机器上,所有的业务构成一个大型的业务集群。每个小的业务,比如用户系统,访问压力大的时候一个服务器肯定顶不住。我们就将用户系统部署到多个服务器上,实现负载均衡。通常每一个业务系统都可以做成集群。
分布式中的每一个节点都可以做集群,而集群不一定是分布式的。
节点:集群中的一个服务器。
3、远程调用
分布式系统中,各个服务可能处于不同的服务器,微服务之间的调用涉及到不同服务器之间的通讯,我们称为远程调用。
SpringCloud中使用HTTP+JSON的方式完成远程调用
4、负载均衡
在分布式系统中,为了避免单个服务器压力过大,我们需要采用负载均衡的方式调用每一个服务器,提升网站的健壮性。
常见的负载均衡算法:
- 轮询法:将请求按照顺序轮流分配到服务器上。缺点:不能发挥某些高性能服务器的优势;
- 随机发:随机获取一台服务器;
- 哈希法:通过ip地址哈希化确定要访问服务器的地址。优势:每次客户端访问的服务器相同,能很好的利用session和cookie;
- 加权轮询法:根据服务器的性能不同加权,控制服务器的访问频率
5、服务注册/发现&注册中心
A服务调用B服务,A不知道B有多少台,哪些正常工作,服务中心可以解决这些问题。
6、配置中心
每个服务都有大量的配置,集群化部署的情况下,单个配置修改过于麻烦,采用配置中心进行统一配置,统一修改更为方便
7、服务熔断&服务降级
微服务之间的通讯存在相互依赖的现象,某一服务不可用时,可能造成雪崩效应,所以需要容错机制进行保护。
①服务熔断:
设置服务的超时,当被调用的服务经常失败并且达到某个阈值,我们可以开启短路保护机制,后来的请求不在调用这个服务。本地返回默认数据。
②服务降级:
在运维期间,系统处于高峰期,或者比如双11的淘宝网,系统资源紧张,我们可以让非核心业务降级运行。降级:某些服务不处理,或者简单处理(抛异常,返回null,调用Mock数据等)。
8、API网关
在微服务架构中,网关抽象了微服务中都需要的公共功能,同时提供了:负载均衡、服务自动熔断、灰度发布、统一认证、限流、日志统计等功能