IT自学第四十一天(微服务)

微服务


1、微服务课程安排

分布式及微服务框架:SpringCloud、Dubbo

分布式中间件:Rubit

微服务是一种软件架构风格,他是以专注于单一职责的很多小型项目为基础,组合出复杂的大型应用。

服务拆分、远程调用、服务治理、请求路由。商品与订单之间的交互,利用远程服务调用。

身份认证,配置管理,服务保护,分布式事务(跨系统事务问题,回滚问题,原子性失败),异步通信,消息可靠性,延迟消息,分布式搜索(几百万条数据以上),倒排索引,数据聚合。

将用户信息作为10台服务器,而订单用200台服务器。

2、单体架构

单体架构

单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。

优点:架构简单,部署成本低。

缺点:团队协作成本高;系统发布效率低;系统可用性差(一个tomcat来承担压力)。

分成多个tomcat来分担压力。

总结:单体架构比较简单,适合规模比较小的项目。

3、微服务简介

微服务架构,是服务化思想指导下的一套最佳实践架构方案。服务化,就是把单体架构中的功能模块拆分为多个独立项目。

粒度小,团队自治,服务自治。

数据库也是分离的。

4、SpringCloud微服务框架简介

SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验:

对于SpringBoot的版本也有要求:

上课使用的是2021

5、黑马商城项目了解

熟悉黑马商城

6、服务拆分原则

服务拆分原则

什么时候拆分?

7、拆分服务-商品微服务

拆分服务

工程结构有两种:

独立Project(非常大型,彻底独立)、Maven聚合(中大型)。

需求:

8、拆分服务-购物车微服务

拆分购物车代码,里面会需要涉及到一些商品的信息,需要关联商品表。里面的信息是空的。

9、服务远程调用

远程调用

RestTemplate实现HTTP请求

java 复制代码
List<ItemDTO> items = null;
String url = "http://localhost:8081/items?ids={ids}";
ResponseEntity<List<ItemDTO>> response = restTemplate.exchange(url,   //请求地址
        HttpMethod.GET,   //请求方式
        null,    //请求参数实体,因为在路径中携带参数,因此不需要
        new ParameterizedTypeReference<List<ItemDTO>>() {
        }, //返回数据类型
        Map.of("ids", CollUtils.join(itemIds, ","))   //将集合中的元素用","号分割
);

10、注册中心原理

服务治理

服务远程调用时存在的问题:写死不方便。

注册中心原理:

11、nacos安装

Nacos可以当注册中心,也可以是配置中心。

nacos基于数据库存储。

nacos在Docker部署。

12、服务注册

服务注册

服务注册步骤如下:

13、服务发现

服务发现

消费者需要连接nacos以拉取和订阅服务,因此服务发现的前两步和服务注册是一样的,后面再加上服务调用即可:

java 复制代码
//获取注册中心中item-service的服务列表
List<ServiceInstance> instanceList = discoveryClient.getInstances("item.service");
//从上面随机选择一个服务实例
ServiceInstance serviceInstance = instanceList.get(RandomUtil.randomInt(instanceList.size()));
//可以从实例中获取微服务的访问地址
String url = serviceInstance+"/items?ids={ids}";

现在还是通过HTTP访问,一个一个的访问。要是可以把全部的类和方法共享出去。就可以相当于在一个项目里进行调用。

14、Feign快速入门

SOA 面向服务的架构---->分布式系统 ----->粒度更细,职责更单一;微服务

微服务更加偏向于功能职责的拆分,分布式更加偏向于服务器,物理机,地域的分布。

OpenFeign

快速入门

OpenFeign已经被SpringCloud自动装配,实现起来。

15、Feign-配置连接池

连接池

OpenFeign对Http请求做了优雅的伪装,不过其底层发起http请求,依赖于其它的框架。这些框架可以自己选择,包括以下三种:

  • HttpURLConnection:默认实现,不支持连接池
  • Apache HttpClient:支持连接池
  • OKHttp:支持连接池

具体源码可以参考FeignBlockingLoadBalancerClient类中的delegate成员变量。

OpenFeign整合OKHttp的步骤如下:

引入依赖:

XML 复制代码
<!--        OK http 的依赖-->
        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-okhttp</artifactId>
        </dependency>

开启连接池功能

16、Feign-抽取客户端最佳实践

最佳实践-抽取hm-api

实现步骤:

最佳实践抽取:将微服务需要的客户端抽取出来,每个模板调用抽取出的客户端。

17、Feign-日志级别配置

日志

相关推荐
X54先生(人文科技)1 小时前
ELR-SELLM Edge 神经元网络架构评估报告
人工智能·深度学习·架构·开源
小陈不好吃2 小时前
从单体到微服务:Spring Cloud Gateway 动态路由实战与踩坑记录
微服务·云原生·架构
混凝土拌意大利面3 小时前
基于MQ(消息队列)的RPC框架
架构
小艾.pino4 小时前
MiniMax M3顶住新一代多模态大模型的架构与实战
人工智能·架构
IT小白杨5 小时前
多店铺防关联指纹浏览器哪个好:从账号关联判定模型到环境隔离架构的一次拆解
经验分享·物联网·矩阵·架构·指纹浏览器
223糖5 小时前
思考 AI 应用架构
人工智能·架构
云祺vinchin5 小时前
桌面云如何高效备份?某科技公司灾备建设实战
云原生·数据安全·数据备份·无代理备份·桌面云
Dawson Zhu6 小时前
从理论到工程化:构建可靠Agent系统的六大核心工件与实战指南
人工智能·语言模型·架构·aigc·agi
她的男孩6 小时前
接口加密做成框架级能力有多难?我扒了 3600 行源码:从 RSA 握手到落库密文迁移
人工智能·后端·架构
老周聊架构6 小时前
Ontology:Palantir 架构真正的核心,不是数据库也不是知识图谱
数据库·架构·知识图谱