教你通俗易懂学会长期存储Prometheus主流技术

本文探讨了Prometheus的局限性,如单实例不可扩展和Pull模式数据抓取。随着Prometheus的广泛应用,社区提出了多种长期存储解决方案,如M3、VictoriaMetrics、Thanos和Cortex。文章详细介绍了这些方案的特点和适用场景,并对它们进行了对比分析,指出VictoriaMetrics适合数据持久化到硬盘,而Thanos和Grafana Mimir在对象存储方面更具潜力。文章最后总结了不同场景下的最佳选择,强调了技术选型的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 

Prometheus 作为云原生时代崛起的标志性项目,已经成为可观测领域的事实标准。Prometheus 是单实例不可扩展的,那么如果用户需要采集更多的数据并且保存更长时间该选择怎样的长期存储方案呢?

2022 年 8 月 9 日,在 优快云 云原生系列在线峰会第 15 期“Prometheus 峰会”上,青云科技可观测与函数计算负责⼈霍秉杰分享了《Prometheus Long-Term Storage:海纳百川,有容乃大》。

Prometheus 简介及其局限性

云原生时代崛起的 Prometheus 已经在可观测领域得到了广泛应用,其影响力远远超出了云原生的范畴,具有两个显著特点。

单实例,不可扩展

Prometheus 的作者及社区核心开发者都秉承一个理念:Prometheus 只聚焦核心的功能,扩展性的功能留给社区解决,所以 Prometheus 自诞生至今都是单实例不可扩展的。

这对于很多从大数据时代走过来的工程师而言有点不可思议,大数据领域的很多开源项目比如 Elasticsearch、HBase、Cassandra 等无一不是多节点多角色的设计。

Prometheus 的核心开发者曾这样解释,Prometheus 结合 Go 语言的特性和优势,使得 Prometheus 能够以更小的代价抓取并存储更多数据,而 Elasticsearch 或 Cassandra 等 Java 实现的大数据项目处理同样的数据量会消耗更多的资源。也就是说,单实例、不可扩展的 Prometheus 已强大到可以满足大部分用户的需求。

Pull 模式抓取数据

Prometheus 倡导用 Pull 模式获取数据,即 Prometheus 主动地去数据源拉取数据。对于不便于 Pull 的数据源,Prometheus 提供了 PushGateway 进行处理,但 PushGateway 在部分应用场景上存在限制。

尽管单实例的 Prometheus 已经足够强大,但还是存在部分需求是其无法满足的,如跨集群聚合、更长时间的存储等。为了扩展 Prometheus,社区给出了多种方案。

在 Prometheus 长期存储出现之前,用户若需要跨集群聚合计算数据时,社区提供 Federation 方式实现。

在多个 Prometheus 实例的上一层有一个 Global Prometheus,它负责在各个实例中抓取数据并进行计算,以此解决跨集群聚合计算的问题。但如果各个集群的数据量较大,单实例的 GlobalPrometheus 也会遇到瓶颈。

Promretheus 长期存储方案的崛起

2017 年,Prometheus 加⼊ Remote Read/Write API,自此之后社区涌现出大量长期存储的方案,如 Thanos、Grafana Cortex/Mimir、VictoriaMetrics、Wavefront、Splunk、Sysdig、SignalFx、InfluxDB、Graphite 等。

接下来我们将挑选几个主流的 Prometheus 长期存储方案进行对比分析。

M3

M3 是 Uber 开源的一个 Prometheus 长期存储的方案,它的组件主要包括 M3 Coordinate、M3 Queries、M3 Aggregator

<think>好的,用户之前询问了Spring中的@RequestMapping注解,现在他们接着问“常用的组件”。需要确定用户是在继续Spring框架的话题,还是转向其他技术领域的通用组件。由于之前的对话是关于Spring MVC的,可能用户现在想了解Spring中常用的组件,或者是更广泛意义上的软件工程中的常见组件。 首先,我需要明确“组件”的具体上下文。在Spring框架中,组件通常指被@Component及其派生注解标记的类,如@Controller、@Service、@Repository等。但用户可能也可能指一般软件架构中的常用组件,比如日志、数据库连接池、缓存等。根据用户之前的兴趣点,可能更倾向于Spring相关的组件,但也不排除其他可能性。 接下来,我应该考虑如何组织回答。如果用户指的是Spring中的组件,需要详细列出各个核心组件及其作用,比如IoC容器、AOP、数据访问模块等。同时,结合用户之前的问题,可能需要提到与@RequestMapping相关的组件,比如DispatcherServlet、HandlerMapping等。此外,用户可能对实际开发中常用的第三方组件感兴趣,比如数据库连接池HikariCP,JSON处理库Jackson,安全框架Spring Security等。 另外,用户可能希望了解这些组件的用途和如何选择,所以在介绍时应该简要说明每个组件的功能和适用场景。需要保持结构清晰,分点列出,便于用户理解。同时,要避免使用过多技术术语,保持解释通俗易懂。 可能还需要考虑用户的学习阶段。他们可能正在学习Spring框架,所以需要从基础开始,逐步深入。例如,先介绍Spring核心组件,再扩展到相关生态中的常用库,最后提到微服务架构中的组件,如Spring Cloud相关项目。这样层次分明,帮助用户构建完整的知识体系。 最后,需要检查是否有遗漏的重要组件,并确保信息准确,如版本兼容性、最新趋势等。例如,现在Spring Boot已经成为主流,简化了配置,所以在介绍组件时可以提到Spring Boot中的自动配置和starter依赖,这也是用户可能感兴趣的部分。</think>以下是对软件开发中常用组件的分类介绍,分为基础架构、功能模块和开发工具三个层面: ### 一、基础架构组件 1. **Spring Framework核心** - **IoC容器**:通过`ApplicationContext`实现依赖注入 - **AOP模块**:提供面向切面编程能力 - **事务管理**:声明式事务控制(`@Transactional`) 2. **持久层组件** ```java // MyBatis示例 @Mapper public interface UserMapper { @Select("SELECT * FROM users WHERE id = #{id}") User findById(@Param("id") Long id); } ``` - **HikariCP**:高性能数据库连接池 - **JPA/Hibernate**:ORM框架 3. **Web服务组件** - **Tomcat/Jetty**:嵌入式Servlet容器 - **Netty**:异步事件驱动网络框架 - **Spring WebFlux**:响应式Web框架 ### 二、功能模块组件 1. **安全控制** ```java // Spring Security配置示例 @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/admin/**").hasRole("ADMIN") .anyRequest().authenticated(); } } ``` 2. **消息处理** - **Kafka/RabbitMQ**:消息队列中间件 - **Spring Batch**:批处理框架 3. **缓存组件** ```java // Redis缓存示例 @Cacheable(value = "users", key = "#id") public User getUser(Long id) { // 数据库查询逻辑 } ``` - **Redis**:内存数据存储 - **Ehcache**:本地缓存框架 ### 三、开发支持组件 1. **监控管理** - **Prometheus+Grafana**:指标监控可视化 - **Spring Boot Actuator**:应用健康检查端点 2. **配置中心** ```yaml # Nacos配置示例 spring: cloud: nacos: config: server-addr: 127.0.0.1:8848 file-extension: yaml ``` 3. **文档工具** - **Swagger/OpenAPI**:API文档生成 - **Spring REST Docs**:文档测试一体化 ### 四、微服务组件(Spring Cloud体系) | 组件 | 功能 | 对应实现 | |-------------------|-------------------------|-------------------| | 服务注册发现 | 服务实例管理 | Eureka/Nacos | | 配置中心 | 统一配置管理 | Config Server | | 服务网关 | 路由与过滤 | Gateway/Zuul | | 负载均衡 | 请求分发策略 | Ribbon/LoadBalancer | | 熔断降级 | 服务容错保护 | Hystrix/Sentinel | **组件选型建议**: 1. 根据项目规模选择单体/微服务架构 2. 优先考虑Spring官方维护的组件 3. 社区活跃度和版本更新频率很重要 4. 注意组件间的兼容性(如Spring Boot与Cloud版本对应关系) **最新趋势**: - 响应式编程(WebFlux+Reactor) - 云原生组件(Kubernetes+Service Mesh) - Serverless架构支持 - 低代码平台集成 建议根据具体业务场景组合使用这些组件,可参考Spring官方提供的start.spring.io创建项目模板。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值