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

日志

相关推荐
张忠琳1 小时前
【NVIDIA】k8s-device-plugin v0.19.3 标签管理模块 (internal/lm) 深度分析之六
云原生·容器·架构·kubernetes·nvidia
小匠石钧知1 小时前
02_在多个RockyLinux10虚拟机上安装k8s集群
云原生·容器·kubernetes·k8s
阿里云云原生2 小时前
一周上线!信永中和基于阿里云 AgentTeams + AI 网关打造多智能体 AI 平台
阿里云·云原生·ai网关·agentteams
qq_454245032 小时前
认知自举:LLM自我指令泛化的三层逻辑
人工智能·架构·prompt
XUHUOJUN3 小时前
Azure Stack Hub 存储服务:托管磁盘、Blob/Table/Queue 与容量管理(下篇)
架构·azure stack
XUHUOJUN3 小时前
Azure Stack Hub 存储服务:从 S2D 物理栈到租户服务全景(上篇)
架构·azure stack
上海云盾商务经理杨杨4 小时前
WAF+DDoS 双层防护架构!解决应用层混合攻击漏杀误杀问题
架构·ddos
爱学习的小可爱卢5 小时前
SpringCloud——SkyWalking全链路监控源码深度解析
java·微服务·springcloud·skywalking
马优晨5 小时前
pring Boot + MyBatis + Redis 项目分层架构详解 —— 各层职责、关系与工作流程
架构·mybatis·spring项目分层架构详解·spring项目架构详解·spring各层职责·spring关系与工作流程
上海安当技术5 小时前
老系统零改造接入:旁路代理统一认证实战
java·servlet·架构·kubernetes·jenkins