公司内部有一个配置中心,采用推送的方式来推送配置到客户端,对于Runtime的数据和持久的数据,都采用同样的方式处理。整个系统是一个集群。持久的数据也都是存在每个节点上,节点之间的数据会复制。
我总觉得,持久的数据的特性和非持久(Runtime)的会有所不同,一般Runtime的数据的特点是需要非常快的更新到客户端,让客户端感知到数据的变化。而持久的数据,需要的是客户端启动时的可靠获取,以及配置数据持久保存的安全性等。
后来主导,起了一个新的产品,专门用于管理持久配置数据的,提供了Get的高可用性,采用数据库并且主备的方式,保证数据本身的安全。
产品出来后,发现了几个问题,
第一个,内部有了两个配置中心,一个是管理持久数据的,一个是Runtime数据的,但是,对于内部的开发人员来说,复杂了
第二个,原来都是使用一个客户端,现在迁移的时候,有一定的迁移成本,而不是完全透明的
第三个,对于运维的同事和线下的配置管理员来说,多了一套系统
第四个,其实之前没有仔细分析清楚,就是对于持久的配置数据,一般是不会改动的,但是真的改动的时候,也是需要能够立即通知到客户端的。而这个地方,确实新的持久配置中心没有解决好的。
在开始这个产品之前,觉得是尽量把持久的配置中心做到很简单,做到可以应对意外情况(比如意外的时候,可以读取本地配置;配置是文本的,可以方便的人工介入),可以,还是有不少的地方没有想清楚。这个真是教训啊。
对于一个看似简单的产品,
1 还是需要想清楚真实的使用场景
2 考虑对现有的影响,包括但不限于使用这个产品的人;运维人员;配管人员;测试人员等等。
3 类似概念的产品,最好只有一个。对于Runtime的配置,持久的配置,其实都是配置,虽然特性上可能会有很大的差别,但是对于使用者,还是隐藏一些使用上的细节比较好。
分享到:
相关推荐
Go-moss是一个用Golang编写的Key-Value存储库,它的设计目标是提供简单、快速、有序且可持久化的数据存储解决方案。这个库适用于需要高效、可靠的数据存储的应用场景,如缓存、日志记录或者作为更复杂数据结构的基础...
2. 数据库或文件系统持久化:这种方式将Session数据序列化后存入数据库或文件,当需要时再反序列化恢复。这可以解决Cookie存储量有限的问题,但增加了系统复杂性,需要考虑数据同步、并发访问等问题。例如,可以使用...
综上所述,Go-Sandglass是一个强大且灵活的消息队列解决方案,特别适用于需要高可用性、水平扩展、数据持久化和时间顺序保障的场景。通过理解和运用这些核心特性,开发者可以构建出更稳定、更具弹性的分布式系统。
总结,Go-Snapshot凭借其纯Golang的实现、强大的持久化能力以及高效的KV存储,成为了一个可靠且灵活的数据存储解决方案。在开发过程中,理解其内部机制并合理利用其特性,将有助于构建高性能、高可用性的应用程序。
该项目主要目的是实现对企业内部人力资源的管理,提供一个方便、高效的线上平台。 【SSM框架详解】 1. **Spring**:Spring是一个全面的后端开发框架,它提供了依赖注入(DI)和面向切面编程(AOP)等功能,帮助...
- **MyBatis**:是一个支持普通SQL查询、存储过程以及高级映射的优秀持久层框架。 - **Vue.js**:用于构建用户界面的前端框架,提供了高度灵活且高效的组件系统。 - **MySQL**:关系型数据库管理系统,用于存储...
Bind Mounting是一种将主机系统上的一个文件或目录挂载到容器内部相应位置的方法。这种挂载方式允许容器直接访问主机的文件系统,实现数据的持久化。通过这种方式,即使容器被销毁,数据也不会丢失,因为它们存储在...
MirDB作为一个独立的服务,应当提供易于配置和管理的选项,包括日志记录、性能监控、备份恢复等功能。开发者和运维人员需要能够轻松地调整参数以优化性能,或者根据需求进行数据迁移。 7. **源码分析** "mirdb-...
《基于SpringBoot的太原学院商铺管理系统》是一篇深入探讨如何利用SpringBoot技术构建高校内部商铺管理系统的学术论文。本文将围绕这一主题,详细介绍系统的设计、实现及其相关技术知识点。 SpringBoot是Spring框架...
这个项目是关于构建一个基于SSM(Spring、SpringMVC、MyBatis)框架的校园信息管理系统,并结合微信小程序进行用户交互。SSM是Java后端开发中常用的一个轻量级框架组合,它整合了Spring的核心功能、Spring MVC的MVC...
Hibernate是一个强大的ORM框架,它简化了Java应用与数据库之间的交互。使用Hibernate,开发者可以通过简单的配置和少量的代码即可实现复杂的数据库操作,大大提高了开发效率。 ##### Hibernate的特点 - **ORM映射**...
【hibernate内部留言系统源码(java)】是一个基于Java编程语言并利用Hibernate框架实现的内部通信系统。这个系统的主要目标是为用户提供一个在组织内部进行信息交流和沟通的平台。通过使用Hibernate,开发者可以...
在Android应用开发中,数据持久化是至关重要的一个环节,它允许应用程序在用户退出或设备重启后仍能保存和恢复数据。以下将详细介绍Android数据持久化的四种主要方式:SharedPreferences、内部存储、外部存储以及...
【标题】"登录系统jsp-fitter实现"是一个关于使用Fitter框架在JSP(JavaServer Pages)中构建无数据库登录小系统的项目。Fitter通常是一个轻量级的库,用于帮助开发者更方便地处理页面跳转和用户交互,尤其是在简单...
在这个“java mvc基于struts和hibernate整合的一个简单的OA系统”中,Struts作为控制器框架,负责处理用户请求并调度应用流程;Hibernate则作为持久层框架,用于对象关系映射(ORM),简化数据库操作。 **Struts...
3. SharedPreferences:这是一个轻量级的持久化数据存储方式,适合保存简单的键值对。它使用XML文件存储数据,易于读写,适用于小规模的配置数据。 接下来,讨论如何在需要时运行这些持久性代码。这可能涉及到服务...
MyBatis则是一个轻量级的持久层框架,它允许开发者通过编写SQL语句来操作数据库。在SSM中,MyBatis作为数据访问层,将业务逻辑与数据库操作分离。我们可以为每个数据库操作创建一个Mapper接口,接口中的方法对应SQL...
本项目旨在通过开发一个基于Java的高校物品捐赠管理系统,提高物品捐赠管理的效率和准确性。 #### 1.2 背景与意义 当前,许多高校在处理物品捐赠时仍然采用传统的纸质文档记录方式,这种方式不仅工作效率低下,还...
9. **源码分析**:压缩包中包含的源码可能是对一个简单的数据库管理系统或查询解析器的实现,通过阅读和分析源码,学生可以更直观地了解数据库系统的内部运作。 10. **实验报告**:数据库实验报告通常包括实验目的...
2. **MyBatis**:持久层框架,通过简单的 SQL 配置实现数据操作,增强了数据库操作的灵活性。 3. **Shiro 或 Spring Security**:这两个都是强大的安全框架,用于实现用户认证和授权功能。 4. **Thymeleaf 或 ...