市面上有五种常见的电商模式B2B、B2C、C2B、C2C、O2O
1、B2B模式
B2B(Business to Business), 是指商家与商家建立的商业关系。 如: 阿里巴巴。
2、B2C模式
B2C(Business to Consumer), 就是我们经常看到的供应商直接把商品卖给用户,即“商对客”模式,也就是通常说的商业零售,直接面向消费者销售产品和服务。如:苏宁易购、京东、天猫、小米商城
3、C2B模式
C2B(Customer to Business), 即消费者对企业。先有消费者需求产生而后有企业生产,即先有消费者提出需求,后有生产企业按需求组织生产。
4、C2C模式
C2C(Customer to Customer),客户之间自己把东西放上网去卖,如:淘宝,闲鱼。
5、O2O模式
O2O即Online To Offline, 也即是线下商务的机会与互联网结合在了一起,让互联网成为线下交易的前台。线上快速支付,线下优质服务。如:饿了么,美团,淘票票,京东到家
谷粒商城就是一个B2C模式的电商平台,销售自营产品给客户。
学习项目的前置知识
微服务架构风格,就像是把一个单独的应用程序开发为一套小服务,每个小服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API。这些微服务围绕业务能力来构建,并通过完全自动化部署机制来独立部署。这些微服务使用不同的编程语言书写,以及不同数据存储技术,并保持最低限度的集中式管理。
简而言之:拒绝大型单体应用,基于业务边界进行服务微化拆分,各个服务独立部署运行。
集群是物理形态,分布式是个工作方式。
只要是一堆机器,就可以叫集群,它们是不是一起协作着干活,这个谁也不知道;
《分布式系统原理与范性》定义:
“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”
分布式系统(distributed system)是建立在网络之上的软件系统。
分布式是指将不同的业务分布在不同的地方。
集群指的是将几台服务器集中在一起,实现同一业务。
例如:京东是一个分布式系统,众多业务运行在不同的机器,所有业务构成一个大型的业务集群。每一个小的业务,比如用户系统,访问压力大的时候一台服务器是不够的。我们就应该讲用户系统部署到多个服务器,也就是每一个业务系统也可以做集群化;
分布式中的每一个节点,都可以做集群。而集群并一定就是分布式的。
节点:集群中的一个服务器。
在分布式系统中,各个服务可能处于不同的主机,但是服务之间不可避免的需要互相调用,我们成为远程调用。
SpringCloud中使用HTTP+JSON的方式完成远程调用。
分布式系统中,A服务需要调用B服务,B服务在多台机器中都存在,A调用任意一个服务器均可完成功能。
为了使每一个服务器都不要太忙或者太闲,我们可以负载均衡的调用每一个服务器,提升网站的健壮性。
常见的负载均衡算法:
轮询:为第一个请求选择健康池中的第一个后端服务器,然后按照顺序往后依次选择,直到最后一个,然后循环。
最小连接:优先选择连接数最少,也就是压力最小的后端服务器,在会话较长的情况下可以考虑采取这种方式。
散列:根据请求源的IP的散列(hash)来选择要转发的服务器。这种方式可以一定程度上保证特定用户能连接到相同的服务器。如果你的应用需要处理状态而要求用户能连接到和之前相同的服务器,可以考虑采取这种方式。
A服务调用B服务,A服务并不知道B服务当前在哪几台服务器有,哪些正常的,哪些服务已经下线。解决这个问题可以引入注册中心;
如果某些服务下线,我们其他人可以实时的感知到其他服务的状态,从而避免调用不可用服务。
每一个服务最终都由大量的配置,并且每个服务都可能部署在多台机器上。我们经常需要变更配置,我们可以让每个服务在配置中心获取自己的配置。
配置中心用来集中管理微服务的配置信息
在微服务中,微服务之间通过网络进行通信,存在互相依赖,当其中一个服务不可用时,有可能造成雪崩效应。要防止这样的情况,必须要有容错机制来保护服务。
1)、服务熔断
2)、服务降级
在微服务架构中,API Gateway 作为整体架构的重要组件,它抽象了微服务中都需要的公共功能,同时提供了客户端负载均衡,服务自动熔断,灰度发布,统一认证,限流流控,日志统计等丰富的功能,帮助我们解决很多API管理难题。
Vagrant init centos/7
,即可初始化一个centos7系统vagrant ssh
: 自动使用vagrant 用户连接虚拟机
vagrant upload source [destination] [name] [id]
:上传文件Dokcer 安装文档: https://docs.docker.com/install/linux/docker-ce/centos
1、 卸载系统之前的docker
1、下载镜像文件
docker pull mysql:5.7
2、创建实例并启动
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
参数说明 :
MySQL配置
vi /mydata/mysql/conf/my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect=‘SET collation_connection = utf8_unicode_ci’
init_connect=‘SET NAMES utf8’
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
docker pull redis
创建目录和redis配置文件
此处有个小坑,因为默认是没有redis.conf这个文件的所以,如果直接执行docker run…,此时会把redis.conf当成一个目录来对待,所以,先创建这个文件。
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
#创建实例并启动
docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
vi /mydata/redis/conf/redis.conf
appendonly yes
docker exec -it redis redis-cli
阿里云镜像
alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central
jdk版本
jdk-1.8
true
1.8
1.8
1.8
1.8
D:\applications\BuildTools\Maven\repository
idea
配置maven 忽略
配置常用插件: lombok 和 mybatisx
vscode
vscode安装开发必备插件
vetur – 语法高亮、智能感知、Emmet等
包含格式化功能, ALT+SHIFT+F (格式化全文) , Ctrl + K Ctril +F (格式化选中代码, 两个Ctrl需要同时按着)
Eslint – 语法纠错
AutoClose Tag – 自动闭合 HTML/XML标签
Auto Rename Tag – 自动完成另一侧标签的同步修改
JavaScript(ES6) code snippets – ES6 语法智能提示以及快速输入, 除js外还支持.ts, .jsx , .tsx, .html, .vue , 省去配置其支持各种包含js代码文件的时间
ssh-keygen -t rsa -C “[email protected]”
cat ~/.ssh/id_rsa.pub
找到ssh公钥,标题随便写,公钥复制进去,然后确定,后输入密码,
添加好后
然后进行测试,使用ssh -T命令,然后输入yes,证明以后就使用这个秘钥了。
然后以后使用git客户端给码云推送项目内容时,就不需要使用用户名和密码了。
1、导入项目逆向工程
2、下载人人开源后台管理系统脚手架工程
商品服务、仓储服务、订单服务、优惠券服务、用户服务
共同:
然后这个项目作为一个总项目,其他微服务项目作为一个个子模块,
可以使用spring 初始化向导
然后创建出所有项目之后,打开run dashboard
然后在gulimall变为聚合项目,复制一个pom文件到外面,
然后在maven栏中 点击+号,将 gulimall添加到maven项目
会发现 gulimall后面有个root ,聚合其他子模块
这个可以做到,在root项目中clean一下,然后所有项目都会一起clean
然后修改总项目的.gitignore模板,比如**/mvnw,这样所有路径下的mvnw就不会被git察觉到。
此时点击version control的刷新图表,然后就会发现,对应的mvnw没有了。
类似的将其他的也都忽略掉
注意是在gulimall总的.gitignore文件内修改
然后如果在父项目maven点击compile ,此时会生成 target目录,这里面的东西也不需要提交。
然后将需要提交的都加入到版本控制中
想要将代码提交到码云,需要安装码云插件
然后commit 并且 push
刷新