基于SpringCloud的微服务架构学习笔记(1)章节内容与微服务架构介绍

1. 绪论

1. 1 学习前言

本章笔记主要是记录学习微服务框架等一些中间件知识。

  1. 服务集群:分布在多台电脑上的多个服务,每个服务完成项目的部分功能,实现高内聚低耦合。
  2. 服务网关: 路由转发(接收一切外界请求,转发到后端的微服务上) + 过滤器(权限较远,限流和监控);
  3. 注册中心:注册中心可以说是微服务架构中的”通讯录“,它记录了服务和服务地址的映射关系。
  4. 配置中心:用来统一管理项目中所有配置的系统(配置集中管理、统一标准;配置与应用分离;实时更新;高可用)
  5. 消息队列:在高并发业务场景下,消息队列在流量削峰解耦上有不可替代的作用。当前使用较多的消息队列有 RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、Pulsar 等。
  6. 分布式缓存:缓存的目的就是为了提高数据查询效率。静态数据通常都保存在关系型数据库中,这类数据库的IO效率普遍不高,应对高并发的查询往往捉襟见肘。使用缓存可以极大的提升读操作的吞吐量。
  7. 分布式搜索:分布式搜索引擎是根据地域、主题、IP地址及其它的划分标准,将全网分成若干个自治区域,在每个自治区域内设立一个检索服务器的装置。
  8. 数据库:这三点决定了MySQL数据库的超高性价比。并且目前有不少主流公司仍然青睐MySQL,大名鼎鼎的Fackbook就依然在延续MySQL的使用。

1. 设计的技术

  1. 服务技术:微服务治理,无服务保护和分布式事务
  2. 异步通信技术:异步通信和可靠消息服务
  3. 缓存技术:分布式缓存,多级缓存和Redis集群
  4. 搜索技术:分布式搜索
  5. DevOps: Docker技术

2. 学习的路径

实用篇
1)微服务治理:注册发现,远程调节,配置管理和路由网关
2)Docker技术:Docker的使用,Dockererfile,DockerCompose
3) 异步通信:MQ 消息模型,SpringAMQP,消息堆积问题,数据持久化
4)分布式缓存:Redis数据结构,SpringDataRedis,缓存穿透,雪崩
5)分布式搜索:DSL语句,RestAPI,ES集群状态

高级篇
1)微服务保护:流量控制,系统保护,熔断降级,服务授权
2)分布式事务:分布式事务,TCC模型,AT模型,Seata
3) 多级缓存:OpenResty,多级缓存,缓存数据同步,Nginx本地缓存
4)Redis集群:数据持久,Redis主从复制,Lua脚本,Redis集群
5)可靠消息服务:消息可靠性,镜像集群,延迟队列,消息幂等性

1. 微服务治理

1. 1微服务_服务架构演变

  1. 单体架构:简单方便,高度耦合,扩展性差,适用于小型项目
  2. 分布式架构:高内聚低耦合,但是架构复杂,适用于大型互联网项目
  3. 微服务架构:不是一种新的架构,是一种经过良好架构设计的分布式构架方案。特点有:单一职责,面向服务,自治和隔离性强(避免级联问题)。
    1)优点:高内聚低耦合,拆分粒度更小,服务独立性更强,
    2)缺点:架构复杂,运维,监控,部署难度高

1. 2 微服务_微服务技术对比

现如今,最流行的两种微服务落地技术为阿里巴巴的Dubbo和SpringCloud,下面进行对比介绍。

  1. Dubbo:很早就开源了,核心做的东西是服务远程调用(Dubbo协议)
  2. SpringCloud:整合了市面上微服务技术栈,给出了一套全栈的微服务解决方案。
  3. SpringCloudAlibaba:基于SpringCloud进行开发,并且涵盖了Dubbo技术(拥有了一些自己的组件:Nacos,Dubbo,Sentineld等)
  4. 华为CSE:其实也有自己的微服务架构CSE,后续将简要介绍!

市场上四种常见的微服务体系:

  1. SpringCloud+Feign(SpringCloud技术栈+Restful服务接口风格+Feign服务调用方式)
  2. SpringCloudAlibaba+Feign(SpringCloudAlibaba技术栈+Restful服务接口风格+Feign服务调用方式)
  3. SpringCloudAlibaba+Dubbo(SpringCloudAlibaba技术栈+Dubbo服务接口标准+Dubbo服务调用方式)
  4. Dubbo原始模式(dubbo技术栈+Dubbo服务接口标准+Dubbo服务调用方式)
    疑问:服务接口风格和服务调用方式分别是什么

1. 3 微服务_SpringCloud介绍

  1. SpringCloud是什么?
    SpringCloud是目前国内最广泛使用的微服务架构,其中就包含了SpringCloudAlibaba。整合了之前各大公司在(服务注册发现,统一配置管理,服务远程调用,统一网关路由,服务链路监控和留空,降级保护等功能所要的治理方案)
  2. 为什么是SpringCloud作为微服务,不能够是其他?
    SpringCloud集合了各种微服务的功能组件,并且基于SpringBoot实现了组件的自动装配(最大的优点,各个组件配置繁琐,不互通),从而提供了良好的开箱即用体验。
  3. 组件的种类与解决方案
    1)服务注册发现:Rureka,Nacos,Consul
    2)统一配置管理:SpringCloudConfig,Nacos
    3)服务远程调用:OpenFeign,Dubbo
    4)统一网关路由:SpringCloudGateway,zuul
    5)服务链路监控:zipkin,Sleuth
    6)流量监控,负载君合,级联保护:Hystix,Sentinel

1. 4 微服务_demo导入运行

  1. 打开NavicatMySQL,新建两个数据库,然后读入SQL文件(NavicatMySQL是一个固定文件,不用安装)
  2. 在项目的配置文件中更改读取数据库的密码(项目中默认为123,自己的mysql一般为123456),要和自己创建的数据库名字对应起来。
  3. 运行两个服务,在浏览器中键入url
    1) user的url:http://localhost:8081/user/1
    2)order的url :http://localhost:8080/order/101
  1. 通过这个小demo,可以让人很清晰看到一个项目是怎么运作起来的。

1. 5 (补充)本地项目上传到云端gitee上

首先需要在Gitee上面新建一个同名项目,复制其链接
1)在本地使用cmd,把gitee的项目克隆下来

git clone 仓库的路径     %仓库的路径为gitee上项目的访问路径

2)把本地项目中的文件全部放到克隆项目(刚刚克隆下来的)中去
3)语句三部曲:添加到本地仓库临时仓;提交到本地仓库;提交到远程仓库

git status   #查看项目中文件的状态
git add .    #一个空格带个点,把所有的文件都放入暂存区
git commit -m '修改的名称'   #把暂存区项目放入本地仓库,并且添加本次项目修改的名字
git push   # 把这个项目上传到已经链接的线上远程仓库

4)在后面的项目中,直接打开IDEA,会自动执行add,只需要主动实现commit 和push操作就可以。

1. 6 服务拆分——服务远程调用

目标:根据订单的id查询订单的功能(即在orderservice中能够查找到用户的信息)

扫描二维码关注公众号,回复: 16176636 查看本文章

方法:通过在项目中书写http远程调佣的方式进行获取(不能写在内部,因为服务功能要独立)具体步骤

  1. 在配置类(启动类也算配置类)中注册restemplate
  1. 在orderservice中发起http请求,利用useid的信息
  1. 总结
    1)基于RestTemplate发起的http请求实现远程调用
    2)http请求做远程调用是与语言无关的调用,只要知道对方的ip、端口、接口路径、请求参数即可。
    3)提供者与消费者角色其实是相对的;一个服务可以同时是服务提供者和服务消费者

参考文献
1)黑马程序员SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课

猜你喜欢

转载自blog.csdn.net/qq_42974034/article/details/129214675