微服务:微服务就是将一个大的单体项目进行拆分,拆分成多个小的服务,各个服务之间互不影响,比如一个服务坏掉了不会影响其他服务的正常工作,实现了解耦
集群,分布式:分布式的一个节点就可以为一个集群,但是集群不一定是分布式。
远程调用:在分布式中,不同服务部署在不同服务器上,服务之间需要互相调用,这里就需要远程调用,用http+json
负载均衡:没啥说的,把打来的流量按照不同的分发策略分发到相应的服务器上,如果需要会话保持的话一般设为最小链接+会话保持或者 iphash 同一个ip打到同一台服务器
服务注册中心:springcloud alibaba Nacos 因为服务是分布式的,通信起来不太方便,并且也不知道其他服务的状态。将服务都注册在nacos中可以解决。
服务配置中心:分布式可能有多个相同服务部署在不同的节点上,如果改了一个服务的配置,需要让其他节点同步到,就需要有服务配置中心为他们串联。
服务熔断:当一个请求打到一个服务上,这个服务响应时间很长导致相应失败,如果失败的次数多了就将以后的请求不打到这个服务上。
服务降级:如果一个服务优先级不高或者不太重要的话,请求打过来后直接返回默认数据或者抛异常等实现快速返回。
api网关:api网关可以做负载均衡,统一认证,服务熔断降级,动态路由,限流,过滤等操作
安装docker:
1.首先要安装虚拟机,教程用的vgrant快速搭建的linux环境。我用的vmware用镜像搭载的环境,应该是大差不差
2.到docker官网进行docker的安装,官网上安装步骤很详细
安装前先更新yum,不然有可能出现本机无法连接虚拟机的mysql、redis等
sudo yum update
卸载系统之前的docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装docker需要依赖的包 sudo yum install -y yum-utils
配置镜像 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker sudo yum install docker-ce docker-ce-cli containerd.io
启动docker sudo systemctl start docker
设置开机自启动 sudo systemctl enable docker
检查docker版本 docker -v
检查docker有没有下载镜像 sudo docker images 用docker安装mysql
一个命令就行: docker pull mysql:版本号
然后启动加挂载
--name指定容器名字 -v目录挂载 -p指定端口映射 -e设置mysql参数 -d后台运行
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
redis同mysql
使用Nacos进行服务注册发现步骤
1.导入Nacos的依赖
2.在启动类上添加注解@EnableDiscoveryClient使该模块能够被Nacos找到
3.在application.properties(yml)中添加spring.nacos.discovery.server-addr: 127.0.0.1:8848(这个是nacos服务的地址,视情况定),添加spring.application.name: gulimail-member 添加服务名能被nacos发现
4.重启服务
使用springcloud feign进行远程调用时的步骤
1.在每个服务导入feign的依赖
2.在application启动类中加@EnableFeignClients(basePackages="com.atguigu.gulimail.member.feign") basePackages后跟所要调用的包名
3.建立feign文件夹与controller同级就好,以后feign的接口放这里面
4.编写feign接口,接口上加注解@FeignClient("gulimail-coupon") 所调用服务名,方法上加注解@RequestMapping("/coupon/coupon/member/coupon") 所调用接口的全路径
5.在controller下添加接口调用feign接口下的方法实现远程调用