小米技术
其他
探索未来|一文看懂小米年度技术峰会 · 软件技术专场
AIoT系统体验。架构部工程师李昂介绍道,通过把不同产品的差异功能与通用系统解耦,让用户既能获得一致性的基础体验,又可以享受不同产品的特有功能,让开发者可以在不同产品间复用通用代码,快速交付
2022年10月26日
其他
基于Apache Doris的小米增长分析平台实践
1、背景随着小米互联网业务的发展,各个产品线利用用户行为数据对业务进行增长分析的需求越来越迫切。显然,让每个业务产品线都自己搭建一套增长分析系统,不仅成本高昂,也会导致效率低下。我们希望能有一款产品能够帮助他们屏蔽底层复杂的技术细节,让相关业务人员能够专注于自己的技术领域,从而提高工作效率。通过分析调查发现,小米已有的统计平台无法支持灵活的维度交叉查询,数据查询分析效率较低,复杂查询需要依赖于研发人员,同时缺乏根据用户行为高效的分群工具,对于用户的运营策略囿于设施薄弱而较为粗放,运营效率较低和效果不佳。基于上述需求和痛点,小米大数据和云平台联合开发了增长分析系统(Growing
2020年8月27日
其他
小米Redis的K8s容器化部署实践
Cluster由于gossip协议的限制,横向扩展能力有限,集群规模在300个节点时,节点选主这类拓扑变更的效率就明显降低。同时,由于单个Redis实例的容量不宜过高,单个Redis
其他
HBase Region Read Replicas功能详解
region最大的MemStore该倍数时,会触发刷新StoreFile文件列表的任务hbase.region.replica.wait.for.primary.flushtruesecondary
其他
Talos 读写一致性
节点进行写入。分布式锁的作用是在一定时间粒度锁定绑定关系,避免了时间粒度内的细微抖动触发的迁移,使得服务进一步稳定,但是它无法解决节点假死或写数据时掉锁引发的脑裂问题。03Talos
其他
小米Talos GC性能调优实践
GC太频繁,每次回收的内存又比较少,因此减小-XX:G1OldCSetRegionThresholdPercent为3%,并调大-XX:G1HeapWastePercent为10%,以此达到控制
其他
小米Kylin平滑迁移HBase实践
根据美团等其他公司在Kylin社区的公开分享资料,跨HBase集群升级方案需要在新集群重新构建历史的Cube,或者有一段时间的服务停止。小米在Kylin生产环境的跨HBase集群迁移中实现了无中断的平滑迁移,对业务的影响减到最低。往期文章回顾:Talos网卡负载优化:基于个性化一致性哈希的负载均衡
2019年12月19日
其他
Talos网卡负载优化:基于个性化一致性哈希的负载均衡
Talos作为高吞吐型的消息队列服务,随着业务增长,带宽往往会成为瓶颈。如果网卡流量不均衡,就会产生集群网卡资源的木桶效应——
2019年12月12日
其他
小米数据收集利器:AgentSource
读取原始记录打入Talos;合并阶段,数据质量监控作业消费Talos数据并进行聚合,将聚合后的数据存入druid;展示阶段,将审计数据通过融合云展示到
2019年12月5日
其他
万亿级消息背后: 小米消息队列的实践
请求间的相互影响,又能充分利用空闲的线程,于是做了一个“具有记忆功能的最小堆”线程池,如下图右边所示这个线程池包含两部分,一部分是记录当前正在线程上排队的请求个数的线程最小堆,一部分是记录当前正在
2019年11月21日
其他
Mysql数据实时同步实践
关于小米内部使用的数据库你知道多少?(文末有福利)往期文章回顾:Flink流式计算在节省资源方面的简单分析背景MySQL由于自身简单、高效、可靠的特点,成为小米内部使用最广泛的数据库,但是当数据量达到千万/亿级别的时候,MySQL的相关操作会变的非常迟缓;如果这时还有实时BI展示的需求,对于mysql来说是一种灾难。为了解决sql查询慢,查不了的业务痛点,我们探索出一套完整的实时同步,即席查询的解决方案,本文主要从实时同步的角度介绍相关工作。早期业务借助Sqoop将Mysql中的数据同步到Hive来进行数据分析,使用过程中也带来了一些问题:虽然Sqoop支持增量同步但还属于粗粒度的离线同步,无法满足实时性的需求每次同步Sqoop以sql的方式向Mysql发出数据请求也在一定程度上对Mysql带来一定的压力同时Hive对数据更新的支持也相对较弱为了更有效地连接前端业务数据系统(MySQL)和后端统计分析系统(查询分析引擎),我们需要一套实时同步MySQL数据的解决方案。小米内部实践如何能够做到数据的实时同步呢?我们想到了MySQL主从复制时使用的binlog日志,它记录了所有的
2019年11月14日
其他
Flink流式计算在节省资源方面的简单分析
batch模式则于异常恢复比较友好;如果在大部分情况下作业运行稳定的话,Flink在资源利用率和数据处理效率上确实更占优势一些。数据序列化简单来说,数据的序列化是指把一个object转化为byte
2019年11月7日
其他
小米流式平台架构演进与实践
及其核心技术开设五大专题,全面分享大数据及其算力的核心内容。其中的专题四板块有夏军老师的专题分享呦~专题四:实时数仓专场邀请小米、美团点评、Netflix、菜鸟物流及
2019年11月5日
其他
一场HBase2.x的写入性能优化之旅
2.有时会出现大量P999为150ms的请求,P999曲线毛刺非常突出,而且毛刺点比平均的P999延迟要高100ms,这是一个非常令人困惑的数据。
2019年10月10日
其他
告别“纷纷扰扰”—小米OLAP服务架构演进
版本的元数据与权限管理图说起。可以看到,在旧版的架构中,Kudu表相关的权限和元数据与Hive表相关的权限和元数据,无论在实现上还是底层存储上都是分离的。前者通过我们自己实现的Metadata
2019年8月29日
其他
了解uid和gid如何在Docker容器中工作
infinity92c57a8a4eda60678f049b906f99053cbe3bf68a7261f118e411dee173484d10marc@server:~$
2019年8月22日
其他
优化Docker镜像,加速应用部署,教你6个小窍门
直接基于alpine镜像,把编译后的可执行文件打入镜像。因为alpine不同于普通的Ubuntu/Centos等发行版,需要静态编译和链接应用代码,例如Go需要关闭cgo:CGO_ENABLED=0
2019年8月13日
其他
你想知道的React组件设计模式这里都有(下)
Consumer接着,我们用ThemeContext生成两个属性,分别是Provider和Consumer。从字面意思即可理解。Provider供数据提供者使用,Consumer供数据消费者使用。
2019年8月6日
其他
你想知道的React组件设计模式这里都有(上)
NewComponent;};更为强大的是,由于函数返回的也是组件,那么高阶组件是可以嵌套进行使用的!比如我们先判断性别,再判断年龄。
2019年8月1日
其他
HBaseCon Asia 2019 Track 3 概要回顾
中国移动目前大概有6000个物理节点,100多个集群,几十PB数据,单集群最大600多个节点,单表最大1.6PB,最大3000万并发访问,存储的数据采用较高压缩比进行压缩,减少存储空间。
2019年7月30日
其他
HBaseCon Asia 2019 Track 1 概要回顾
的机器都是128GB的内存,外加12块900GB左右的SSD盘。单机能存放近10TB的数据,但内存却只有128GB,内存容量和磁盘容量占比为1.1%。而实际上,延迟敏感型业务方对
2019年7月25日
其他
HBaseCon Asia 2019 Track 2 概要回顾
HFile.最后一点是成本,使用云端数据库能带来两个方面的成本节省。一个是计算资源,一个是存储。计算资源是因为不同的业务有不同的波峰和波谷;存储是因为可以利用云上的廉价存储。最后他根据具体的几个
2019年7月23日
其他
Docker最佳实践:5个方法精简镜像
本文记录了精简Docker镜像尺寸的必要性及好处上篇文章回顾:HBase实战:记一次Safepoint导致长时间STW的踩坑之旅精简Docker镜像的好处很多,不仅可以节省存储空间和带宽,还能减少安全隐患。优化镜像大小的手段多种多样,因服务所使用的基础开发语言不同而有差异。本文将介绍精简Docker镜像的几种通用方法。精简Docker镜像大小的必要性Docker镜像由很多镜像层(Layers)组成(最多127层),镜像层依赖于一系列的底层技术,比如文件系统(filesystems)、写时复制(copy-on-write)、联合挂载(union
2019年7月4日
其他
HBase实战:记一次Safepoint导致长时间STW的踩坑之旅
Crash,而且是到JDK9才修复的,具体参考JDK-8161147。鉴于我们使用的是OpenJDK8,所以只能放弃该方案。>>>>修改循环index为long型上面的Safepoint
2019年7月2日
其他
深入浅出计算机视觉(一)
0;对于不确定是前景还是背景的像素,α是介于0到1之间的浮点数。优秀的抠图算法是有能力将前景中非常细小的毛发细节都能提取出的好算法,这点是传统图像分割技术做不到的。现在深度学习也慢慢引入了Image
2019年6月27日
其他
HBase Replication详解
Endpoint,当出现需要恢复某个时间点t1的场景时,可以首先找到冷备中距离t1最近的一个的Snapshot进行恢复,然后将消息队列中的数据来回放到t1时间点,从而做到Point-in-time
2019年6月25日
其他
一文读懂HBase多租户
server,将新的权限put或者delete到acl表中;(3)AccessController在region的postPut和postDelete的hook中,如果操作的是acl
2019年6月6日
其他
HDFS Decommission问题分析
}}//性能问题//我们发现使用ShuffleAddSet时候,开始下线8台dn时会卡住,主要是卡在DecommissionManager$Monitor,每次要检查此dn上全部的blocks是否
2019年5月30日
其他
招募令|寻找优秀工程师
年年岁岁写代码,岁岁年年人更多。新一年小米云平台又要招聘了,快来看看有没有你心仪的岗位。分布式数据库开发工程师团队介绍:小米云平台-HBase生态组负责开发和维护多个底层的分布式存储系统,包括HBase、OpenTSDB、自研SDS(结构化数据存储)等,目标是为公司各业务线及生态链公司提供安全、稳定、可靠、经济的存储服务。团队技术氛围浓厚,累计培养了9位HBase
2019年5月28日
其他
记一次Open-Falcon-Graph频繁OOM问题排查
本文介绍了Falcon-Graph模块频繁OOM的排查经过及解决办法。上篇文章回顾:浅谈Dcoker的安全性支持(下篇)业务背景Falcon-Graph负责将监控数据持久化,供用户后期查询、汇总等功能。4月初,Open-Falcon业务量逐渐上升,由0.29billion
2019年5月28日
其他
浅谈Docker的安全性支持(下篇)
gid=1000lynzabo@ubuntu:~$可以看到容器使用的我们设置的用户和组来运行。有时候,我们更希望容器里面是以root用户来运行,但是并不需要具有宿主机上root权限,可以使用User
2019年5月14日
其他
浅谈Docker的安全性支持(上篇)
镜像的时候,镜像仓库再验证完用户身份后,会先返回一个manifest.json文件,其中包含了镜像名称、tag、所有layer层SHA256值,还有镜像的签名信息,然后docker
2019年5月7日
其他
从HBase offheap到Netty的内存管理
本文主要介绍了Netty的内存管理和性能。往期回顾:如何解决Redis中的key过期问题HBase的offheap现状HBase作为一款流行的分布式NoSQL数据库,被各个公司大量应用,其中有很多业务场景,例如信息流和广告业务,对访问的吞吐和延迟要求都非常高。HBase2.0为了尽最大可能避免Java
2019年4月30日
其他
如何解决Redis中的key过期问题
2.4中,每次运行时都会检查每个数据库,在Redis3.2中,可以检查的数据库数量达到了最大值。版本3.2还引入了检查数据库的快速选项。“Slow”在计时器上运行,“fast”
2019年4月25日
其他
浅谈动态追踪技术
本文主要介绍了动态追踪技术,并举例说明动态追踪技术的应用。往期回顾:论萌新开发与大佬开发的不同?身为一个SRE,工作中经常会遇到各种奇奇怪怪的服务异常问题。这些问题在staging(测试环境)没有发现,但放到真实的生产环境就会碰到,最关键的是难以复现,某些问题可能是几个月才会复现。初次碰到可能会手忙脚乱,暴力的解决手段是将机器拉下线,然后开始专家会诊,但是脱离了线上真实环境,没有线上真实流量,某些问题可能不好复现了,这种方式还不是特别适合。如何找到病因大部分情况,其实我们已经可以通过top,pidstat等命令定位到具体是哪一个服务出的问题。当然重启服务可以解决60%以上的服务异常问题,但是重启后会丢失现场。重启一时爽,一直重启就不爽了。还是需要定位到具体的问题。我还是希望知道底病根在哪,最好直接告诉我哪个具体函数,哪条语句导致的问题或者bug。最差也得知道是大致什么节点的什么类型故障很多人可能会想到GDB。虽然这些工具很伟大,但是这应该不适合我们sre在已经服务已经发病的情况下使用,因为线上的服务不能被中止。GDB在调试过程中设置断点会发出SIGSTOP信号,这会让被调试进程进入T
2019年4月18日
其他
论萌新开发与大佬开发的不同?
本文主要为大家介绍初级开发与高级开发人员的不同之处。往期回顾:MacPorts打包过程简介每个开发大佬都有身为萌新的青葱岁月在还是开发萌新时,他们就坚定信念,不断磨练编码技术,最终成长为开发大佬。对于他们来讲,不断学习新的编码知识和接触更复杂的问题就是他们的日常。通过不断的学习,一位开发萌新逐渐成长为开发老油条,他们可以独立自主的完成一个项目而不需要他人的指导和监督。对于开发老油条来说,他们正处于一个十分尴尬的时期。虽然他们比起萌新时期知道的东西要多得多,但是他们的知识储备还不足以称得上是开发大佬。但是这也是人之常情,人都需要成长,开发老油条迟早也会蜕变成开发大佬。等到那个时候,他们再回顾过去,就会知道自己从紧张的萌新开发一路走来成长了和学到了多少。下面就给大家整理了那些萌新开发与大佬开发的不同之处。开发大佬拥有项目的大局观当开发大佬们接手一个项目时,他们通常会试图弄清楚整个应用程序是如何从前端到后端工作,甚至包括一些服务器的相关原理。与之相反,除非在其中出现明显的BUG,萌新开发们通常不会考虑这些事情,也就是缺乏整个项目的大局观。这是因为,开发大佬们很有经验,他们知道所写的代码不仅仅会影响他们编写的文件,还可能影响应用程序其他阶段的工作,因此他们会在理解整个应用程序的基础上对自己的代码进行完善。与之相对,萌新开发员往往是在参与过几个不同的项目之后,才开始培养出这种整体思维。开发大佬解决问题更有效率没有什么比开发大佬只用一行代码便可以修复你的BUG更令人沮丧了。一个需要萌新开发员处理几天的BUG,大佬们往往瞄一眼就能迅速的用一行代码解决问题,这对于大佬们来说简直小菜一碟,他们见过更为复杂难修复的BUG。对于缺乏经验的开发萌新们来说,大多数BUG都是陌生的。尤其是如果你一开始就不确定解决问题的方向,一个小小的逻辑错误就会使你钻入牛角尖而不自知,从而提升了解决问题的难度。遇见BUG时,知道解决问题的正确方向可以大大缩短解决问题的时间。更好地调试代码的唯一方法是继续调试。开发大佬对整个堆栈了解的更加深入开发大佬们经常性的会钻入数据库并对整个架构进行修改,而开发萌新们却可能从未听说过架构或触及过数据库。正是因为大佬们有丰富的经验作为支撑,才使他们可以在数据库中来去自如。这也和上文所提到的开发大佬的大局观有关系。因为开发大佬们有大局观,所以他们通常会花时间浏览项目的各个部分以了解项目是如何建立的。这使得他们能够修复与代码无关的问题,像是服务器问题,开发大佬们就可以查看并修复它。开发大佬们还可以处理产品经理所提出的任何用户场景。基于对整个工作流程的透彻理解,开发大佬们可以熟练的将一个大而难的用户场景分解成一个个小而易的用户场景。同时,他们非常了解软件架构,清楚如何从头开始构建所需的功能。开发大佬们对于测试也是绝不马虎,他们对于测试驱动开发和行为驱动开发驾轻就熟,对DevOps之类的东西更是信手拈来,更不论他们已经见证和参与了多个项目经历了从构思到生产的整个开发过程。对于萌新开发员来说,不像大佬们那样掌握全局有情可原。因为专注于代码编写,这就是开发人员的本职工作。萌新们应该做到努力提升代码水平,而后再慢慢接触应用程序其他的部分。开发大佬知道在文档中寻找什么我们要知道,并非所有文档都书写流畅且易于理解。在浏览Stack
2019年4月11日
其他
使用 python 实现简单的共享锁和排他锁
排他锁(X):允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和排他写锁。另外,为了允许行锁和表锁共存,实现多粒度锁机制,InnoDB
2019年3月28日
其他
记一次容量提升5倍的HttpDns业务Cache调优
本文主要介绍了HttpDns业务Cache调优的相关问题及解决办法。上篇文章回顾:小米自动化运维平台演进设计思路这是最近做的一次业务优化,以一个小方案的形式分享一下优化过程。业务简介公司内部叫Resolver服务,其本质是一个httpdns系统,以http形式提供域名解析的服务,用户在连接业务时,先通过Resolver服务获取ip地址列表,然后通过拿到的ip列表连接到对应服务器上,解决了域名劫持和连接降级的问题。Resolver服务采用nginx+后端的系统结构,后端是开发同学用c++自写,前后端通过fastcgi协议进行通信,平时单机的QPS在7k左右,高峰期达到1万以上。遇到问题业务到高峰期QPS达到1万以上,服务出现大量502特别是鲁谷机房,进而拒绝服务,业务瞬间基本属于不可用的状态,不可用瞬间用户自动降级走DNS解析,尝试通过nginx的limit来限制解决,效果不好,大量用户被切掉,存量用户还是有很多的502,所以只有扩容和想办法优化两条路可走。分析问题Nginx本身是一种非堵塞的模型,1万级别的QPS对于nginx本身的压力很小,分析后发现request_time大的原因在于upstream_response_time大,那就是说后端c++的慢了,所以怀疑是后端到达了业务瓶颈,与开发同学分析日志后确定了这个结论,开发同学第一时间提出了加机器的要求。作为运维,是需要继续分析是否可以通过运维手段做一些优化,此服务的本质是用户端发起一个http请求,然后服务返回一个ip地址列表,这个列表会根据不同的url参数有所变化,但同一个参数在1分钟内变化的可能性基本没有,进而与开发确认业务逻辑,在业务处理上没有依赖ua、reffer、cookie等额外参数判断,开发的同学表示这个解决缓存1分钟时绝对没有问题的。解决问题分析到现在有个方向性的模糊思路了,那就是是否可以用nginx
2019年3月26日
其他
小米自动化运维平台演进设计思路
本文从小米运维平台功能、运维平台架构设计、如何实现运维平台标准化流程、运维平台实践等方面介绍了小米自动化平台的演进过程。现如今,随着云计算和分布式的落地和发展,越来越多的服务器都转到云上,微服务架构的落地也让现在的
2019年3月21日
其他
时间服务器-NTP
本文主要从NTP通信协议、NTP服务器的阶层概念、NTP服务器的安装与设定、Client的安装和配置、NTP的启动与观察等几个方面详细介绍了NTP服务器。上篇文章回顾:初探Firewalld计算机内部所记录的的时钟都记载于BIOS(CMOS)内的,但如果计算机上面的CMOS电池没电了,或者是某些特殊因素导致BIOS数据被清除,此时计算机的时间就会不准。在实际生活中,我们可以通过电视台,广播台,电话来调整我们的手表,那么在网络上,就需要NTP这个服务器让我们的主机随时保持正确的时间信息。全球有多少时区?GMT在那个时区?全球有24个时区,因为绕地球一周360度,这360度分为24个时区,当然一个时区就是15度了,又由于是以格林尼治时间(Greenwich
2019年1月15日
其他
初探Firewalld
本文主要从概念及架构、核心组成、常用命令等几个方面详细介绍了Firewalld,并附加介绍了iptables四表五链和netfilter的知识。上篇文章回顾:Linux日志服务初识一简介1、Firewalld提供更加智能化的防火墙管理规则,优化策略配置方案,支持网络“zones(域)”,并为网络及其关联的链接、接口或源分配信任级别,不同信任级别默认开放服务不同。2、支持IPV4,IPV6,以太网桥以及IPSET防火墙设置。3、运行时态与永久配置分离,运行时态可手动更改,重置后回到永久配置(文件配置)4、优化iptables添加规则,还支持图形界面(本文不介绍),除了iptables,还有ip6tables和ebtables规则。二概念及架构空间架构分为上下两层。1、上层:firewalld
2019年1月10日
其他
Linux日志服务初识
是一个可以进行日志转发和收集的工具,利用它可以拥有一台日志收集服务器,从而可以减少客户端日志的压力,对于相关日志的统一也是非常有用的,同时还有相应的前端展示工具来进行日志的查看统计。rsyslog
2019年1月9日
其他
阵列卡缓存电池充放电问题详解
本文主要详细解释了与阵列卡缓存电池充放电相关的各方面的问题。上篇文章回顾:由ORM谈Python元类磁盘阵列是服务器上历史悠久的一项技术,它能够通过不同的阵列模式合理利用空间和性能配比出性价比极高的磁盘阵列,被大部分服务器OEM厂商所广泛采用。其中以LSI公司的MegaRAID
2018年12月29日
其他
由ORM谈Python元类
父类的元组,包含属性的字典)什么是元类?上面提到了类是一种特殊的对象,对象就必须有类来创建,而元类,就是用来创建这种类的。简单来说,用于创建类的类,就是元类。
2018年12月27日
其他
浅谈 TLS 1.3
配置及其安全性。协议僵化问题当一个互联网协议长时间不发生变化时,基于该协议开发的设备就可能无视其预留的变通手段而对其特性作出超出标准的假设,这就是协议僵化现象。在
2018年12月25日