SDS

Envoy为什么能战胜Ngnix——线程模型分析篇

元气小坏坏 提交于 2020-11-06 17:55:59
Envoy为什么能战胜Ngnix——线程模型分析篇 导读:随着Service Mesh在最近一年的流行,Envoy 作为其中很关键的组件,也开始被广大技术人员熟悉。作者是Envoy的开发者之一,本文详细说明了Envoy的线程模型,对于理解Envoy如何工作非常有帮助。内容较为深入,建议细细品读。 关于Envoy的基础技术文档目前相当少。为了改善这一点,我正在计划做一系列关于Envoy各个子系统的文章。 这是第一篇文章,请让我知道你的想法以及你希望涵盖的其他主题。最常见的问题之一是对Envoy使用的线程模型进行描述。 本文将介绍Envoy如何将连接映射到线程,以及Envoy内部使用的线程本地存储(TLS)系统,正是因为该系统的存在才可以保证Envoy以高度并行的方式运行并且保证高性能。 线程概述 图1:线程概述 Envoy使用三种不同类型的线程,如图1所示。 Main:此线程可以启动和关闭服务器。负责所有xDS API处理(包括DNS , 运行状况检查和常规集群管理 ), 运行时 ,统计刷新,管理和一般进程管理(信号, 热启动等)。 在这个线程上发生的一切都是异步的和“非阻塞的”。通常,主线程负责所有不需要消耗大量CPU就可以完成的关键功能。 这可以保证大多数管理代码都是以单线程运行的。 Worker:默认情况下,Envoy为系统中的每个硬件线程生成一个工作线程。(可以通过-

超融合第二存储可不是备份一体机,我们来看看其特质

◇◆丶佛笑我妖孽 提交于 2020-11-06 10:37:22
昨天,我写的博客 备份软件老矣?存储新风口——超融合第二存储来了 阅读量还挺多,在业界引起了不少反响,很多人回帖说他们家的产品就是超融合第二存储,但也许可能就是一个备份一体机,虽然感觉像,但可能并不是,我把它叫形像和神不似。 今天,我就以Cohesity为例,来讲讲超融合第二存储有哪些典型特征,大家可以对号入座,看看你的产品是否具备这样的特性。 1、无限节点。真正的分布式节点,可以无限scale-out扩展,没有节点规模限制。Cohesity号称所有的数据和元数据都是分布式的,类似google file system,没有节点限制。哈哈,投标你写不死它。Nutanix也是这么宣传的,没有节点限制。但是很多SDS是有节点限制的,比如EMC SCALEIO,宣传好像是1000多个,华为的FusionStorage,宣传是2000多个。不过,有高人分析说Cohesity的集群节点数目其实最大只有256个,但是它通过集中管理方式,把这些集群统一进行管理,实现真正的无限扩展。虽然Cohesity怎么能吹,但目前部署的最大集群只有20多个节点。 2、无限高性能快照。Cohesity号称采用SnapTree专利技术,整体系统的快照数是无限的,和IBM的XIV宣传的口径类似。而很多的存储系统,整个系统的快照数是有一个上限的。并且,支持快照的快照(无限递归),并且中间任何一个快照删除

Redis10亿数据量只需要100MB内存,为什么这么牛?

☆樱花仙子☆ 提交于 2020-11-02 05:43:06
点击上方“ java大数据修炼之道 ”,选择“ 设为星标 ” 优质文章, 第一时间送达 来源: toutiao.com/i6767642839267410445 上一篇: 今天写出一个十分弱智的bug! 本文主要和大家分享一下redis的高级特性:bit位操作。 本文redis试验代码基于如下环境: 操作系统:Mac OS 64位 版本:Redis 5.0.7 64 bit 运行模式:standalone mode redis位操作 reids位操作也叫位数组操作、bitmap,它提供了SETBIT、GETBIT、BITCOUNT、BITTOP四个命令用于操作二进制位数组。 先来看一波基本操作示例: SETBIT 语法:SETBIT key offset value 即:命令 key 偏移量 0/1 setbit命令用于写入位数组指定偏移量的二进制位设置值,偏移量从0开始计数,且只允许写入1或者0,如果写入非0和1的值则写入失败: GETBIT 语法:GETBIT key offset 即:命令 key 偏移量 gitbit命令用于获取位数组指定偏移量上的二进制值: BITCOUNT 语法:BITCOUNT key 即:命令 key bitcount命令用于获取指定key的位数组中值为1的二进制位的数量,之前我们写入了偏移量0的值为1,偏移量10 的值为1,偏移量8的值为0:

Redis 10亿数据量只需要100MB内存,为什么这么牛?

元气小坏坏 提交于 2020-11-02 05:35:21
作者:java架构设计 来源:toutiao.com/i6767642839267410445 粉丝福利1: 教妹子手撸了50个项目实战后,我住院了…… 粉丝福利2: 我写了10 万字 Spring Boot 详细学习笔记(带完整目录)+源码,分享给大家 本文主要和大家分享一下redis的高级特性:bit位操作。 力求让大家彻底学会使用redis的bit位操作并掌握其底层实现原理!主要包含以下内容: redis位操作命令示例 底层数据结构分析 为什么他的算法时间复杂度是O(1)? 10亿数据量需要多大的存储空间? redis位操作适合哪些应用场景? 本文redis试验代码基于如下环境: 操作系统:Mac OS 64位 版本:Redis 5.0.7 64 bit 运行模式:standalone mode redis位操作 reids位操作也叫位数组操作、bitmap,它提供了SETBIT、GETBIT、BITCOUNT、BITTOP四个命令用于操作二进制位数组。 先来看一波基本操作示例: SETBIT 语法:SETBIT key offset value 即:命令 key 偏移量 0/1 setbit命令用于写入位数组指定偏移量的二进制位设置值,偏移量从0开始计数,且只允许写入1或者0,如果写入非0和1的值则写入失败: GETBIT 语法:GETBIT key offset 即:命令

软件定义存储(SDS)2017市场格局分析

老子叫甜甜 提交于 2020-10-30 07:46:41
昨天我猜中了法国赢,但是没有猜中进球数。凌晨继续又有球赛,我继续表个态,进一个就行,O(∩_∩)O哈! 这两天,我们解读了各种基础软件的格局,除了SDS之外。大家如果没有看过,建议回看下面这两天的文章: 操作系统、数据库和虚拟化软件2017年市场格局分析 备份、归档、复制、SRM等存储管理软件2017市场格局分析 今天我们来谈谈SDS,因为这个太重要了,我必须把它独立成一个专题,才能显示我的重视。 先说一下背景。话说Gartner在2017年把SDS分成两种类型,一个是iSDS,一个是mSDS。 我觉得这个区分还是非常有必要的。iSDS的目的就是代替传统的存储(如VMware vSAN、华为的FusionStorage等等),而mSDS只是一种带外的存储虚拟化软件而已(如EMC的ViPR,华为的OceanStor DJ)和带内的异构虚拟化软件(如VPLEX软件部分,SVC软件部分等等)。 在Gartner的Hyper Cycle 2017年曲线了,我们可以看到,mSDS比iSDS更不成熟,才处于初始阶段。而iSDS好HCI的位置相同,已经过了炒作的高峰。 在Gartner的优先级矩阵,我们看到,iSDS是一个革命性的技术,而mSDS的优先级只是中等。也就是说,iSDS才是未来,需要特别重视和关注的。 Gartner的预测也可以看到,未来mSDS(即图中的storage as a

信创生态迎数据挑战,全域数据管控成趋势

岁酱吖の 提交于 2020-10-28 05:30:41
从“去 IOE ”到如今大热的信创,背后彰显的一个相同事实是,不同时期的 ITer 在国产化道路上经历的曲折坎坷,以及对突破关键核心技术的笃定不移。 作为一个已经成长为万亿级规模的新兴市场,信创的“朋友圈”如今变得越来越广。从CPU技术,底层存储,数据库,操作系统,到云平台,应用软件,硬件平台,信创技术和应用生态正在从点到面快速崛起。 随着越来越多关键工作负载的信创化,数据的“汇-存-管-用”全流程需要加速向全栈国产化演进,实现全域的数据可管可控。但是,现阶段信创生态在数据层仍然面临着以下挑战: 信创在数据层挑战: 信创生态基础架构技术路径多样化。以关键的CPU技术为例,目前有鲲鹏、兆芯、海光、飞腾、龙芯、申威等基于不同架构和指令集的CPU产品,为了实现对异构计算芯片的融合,需要在数据层实现各生态的兼容适配; 信创生态和现有X86生态的融合、过渡和切换。现代数据中心构建了以X86为主的应用生态,无论是传统应用还是新兴的云原生工作负载,皆运行在其上。信创生态要破局“出圈”,进入并融入市场,就必须让用户业务无感知的前提下,实现跨生态的数据迁移和流动; 信创生态下端到端解决方案及应用的适配。信创应用生态的不断丰富,给用户带来了多元化的国产化技术选择,通过自由的市场选择,实现信创生态的良性发展。但为了保证用户体验的一致性,需要数据基础设施与各种应用进行预先适配,检查其兼容性

redis的设计及使用场景

混江龙づ霸主 提交于 2020-10-26 07:25:37
概述 redis是一个完全开源的,高性能的key-value数据库,特点是:支持原子性、持久化、丰富的数据类型。 场景 1、在系统设计的时候,为了提高相应速度,使用各种数据类型来缓存数据 2、在做验证码的时候,redis有个过期时间,刚好符合验证码的倒计时需求 3、在做分布式锁的时候,redis的setnx,加上过期时间,刚好符合需求 4、在做防止接口重复提交的时候,过期时间刚好符合 5、在做session保存的时候,redis的缓存很适合 6、黑白名单、社交列表、ip限制访问等待,用redis再适合不过了 总结 在使用redis的时候,要注意的key设计,这样易于维护,考虑持久化策略,以防在服务异常的时候快速的恢复数据;考虑系统的安全策略,不能使用key *命令查询;要控制好key的生命周期,redis不是垃圾桶;key要设计的合理,不要太长,太长会占用很多内存,比如:sds>39字节,内存得扩大为原来的两倍。 来源: oschina 链接: https://my.oschina.net/u/4334778/blog/4616480

redis源码学习02:跳跃表插入结点

假装没事ソ 提交于 2020-10-26 04:08:40
本文是本人在学习redis源码时的笔记,本文主要是对跳跃表插入结点代码的中文注释,如有错误欢迎指正。 有关跳跃表的原理可以上网搜材料,有很多。 首先看下redis源码里有关跳跃表的相关结构体: typedef struct zskiplistNode { // 跳跃表节点 sds ele; // zset元素 double score; // zset分值 struct zskiplistNode *backward; // 单前level的后一个node struct zskiplistLevel { // 创建节点的函数里会根据level数量申请相应的内存空间,放在结构体后面的作用是只需要一次内存申请操作,而且是连续的内存空间 struct zskiplistNode *forward; unsigned long span; // 该结点在某一层与下一个结点之间的元素个数 } level[]; } zskiplistNode; typedef struct zskiplist { // 跳跃表 struct zskiplistNode *header, *tail; // 头结点和尾结点,创建跳跃表时,tail为null unsigned long length; // level1所有元素个数 int level; // 总层级数 } zskiplist; 创建一个结点:

要搞懂 Redis 为什么这么快,看这 15 张图就够了

时光怂恿深爱的人放手 提交于 2020-10-23 01:19:26
作为一名后端工程师,工作中你肯定和 Redis 打过交道。Redis 为什么快,这点想必你也知道,至少为了面试也做过准备。很多人知道 Redis 快仅仅因为它是基于内存实现的,对于其它原因倒是模棱两可。 那么今天就来一起看看: - 思维导图 - 基于内存实现 这点在一开始就提到过了,这里再简单说说。 Redis 是基于内存的数据库,那不可避免的就要与磁盘数据库做对比。 对于磁盘数据库来说,是需要将数据读取到内存里的,这个过程会受到磁盘 I/O 的限制。 而对于内存数据库来说,本身数据就存在于内存里,也就没有了这方面的开销。 高效的数据结构 Redis 中有多种数据类型,每种数据类型的底层都由一种或多种数据结构来支持。 正是因为有了这些数据结构,Redis 在存储与读取上的速度才不受阻碍。这些数据结构有什么特别的地方,各位看官接着往下看: 1、简单动态字符串 这个名词可能你不熟悉,换成 SDS 肯定就知道了。 这是用来处理字符串的。了解 C 语言的都知道,它是有处理字符串方法的。而 Redis 就是 C 语言实现的,那为什么还要重复造轮子?我们从以下几点来看: (1)字符串长度处理 这个图是字符串在 C 语言中的存储方式,想要获取 「Redis」的长度,需要从头开始遍历,直到遇到 '\0' 为止。 Redis 中怎么操作呢?用一个 len 字段记录当前字符串的长度

蜻蜓点水说说Redis的String的奥秘

∥☆過路亽.° 提交于 2020-10-22 09:42:19
本篇博客参考: 掘金Redis小册 敖丙 如果面试官问你,单线程的Redis为什么那么快,你可能脱口而出,因为单线程,避免上下文切换;因为基于内存,比硬盘读写快很多;因为采用的是多路复用网络模型。不管你是否真的理解了,这个回答足以应付一半以上的面试官了,但是如果可以再进行补充就更好了:因为Redis对各种数据结构进行了精心的设计,比如String采用的是SDS,比如list采用的是ziplist,quicklist等等,可能这样的回答就比较出彩了,至少可以说出部分面试者不太清楚的事情。今天我们就来看看Redis中最常用的String数据结构的奥秘。 从位操作说起 bitmap的应用场景很多,比如大名鼎鼎的布隆过滤器(之前的博客有介绍过:《大白话布隆过滤器》),比如统计指定用户在一年内任意日期内的登录情况,统计任意日期内,所有用户的登录情况等等,都可以用bitmap来实现(之前的博客也有介绍过:《有点长的博客:Redis不是只有get set那么简单》),所以好好看看bitmap还是很有必要的,不过本篇博客不打算详细介绍bitmap,只是通过bitmap引出我们今天的话题,而bitmap的核心就是位操作。 如果我们要往Redis塞入一个value为“hello”的key,这个所有人都会: test:1>set key hello "OK" test:1>get key "hello"