Skip to main content

5 posts tagged with "解决方案"

View All Tags

· 10 min read

“极简主义以简单到极致为追求,是一种设计风格,感官上简约整洁,整体品味和思想上更为优雅。”

「 如无必要,勿增实体 」是极简主义者推崇的生活信条。摒弃多余的东西,简化繁琐的步骤,排除没必要的干扰,认清自己到底想要什么,最大限度把环境变得简单。 只有这样,我们才能在混乱而变化的环境下,拥有更多的时间和精力,找到值得珍视的东西,达到更加自由的生活状态,彻底实现「不为外物所累」。

起源篇「 写入Serverless 」

Nasu Elasticsearch Serverless 起源于多年前的一个想法,那时我负责阿里云ES的内核研发Leader,这个团队每年都有一个硬性KPI "引擎优化"。比如索引写入性能提升100%,存储成本降低100% ... 小伙伴们每天的工作就是研究引擎源码,看issue,分析行业的paper,尝试用一些前沿的算法改造引擎,尽管有一定的产出,但也伴随着极大的不确定性。闲暇的某天 我突然冒出一个想法,既然是云计算,那么多机器闲置着也是浪费,为什么不能在用户的集群旁边造个水池:将计算引过来,把结果返回去就好了,这样一来我只需要买些低配的机器,不仅计算大幅提升,成本还大幅降低,两年的KPI任务搞定 🧐 于是诞生了第一代「写入Serverless」即 AliyunES Indexing Service

如上图,IndexingService的核心任务便是 帮你建索引

  1. 用户侧的Bulk写入全部被转发到托管计算集群。
  2. 托管集群构建好完整的索引,通过物理复制写回到用户集群。
  3. 整个过程对用户是透明的,完全无感知是被托管了,只能感受速度上的极大提升。

达到的效果便是2核8GB的小集群可以达到20万写入QPS,提升了准10倍。这项技术上线后的成果也是不错的,很多头部客户如小红书、米哈游、康众、蜻蜓、罗辑思维、货达纷纷用了起来,反馈也很不错。

但是随着用户的使用深入,我们发现写入Serverless只能满足部分场景,由于用户集群规格降低了 导致查询速度太慢,于是又有大量客户退回到原始的高配置集群。 如何解决查询的托管成了接下来需要思考的重点。

进化篇「 ZSearch 」

接下来的一段时间 我担任阿里巴巴及蚂蚁集团Elasticsearch开源委员会的第一任PMC,这个组织汇聚所有阿里的ES爱好者,以中立的视角和态度将研发成果反哺到所有事业部。蚂蚁集团由于当时没有独立的搜索事业部,技术呈烟囱式发展,各个业务部门是有什么用什么,solr、海狗、Elasticsearch、HA3 百花齐放,由于没有统一的技术栈,从方案讨论、项目实施,稳定性保障、后期维护给每个团队都带来了极高的成本, 于是「 统一搜索中台 」呼之欲出。

结合之前的经验,平台应该怎么设计,“用户怎么用才能达到最爽的状态” 我带着这些思考开始了新一代的搜索平台设计。

思考

我们真的需要给用户一个集群吗?

经过重新设计的产品被命名为 ZSearch ,这是一款面向数据的搜索服务,而非集群的托管平台,设计目标便是极简化用户的体验,只暴露一个API网关,百分百兼容Elasticsearch接口,屏蔽底层所有的一切

上图便是ZSearch的核心架构,API Gateway 作为统一接口层,负责所有用户层的接口调用。Meta 作为元数据中心,用于对接ES的集群注册和用户集群的分配。底层的 Elasticsearch 真实集群被规划为海量、计算、通用三种类型,用于承载不同业务的真实载体。

ZSearch的上线,将业务从运维中解放出来,也从架构层面统一了基础设施。推出后反响强烈,从支付宝C端、财富、借呗、花呗等20+核心链路到数百个长尾应用,一路成长为如今的蚂蚁集团搜索中台,同时金融场景下对稳定性的变态要求,也反向推进了ZSearch的技术打磨,衍生出XDCR、PackingPool等核心技术。

由于使用极为简单,在未经任何推广的情况下 ZSearch的业务也延伸到到阿里集团的各个事业部,例如菜鸟、天猫、淘宝、阿里云、高德等40多个BU。从天猫精灵、语雀、机器学习PAI 到菜鸟海关、芝麻征信、优酷短视频...处处都能看到ZSearch的影子。

重生篇「 Nasu Elasticsearch Serverless 」

随着ZSearch业务的逐步稳定,一个新的想法时常萦绕在心头,能不能让他走出去,服务全国的广大用户呢。

如今,在疫情导致的经济持续下滑的严峻背景下,如何为广大企业推出一个款使用简单、经济实惠、成熟稳定的搜索解决方案,成为我下个阶段的主旋律。说干就干,2022年我从大厂走了出来,为这个想法付诸自己的行动。

成立纳速云科技有限公司,经过数月的闭关,新一代的面向全国用户的在线搜索产品诞生了 - Nasu Elasticsearch Serverless (NES)

为追求更极致的用户体验,NES在设计之初相比ZSearch提出了更高的要求:

  1. 无需预设业务场景,做到真正的自助接入。
  2. 面向跨云设计,实现更高要求的容灾体系。
  3. 从租户隔离提升到计算隔离,实现更高的可靠性。
  4. 建立对用户透明的集群迁移机制,实现全自动化的服务自治。

如上图,Nasu Elasticsearch Serverless 从以前的 sigma 底座迁移到云原生的Kubernates,利用其跨云特性打造更为标准化的容灾体系;利用容器化、存储架构分离、高速网络、智能熔断等技术构建更为灵活的多租户集群体系;建设全局监控、主动报警、事件回溯提升整体服务的可观测性。 通过各个核心能力的提升,将之前的搜索中台提升到商业级的可信服务。

目前我们没有销售,但上线仅数月 Nasu Elasticsearch Serverless 已接入上百个应用,每天接收上万个设备的数据上报,许多用户都是在没任何交流的情况下直接开通企业版 😅。

信任是可贵的,客户将后背无条件的交付给我们,作为后端的我们 目标也只有一个:为你打造一个最为可靠的API。接下来 纳速云的重点依然是投入在稳定性建设上,将可靠性做到业界最强是我们当前的唯一使命。

· 5 min read
擎天

索引与分片

Elasticsearch中的每个索引都被分成一个或多个分片,每个分片可以跨多个节点复制,以防止硬件故障。

概念
  • 索引(INDEX):可以理解为一个文档集合的描述文件
    • setting 定义了该索引有多少个分片和副本。
    • mapping 定义了索引基础的字段结构。
    • 索引的描述元数据(IndexMetaData)通常物理存储占比很小,以内存的形态记录在集群状态中。
  • 分片(SHARD): 真实的数据写入与查询载体。
    • 写入时先路由到主分片构建成真实的lucene索引,再将操作分发给副本构建成对等的索引。
    • 查询时从lucene检索出数据并交由上层映射成数据返回给用户。
    • 分片的存储会随着数据的增加而增大,因此面向不同场景设置合理的分片数目是我们需要关心的。

选择合适的分片数和副本数

1. 通用场景

在纳速云平台,如果您的数据量在GB级(小于1TB),可以参考以下通用方案

  1. 单分片不超过 30GB
  2. 单分片的最大文档数量不超过20亿
  3. 至少设置1个副本以保证高可用性。

2. 垂搜场景

垂直搜索是针对某一行业的专业搜索,例如电商搜索、音乐搜索、站内搜索、问答搜索,该场景往往对并发量及查询延迟有较高的要求。我们可在通用方案的基础上参考以下建议:

  1. 分片数:竟可能的降低分片数。
  2. 副本数:索引的查询响应及吞吐量取决于分片数,设置在1~8之间,逐步调整以满足业务效果为准。
注意

词频是ES计算相关性的重要因素,当大量的分片上只维护了很少的数据时,词频的统计信息过于分散将导致最终的文档相关性较差。

3. 大规模以及日益增长的时序场景

如有时序特性的日志场景、指标监控场景,该场景的特性为单日写入量大,数据存储具备周期性,且有可能存储较长的时间。

  1. 索引按天创建,并通过生命周期管理控制数据增长。
  2. 分片数:索引的写入速率及吞吐量取决于分片数,设置在1~8之间,逐步调整以满足业务效果为准。
  3. 副本数:设置为1。
tip

如能承受丢失数据的风险,副本数可设置为0

4. 海量数据统计分析场景

如网站访问统计、销售数据分析、大屏展示等。该场景注重计算,数据呈明显的冷热特质。近期数据分析频率高,需要较快的实时性展示,历史数据使用频率低,可承受较长的等待或以异步报告的形式呈现给用户。

  1. 索引按天创建,并通过生命周期管理控制数据增长。
  2. 分片数:竟可能的降低分片数。
  3. 副本数:设置为1。

结语

在分片分配上并没有一刀切的答案,本文仅供参考价值,实际生产中大家还是要多测试,以上线效果为准。

· 4 min read
擎天

概览

在本实战教程中,演示如何使用 Filebeat + Nasu Elasticsearch Serverless + Kibana 搭建基础的 Nginx 日志分析框架。 通过该教程你将掌握以下技能:

  1. 利用 FileBeat(轻量级的日志采集工具)收集日志数据。
  2. 利用 Nasu Dashboard Pipeline Tools 进行数据加工。
  3. 利用 Kibana 搭建仪表板构造可视化展示。

准备

前往 纳速云控制台 创建 Elasticsearch Serverless 应用, 5秒内可为你部署好 ES 和 KIBANA ,省去复杂的自建流程。

数据采集篇

登录我们的Web服务器,查看nginx产生的日志,默认的nginx日志格式,文件内容通常长这样:

IP地址 - - [22/Oct/2022:15:09:08 +0800] "GET / HTTP/1.1" 200 32943 "http:/xxx.xxx.xxx.xxx/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11" "-"
IP地址 - - [22/Oct/2022:15:09:33 +0800] "GET /robots.txt HTTP/1.1" 302 145 "-" "Go-http-client/1.1" "-"
IP地址 - - [22/Oct/2022:15:09:42 +0800] "GET /robots.txt HTTP/1.1" 404 1540 "http://xxx.xxx.xxx.xxx/robots.txt" "Go-http-client/1.1" "-"
IP地址 - - [22/Oct/2022:15:09:44 +0800] "GET /sitemap.xml HTTP/1.1" 302 145 "-" "Go-http-client/1.1" "-"
IP地址 - - [22/Oct/2022:15:26:32 +0800] "GET / HTTP/1.1" 302 145 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36" "-"

首先将该web服务器的IP地址添加至应用白名单内,确认网络层打通。

# 查看外网IP
curl ip.gs

下载 filebeat

curl -L -O https://ebase.oss-cn-shanghai.aliyuncs.com/downloads/v6.8.23/filebeat_oss/filebeat-oss-6.8.23-linux-x86_64.tar.gz
tar -zxvf filebeat-oss-6.8.23-linux-x86_64.tar.gz
cd filebeat-6.8.23-linux-x86_64

配置 filebeat.yaml

# 配置 filebeat.yaml 连接到纳速云端 Elasticsearch
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access*.log
output.elasticsearch:
hosts: ["router.nasuyun.com:9200"]
protocol: "https"
username: "youre_app_username"
password: "youre_app_password"

启动 filebeat

./filebeat

如无意外,filebeat 将日志采集至云上ES,进入控制台通过数据集查看 filebeat* 类的索引

此时,filebeat 将采集到的日志内容全部保存在 message 字段中,仅适用于日志检索场景, 为了更好的分析,我们可以使用云端数据加工将内容进行转换,例如提取IP字段分析访问来源,提取流量字段等。

数据处理篇

前往控制台 - 数据加工

「数据加工」具备样本数据检索、模拟调试以及大量的预制模板,方便您快速构调试数据处理脚本。

如果日志为nginx标准格式,可采用预制的nginx模板, 这里保存名为 web 的pipeline, 并在filebeat中指定该 pipeline

output.elasticsearch:
hosts: ["router.nasuyun.com:9200"]
protocol: "https"
username: "youre_app_username"
password: "youre_app_password"
pipeline: "web"

重启 filebeat , filebeat 新采集的数据将通过 pipeline 处理为新的索引数据格式。

数据展示篇

接下来,我们在云端 Kibana 进行网站分析的具体操作。我们将设置以下常见的可视化仪表板,帮助我们了解网站的运行情况。

  1. 从地理地图查看人们从哪里访问
  2. 网站点击计数器
  3. 前 5 个 HTTP 状态分布
  4. 访问浏览器类型(User-Agent)
  5. 网站返回字节

在可视化中添加坐标地图,展示访问来源

采用饼图分析 HTTP_STATUS_CODE 占比

柱状图分析 客户端 User-Agent

折线图分析 响应流量

将可视化组件组成仪表板

这是一个基础的仪表板,但它足以让您亲自动手并构建一些很棒的可视化面板。