谷粒商城学习笔记(更新中)

一、项目简介

微服务架构图
谷粒商城学习笔记(更新中)
微服务划分图
谷粒商城学习笔记(更新中)

二、分布式基础

1、微服务

首先,微服务是一种架构风格。

在一个大型单体应用中,基于业务边界对其服务微化拆分,各个服务独立部署运行在自己的进程中。当

一个服务出现问题时,不影响其他服务,但同时,一旦服务体量过大,服务之间的关系网络和调用就会

非常复杂。

2、集群&分布式&节点

集群是个物理形态,分布式是个工作状态。

《分布式系统原理与规范》定义:

分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统
分布式系统(distributed system)是建立在网络之上的软件系统。

从宏观上看,分布式都可以叫集群,分布式是多台机器在多个地方执行相关但不同的业务,而这“多台机器”就可以看做一个大集群,比如京东这个分布式系统,就是一个大型的业务集群。
从微观上看,分布式的某一个服务需要多台机器运行时,也会形成集群,但这运行同一个服务的多台机器不能称之为分布式。

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

3、远程调用

分布式系统中,各个服务可能处于不同主机,这些服务之间的相互调用就称为远程调用。
谷粒商城学习笔记(更新中)

4、负载均衡

谷粒商城学习笔记(更新中)
分布式系统中,A服务需要调用B服务,B服务存在于多台机器中,A调用任意一个服务器均可完成功能。

所谓负载均衡就是让这个调用过程中的每一台B服务器都不要太忙或太闲,从而提升网站的健壮性。

常见的负载均衡算法:

轮询:为第一个请求选择健康池中的第一个后端服务器,然后按顺序往后一次选择,知道最后一个,然后循环。

最小连接:优先选择连接数最少,也就是压力最小的后端服务器。在会话较长的情况下可以考虑采用这种方式。
散列:根据请求元的IP的散列(hash)来选择要转发的服务器。这种方式一定程度上保证特定用户能连接到相同的服务器。如果你的应用需要处理状态而要求用户能连接到和之前相同的服务器,可以靠考虑采取这种方式。

5、服务注册/服务发现&注册中心

A服务调用B服务,A服务并不知道B服务当前哪几台服务器有,哪些正常,哪些已经下线。可以通过建立注册中心来解决这个问题。后续维护服务也可通过注册中心的服务清单维护。
谷粒商城学习笔记(更新中)
B服务在某一台服务器上上线时将服务注册进注册中心即为服务注册,A服务通过注册中心发现某一台服务器上正常运行的B服务称为服务发现

6、配置中心

谷粒商城学习笔记(更新中)
当一个服务在多台机器上运行时,一旦需要更改服务的配置,就需要将每一台机器下线并一一更改其配置,而借助配置中心后,我们可以让每个服务在配置中心自动获取自己的配置。

7、服务熔断&服务降级

微服务之间是通过网络通信的,有相互依赖的关系,当其中一个服务不可用时,可能会造成雪崩效应,所以需要有容错机制来保护(健康的服务)。

假设有一系列(高并发)请求需要从订单服务依次调用商品服务、库存服务,当库存服务出现故障时,会造成响应高延时,当请求过多积压就可能导致三个服务都不再可用。

谷粒商城学习笔记(更新中)

a 服务熔断

当某个服务调用失败达到某个阈值,我们就可以开启断路保护机制(熔断该服务的请求链),即后来的请求将不再去调用该服务,可以本地直接返回默认数据。

b 服务降级

降级是整体把控。
在运维期间,当系统处于高峰期,系统资源紧张,我们可以让非核心业务降级运行。降级:某些服务不处理,或者简单处理【如抛异常、返回NULL、调用Mock数据、调用Fallback处理逻辑】

8、API网关

网关就是一个入口,它和海关这种入口类似。
在微服务架构中API网关(API Gateway)作为整体架构的重要组件,它抽象了微服务中都需要的公共功能,同时提供了客户端负载均衡,服务自动熔断,灰度发布,统一认证,限流控制,日志统计等丰富的功能,帮助我们解决很多API管理难题。
谷粒商城学习笔记(更新中)

三、环境搭建

1、安装linux虚拟机

1)开启cpu虚拟化
以戴尔笔记本为例,开机后立即按F12即可进入BIOS设置,找到CPU configuration,然后点击Intel Vitualization Technology,使其enable,而后重启电脑即可。但其实当我进入设置时,电脑已经是默认enable的状态。
  • 找到CPU configuration
    谷粒商城学习笔记(更新中)
  • 找到Intel Vitualization Technology

谷粒商城学习笔记(更新中)

2)利用virtualBox和vagrant安装centos7(本文中linux和发行版centos7将不加以区分)
  1. 进入virtualBox官网:https://www.virtualbox.org/,download该软件,然后傻瓜式安装即可,关于安装目录的选择要注意两点:1)要有足够内存;2)最好不要有中文,以免后续出现问题。
    注意:virtualBox可能会与红蜘蛛,360,净网大师等软件冲突,如发生则需要卸载冲突软件重启电脑再安装或者启动虚拟机。
  1. 进入vagrant官网:https://www.vagrantup.com/,同样,download该软件,然后傻瓜式安装即可,安装目录也要注意以上两点。
    vagrant是一个(配合virtualBox)自动化安装工具,它具有一个*镜像仓库,里面有很多现成的镜像,比如ubuntu,centos等等。
  1. cmd打开命令行,在当前用户目录下输入指令vagrant init centos/7(centos/7和镜像站的名称保持一致,该指令只是在当前目录下创建一个“vagrantfile”文件,可自行查看,里面是vagrant的配置信息),有了vagrantfile文件后,按提示输入vagrant up,这一条指令将会自动配置centos所需要的的环境,并且从镜像站下载对应的linux发行版,也就是centos7。当等到下方所示信息出现时,即表示安装centos成功。谷粒商城学习笔记(更新中)
    当然,我是没有成功的,对于一个菜鸟来说,这种高度自动化的工具着实时不出问题爽歪歪,一出问题黑人抬棺。最后我经历了非常曲折的过程,仍然没有成功安装,只好退而求其次,利用自己熟悉的VMware来安装centos7。本节末尾“那些我遇到的坑”:就是我遇到的一些问题,及搜罗的解决方案,以及VMware安装centos7的过程。
  1. 安装好centos7后,同样在vagrantfile文件目录(默认当前Windows用户)下使用vagrant up就可以在Windows命令行下启动linux了(后续启动同指令)。如下图所示:谷粒商城学习笔记(更新中)
    然后,使用vagrant ssh指令连接上linux,作为Windows下的远程登录窗口(说实话,vagrant直接在命令行连接,确实省了下载Xshell以及手动输入主机ip远程登录很多步骤),退出登录使用exit,此时默认使用的是vagrant账户,此信息在命令行上文中有提。
    到此为止,就可以通过此窗口直接敲入linux命令控制该系统,这标志着你是个幸运儿,通过vagrant自动化工具极其简单地安装好了linux并且实现了远程登录(假如你没有出现问题)
    谷粒商城学习笔记(更新中)
3)更改网络地址
  • virtualBox中的虚拟机的网络方式是网络地址转换NAT(端口转发):
    谷粒商城学习笔记(更新中)
  • 此时如果其他主机要访问虚拟机,必须由windows端口如3333断发给虚拟机端口如3306。
    谷粒商城学习笔记(更新中)
  • 这样每在linux里安一个软件都要进行端口映射,对于我们开发很不方便,即每安装一个软件就需要在virualBox里进行一次设置。谷粒商城学习笔记(更新中)
    我们想要给虚拟机一个固定的ip地址,windows和虚拟机可以互相ping通。方式1是在虚拟机中配置网卡静态ip,老师说这样也比较麻烦,所以我们去更改Vagrantfile配置文件,修改其中的config.vm.network "private_network",ip:"192.168.56.10",这个ip需要在windows的ipconfig中查到vitualbox的网卡ip,然后更改ip地址中第三段为对应的56,(不能是1)。
    谷粒商城学习笔记(更新中)
    配置完后vagrant reload重启虚拟机。在虚拟机中ip addr就可以查看到地址了。最后再启动一个Windows窗口,使用ping 192.168.56.10。
    谷粒商城学习笔记(更新中)
    以及在linux下ping 192.168.3.3
    谷粒商城学习笔记(更新中)
    以上信息显示两台机器能够相互ping通,注意ping的ip地址都需要自己机器上特定的或者自己设置的ip地址。

那些我遇到的坑
1、vagrant安装centos7失败
2、VMware安装centos7以及在上面安装图形化界面

2、在linux上安装docker