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-日志级别配置

日志

相关推荐
GIOTTO情2 小时前
Infoseek 字节探索媒介投放技术架构解析:AI 驱动的全链路自动化实现
人工智能·架构·自动化
志栋智能2 小时前
超自动化巡检:敏捷运维体系中的重要一环
运维·服务器·网络·云原生·容器·kubernetes·自动化
一切皆是因缘际会2 小时前
结构安全革命:下一代 AI 从 “不可控” 到 “绝对可控” 的范式跃迁
人工智能·安全·ai·架构
2501_933329552 小时前
Infoseek数字公关AI中台技术解析:基于DeepSeek+NLP的全网舆情监测与智能处置系统
人工智能·架构·数据库开发
丷丩2 小时前
策略模式实战:GeoAI-UP中MVT发布器的可扩展架构设计
人工智能·架构·gis·策略模式·空间分析·geoai
散修-小胖子3 小时前
Milvus 2.6 架构快速上手
架构·milvus
2603_954708313 小时前
微电网对等控制架构:多代理系统的协调运行与自主决策
人工智能·物联网·架构·系统架构·能源
heimeiyingwang3 小时前
【架构实战】Nginx七层负载均衡:从配置到原理,从入门到精通
nginx·架构·负载均衡
空中海3 小时前
04 Stage 模型、系统能力与数据架构
架构·鸿蒙