当前位置: 首页 > news >正文

干货 | 中小企业选型 Elasticsearch 避坑指南

1、线上常见问题

在我线下对接企业或线上交流的时候,经常会遇到各种业务场景不同的问题。

比如,常见问题归类如下:

  • 常见问题1:ES 适合场景及架构选型问题。

公司的核心业务是做企业员工健康管理,数据来自电子化后的员工体检报告以及各种健康数据采集设备,均存储在关系型数据库中。

先计划搞健康大数据分析,比如某企业内按部门,年龄段等对现有数据对比分析等。请问ES适合这个场景使用吗?如果适合,大致的架构是怎样的?

  • 常见问题2:节点偶然下线问题。

运输数据场景,批量写入导致 ES 宕机,集群偶然下线后导致无法上线,怎么解决?

  • 常见问题3:数据不一致问题。

在原有的集群规模的数据非常大的基础上,要删除接近2/3的数据。这时候,两个集群出现了数据不一致的情况,如何排查?

  • 常见问题4:集群重启时间超过20小时以上。

超过8小时的时候,没有引起重视,后面起不起来了,才发现是大问题。

实地环境排查及大量沟通发现,这些后期出现的问题或者“坑”,前期规避的话,成本会更低。

2、发现的潜在的“坑”

如下的坑,都是中小型企业现场环境排查、腾讯会议交流等发现的。

提前声明:对于一些大型企业、大厂不见得适用,毕竟场景不同,得具体问题具体分析。

(1)没有选择相对新的8.X版本,而是选择了 6.X版本。

原因:对接 API 方便。

(2)一台高配物理机(如:256GB内存,64核CPU)部署一个节点,资源利用率非常低。

(3)不熟悉 Linux,集群部署依然基于 Windows 服务器。

(4)数据同步工具自己开发“另起炉灶”,关键功能和性能尚不如 Logstash等成熟工具。

(5)主分片设定未考虑集群未来的可横向扩展性。

(6)批量写入不考虑集群性能上限,直至节点宕机脱离集群。

(7)不借助可视化工具:Kibana monitoring 监控集群,甚至 head 插件也没有用起来,出现问题不知道如何排查。

(8)命令行 DSL 仍然借助 Postman 等工具实现。

(9)Wildcard 模糊匹配召回结果符合预期,就大量不计后果的使用。

(10)查询细节参数不了解,能用起来就不关心其他。

3、Elasticsearch 常见认知“误区”

  • 认知误区1:Elasticsearch 是关系型数据库。

实际上,Elasticsearch是非关系型数据库,不支持严格的关系数据模型,而是采用文档型存储。

探究 | Elasticsearch 与传统数据库界限

  • 认知误区2:Elasticsearch 只适用于搜索。

Elasticsearch不仅适用于搜索,还支持聚合、分析等功能。

  • 认知误区3:Elasticsearch 无需预处理数据。

Elasticsearch需要预处理数据,并对数据结构有严格的要求,否则可能导致检索效果不佳。

  • 认知误区4:Elasticsearch 可以无限扩展。

(1)纵向扩展得看机器是否支持动态扩内存、CPU等资源,取决于硬件。

(2)横向扩展得看多节点集群规模能否适配性能指标,不见得是机器越多越好。

  • 认知误区5:Elasticsearch 安全性很高。

Elasticsearch 本身 7.1 之前不提供严格的安全性,需要通过相关的插件或配置来实现安全性。7.1(含)之后 xpack 基础功能免费,8.X 之后安全成为必选项!

  • 认知误区6:Elasticsearch 无需维护。

不止要维护,Elasticsearch 需要定期维护,包括数据备份(借助快照和恢复功能)、性能优化、安全更新等。

4、避坑方案探讨

4.1 Elasticsearch 版本及架构选型避坑

关于版本选型,Elastic 官方工程师如是说:“我完全理解稳定性是最重要的问题。在那种情况下,我们不应该选择最新版本的 Elasticsearch。作为参考,所有当前和过去的版本都可以在此页面上找到......作为一种模式,我建议比最新版本早发布 4 到 6 个月的版本”。——来自阮一鸣老师和ES官方的讨论帖。

关于版本选型,张超老师说“对稳定性要求比较高的生产,不要用最新的版本,谁不也知道有没有严重 bug,往前推一些,看看社区反馈没有大问题的版本,修正版本号用最高的”。

如下几点要谨慎考虑:

  • 考虑功能要求:选择支持我们需要的功能的版本,比如:xpack 功能7.1之后才免费,ilm功能 6.7 版本才推出。

  • 考虑兼容性:确保您选择的版本与正在使用的其他软件和工具兼容,比如:java、python客户端的选择。

  • 考虑数据量: Elasticsearch是否能够满足数据存储和处理的要求?

  • 考虑硬件资源:使用Elasticsearch需要充足的硬件资源,包括内存,硬盘,带宽等。

  • 考虑集群架构:要根据业务需求选择合适的集群架构,并考虑到集群的可用性和扩展性。

历史版本下载地址:

https://www.elastic.co/cn/downloads/past-releases#ela... 

  1. Elasticsearch架构选型指南——不止是搜索引擎,还有......

  2. 干货 | Elasticsearch方案选型必须了解的10件事!

  3. 干货 | Elasticsearch Java 客户端演进历史和选型指南

  4. https://blog.csdn.net/u013613428/article/details/103317806

4.2  Elasticsearch 常用工具避坑

“工欲善其事必先利其器”,没有工具,效率无从谈起。

推荐优先级:Kibana > Head / cerebro > Postman。

学会使用:Kibana Dev Tool,并用好 ctrl + i 快捷键。

学会使用:Kibana monitor 监控可视化工具。

更多推荐:

  1. 严选 | Elasticsearch史上最全最常用工具清单

  2. MetricBeat + Elasticsearch + Kibana 实现监控指标可视化

4.3 Elasticsearch 集群避坑

结合集群能承载的总数据量、每日的增量,在有预留的前提下,给出集群规模的评估。避免“拍脑袋”,要理性计算给出实际参考依据。

布局好节点角色,早期版本叫节点类型。要知道节点角色更为便捷。

确定是否需要冷热集群架构,区分:热节点、温节点、冷节点。冷热集群架构是 ILM 的前提,没有它,ILM无从谈起。

更多推荐:

探究 | Elasticsearch集群规模和容量规划的底层逻辑

干货 | Elasticsearch 8.X 节点角色划分深入详解

4.4 Elasticsearch 索引避坑

确定是否需要 ILM 索引生命周期管理,而不是仅适用 rollover + 脚本自己维护方式或借助 curator 实现。用好 Kibana 可视化管理好 ILM。

考虑索引承载数据上限和大索引可能带来的风险,提前做好业务层面的布局,不同业务使用不同索引,不要混用。

能用模板 template 的就不要单独使用 index。

能支持 datastream 数据流(智能别名)就大胆使用。

模板和别名搭配、索引和别名搭配,干活不累。

定期备份集群索引数据,尤其业务索引,并准备恢复方案,以防数据丢失。

数据迁移需要认真计划,以防迁移不当可能导致数据丢失或损坏问题。

更多推荐:

  1. Elasticsearch ILM 索引生命周期管理常见坑及避坑指南 

  2. 干货 | Elasticsearch 索引生命周期管理 ILM 实战指南

  3. Elasticsearch 7.X data stream 深入详解

  4. Elasticsearch 快照生命周期管理 (SLM) 实战指南

  5. 干货 | Elasitcsearch7.X集群/索引备份与恢复实战 

4.5 Elasticsearch 分片避坑

由于路由机制原因,不同于副本分片支持 update 动态更新,Elasticsearch 主分片数一旦设定就不能动态更新,除非 reindex。

分片设置要不仅满足当下集群的需求,也要考虑集群的未来可扩展性。

单分片大小参见官方的 30GB-50GB的优化建议(因场景而异,可能微调)。

更多推荐:

Elasticsearch究竟要设置多少分片数?

4.6 Elasticsearch 同步工具避坑

能借助 Ingest 预处理功能解决的,就不要使用 logstash。

能使用 logstash 解决基于时间递增和基于id递增同步的,就不要自己开发。

衡量好 Kafka_connector 和 logstash 的性能和适用场景。

阿里的 canal 工具在同步删除和更新操作时,要优先选择,因为 logstash 不支持同步更新和删除操作。

更多推荐:

  1. Elasticsearch的ETL利器——Ingest节点 

  2. Elasticsearch 预处理没有奇技淫巧,请先用好这一招!

  3. 从一个线上问题看 Elasticsearch 数据清洗方式 

  4. 实战 | canal 实现Mysql到Elasticsearch实时增量同步 

  5. 干货 | Logstash Grok数据结构化ETL实战

4.7 Elasticsearch 检索选型避坑

如果查询语句不正确,可能导致查询性能下降,例如查询条件过于复杂、数据量过大等。

首先,建立起 ES 支持的检索类型的全局认知。

其次:

  • 区分好:什么是召回率?什么是精准率?

  • 区分好:什么是精准匹配,什么是全文检索?

  • 区分好:哪些需要评分?哪些不需要评分?

  • 区分好:什么叫 query?什么叫 filter?

最后:选型成功后,做充分的验证,再部署到线上环境。

涉及性能相关的,要做足检索并发性能测试。

PS:如果所有的已经存在的检索都无法达到业务指标,得考虑分词处下功夫,得考虑空间换时间。

推荐阅读:

  1. Elasticsearch 8.X 如何实现更精准的检索?

  2. 实战 | Elasticsearch自定义评分的N种方法

  3. 干货 | Elasticsearch 检索类型选型指南

  4. JMeter 如何实现 Elasticsearch 8.X 性能测试?

  5. esrally 如何进行简单的自定义性能测试?

4.8 Elasticsearch 数据建模避坑

Elasticsearch要求数据结构符合其特定 Mapping 格式,如果数据结构不合适,可能导致数据存储不完整,后续检索可能会非常复杂。

建模问题的核心在于,前期不会发现,往往项目的中后期才会发现。但,一旦发现,返工的概率就会极大,带来了整体工期的延长和效率的降低。

所以,建议设计初期做足准备。

做什么准备呢?

(1)业务层面:不同索引可能跨索引检索,字段的一致性必要性尤为凸显。

(2)能“宽表”就不要或少用 Nested 嵌套字段、Join 多表关联数据类型。

(3)避免字段爆炸,设置 strict 最为严谨,设置dynamic:false相对谨慎,设置默认的 dynamic:true 要慎之又慎,评估好风险。

更多推荐:

  1. 干货 | Elasticsearch 数据建模指南

  2. 干货 | Elasticsearch多表关联设计指南

  3. Elasticsearch 8.X 防止 Mapping “爆炸”的三种方案

4.9 Elasticsearch 运维避坑

不要等出了问题采取看监控,而是动态更新监控指标数据,考虑将集群各节点的健康状态,以定时任务的形式发送到邮箱等。

定期监控集群健康状态,并及时解决任何问题,以保证集群稳定运行。

用好运维监控工具。Kibana monitor、grafana 均可。

日志建议再归集到一个独立的小ES集群,通过 kibana 可视化展示,并对于 Warn 及以上级别日志及时预警。

推荐如下:

(1)使用Elasticsearch的内置监控工具:如Node Stats API和Cluster Stats API,可用于监控节点和集群的性能。

(2)使用 Kibana Monitoring:提供了全面的监控功能,包括集群监控、节点监控、索引监控等。

(3)定期评估集群健康:使用Elasticsearch的Cluster Health API评估集群的健康状况,以检测性能问题。

(4)记录并分析日志:记录并分析Elasticsearch的日志,以诊断性能问题。

(5)设置告警:设置告警,以提醒您有关性能问题的变化。建议和监控工具(如:Zabbix)结合。

更多推荐:

  1. MetricBeat + Elasticsearch + Kibana 实现监控指标可视化

  2. 干货 | Elasticsearch Top10 监控指标

  3. 干货 | Elasticsearch 运维实战常用命令清单

  4. 干货 | Elasticsearch 集群健康值红色终极解决方案

4.10 Elasticsearch 安全避坑

安全无小事,早期版本(1.X、2.X、5.X、6.X、7.X)“luo奔”导致的安全事故依然屡见不鲜。8.X 的版本已经全线支持默认安全机制,用起来是王道。

如果非要早期版本(5.X、6.X、7.X),建议一定至少加上 xpack 安全机制,至少设置好密码。如果更早版本(1.X、2.X),建议不要开放外网权限,切记!

更多推荐:

  1. 你的Elasticsearch在裸奔吗?

  2. 重要!!Elasticsearch 安全加固指南

  3. Elasticsearch 脚本安全使用指南

5、小结

“坑”是成长过程中的财富,提前关注“坑”能提高开发效率。

欢迎大家就使用 Elasticsearch 过程中遇到的坑留言交流。

5、参考

https://articles.zsxq.com/id_oo0h8a5b6b8a.html

https://wx.zsxq.com/dweb2/index/search/%E4%BC%81%E4%B8%9A/alltopics?groupId=225224548581

https://t.zsxq.com/0bUYswMJn

推荐阅读

  1. 全网首发!从 0 到 1 Elasticsearch 8.X 通关视频

  2. 重磅 | 死磕 Elasticsearch 8.X 方法论认知清单(2022年国庆更新版)

  3. 如何系统的学习 Elasticsearch ?

  4. 2023,做点事

62ee551be601aa1e86c45ce447498563.jpeg

更短时间更快习得更多干货!

和全球 1800+ Elastic 爱好者一起精进!

02256fc16aca5a78270dcd7ac8881421.gif

比同事抢先一步学习进阶干货!

相关文章:

干货 | 中小企业选型 Elasticsearch 避坑指南

1、线上常见问题在我线下对接企业或线上交流的时候,经常会遇到各种业务场景不同的问题。比如,常见问题归类如下:常见问题1:ES 适合场景及架构选型问题。公司的核心业务是做企业员工健康管理,数据来自电子化后的员工体检…...

全局组件和局部组件

全局组件第一种定义方法:A、创建自己的组件:Loading.vueB、在main.js文件中引入组件并注册import Vue from vue import App from ./App.vue import * as filters from ./filterimport quanjuzujian from ./components/quanjuzujian.vueVue.component(qua…...

提取括号中的内容

正则能解决不嵌套的括号内容提取问题遇到一个问题,就是需要提取字符串中每一个中括号里的内容,在网上搜了一下,发现用正则表达式(\[[^\]]*\])可以提取中括号中的内容,以下面文本为匹配对象:PerformanceManager[第1个中…...

数据结构-算法的空间复杂度(1.2)

目录 1.空间复杂度 1.1 例子 1.2 空间的特殊性质 写在最后: 1.空间复杂度 空间复杂度也是一个数学表达式, 是对一个算法在运行过程中临时占用存储空间大小的量度。 他也是用大O渐进表示法。 1.1 例子 例1: 冒泡排序: v…...

【总结】python3启动web服务引发的一系列问题

背景 在某行的实施项目,需要使用python3环境运行某些py脚本。 由于行内交付的机器已自带python3 ,没有采取自行安装python3,但是运行python脚本时报没有tornado module。 错误信息 ModuleNotFoundError:No module named ‘torn…...

Linux:基于libevent读写管道代码,改进一下上一篇变成可以接收键盘输入

对上一篇进行改进&#xff0c;变成可以接收键盘输入&#xff0c;然后写入管道&#xff1a; 读端代码&#xff1a; #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <s…...

C语言格式化输出总结:%d,%c,%s,%f, %lf,%m.nd,%m.nf,%m.ns 以及sprintf函数

凡事发生必将有益于我&#xff0c;高手&#xff0c;从来都不仅仅是具备某种思维的人&#xff0c;而是那些具备良好学习习惯的人&#xff0c;成为高手&#xff0c;无他&#xff0c;手熟尔&#xff01;加油在最近的学习之中&#xff0c;对于格式化输出这个知识点&#xff0c;这里…...

Nginx之反向代理、负载均衡、动静分离。

Nginx之反向代理、负载均衡、动静分离。 1、Nginx是啥&#xff1f; 轻量级Web服务器、反向代理服务器、电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器 在 BSD-like 协议下发行、占内存少、并发高&#xff08;同时处理请求能力&#xff09;。 2、安装 官网&#xf…...

0401不定积分的概念和性质-不定积分

文章目录1 原函数与不定积分的概念1.1 原函数1.2 原函数存在定理1.3 不定积分2 不定积分的性质3 基本积分表4 例题后记1 原函数与不定积分的概念 1.1 原函数 定义1 如果在区间I上&#xff0c;可导函数F(x)的导航为f(x)&#xff0c;即对任一x∈Ix\in Ix∈I&#xff0c;都有 F′…...

数组中的各种迭代API方法手写

js的数组上有很多实用的方法&#xff0c;不论是在遍历数组上&#xff0c;还是在操作数组内元素上&#xff0c;它有许多不同的遍历数组的方法&#xff0c;同时它还有着可以直接操作数组中间元素的方法。 接下来&#xff0c;我来带大家手写数组里的 遍历方法 。 Array.forEach(…...

详解量子计算:相位反冲与相位反转

前言 本文需要对量子计算有一定的了解。需要的请翻阅我的量子专栏&#xff0c;这里不再涉及基础知识的科普。 量子相位反冲是什么&#xff1f; 相位反转&#xff08;phase kickback&#xff09;是量子计算中的一种现象&#xff0c;通常在量子算法中使用&#xff0c;例如量子…...

C++——C++11第三篇

目录 包装器 function包装器 bind 包装器 function包装器 function包装器 也叫作适配器。C中的function本质是一个类模板&#xff0c;也是一个包装器。 上面的程序验证&#xff0c;我们会发现useF函数模板实例化了三份。 包装器可以很好的解决上面的问题 &#xff0c;让它只实…...

180 2 22222

选择题(共180题,合计180.0分) 1. 在项目开工会议期间&#xff0c;项目发起人告诉产品负责人和团队项目章程即将完成。然而&#xff0c;由于存在在紧迫的期限内满足政府监管要求的压力&#xff0c;发起人希望立即开始工作。产品负责人下一步应该做什么&#xff1f; A 告诉发起人…...

成人高考初中毕业能报名吗 需要什么条件

初中学历的人员不能直接报名成人高考&#xff0c;考生需要有普通高中&#xff0c;职业高中&#xff0c;中专毕业证等高中同等学力就可以进行报名&#xff0c;在报名期间登陆所在省的教育考试院的成人高考报名入口进行报考。成人高考报名条件是什么1、遵守宪法和法律。2、国家承…...

ChatGPT初体验

ChatGPT初体验 前言 嘿嘿&#xff0c;最近啊AI ChatGPT刷新各大网站&#xff0c;对于我们国人而将很不友好&#xff0c;真的太不友好了。我呢在去年open AI发布的时候就有所关注&#xff0c;那个时候还没有像现在这样火热。谁知道短短几个月便传遍大街小巷。 一、什么是chatG…...

ChatGPT概念狂飙!究竟魅力何在?

原文&#xff1a;http://www.btcwbo.com/6988.html 近期&#xff0c;ChatGPT引领的人工智能概念在资本市场一路狂飙&#xff0c;AIGC题材持续发酵。截至2月7日&#xff0c;Wind ChatGPT指数今年以来累计上涨超50%&#xff0c;汉王科技、海天瑞声、云从科技等概念股股价已经翻倍…...

如何下载阅读Spring源码-全过程详解

这篇文章记录了下载spring源码和在IDEA中打开运行的全过程&#xff0c;并且记录了过程中遇到的问题和解决方案&#xff0c;适合需要学习spring源码的同学阅读。 1.spring源码下载地址 通过Git下载spring-framework项目源码&#xff1a; git clone https://github.com/spring…...

学了两个月的Java,最后自己什么也不会,该怎么办?

学着学着你会发现每天的知识都在更新&#xff0c;也都在遗忘&#xff0c;可能就放弃了。但是只要自己肯练&#xff0c;肯敲代码&#xff0c;学过的知识是很容易就被捡起来的。等你学透了用不了一年也可以学好 Java的运行原理&#xff1a;Java是一门编译解释型语言&#xff0c;…...

前端vue实现获取七天时间和星期几功能

前端vue实现获取七天时间和星期几功能 功能展示代码 <div v-for"(item,index) in same_week" :class"[same_dayitem.date? activ :,dis]" click"select(item)" :keyindex><span>{{item.name}}</span><span>{{item.…...

zookeeper单机部署

一.下载zookeeper压缩包 二.上传解压安装包到/data/zookeeper目录&#xff0c;并解压 tar -zxvf apache-zookeeper-3.5.8-bin.tar.gz 三.修改配置文件 cd apache-zookeeper-3.5.10-bin/conf mv zoo_sample.cfg zoo.cfg vi zoo.cfg 修改为如下&#xff1a; dataDir/data/zooke…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...

Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解

文章目录 一、开启慢查询日志&#xff0c;定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...