2020-11-04

B2C网站

微服务架构图.png
微服务划分图.png

一 简介

1.1 分布式基础概念

  • 微服务:拒绝大型单体应用,基于业务边界进行服务微化拆分,各个服务独立部署运行。各个微服务进程之间可以用HTTP API通信

1.2 集群&分布式&节点

集群是一个物理形态,分布式是一个工作方式。
只要是一堆机器,就可以叫做集群,但他们是不是一起干活就不知道了;
而分布式系统是若干独立计算机的集合,这些计算机对于用户来说像单个相关系统

分布式:不同业务分布在不同的地方。
集群:几台服务器集中在一起,实现同一业务。
比如对于京东的某个小业务系统一台服务器可能不够,所以部署在多台服务器,

分布式中每一个节点,都可以做集群。但集群不一定就是分布式

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

1.3 远程调用

在分布式系统中,各个服务可以在不同主机,但服务之间不可避免的需要互相调用,我们称之为远程调用
springCloud使用HTTP+JSON(跨平台性)完成远程调用;

1.4 负载均衡

比如A服务调用B服务,而B服务在多台机器中存在,A调用任意一个即可。
为了让每台服务器不要太忙或太闲,需要负载均衡的调用每台服务器。

  • 常见负载均衡算法
    1)轮询:为第一个请求选择健康池中的第一个后端服务器,然后按顺序往后依次选择,直到最后一个,然后循环。
    2)最小连接:优先选择连接数最小,也就是压力最小的服务器,在会话较长的情况下可以考虑这种方式
    3)散列:根据请求源的ip地址的散列(hash)选择要转发的服务器,一定尺度长保证特定用户能连接到同一服务器。

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

A服务调用B服务,A服务并不知道B服务当前在哪几台服务器,哪些正常,哪些下线。解决办法就是引入注册中心
如果某些服务下线,我们其他人可以实时的感知到其他服务的状态,从而避免调用不可用的服务。

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

每一个服务都有大量的配置,并且每个服务可能部署在多态机器上,我们经常需要变更配置,我们可以让每个服务在配置中心获取自己的配置。

1.7 服务熔断&服务降级

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

  • 服务熔断:设置服务的超时,但被调用的服务经常失败达到某个阈值,我们可以开启断路保护机制,后来的请求不再去调用这个服务,本地直接返回默认数据
  • 服务降级:但系统处于高峰期,系统资源紧张,我们可以让非核心业务降级运行。降级:某些服务不处理,或者简单处理【抛异常,返回null,调用MOck数据,调用Fallback处理逻辑】

1.8 API网关

抽象了微服务中都需要的公共功能,同时提供了客户端负载均衡,服务自动熔断,灰度发布,统一认证,限流流控,日志统计等功能,帮助我们解决api管理难题

二 环境配置

2.1 centos虚拟机

  • 安装virtualbox和vagrant
  • cmd命令行输入
    vagrant init centos/7
    vagrant up 启动环境(确保该路径下由vagrant file)
    vagrant ssh 连接虚拟机
    exit; 退出
    vagrant reload 重启

2.2 虚拟机网络设置

在vagrant file中配置ip地址,最后的字段不同即可;
双方都可以ping通对方;

2.3 docker安装

虚拟化容器技术:基于镜像(自动安装)秒级启动各个容器,容器间相互隔离,每个容器都是一个完整的运行环境。
https://docs.docker.com/engine/install/centos/
1)先卸载
sudo yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
2)

$ sudo yum install -y yum-utils
$ sudo yum-config-manager \
    --add-repo \
 https://download.docker.com/linux/centos/docker-ce.repo

$ sudo yum install docker-ce docker-ce-cli containerd.io
docker常用命令:
sudo systemctl start docker 启动docker服务
sudo systemctl enable docker 开机自启docker
docker -v
docker images 镜像
docker ps 查看正在运行中的容器
docker restart [name]重启镜像
  • 配置docker阿里云镜像加速
    https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://gxvtiq4e.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

2.3安装mysql和redis

sudo docker pull mysql:5.7 从仓库拉取5.7版本;

启动容器:

sudo 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 3306:3306 把容器的3306端口映射到主机的3306;
-v 日志文件夹挂载到主机
-v 数据文件夹挂载到主机
-v 配置文件夹挂载到主机
-e 初始化用户root密码
每个容器就是一个linux环境.png
  • 所以命令容器的3306口需要和虚拟机3306端口映射;

  • 容器内部的sql配置文件挂载到虚拟机,否则每次修改配置文件难道要都进入容器内部的linux环境吗?

  • 修改mysql配置

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysql]
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
  • 安装redis
docker pull redis;

mkdir -p /mydata/redis/conf
sudo touch /mydata/redis/conf/redis.conf

sudo 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

配置文件:插入 appendonly yes


进入redis镜像客户端
sudo docker exec -it redis redis-cli

2.4 开发环境配置

maven java vscode配置

2.5 git-ssh配置

2.6 数据库初始化

三 快速开发

3.1 人人前端和后端配置

主要是人人前端,chromedriver报错:

需要执行npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver
然后再npm install

你可能感兴趣的:(2020-11-04)