微服务--认识微服务
微服务架构的演变
1. 单体架构(Monolithic)
- 阶段描述:在单体应用时代,整个应用程序被设计为一个项目,并在一个进程内运行。这种架构方式开发简单,便于集中管理,但随着应用的复杂化,其缺点逐渐显现。
- 主要特点:
- 开发简单,集中管理。
- 部署成本低
- 难以维护,升级困难,无法快捷迭代。
2. 垂直拆分
- 阶段描述:为了应对单体架构的维护难题,开始出现垂直拆分的做法,即将应用按照功能或业务线拆分为多个独立的部分,每部分独立部署和维护。
- 主要特点:
- 独立部署和维护,提高了部分灵活性。
- 但仍可能保持单体模式思维,容易形成重复建设。
3. 分布式服务
- 阶段描述:随着业务规模的扩大,系统开始采用分布式服务架构,将一系列服务组装成系统,每个服务独立部署、独立运行、独立开发和维护。
- 主要特点:
- 强调服务的独立性和隔离性。
- 提高了系统的可扩展性和容错性。
4. 面向服务架构(SOA)
- 阶段描述:面向服务架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过定义良好的接口和协议将这些服务联系起来。
- 主要特点:
- 实现了服务的标准化和可重用性。
- 提高了系统的灵活性和可维护性。
5. 微服务架构
- 阶段描述:微服务架构是SOA的进一步发展和细化,它将大型应用程序拆分为一组小型、独立的服务,每个服务都围绕特定的业务功能进行设计、开发、部署和扩展。
- 主要特点:
- 服务拆分:应用程序被拆分为多个小型服务,每个服务负责一个明确的业务功能。
- 独立部署:每个服务都可以独立进行部署和升级,不会影响其他服务的正常运行。
- 分布式通信:服务之间通过轻量级的通信机制进行交互,如RESTful API、消息队列等。
- 自治性:每个服务都是自治的,可以使用不同的技术栈和数据库,独立进行开发和维护。
- 可扩展性:可以根据需求独立扩展特定的服务,而不必扩展整个应用程序。
- 高可用性:一个服务的故障不会影响整个系统的运行,提高了系统的容错性和可用性。
- 技术多样性:不同的服务可以使用适合自身需求的技术栈,选择最佳的工具和技术。
- 团队自治:每个服务团队可以独立做出决策和创新,加快开发和部署速度。
6. 云原生微服务架构
- 阶段描述:随着云原生技术的兴起,如Docker、Kubernetes等,微服务架构得到了更为完善的支撑,形成了云原生微服务架构。
- 主要特点:
- 强调服务的无状态性和独立性,使得服务更容易在云环境中进行扩展和管理。
- Kubernetes等容器编排工具成为核心组件,用于容器的编排和管理。
- Service Mesh(如Istio)等新技术为微服务提供了更为完善的治理功能,如服务发现、负载均衡、故障注入、可观测性和安全等。
认识微服务
微服务(Microservices)是一种软件架构设计模式,它将大型复杂的应用程序拆分成多个小型、自治的服务单元。这些服务单元可以独立部署、扩展和维护,每个服务单元都专注于完成一个特定的业务功能或任务。基于微服务形成的软件架构风格称为微服务架构(Microservices Architecture),它涵盖了使用微服务构建应用程序的全套原则、模式和最佳实践。
SpringCloud
Spring Cloud是一套分布式微服务架构的一站式解决方案,它提供了一套简单易用的编程模型,使我们能在Spring Boot的基础上轻松地实现微服务系统的构建。
- 定义:Spring Cloud并不是某一门技术,而是一系列微服务解决方案或框架的有序集合。它将市面上成熟的、经过验证的微服务框架整合起来,并通过Spring Boot的思想进行再封装,屏蔽掉其中复杂的配置和实现原理,最终为开发人员提供了一套简单易懂、易部署和易维护的分布式系统开发工具包。
- 性质:Spring Cloud的中文社区网站有http://springcloud.cn/和Spring Cloud中文网-官方文档中文版等,提供了丰富的资源和文档支持。
拆分与远程调用
一、服务拆分
服务拆分是将一个大的应用程序拆分成多个小的、独立的服务的过程,每个服务专注于解决特定的业务问题。服务拆分的目的是为了提高系统的可维护性、可扩展性和灵活性。
拆分原则
- 单一职责原则:每个服务应该只负责一项业务功能,确保服务的职责单一。
- 模块化设计:将功能相似的模块放在同一服务中,确保服务内部的模块之间存在高内聚低耦合的关系。
- 业务边界划分:根据业务需求划分服务边界,确保服务之间的功能和数据的拆分不会导致业务逻辑混乱或重复。
- 垂直拆分:将服务按照业务领域进行垂直拆分,每个服务都有明确的业务范围和职责,这样可以提高系统的可扩展性和维护性。
拆分步骤
- 明确服务边界:根据业务功能和需求,明确每个服务的职责和边界。
- 划分服务模块:将应用程序中的功能模块按照服务边界进行划分。
- 实现服务接口:为每个服务定义清晰的接口,确保服务之间的交互明确和一致。
- 部署和运行服务:将每个服务独立部署在不同的服务器或容器中,并确保服务的长时间稳定运行。
二、远程调用
服务提供者(Provider)
服务提供者是一个运行在网络上,能够响应并处理来自服务消费者的请求的应用程序或服务。它通常会对外暴露一个或多个API接口,这些接口定义了可供远程调用的方法。服务提供者负责处理这些方法的逻辑,并返回相应的结果给服务消费者。
服务消费者(Consumer)
服务消费者是一个需要调用远程服务来完成其业务逻辑的应用程序或服务。它不会直接执行所需的业务逻辑,而是通过远程调用的方式,向服务提供者发送请求,并等待响应结果。服务消费者通常使用某种形式的客户端库或框架来发送请求和接收响应,这些库或框架封装了远程调用的底层细节,使得开发者可以更方便地进行远程通信。
远程调用是微服务架构中服务之间通信的重要方式。在Spring Cloud中,远程调用通常通过HTTP REST API、Feign客户端、消息队列等方式实现。
远程调用流程
- 服务注册与发现:服务启动后,会向注册中心(如Eureka、Nacos等)注册自己的信息,包括服务地址、端口、元数据等。其他服务通过注册中心可以发现和获取服务信息。
- 负载均衡:在调用服务时,通过负载均衡器(如Ribbon、LoadBalancer等)将请求均匀地分发到不同的服务实例上,提高系统的整体性能和稳定性。
- 服务调用:客户端通过HTTP REST API、Feign客户端等方式向服务提供者发送请求,服务提供者处理请求并返回结果。
- 熔断与降级:为了防止服务调用失败导致整个系统崩溃,可以使用熔断器(如Hystrix、Resilience4j等)进行熔断和降级处理。当服务调用失败或超时达到一定阈值时,熔断器会开启熔断状态,将请求直接返回或执行备用逻辑。
常用组件
- Feign:Feign是一个声明式的Web服务客户端,它使得编写Web服务客户端变得更加简单。通过创建接口并使用注解来配置它,可以定义服务之间的通信方式。
- Ribbon:Ribbon是一个客户端负载均衡器,它可以在多个服务实例之间提供智能的负载均衡。
- Hystrix:Hystrix是一个用于处理分布式系统的延迟和容错的库。它通过隔离服务之间的访问点、停止级联失败和提供回退选项来实现这一点。
- Nacos:Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它提供了服务发现、配置管理、服务管理等关键能力。
Eureka
一、Eureka的组成
Eureka架构主要包括Eureka Server(服务端,注册中心)和Eureka Client(客户端)两大部分。
- Eureka Server:
- 作用:作为服务注册中心,负责维护服务实例的注册信息,并提供服务实例的查询功能。暂存地址 调用时给服务块发送地址
- 功能:
- 服务注册:服务实例启动时,会向Eureka Server注册自己的信息,包括服务名、IP地址、端口号等。
- 服务续租:服务实例定期(默认30秒)向Eureka Server发送心跳,以续租其租约,表明自己仍然可用。
- 服务注销:服务实例关闭时,会向Eureka Server发送注销请求,Eureka Server将此实例从注册列表中移除。
- 服务列表获取:服务消费者从Eureka Server获取服务列表,并根据负载均衡策略选择一个服务实例进行调用。
- Eureka Client:
- 分类:Eureka Client分为服务提供者(Provider)和服务消费者(Consumer)两类。
- 服务提供者:
- 在启动时向Eureka Server注册自己的信息。
- 每隔一定时间(默认30秒)向Eureka Server发送心跳,以维持其租约。
- 服务消费者:
- 通过Eureka Server查找可用的服务实例。
- 从Eureka Server获取服务列表,并根据负载均衡策略选择一个服务实例进行调用。
二、Eureka的特性
- 高可用:Eureka Server支持集群部署,多个Eureka Server实例相互注册,形成高可用的服务注册中心。
- 容错性:Eureka Client在与Eureka Server进行通信时,如果某个Eureka Server宕机,Eureka Client会自动切换到其他Eureka Server进行通信。
- 负载均衡:Eureka与Ribbon等客户端负载均衡器结合使用,可以实现服务的负载均衡。
- 健康检查:Eureka Server通过心跳机制来检查服务实例的健康状态,如果服务实例在预定时间内未发送心跳,Eureka Server会将其标记为不健康或已下线。
三、Eureka的应用场景
Eureka适用于微服务架构中的服务注册与发现场景。在微服务架构中,服务实例数量众多,且经常需要动态地添加或删除服务实例。Eureka通过提供注册中心的功能,使得服务实例能够动态地注册和注销,同时服务消费者也能够通过Eureka Server方便地获取服务列表并进行服务调用。
四、Eureka的使用
在使用Eureka时,通常需要搭建Eureka Server,并在服务提供者和服务消费者中引入Eureka Client依赖。服务提供者在启动时会自动向Eureka Server注册自己的信息,服务消费者则通过Eureka Server获取服务列表并进行服务调用。
五、Eureka的故障处理
Eureka提供了多种故障处理机制,以确保系统的稳定性和可用性。例如,当服务实例出现故障时,Eureka Server会将其从注册列表中移除,避免其他服务消费者继续调用该故障实例。同时,服务消费者可以通过实施重试机制、启用熔断机制等方式来应对服务故障。
Eureka Server(注册中心)
<!--XML-->
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <!-- 添加Spring Boot启动器依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 其他依赖 -->
</dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Your-Spring-Cloud-Version</version> <!-- 替换为你的Spring Cloud版本 --> <type>pom</type> <scope>import</scope> </dependency> </dependencies>
</dependencyManagement>
//启动类上添加@EnableEurekaServer注解:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); }
}
########application.yml配置:##########
server: port: 8761 eureka: client: register-with-eureka: false fetch-registry: false server: wait-time-in-ms-when-sync-empty: 0
Eureka Client(服务注册)
<!--pom.xml-->
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!-- 添加你的服务所需的依赖,比如web starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 其他依赖 -->
</dependencies> <dependencyManagement> <!-- 与Eureka Server相同 -->
</dependencyManagement>
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication
@EnableDiscoveryClient
public class ServiceApplication { public static void main(String[] args) { SpringApplication.run(ServiceApplication.class, args); }
}
server: port: 8080 spring: application: name: my-service eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ instance: hostname: localhost prefer-ip-address: true
Ribbon
Ribbon是Spring Cloud生态系统中一个用于客户端的负载均衡器,它基于Netflix Ribbon实现。Ribbon的主要功能是在微服务架构中,通过提供一系列的负载均衡策略,将客户端的请求智能地分发到后端服务的多个实例上,从而提高系统的可用性和扩展性。
Ribbon的核心功能
- 负载均衡:
- Ribbon可以将用户请求根据一定的策略(如轮询、随机等)分发到后端服务的多个实例上,以达到负载均衡的效果。
- 它支持多种负载均衡策略,允许用户根据实际需求进行选择和配置。
- 服务调用:
- 在微服务架构中,Ribbon通常与RestTemplate等客户端工具一起使用,方便地进行服务间的调用。
- 通过在RestTemplate上添加
@LoadBalanced
注解,可以轻松地实现服务的负载均衡调用。
创建一个配置类来显式地设置IRule
Bean:
@Bean
public IRule customRule() {
return new CustomRule();
}
通过在application.yml
或application.properties
文件中设置属性
myclient: ribbon: NFLoadBalancerRuleClassName: com.example.CustomRule
Ribbon的负载均衡策略
Ribbon支持多种负载均衡策略,常见的包括:
- 轮询(RoundRobinRule):
- 默认策略,按顺序依次选择服务实例进行调用。
- 随机(RandomRule):
- 随机选择一个服务实例进行调用,这种策略可以确保请求尽量均匀地分布到各个服务实例上。
- 权重分配(WeightedResponseTimeRule):
- 根据服务实例的响应时间等性能指标动态调整权重,优先调用权重较高的服务实例。
- 最少活跃调用数(BestAvailableRule):
- 选择当前活跃调用数最少的服务实例进行调用,以减少等待时间。
- 一致性哈希(ConsistentHashRule):
- 通过一致性哈希算法选择服务实例,这种策略可以保证相同请求在一段时间内总是被转发到同一个服务实例上,适用于需要会话保持的场景。
- 饥饿加载
饥饿加载(Eager Loading)是软件开发中常用的一种加载数据或资源的策略,其主要特点是在需要之前就预先加载所有可能需要的数据或资源。以下是对饥饿加载的详细解析:
-
定义与特点
- 定义:饥饿加载指的是在应用程序启动或对象初始化阶段,就加载所有可能需要使用的数据,无论这些数据在实际运行中是否会被用到。
- 特点:
- 预加载:在需要之前就完成数据的加载,确保数据在首次访问时能够快速响应。
- 减少延迟:由于数据已经预先加载到内存中,因此在首次访问时可以避免加载数据导致的延迟。
- 内存消耗:可能会浪费内存资源,因为预先加载了大量数据,其中一部分可能并未被实际使用。
- 启动时间:对于大型数据集或复杂对象图,饥饿加载可能导致应用程序的启动时间延长。
Ribbon的工作原理
- 服务发现:
- Ribbon通常与Eureka等服务注册与发现中心配合使用。服务实例在启动时将自己注册到Eureka Server上,Ribbon客户端从Eureka Server获取服务实例的注册信息。
- 负载均衡:
- Ribbon客户端在获取到服务实例的注册信息后,根据配置的负载均衡策略选择一个服务实例进行调用。
- 请求转发:
- 将客户端的请求转发到选中的服务实例上,并处理响应结果。
Ribbon的配置
Ribbon的配置可以通过配置文件或代码的方式进行:
- 配置文件方式:在application.yml或application.properties中配置Ribbon的相关属性,如负载均衡策略等。
- 代码方式:在微服务的启动类中通过编写配置类来定义Ribbon的Bean,并设置相应的负载均衡策略。
相关文章:

微服务--认识微服务
微服务架构的演变 1. 单体架构(Monolithic) 阶段描述:在单体应用时代,整个应用程序被设计为一个项目,并在一个进程内运行。这种架构方式开发简单,便于集中管理,但随着应用的复杂化,…...

【docker】docker 镜像仓库的管理
Docker 仓库( Docker Registry ) 是用于存储和分发 Docker 镜像的集中式存储库。 它就像是一个大型的镜像仓库,开发者可以将自己创建的 Docker 镜像推送到仓库中,也可以从仓库中拉取所需的镜像。 Docker 仓库可以分为公共仓…...

第L2周:机器学习-线性回归
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 目标: 学习简单线性回归模型和多元线性回归模型通过代码实现:通过鸢尾花花瓣长度预测花瓣宽度 具体实现: (一&…...

SpringMVC拦截器深度解析与实战
引言 Spring MVC作为Spring框架的核心模块之一,主要用于构建Web应用程序和RESTful服务。在Spring MVC中,拦截器(Interceptor)是一种强大的机制,它允许开发者在请求处理流程的特定点插入自定义代码,实现诸如…...

直线上最多的点数
优质博文:IT-BLOG-CN 题目 给你一个数组points,其中points[i] [xi, yi]表示X-Y平面上的一个点。求最多有多少个点在同一条直线上。 示例 1: 输入:points [[1,1],[2,2],[3,3]] 输出:3 示例 2: 输入&am…...

经济管理专业数据库介绍
本文介绍了四个经济管理专业数据库:国研网全文数据库、EPS数据平台、中经网、Emerald全文期刊库(管理学)。 一、国研网全文数据库 国研网是国务院发展研究中心主管、北京国研网信息有限公司承办的大型经济类专业网站。国研网教育版”是国研…...

【C++ Primer Plus习题】11.1
问题: 解答: main.cpp #include <iostream> #include <fstream> #include "Vector.h" #include <time.h> using namespace std; using namespace VECTOR;int main() {ofstream fout;fout.open("randwalk.txt");srand(time(0));double d…...
[数据库][oracle]ORACLE EXP/IMP的使用详解
导入/导出是ORACLE幸存的最古老的两个命令行工具,其实我从来不认为Exp/Imp是一种好的备份方式,正确的说法是Exp/Imp只能是一个好的转储工具,特别是在小型数据库的转储,表空间的迁移,表的抽取,检测逻辑和物理…...

中国各银行流动性比例数据(2000-2022年)
介绍中国银行业2000年至2022年间的流动性比例数据,涵盖500多家银行,包括城市商业银行、城镇银行、大型商业银行、股份制银行、民营银行、农村合作银行、农村商业银行、农村信用社等。这些数据对于理解中国银行业的流动性状况至关重要,有助于投…...

MACOS安装配置前端开发环境
官网下载安装Mac版本的谷歌浏览器以及VS code代码编辑器,还有在App Store中直接安装Xcode(里面自带git); node.js版本管理器nvm的下载安装如下: 参考B站:https://www.bilibili.com/video/BV1M54y1N7fx/?sp…...

Docker 配置国内镜像源
由于 GFW 的原因,在下载镜像的时候,经常会出现下载失败的情况,此时就可以使用国内的镜像源。 什么是镜像源:简单来说就是某个组织(学校、公司、甚至是个人)先通过某种手段将国外的镜像下载下来,…...
AI模块在人工智能中扮演着什么样的角色
AI模块在人工智能(AI)中扮演着核心和关键的角色。它们是构成AI系统的基础单元,负责实现AI系统的各种智能功能。以下是AI模块在人工智能中扮演的具体角色: 功能实现的核心:AI模块集成了实现特定智能功能所需的算法、数据…...

VM Workstation虚拟机AlmaLinux 9.4操作系统安装(桌面版安装详细教程)(宝塔面板的安装),填补CentOS终止支持维护的空白
目录 AlmaLinux介绍 AlmaLinux操作系统的安装 1、下载镜像文件 2、新建虚拟机 (1)点击创建新的虚拟机 (2)打开虚拟机向导后,选择“自定义”安装,然后点击“下一步” (3)选择虚…...

【学习笔记】卫星通信NTN 3GPP标准化进展分析(三)- 3GPP Release17 内容
一、引言: 本文来自3GPP Joern Krause, 3GPP MCC (May 14,2024) Non-Terrestrial Networks (NTN) (3gpp.org) 本文总结了NTN标准化进程以及后续的研究计划,是学习NTN协议的入门。 【学习笔记】卫星通信NTN 3GPP标准化进展分析(一ÿ…...

【SQL】常见语句合集
SQL常见语句合集 一. 新建表1.1 语句1.2 结果 二. 新增数据2.1 语句2.2 结果 三. 新增字段列3.1 语句3.2 结果3.3 扩展 四. 更新指定数据4.1 语句4.2 结果 五. 更新指定列5.1 语句(长度) 六. 删除字段列6.1 语句 七. 删除指定数据7.1 语句 八. 查询 一. …...
Cozer必备!一站式解锁扣子全网最全插件集锦(三)
俗话说,工欲善其事必先利其器! 用过Coze的朋友都知道,插件在Coze里的重要性。插件库就相当于武器库,一个好的插件,就相当于一件趁手的兵器,可以让你事半功倍! 程哥精心整理了Coze最常用和好用…...

1-2宿主环境
什么是宿主环境 指的是程序运行所必须的依赖环境。Android系统和ios系统是两个不同的宿主环境,安卓版的app是不能在ios系统上运行的。 小程序的宿主环境 🍕🍕🍕 -手机微信是小程序的宿主环境 通信的主体 🍔&…...

Java进阶13讲__第九讲
Stream流 1. 案例初体验 package cn.hdc.oop9.stream.using;import java.util.LinkedList; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream;public class t1 {public static void main(String[] args) {LinkedList<String&g…...
上海市计算机学会竞赛平台2024年8月月赛丙组等差数列的素性
题目描述 给定三个整数 nn,aa 与 dd,表示一个项数为 nn 的等差数列,首项为 aa,公差为 dd。 请统计,从这个等差数列中有多少数字是素数 输入格式 三个整数: nn,aa 与 dd 输出格式 单个整数…...

VR虚拟展厅的应用场景有哪些?
虚拟展厅作为一种利用虚拟现实技术构建的三维展示空间,其应用场景广泛且多样。视创云展为企业虚拟展厅搭建提供技术支持。以下是一些主要的应用场景: 1. 博物馆和艺术展览 文物保护与展示: 在博物馆中,为了保护珍贵的文物和艺术…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...

初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...