谷粒商城学习-day01
谷粒商城
今天学习以下谷粒商城,马上要找工作了,一直想进个大厂,希望学习完谷粒商城能给我带来点收获.。
本文只记录一些技术要领,具体的学习请大家移步b站等地方学习
第一节 分布式基础
1.基本概念
微服务概念:拒绝大型单体应用,基于业务边界进行服务的微化拆分,各个服务独立部署运行
节点:集群中的一个服务器
集群:一堆机器合起来,实现同一个业务
分布式:是若干独立计算机的集合,用户在使用时像是单个的相关系统。分布式将不同业务分布在不同的地方
分布式系统:建立在网络之上的软件系统
分布式和集群的联系:分布式的每一个节点都可以做集群,而集群并不一定是分布式的
2.远程调用
概念:分布式系统中不同主机中每个服务之间的相互调用
如Springcloud用Http+json的方式完成远程调用
3.负载均衡
概念:根据服务器的情况,对服务器操作经行调整
有轮询:每个服务器依次处理
最小链接:优先使用链接最少的
散列:相同的ip地址服务在指定的服务器上
4.服务注册/发现&注册中心
注册中心负责管理集群,负责服务群体的注册,发现,调整。
5.配置中心
配置服务群的配置信息,做到实时的更新
6.服务熔断&服务降级
1)服务熔断:访问量太大,访问失败到达一定阈值,直接启动短路保护机制,不在允许访问这个服务
2)降级服务:访问量太大,访问失败到达一定阈值,直接简单返回
7.API网关
微服务架构中的gateway作为整体架构的重要组件,负责客户端负载均衡,服务自动熔断,灰度发布,统一认证,限流监控,日志统计等功能,解决api管理难题
如:商场入口安检
第二节 微服务架构
1.基本架构图
这个图前期肯定是看不懂了,学完了回过来看真是如获至宝。
前后分离开发,分为内网部署和外网部署,外网是面向公众访问的,部署前端项目,可以有手机APP,电脑网页;内网部署的是后端集群,前端在页面上操作发送请求到后端,在这途中会经过Nginx集群,Nginx把请求转交给API网关(springcloud gateway)(网关可以根据当前请求动态地路由到指定的服务,看当前请求是想调用商品服务还是购物车服务还是检索),从路由过来如果请求很多,可以负载均衡地调用商品服务器中一台(商品服务复制了多份),当商品服务器出现问题也可以在网关层面对服务进行熔断或降级(使用阿里的sentinel组件),网关还有其他的功能如认证授权、限流(只放行部分到服务器)等。
到达服务器后进行处理(springboot为微服务),服务与服务可能会相互调用(使用feign组件),有些请求可能经过登录才能进行(基于OAuth2.0的认证中心。安全和权限使用springSecurity控制)
服务可能保存了一些数据或者需要使用缓存,我们使用redis集群(分片+哨兵集群)。持久化使用mysql,读写分离和分库分表。
服务和服务之间会使用消息队列(RabbitMQ),来完成异步解耦,分布式事务的一致性。有些服务可能需要全文检索,检索商品信息,使用ElaticSearch。
服务可能需要存取数据,使用阿里云的对象存储服务OSS。
项目上线后为了快速定位问题,使用ELK对日志进行处理,使用LogStash收集业务里的各种日志,把日志存储到ES中,用Kibana可视化页面从ES中检索出相关信息,帮助我们快速定位问题所在。
在分布式系统中,由于我们每个服务都可能部署在很多台机器,服务和服务可能相互调用,就得知道彼此都在哪里,所以需要将所有服务都注册到注册中心。服务从注册中心发现其他服务所在位置(使用阿里Nacos作为注册中心)。
每个服务的配置众多,为了实现改一处配置相同配置就同步更改,就需要配置中心,也使用阿里的Nacos,服务从配置中心中动态取配置。
服务追踪,追踪服务调用链哪里出现问题,使用springcloud提供的Sleuth、Zipkin、Metrics,把每个服务的信息交给开源的Prometheus进行聚合分析,再由Grafana进行可视化展示,提供Prometheus提供的AlterManager实时得到服务的告警信息,以短信/邮件的方式告知服务开发人员。
还提供了持续集成和持续部署。项目发布起来后,因为微服务众多,每一个都打包部署到服务器太麻烦,有了持续集成后开发人员可以将修改后的代码提交到github,运维人员可以通过自动化工具Jenkins Pipeline将github中获取的代码打包成docker镜像,最终是由k8s集成docker服务,将服务以docker容器的方式运行。
2.细致微服务
上面的是每个部分所用到的部件和技术。可以查看每个部分的技术文档进行学习。。
第三节 环境的搭建
前提:建议安装迅雷,如果决定什么部件或者软件下载慢的,都可以用迅雷
1.vagrant安装
注意:打开cpu虚拟化,
2.下载centos7作为linux系统
注意:如果大家没有vpn的话,建议用联通网络下载,其他都试过了,会很慢。
尽量不要先下载好centos镜像,再指定路径进行安装,会报错,难以解决
下面是一些常用的linux命令的链接:
https://blog.csdn.net/luansj/article/details/97272672
3.虚拟机安装docker,安装Redis和mysql
docker是什么:
- Docker是世界领先的软件容器平台。
- Docker对进程进行封装隔离,属于操作系统层面的虚拟化技术。 由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。
- Docker能够自动执行重复性任务,例如搭建和配置开发环境,从而解放了开发人员以便他们专注在真正重要的事情上:构建杰出的软件
- 用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
docker主要命令链接:https://www.cnblogs.com/duanxz/p/7905233.html
redies文档:https://www.runoob.com/redis/redis-tutorial.html
4.开发环境
java项目用的是springboot框架,使用idea工具进行编写
maven完成基于Java平台的项目构建、依赖管理和项目信息管理。
vscode编写前端项目,实现前后端分离
git下载或上传更新项目
码云建立代码库实时管理代码