- 浏览: 42704 次
- 性别:
最新评论
文章列表
通俗的来说容器其实是一种沙盒技术。顾名思义,沙盒就是能够像一个集装箱一样,把你的应用“装”起来的技术。这样,应用与应用之间,就因为有了边界而不至于相互干扰;而被装进集装箱的应用,也可以被方便地搬来搬去。不过,这两个能力说起来简单,但要用技术手段去实现它们,确并不是很容易。所以,本篇文章就来剖析一下容器的实现方式
我们知道一个程序被执行起来之后,它就会从磁盘上的二进制文件,变成了计算机内存中的数据、寄存器里的值、堆栈中的指令、被打开的文件,以及各种设备的状态信息的一个集合也就是一个进程
所以,对于进程来说,它的静态表现就是程序,平常都安安静静地待在磁盘上;而一旦运行起来,它就变成了计算机里的数据和 ...
RabbitMQ一共具有三种模式:单机、普通集群、镜像集群
单机模式
单机模式,就是我们平常玩的demo,生产上肯定不能用。具体安装部署过程可以参考我的这篇文章:CentsOS原生RabbitMQ安装过程
普通集群
普通集群就是在多台机器上启动多个实例。每个队列只会存在其中的一个实例上,然后所有实例同步这些队列的元数据。消费者在进行消费的时候,如果连接的实例上恰好不是队列所在的实例,就会根据队列的元数据去队列所在实例上拉取数据
由此可知,集群模式并没做到分布式,如果队列所在的实例宕机了,会导致接下来其他实例就无法从那个实例拉取消息
所以集群主要是提高吞吐量的
关于集群模式的安装部署过程可以参考我 ...
本文涉及:投递失败的消息怎么处理、如何实现延时队列、如何指定消息的优先级、消息的持久化是如何实现的、如何保证消息不丢失
投递失败的消息怎么处理
首先投递失败存在如下两个情况
当交换器无法根据自身的类型和路由键找到符合条件的队列
如果交换器在将消息路由到队列时发现队列上并不存在任何消费者
解决方案:
在生产者投递消息时指定mandatory或者imrnediate参数设为 true 时,RabbitMQ 会把无法投递的消息通过Basic.Return 命令将消息返回给生产者,此时生产者需要调用channel.addReturnListener 来添加 ReturnListener 监昕器实现 ...
Kubernetes一词来源于希腊语,翻译来的意思就是舵手或者船长的意思,而它的logo也是很符合这个词的
至于k8s则是通过将ubernetes这8个字母替换为8而导出的缩写
Kubernetes是什么?
k8s是Google开源的容器集群管理系统(思想来源于谷歌 ...
选择排序
假如我们现在要排序的数组为[3,1,0,2,8,4,2]。那么选择排序的排序流程为:
在这个数组中找出最小值与第一个元素交换,现在数组为[0,1,3,2,8,4,2]
在这个数组中除了第一个位置的元素外找出最小值与第二个元素交换,因为第二个元素就是最小的所以此次没有发生变化。现在数组为[0,1,3,2,8,4,2]
在这个数组中除了第一个、第二个位置的元素外找出最小值与第三个元素交换,现在数组为[0,1,2,3,8,4,2]
在这个数组中除了第一个、第二个、第三个位置的元素外找出最小值与第四个元素交换,现在数组为[0,1,2,2,8,4,3]
在这个数组中除了第一个、第二个、第三个、 ...
阿里巴巴从 2011 年开始通过容器实践云原生技术体系,在整个业界都还没有任何范例可供参考的大背境下,从最初独自摸索到拥抱开源回馈社区,阿里巴巴逐渐摸索出了一套比肩全球一线技术公司并且服务于整个阿里集团的容器化基础设施架构。九年的前行,让阿里巴巴在交流互动中不断吸收和贡献好的理念、技术、思想,也积累了最为丰富和宝贵的实践经验。
2019年6月24日至6月26日,在由 Cloud Native Computing Foundation (CNCF) 主办的云原生顶级技术大会 KubeCon + CloudNativeCon + Open Source Summit(上海 )上,阿里巴 ...
“你是什么垃圾?”
谁能想到,这直击灵魂深处的拷问,
有一天竟成了上海朋友的日常。
垃圾分类成为上海人的社交新话题。
首先参考上一篇文章【CentsOS原生RabbitMQ安装过程】在两到三台机器上先安装单独的RabbitMQ节点
修改一下hostname
1
2
3
4
[root@rnode1 ~]# vim /etc/hosts
172.16.20.110 rnode1
172.16.20.111 rnode2
172.16.20.112 rnode3
erlang节点之间通信需要相同的cookie文件,将其中一个机器上的cookie文件copy到另外两个机器
1
2
scp /var/lib/rabbitmq/.erlang.co ...
版本依赖问题
RabbitMQ安装时与Erlang的版本一定要保持以下的对应关系,否则会引发无法启动的问题
安装Erlang
下载Erlang依赖
1
wget http://erlang.org/download/otp_src_20.3.tar.gz
解压后进入资源文件夹
1
tar xvf otp_src_20.3.tar.gz
下载编译所需组件
1
yum install unixODBC-devel openssl-devel ncurses-devel gcc
配置
...
最近写了一个限流的插件,所以避免不了的接触到了一些限流算法。本篇文章就来分析一下这几种常见的限流算法
分析之前
依我个人的理解来说限流的话应该灵活到可以针对每一个接口来做。比如说一个类里面有5个接口,那么我的限流插件就应该能针对每一个接口就行不同的限流方案。所以呢,既然针对的每个接口所以就需要一个可以唯一标示这个接口的key(我取的是类名+方法名+入参)。
分布式限流强烈推荐使用redis+lua或者nginx+lua来实现。
这里用2个限流条件来做示例讲一下常见的限流算法:
接口1它10秒钟最大允许访问100次
接口2它10秒钟最大允许每个人访问100次。
计 ...
本文涉及:MySQL自带的性能测试工具mysqlslap的使用及几个性能调优的方法
性能测试工具—mysqlslap
mysqlslap是MySQL自带的一款非常优秀的性能测试工具。使用它可以 模拟多个客户端并发向服务器发出查询、更新等请求,然后输出简单的报告
可选参数
–engines:代表要测试的引擎,可以有多个,用分隔符隔开
–iterations:代表要运行这些测试多少次
–auto-generate-sql :代表用系统自己生成的SQL脚本来测试
–auto-generate-sql-load-type: 代表要测试的是读还是写还是两者混合的(read,wri ...
本文所有实验基于MySQL5.7.21,实验将会用到Explain工具,不了解的同学可参考此文章:MySQL性能优化神器Explain详解
联合索引失效
先创建一个包含三个字段的联合索引,索引顺序如下: 由以下三张图的key_len字段我们可以得出 ...
本文涉及:MySQL性能优化神器Explain的使用
简介
虽然使用Explain不能够马上调优我们的SQL,它也不能给予我们一些调整建议,但是它能够让我们了解MySQL 优化器是如何执行SQL 语句的
通过Explain,我们可以分析出以下结果:
表的读取顺序
数据读取操作的操作类型
哪些索引可以使用
哪些索引被实际使用
表之间的引用
每张表有多少行被优化器查询
Explain命令的用法十分简单, 在 select语句前加上 Explain 就可以了, 例如:
1
explain select * from user;
它的结 ...
本文涉及:高可用数据库设计时数据类型的选择原则
在进行数据库设计时,如果能够选择最恰当的数据类型就可以为后期的数据库调优打好最坚实的基础
选择数据类型的原则
更小的通常更好
例如存储订单状态字段很多时候使用0、1、2表示使用tinyint类型存储就够了,没必要搞个int、long甚至varchar来。 越小的数据类型代表着占用越小的磁盘、内存和CPU,也就代表着越快的速度。当然,不要为了追求小而不考虑实际的场景、通常选择一个不会超过范围的最小数据类型就好了
越简单越好
数据类型越简单操作所需要的CPU周期就越少,例如说ip地址通常使用in ...
本文涉及:MySQL安装后自带的4个数据库:information_schema、 performance_schema、sys、mysql的作用及其中各个表所存储的数据含义
information_schema
information_schema是mysql自带的一个信息数据库,其保存着关于mysql服务器所维护的所有其他数据库的信息,如数据库名,数据库的表,表栏的数据类型与访问权限等 也就是说当你建立一个新的数据库,或者在已有的数据库中增删改表的话,都会记录在information_schema库中
相关表:
character_sets:存储数据库相关字符集信息(me ...