谷粒商城笔记

一:项目介绍

1.1项目背景

谷粒商城是一款B2C的电商平台

1.2电商模式

电商模式:B2B、B2C、C2B、C2C、O2O

B—business

C—consumer

B2C:供应商(商家)直接把商品卖给客户,京东自营,苏宁易购,天猫

C2C:客户与客户之间的买卖,如闲鱼、淘宝

1.3项目架构

 1.4项目技术&特色

熟悉SpringBoot以及常见整合方案

了解SpringCloud

熟悉 git  maven

熟悉 linux redis docker 基本操作

了解 html,css,js,vue

熟练使用idea开发项目

二:分布式基础

2.1微服务

微服务架构风格,就像是把一个单独的应用程序开发成一套小服务,每个小服务运行在自己的进程中,并使用轻量级机制通信,通常是 HTTP API 这些服务围绕业务能力来构建,并通过完全自动化部署机制来独立部署,这些服务使用不同的编程语言书写,以及不同数据存储技术,并保持最低限度的集中式管理

简而言之,拒绝大型单体应用,基于业务边界进行服务微化拆分,每个服务独立部署运行。

2.2集群&分布式&节点

分布式:是一种工作方式,是指根据不同的业务分布在不同的地方 

《分布式系统原理与范型》定义:分布式系统是若干独立计算机的集合,这些计算机对于用户来说像单个系统分布式系统 (distributed system) 是建立网络之上的软件系统

集群:物理状态,一堆机器可以叫集群,他们可以协作干活或独立。将几台服务器集中在一起,实现同一业务。

节点:集群中的一个服务器 

例如:京东是一个分布式系统,众多业务运行在不同的机器上,所有业务构成一个大型的分布式业务集群,每一个小的业务,比如用户系统,访问压力大的时候一台服务器是不够的,我们就应该将用户系统部署到多个服务器,也就是每一个业务系统也可以做集群化。

2.3远程调用

在分布式系统中,各个服务可能处于不同主机,那如何通讯?

服务间的不可避免的需要互相调用,我们称为远程调用。SpringCloud中使用http+json的方式完成远程调用。

2.4负载均衡

分布式系统中,A 服务需要调用B服务,B服务在多台机器中都存在, A调用任意一个服务器均可完成功能。

为了使每一个服务器都不要太或者太闲,我们可以负载均衡调用每一个服务器,提升网站的健壮性。

常见的负载均衡算法:

轮询:为第一个请求选择健康池中的每一个后端服务器,然后按顺序往后依次选择,直到最后一个,然后循环(类似时间片算法?)

最小连接:优先选择链接数最少,也就是压力最小的后端服务器,在会话较长的情况下可以考虑采取这种方式

2.5服务注册/发现&注册中心

A服务调用B服务,A服务不知道B服务当前在哪几台服务器上有,哪些正常的,哪些服务已经下线,解决这个问题可以引入注册中心。

如果某些服务下线,我们其他人可以实时的感知到其他服务的状态,从而避免调用不可用的服务。

2.6配置中心

每一个服务最终都有大量配置,并且每个服务都可能部署在多个服务器上,我们经常需要变

更配置,我们可以让每个服务在配置中心获取自己的配置。

配置中心用来集中管理微服务的配置信息。

2.7服务熔断&降级

在微服务架构中,微服务之间通过网络来进行通信,存在相互依赖, 当其中一个服务不可用时,有可能会造成雪崩效应,要防止这种情况,必须要有容错机制来保护服务。

rpc
情景:订单服务 --> 商品服务 --> 库存服务

库存服务出现故障导致响应慢,导致商品服务需要等待,可能等到10s后库存服务才能响应。库存服务的不可用导致商品服务阻塞,商品服务等的期间,订单服务也处于阻塞。一个服务不可用导致整个服务链都阻塞。如果是高并发,第一个请求调用后阻塞10s得不到结果,第二个请求直接阻塞10s。更多的请求进来导致请求积压,全部阻塞,最终服务器的资源耗尽。导致雪崩

服务熔断
设置服务的超时,当被调用的服务经常失败到达某个阈值,我们可以开启断路保护机制,后来的请求不再去调用这个服务,本地直接返回默认的数据

服务降级
在运维期间,当系统处于高峰期,系统资源紧张,我们可以让非核心业务降级运行,降级:某些服务不处理,或者简单处理(抛异常,返回NULL,调用 Mock数据,调用 FallBack 处理逻辑)
 

2.8API网关

在微服务架构中,API Gateway 作为整体架构的重要组件,抽象服务中 需要的公共功能,同时它提供了客户端负载均衡,服务自动熔断,灰度发布,统 一认证,限流监控,日志统计等丰富功能,帮助我们解决很多API管理的难题。

三:环境准备

3.1安装JDK1.8或以上版本

3.2准备虚拟机

视频中所用的是Centos系统,经本人尝试使用VMware的Ubuntu也可以。

且建议使用VMware搭建虚拟机因为可视化以及网络配置方便。

3.3虚拟机通讯相关

查看本机ip地址:

cmd输入命令:ipconfig中的Ipv4即本机ip,并记录本机ip地址

查看虚拟机ip地址:

在虚拟机终端输入命令: ifconfig查看,并记录虚拟机ip地址

测试本机与虚拟机网络通讯:

1.在本机cmd中输入ping [虚拟机ip地址]

2.在虚拟机终端输入ping [本机ip地址]

如显示正在ping...的数据,则网络通讯成功

错误记录:Ubuntu不显示网络图标,无法连接网络

尝试输入以下命令:

sudo service network-manager stop
sudo rm /var/lib/NetworkManager/NetworkManager.state
sudo service network-manager start

3.4安装docker 

Install Docker Engine on Ubuntu | Docker Documentation

3.5安装MySQL

1.进入root权限

su root

2.拉取docker中mysql镜像(视频中安装的版本是5.7)

sudo docker pull mysql:5.7

3.首次配置并启动mysql容器

docker run -p 3306:3306 –name mysql \

-v /mydata/mysql/log:/var/log/mysql \

-v /mydata/mysql/data:/var/lib/mysql \

-v /mydata/mysql/conf:/etc/mysql \

-e MYSQL_ROOT_PASSWORD=root \

-d mysql:5.7

上述参数的含义:

-p Linux的3306端口与mysql容器的3306端口建立映射

-name:给mysql容器起名

-v:挂载文件

-e:改参数

4.之后启动mysql容器

docker start mysql

5.进入mysql容器

docker exec -it [容器名称|容器id] bin/bash

3.6安装Redis

1.下载redis镜像(默认最新版)

docker pull redis 

2.为了配置参数先创建一个文件夹和文件

mkdir -p /mydata/redis/conf

touch /mydata/redis/conf/redis.conf

3.创建redis实例并启动

docker run -p 6379:6379 --name redis -v /mydata/redis/data:/data \

-v /mydata/redis/conf/redis.conf:/etc/redis/redis/redis.conf \

-d redis redis-server /etc/redis/redis.conf

4.使用redis镜像执行redis-cli命令

docker exec -it redis redis-cli

5.进入redis后可以尝试如下命令

set key value:插入一条键值对

get key:获取key对应的value

6.开启持久化(否则数据保存在内存中,重启redis后会清空所有数据)

进入redis.conf插入appendonly yes

3.7安装Maven 

1.下载Maven

2.在idea中配置maven仓库

3.在maven配置文件中配置阿里云镜像
<mirrors>
    <mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
</mirrors>

3.8创建码云gitee仓库

1.新建仓库

        仓库名称任意或gulimall

        语言选择java, gitgnore选择Maven,开源许可证选择Apache-2.0

        分支模型选择生产/开发模型

3.9在IDEA中新建项目

1.在IDEA中新建项目选择Project from Version

2.在URL中填入刚刚码云仓库创建项目的URL,类似https://gitee.com/xxxxx/gulimall.git

3.创建如下5个模块(每个模块创建时建议导入web和openFeign这两个依赖)

4. 建立父模块

        在gulimall中创建pom.xml

        内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.leggasai.gulimall</groupId>
    <artifactId>gulimall</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>gulimall</name>
    <description>聚合服务</description>
    <packaging>pom</packaging>
    <modules>
        <module>gulimall-coupon</module>
        <module>gulimall-member</module>
        <module>gulimall-order</module>
        <module>gulimall-product</module>
        <module>gulimall-ware</module>
    </modules>

</project>

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leg丶Gasai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值