栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

谷粒商城笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

谷粒商城笔记

一:项目介绍

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配置文件中配置阿里云镜像

    
        nexus-aliyun
        central
        Nexus aliyun
        http://maven.aliyun.com/nexus/content/groups/public
    

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

        内容如下:



    4.0.0
    com.leggasai.gulimall
    gulimall
    0.0.1-SNAPSHOT
    gulimall
    聚合服务
    pom
    
        gulimall-coupon
        gulimall-member
        gulimall-order
        gulimall-product
        gulimall-ware
    

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/710718.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号