持久化

Rancher容器目录持久化

*爱你&永不变心* 提交于 2019-12-07 15:58:36
最近一直在研究Rancher的持久化问题。 目前已找到两种方式实现Rancher里的容器文件实现持久化方法。 方法一: 配置映射(只适用单个文件,不适用于目录) 这个算不上是真正的持久化,只是相当于配置一个键值,然后键值内容等于文件内容,从而使得容器重启后,该文件内容会自动读取该键值内容,从而实现保持配置文件内容 (1)添加配置映射 (2)输入映射名称(可随意取,但是注意部分特殊字符无法使用),选中命名空间(建议选择zabbix-agent容器所在命名空间),配置映射键(输入需要保持的文件名字即可),输入值(直接复制zabbix_agentd.conf的内容)。点击确认 (3)配置升级容器。找到相应的容器,点击进入升级界面 下拉找到数据卷,做如下配置 升级该容器,可以发现以下配置内容不会丢失了。当需要修改该文件时,直接在配置映射那里修改对应的值即可 方法二: 映射主机目录:(同时使用于文件及目录) (1)指定该容器运行主机 因为这种方式,相当于将容器内部的文件映射至宿主机,映射之后,宿主机对应的文件和文件夹会自动更新到容器内(PS:注意是,宿主机上的文件或文件夹覆盖容器内的)。如果不指定运行的主机,可能会导致,该容器升级之后,在另一台主机上运行,例如在192.168.68.233上运行,那么如果233上对应的文件夹是空的,将会使得容器内部对应的文件夹也会被清空

rabbitmq原理介绍(转载)

巧了我就是萌 提交于 2019-12-06 09:31:44
从AMQP协议可以看出,MessageQueue、Exchange和Binding构成了AMQP协议的核心,下面我们就围绕这三个主要组件 从应用使用的角度全面的介绍如何利用Rabbit MQ构建消息队列以及使用过程中的注意事项。 1. 声明MessageQueue 在Rabbit MQ中,无论是生产者发送消息还是消费者接受消息,都首先需要声明一个MessageQueue。这就存在一个问题,是生产者声明还是消费者声明呢?要解决这个问题,首先需要明确: a)消费者是无法订阅或者获取不存在的MessageQueue中信息。 b)消息被Exchange接受以后,如果没有匹配的Queue,则会被丢弃。 在明白了上述两点以后,就容易理解如果是消费者去声明Queue,就有可能会出现在声明Queue之前,生产者已发送的消息被丢弃的隐患。如果应用能够通过消息重发的机制允许消息丢失,则使用此方案没有任何问题。但是如果不能接受该方案,这就需要无论是生产者还是消费者,在发送或者接受消息前,都需要去尝试建立消息队列。这里有一点需要明确,如果客户端尝试建立一个已经存在的消息队列,Rabbit MQ不会做任何事情,并返回客户端建立成功的。 如果一个消费者在一个信道中正在监听某一个队列的消息,Rabbit MQ是不允许该消费者在同一个channel去声明其他队列的。Rabbit MQ中,可以通过queue

可持久化[学习笔记]

喜夏-厌秋 提交于 2019-12-06 08:01:02
可持久化应该都知道… 就是可以回退历史版本…以及区间查询一些东西比如说k值…(不过k值还不是主要用处?) 可持久化略解: 就是复制其他的根节点 按照过去版本添加当前版本新建节点…和之前是独立的 但是是共用节点…从而使内存减少了很多… 按照以前的版本新建节点到当前的版本…复制版本就是直接复制根节点 rt[i]=rt[pre]; 可持久化线段树 求静态区间k大… 就是弄个前缀和的东西 l~mid mid+1~r的这段值域中二分没了… #include <cstdio> #include <algorithm> using ll = long long ; using namespace std ; int read() { int x = 0 , f = 1 ; char c = getchar() ; while(c < '0' || c > '9') { if(c == '-') f = -1 ; c = getchar() ; } while(c >= '0' && c <= '9') { x = (x << 1) + (x << 3) + (c & 15) ; c = getchar() ; } return x * f ; } template < class T > void print(T x , char c = '\n') { static char _st[100]

Sentinel基于Apollo的持久化改造

亡梦爱人 提交于 2019-12-06 07:51:38
Sentinel基于Apollo的持久化改造 sentinel默认是将用户在dashboard中编辑过的流控信息保存在内存中,所以在重启后,所有之前配置过的流控规则也就不见了。但是sentinel给用户提供了可扩展的接口,用户可以根据自己熟悉的持久化引擎来做一定的相应的改造(apollo、nacos、zookeeper)。这里首先要了解下sentinel的规则管理和推送方式 规则管理和推送 一般来说,规则的管理和推送有以下三种方式: 推送模式 | 说明 | 优点 | 缺点 | --- | --- | --- | --- | 默认模式 | API 将规则推送至客户端并直接更新到内存中,扩展写数据源 | 简单,无任何依赖 | 不保证一致性;规则保存在内存中,重启即消失。严重不建议用于生产环境 | pull 模式 | 扩展写数据源(WritableDataSource), 客户端主动向某个规则管理中心定期轮询拉取规则,这个规则中心可以是 RDBMS、文件(数据库保存) 等 | 简单,无任何依赖;规则持久化 | 不保证一致性;实时性不保证,拉取过于频繁也可能会有性能问题。 push 模式 | 扩展读数据源(ReadableDataSource),规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nacos、Zookeeper 等配置中心。这种方式有更好的实时性和一致性保证

DDD实战与进阶 - 值对象

大憨熊 提交于 2019-12-06 00:01:05
目录 DDD实战与进阶 - 值对象 概述 何为值对象 怎么运用值对象 来看一个例子 值对象的持久化 总结 DDD实战与进阶 - 值对象 概述 作为领域驱动设计战术模式中最为核心的一个部分-值对象。一直是被大多数愿意尝试或者正在使用DDD的开发者提及最多的概念之一。但是在学习过程中,大家会因为受到传统开发模式的影响,往往很难去运用值对象这一概念,以及在对值对象进行持久化时感到非常的迷惑。本篇文章会从值对象的概念出发,解释什么是值对象以及怎么运用值对象,并且给出相应的代码片段(本教程的代码片段都使用的是 C# ,后期的实战项目也是基于 DotNet Core 平台)。 何为值对象 首先让我们来看一看原著 《领域驱动设计:软件核心复杂性应对之道》 对值对象的解释: 很多对象没有概念上的表示,他们描述了一个事务的某种特征。 用于描述领域的某个方面而本身没有概念表示的对象称为Value Object(值对象)。 此时作者是这样的: 而我们是这样的: 然后作者用“地址”这一概念给大家扩充了一下什么是值对象,我们应该怎么去发现值对象。所以你会发现现在很多的DDD文章中都是用这个例子给大家来解释。当然读懂了的人就会有一种醍醐灌顶的感觉,而像我这种菜鸡,以后运用的时候感觉除了地址这个东西会给他抽象出来之外,其他的还是该咋乱写咋写。 For Example : public class

Android中OrmLite持久化

删除回忆录丶 提交于 2019-12-05 20:49:02
http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite_toc.html#SEC_Contents OrmLite提供了一些轻量级持久化Java对象到SQL数据库,同时也避免了复杂性和更多的标准的ORM包的开销功能。它支持的SQL数据库使用JDBC的数量,还支持原生的Android操作系统数据库API调用sqlite。首先我们要使用它呢,就要去它的官方http://ormlite.com下载你想要的版本,这里我下载了最新的4.30。接下来我们来写一个简单的项目,同时对它的使用方法进行一个详细的介绍。   建立好项目后呢,我们加入OrmLite的jar包,然后建立两个实体类,我用的例子是客户和订单,一个客户对应多个订单这样的关系。   接着为这两个实体类添加属性和字段,需要注意的是,一定要有一个无参的构造函数,OrmLite创建对象时需要使用。   Account: int aId,String aName;Order:int oid,String oName,Account account。   接着就到了添加ORMLite注解了。注解是特殊的代码标志已在Java版本开始,要指定什么类和字段存储在数据库中,ORMLite支持其自己的注解(@ DatabaseTable @ DatabaseField

BZOJ 5338: [TJOI2018]xor 可持久化trie+dfs序

元气小坏坏 提交于 2019-12-05 16:59:56
强行把序列问题放树上,好无聊啊~ code: #include <bits/stdc++.h> #define N 200005 #define setIO(s) freopen(s".in","r",stdin) using namespace std; int tot,edges,tim; int cnt[N*33],ch[N*33][2],tree[N],seq[N],val[N],ba[N]; int fa[N],son[N],size[N],top[N],dep[N],hd[N],to[N<<1],nex[N<<1],dfn[N],ed[N]; inline void add(int u,int v) { nex[++edges]=hd[u],hd[u]=edges,to[edges]=v; } void insert(int pre,int &x,int v) { int now=x=++tot; for(int i=30;i>=0;--i) { int o=((v>>i)&1); ch[now][o^1]=ch[pre][o^1]; ch[now][o]=++tot; pre=ch[pre][o]; now=tot; cnt[now]=cnt[pre]+1; } } void dfs1(int u,int ff) { fa[u]=ff,dep[u]=dep[ff]+1

BZOJ 3261: 最大异或和 可持久化trie

蓝咒 提交于 2019-12-05 16:23:43
模板题,刷点数据结构 ~ code: #include <bits/stdc++.h> #define N 600009 #define setIO(s) freopen(s".in","r",stdin) using namespace std; int rt[N],sum[N],tot; struct node { int ch[2],cnt; }t[N*28]; void insert(int a,int b,int len,int num) { if(len<0) return; int o=(num>>len)&1; t[b].ch[o^1]=t[a].ch[o^1]; t[b].ch[o]=++tot; t[t[b].ch[o]].cnt=t[t[a].ch[o]].cnt+1; insert(t[a].ch[o],t[b].ch[o],len-1,num); } int query(int l,int r,int len,int x) { if(len<0) return 0; int o=(x>>len)&1; if(t[t[r].ch[o^1]].cnt>t[t[l].ch[o^1]].cnt) { return (1<<len)+query(t[l].ch[o^1],t[r].ch[o^1],len-1,x); } else { return query(t[l

【可持久化平衡树】LOJ#6109

我的未来我决定 提交于 2019-12-05 10:01:01
可持久化平衡树基于fhq-treap实现 也可以用有旋treap可是我不会 ,可持久化把每次merge,split,pushdown涉及到的节点都开个新点继承一下 因为可持久化了所以二操作split完不用merge回去 然后在一篇博客里学习了不记随机权值的fhq-treap写法,看代码趴 #include <bits/stdc++.h> #define N 35100000 #define ll long long #define For(i,x,y) for(int i=(x);i<=(y);++i) using namespace std; int rt,cnt=0,a,b,c,d,e,f,g,h; struct node{ ll val,sum;int sz,ch[2],tag; } t[N]; inline int Rand(){ return (1ll*rand()*rand()%INT_MAX+rand())%INT_MAX; } int newnode(int x){ t[++cnt].val=x,t[cnt].sz=1,t[cnt].sum=x; t[cnt].ch[0]=t[cnt].ch[1]=t[cnt].tag=0; return cnt; } void pushup(int o){ t[o].sz=t[t[o].ch[0]].sz+t[t[o].ch[1]

P3402 【模板】可持久化并查集

六眼飞鱼酱① 提交于 2019-12-05 05:19:37
今天看到这道题,忽然不知道为何要线段树了\笑(出现了一些瞎搞的想法 然后就想到了操作树。。。 就是,我们可以离线,然后每个位置直接维护一个栈,记录历史信息。 然鹅我也不知道为什么常数很大 #include<bits/stdc++.h> #define R register int using namespace std; namespace Luitaryi { inline int g() { R x=0,f=1; register char s; while(!isdigit(s=getchar())) f=='-'?-1:f; do x=x*10+(s^48); while(isdigit(s=getchar())); return x*f; } const int N=200010; int n,m; bool ans[N]; struct node {bool op,f[2],flg[2]; int u,v,tu,tv;}mem[N<<1]; vector <int> fa[N],d[N]; vector <int> e[N]; inline int getf(int x) {return (fa[x][fa[x].size()-1]==x)?x:getf(fa[x][fa[x].size()-1]);} inline void operation(int x) { if