腾讯健康码16亿亮码背后的Elasticsearch系统调优实践【>>戳文章免费体验Elasticsearch服务30天】
【活动】
Elasticsearch Service免费体验馆>>
Elasticsearch Service新用户特惠狂欢低至4折>>
Elasticsearch Service企业上云特惠>>

【腾讯云Elasticsearch Service】高可用,可伸缩,云端全托管。集成X-Pack高级特性,适用日志分析/企业搜索/BI分析等场景
Elasticsearch(以下简称ES)是近年来炙手可热的开源分布式搜索分析引擎,通过简单部署,就可以轻松实现日志实时分析、全文检索、结构化数据分析等多重诉求,并大幅降低挖掘数据价值的成本。本文即将介绍腾讯云 Elasticsearch Service(以下简称腾讯云ES)在“腾讯防疫健康码”应用落地过程中,遇到的挑战、优化思路、优化成果,希望能为开发者们提供参考。
2月9日,深圳成为全国首个推出“健康码”的城市。随后,防疫健康信息码在全国遍地开花:目前,腾讯防疫健康码已落地北京、广东、四川、云南、上海等20个省级行政区,覆盖300多个市县。累计亮码超过16亿人次,覆盖超过9亿人口,累计访问量破60亿。
健康码的架构师和开发者,如何快速应对万亿级数据访问挑战?如何高效地支持系统的快速迭代开发?,本文将为大家一一揭晓。
选型Elasticsearch及技术考量
防疫健康码涉及的应用场景包括社区互扫,卡口通行,居家隔离等。因此,在技术选型时,需要考虑:
- 支持常见的如通行时间,车辆信息等这样的结构化信息查询。
- 支持存储街道/社区/小区名这样的长文本信息。
- 支持快速调整增删字段,以应对疫情防控需要的调整。
- 支持关键字的搜索、海量数据的聚合分析以及地理位置区域计算。
在数据存储选型过程中,比对一些主流产品:
传统的关系数据库MySQL 与 腾讯云ES:传统的关系数据库MySQL,在事务型应用及多业务多表关联查询方面表现出色,但是面对复杂繁多的数据类型,特别是文本关键字搜索能力时显得捉襟见肘;腾讯云ES基于lucene查询引擎构建,通过倒排索引结构,可以通过搜索关键字快速找到所需记录。即使数据规模高达万亿级,查询响应时间依然在毫秒级。相比于使用传统关系型数据库的like命令进行匹配查找,搜索查询效率提升近百倍。

MongoDB与腾讯云ES:比较热门的NoSQL类产品MongoDB,虽和ES一样,能支持多样化的数据类型,且可以根据业务需要随时增删字段且不影响业务正常的查询写入,但是缺少文本关键字的检索能力。相比于ES来说,它还缺少海量数据的分析聚合能力及图形化的UI组件;腾讯云ES通过doc_value列存结构及聚合框架,支持包括按关键字分桶、时间分桶、距离分桶、求平均值、求和、求地理位置边界等,多达60种聚合算子。

腾讯云ES的图形化UI组件:配合kibana组件的UI能力,腾讯云ES可以用图形化的方式分析海量数据。同时,通过配置图形报表等形式,简化运营分析需求的开发复杂度。这种ES的数据分析能力,最终能使防疫相关的部门及人员,对疫情防控情况了如指掌。
腾讯云ES简单易用:在海量数据的存储方面,有很多大数据产品,如hive数仓、Hbase 等,且具备一定的数据分析能力,但是相比于ES,它们的整个技术栈及架构比较重,需要维护的开源组件繁多,通常需要一支专门的运维团队进行集群日常维护。对于开发人员来说,开发方法及接口较为复杂,对于初次接触大数据平台的开发者来说需要学习相当多的基础知识后才能开始上手。
腾讯云ES使用Restful风格的API,在上手调试方面要简单很多,且提供了10+个的官方SDK及20+的社区SDK,基本覆盖了市面上所有的主流开发语言。社区生态十分活跃,文档齐全,生态组件丰富。通过SDK及生态组件的整合,减少了大量的编码工作,极大的加快了开发的流程,可以高效的应对紧急业务开发上线的需求。
业务数据极速增长,如何快速扩容
1个月左右的时间,腾讯防疫健康码就覆盖了9亿用户,累计亮码16亿次。如何应对业务急速的数据查询增长,是对数据存储系统的极大挑战。
分布式架构:腾讯云ES采用分布式架构,索引数据通过分区算法,分割为多个数据分片(shard),平均的分布在集群的多个节点上。通过节点和数据分片的能力,可以线性的扩展索引数据写入查询的吞吐,这个是传统的单实例数据库所不具备的。
腾讯云ES集群配置灵活、快速、简单:开发之初,很难预测健康码系统内部的数据的最终量级,因此希望选用的技术可以灵活增加存储空间。
在用户自建的集群上,如果需要节点配置升级,通常需要采购插拔新的存储设备,或者将新的节点加入到集群中,等待数据从老的节点上进行迁移。这个过程通常会持续小时到天之久,通常由集群的数据规模所决定。
而腾讯云ES构建于基础IaaS层之上,使用CVM及CBS云硬盘,具有一定的存储计算分离能力。存储空间的动态扩展,对于ES节点来说完全是透明的,无感知的。对于腾讯防疫健康码这样量级的数据规模,一次存储空间的扩展操作从过去的小时或天的级别降低到了秒级,且所有的集群变更操作都可以在腾讯云控制台上进行,极大的降低了集群配置变更的运维复杂度,把后台业务人员从繁重的运维工作中解脱出来。
腾讯云ES服务高可用技术架构
疫情就是军情,任何环节都不容有失。这需要存储系统7*24小时不间断提供稳定服务。

腾讯云ES服务支持多可用区容灾:当一个可用区因为机房电力、网络等故障的原因导致不可用时,另外一个可用区的节点仍然能稳定、不间断的提供服务,保障客户业务的可靠性。
这也是基于ES的分布式原理,当用户选择使用支持多可用区容灾的腾讯云ES集群后,系统会为用户在多个可用区部署节点,且节点会平均部署到各个可用区机房中。这是因为索引数据可以进行分片,且设置副本。根据ES的分片分配原理,所有的分片及副本会平均分布在所有的节点之上。这就保证了,如果设置的副本数和可用区数目一致,当有一个节点乃至一个可用区机房不可用,剩余节点中的分片仍是一份完整的数据,且主从分片可以自动切换,集群仍然可以持续提供写入查询服务。
保障海量查询时的服务可用性:防疫工作机构及人员需要每天及时掌握疫情的防控情况,不定时地对数据进行汇总分析查询。然而,在全国海量的防疫数据场景下,集群很容易由于不严谨的聚合分析语句导致大量的数据在节点内存中进行分桶,排序等计算,从而使节点发生OOM的问题,造成节点乃至整个集群的雪崩。
为了防止此类情况发生导致的集群不可用,腾讯云ES在存储内核上开发了基于实际内存的熔断限流机制。当集群发现部分节点的JVM使用率超过设定的熔断阀值,会进行服务降级,梯度的拦截部分查询的请求,直至JVM使用率超过95%会最终熔断,阻止所有的查询请求。这个熔断的请求拦截机制会覆盖Rest层及Transport层,通过将熔断提前至Rest层,可以尽早的将请求进行拦截,降低集群在熔断状态下的查询压力。通过这些措施,保证了健康码小程序海量查询下的服务可用性及查询性能。
数据安全,万无一失
担心数据泄露?不存在的。健康码系统使用了腾讯云ES在安全方面的最高级别优化,包括支持配置内外网访问黑白名单,支持集群权限认证功能。,极大地提高了数据安全性。并且,不同用户集群之间通过VPC进行网络隔离,杜绝了潜在的黑客入侵的风险。

腾讯云ES支持基于COS的增量数据备份:用户可以通过ES原生的索引生命周期管理功能,定时将增量的备份底层数据文件放到到腾讯云对象存储COS中。需要时,可以随时将数据备份恢复至任意的集群,保证了数据的安全可靠性。
结语
腾讯防疫健康码是人员通行的重要凭证,也是疫情防控查验的可靠依据。作为服务用户最多的健康码,它的普及与腾讯云ES在数据搜索查询、高并发、弹性扩展以及安全领域的技术能力密切相关。
这还不够,未来,腾讯云ES仍将不断迭代,针对用户需求,不断打磨技术和产品,持续输出稳定可靠的Elasticsearch服务。

关注“腾讯云大数据”公众号,技术交流、最新活动、服务专享一站Get~
腾讯健康码16亿亮码背后的Elasticsearch系统调优实践【>>戳文章免费体验Elasticsearch服务30天】的更多相关文章
- Nginx源码安装及调优配置
导读 由于Nginx本身的一些优点,轻量,开源,易用,越来越多的公司使用nginx作为自己公司的web应用服务器,本文详细介绍nginx源码安装的同时并对nginx进行优化配置. Nginx编译前的优 ...
- Nginx源码安装及调优配置(转)
导读 由于Nginx本身的一些优点,轻量,开源,易用,越来越多的公司使用nginx作为自己公司的web应用服务器,本文详细介绍nginx源码安装的同时并对nginx进行优化配置. Nginx编译前 ...
- ios源码-ios游戏源码-ios源码下载
游戏源码 一款休闲类的音乐小游戏源码 该源码实现了一款休闲类的音乐小游戏源码,该游戏的源码很简单,而且游戏的玩法也很容易学会,只要我们点击视图中的grid,就可以 人气:2943运行环境:/Xco ...
- 【转】编译Android系统源码和内核源码
原文网址:http://blog.csdn.net/jiangwei0910410003/article/details/37988637 好长时间没有写blog了,之所以没有写,主要还是工作上的事, ...
- 【iOS 录音转码MP3及转码BASE64上传】
iOS 录音转码MP3及转码BASE64上传 一,开始录音 NSLog(@"开始录音"); [self startRecord]; - (void)startRecord { // ...
- Spring源码-循环依赖源码解读
Spring源码-循环依赖源码解读 笔者最近无论是看书还是从网上找资料,都没发现对Spring源码是怎么解决循环依赖这一问题的详解,大家都是解释了Spring解决循环依赖的想法(有的解释也不准确,在& ...
- zabbix 源码分析 another/first network error wait for 15s seconds 出现原因及调优建议
在监控设备的时候,在server端的日志中有时候会见到类似another network error, wait for 15s seconds的异常,今天我们看下这个问题的出现原因和解决方案: 问题 ...
- 常用校验码(奇偶校验码、海明校验码、CRC校验码)
一.奇偶校验码 二.海明校验码 三.CRC校验码 计算机系统运行时,各个部之间要进行数据交换.交换的过程中,会有发生误码的可能(即0变成1或1变成0),由于计算机的储存是通过二进制代码来实现的的, ...
- FW 编译Android系统源码和内核源码
编译Android系统源码和内核源码 分类: Android2014-07-21 20:58 7287人阅读 评论(28) 收藏 举报 好长时间没有写blog了,之所以没有写,主要还是工作上的事,发现 ...
随机推荐
- HTML5大纲算法
什么是HTML大纲算法? 大纲算法允许用户代理(user agent)从一个web页面生成一个信息结构目录,让用户对页面有一个快速的概览.类似书籍.PDF.帮助文档等,都有一个清晰的目录结构,用户能方 ...
- jsp跳转不成功,服务器也不报错,登录页面点击登录没反应,代码如下,请韭菜园子的工友给予指导!
登录后.. 根本跳不到这个检查页面.. 这个登录成功页面也就无从谈起了!
- 超强工具集——GitHub 热点速览 Vol.47
作者:HelloGitHub-小鱼干 本周 GitHub 趋势榜精彩至极,先是 JetBrains 开源的图像渲染引擎 Skia 有了 Java 封装,一开源便获得 500+ star,再是支持开发者 ...
- 需要登录才能下载的文件可以用Folx下载吗
用苹果电脑的小伙伴有没有发现,有时候文件即时有下载链接也还是要先登录才能下载,那这样的文件用下载器Folx还能下载码?下面小编将在Mac系统平台上,通过一篇教程教大家利用Folx 5的密码管理来保存网 ...
- 移动自动化测试框架--openatx
之前学习并使用appium进行移动端测试,对于使用appium的一些体会与感受是否与我相似 1. appium启动服务和app程序非常慢 2. appium搭建环境较复杂 3. appium必须连接u ...
- docker中启动容器提示端口被占用
docker中启动容器提示端口被占用,但是 docker ps -a 查不到信息 1.查询端口被占用的id netstat -ntpl |grep 3306 2.杀掉该id kill -9 如果kil ...
- maven打包时报No compiler is provided in this environment处理
系统:macOS 开发工具:Idea 问题描述:在idea中执行mvn clean install时报No compiler is provided in this environment. Perh ...
- NOIP2012 解题报告
TG Day1 T3 开车旅行 1. 预处理出从每座城市两人分别会到达的两座城市. 用 set 可以轻松实现. 2. 用倍增优化 DP 令 \(f_{i,j,k}\) 表示从城市 \(j\) 出发,行 ...
- C++高级程序员进阶之路
一.自学成为高级程序员推荐看的书: 1.c语言基础 <c primer Plus>.<c和指针>.<C专家编程> 2.C++语言基础 <C++ Primer& ...
- Windows操作系统深入解析原理
Windows运用程序编写插口(API)是对于Windows电脑操作系统大家族的客户方式系统软件程序编写插口.在32位版本号的Windows营销推广之前,31位版本号Windows电脑操作系统的程序编 ...