【面試】高級開發面試場景題

1、如何保證MySql到ES的數據一致性?

答:ES是一個開元分布式搜索和分析引擎、它提供了全文搜索、結構化搜索分析以及這些組合的能力。

  • 全文搜索能力:ES支持復雜的搜索能力,包括模糊匹配、短語查詢、布爾查詢等,并且可以快速的返回結果
  • 實時數據分析:實時數據分析,支持對數據進行復雜的統計分析,如計數、求和、平均值、最大值、最小值等,這對于業務的分析非常有作用
  • 擴展性強:ES的分布式架構可以輕松的橫向擴展到數白甚至數千臺服務器節點,處理PB級的數據量;通過設置副本分片,確保數據沉淀、避免單點故障;
  • 靈活的數據模型:Es使用Json格式來存儲數據,這種格式對于現代應用程序來說,非常的友好,易于理解和操作,你可以自定義映射來規范文檔結構;同樣也允許你自由的添加新字段,無需預先定義模式;
  • 強大的插件生態系統:最熟悉的可能就是Kibana,它是官方提供的可視化界面,提供了一個友好的用戶界面,用于搜索可視化和管理ES中的數據;還有其它的一些插件(如Logstash),它們可以幫助收集解析和傳輸數據到ES;
  • 使用多種應用場景:日志和事件數據分析;電子商務中的相關搜索;安全信息和事務管理等各種大數據量的情況下的使用。

所以ES這個中間件非常適合在“數據量特別大”的情況下,特別還設計到“分庫分表”的這種業務場景下的使用。但是引入新的中間件也有需要注意的挑戰;

  • 寫入性能:當面對極高的寫入速度時ES可能會遇到瓶頸,那么就需要對配置進行優化,并且合理的設計索引策略,如使用時間分區索引,或者基于業務邏輯的一些分區(表分區);
  • 存儲成本:ES對硬件資源的要求還是比較高的,尤其是內存,由于他依賴倒排序索引來加速搜索過程,這可能會導致較大的存儲開銷;
  • 數據一致性:在分布式環境中,確保數據一致是一個挑戰,在高并發環境中,如何平衡性能和數據一致性依然是一個需要仔細權衡的問題。

MySql到ES數據一致性同步方案

  • 1、同步雙寫(硬編碼寫入MySql的同時,寫入ES)
    適用場景:適用于邏輯相對來說比較簡單,時效性也很高;適用于對數據實時性要求極高,且業務邏輯相對簡單的場景,就比如金融交易的記錄同步。
    優點:
    邏輯簡單
    實時性高

缺點:
硬編碼:所有涉及數據庫變更操作的地方都需要加上同時對ES的變更操作
性能下降(性能瓶頸):雙寫操作導致事務的時間延長,整體的處理時間也大大的加長了。
補償機制:需要有補償機制,在操作ES失敗的情況下怎么處理呢,回滾MqSql的數據嗎?還是補償ES的操作?

  • 2、定時同步(分布式任務調度)
    適用場景:定時同步業務服務只處理MySql的數據,不管ES的數據操作。通過一個同步服務,并且引入分布式任務調度服務(常見分布式任務調度服務有:Quartz Scheduler、XXL-JOB、SchedulerX、ElasticJob),觸發進行定時的數據庫同步到ES的操作

    優點:
    邏輯簡單
    服務間解耦

    缺點:
    時效性差:數據一致的延遲高
    全表掃描:并且對數據庫的壓力也是比較大的,要優化查詢索引,可能會全表掃描。

    雖然分布式調度任務支持分片,但是在分庫分表的情況下,依然要對多個表進行處理。

  • 3、MQ消息隊列+同步服務異步同步方案
    業務服務操作數據庫變更后,向MQ發送一條數據庫變更消息,由同步服務消費MQ,獲取消息后處理對ES數據的操作。

    優點:
    性能高:保證了對業務數據處理的性能,同時MQ的削峰填谷功能也照顧到了ES在高寫入情況下的性能瓶頸
    業務隔離:通過MQ將業務主流程和ES數據的處理完全解耦,故障也完全隔離了。

    缺點:
    硬編碼:對MySql數據的業務處理都要加上消息隊列的發送。
    系統復雜度:由于引入了新的中間件,系統的復雜度大大提升了;要保證MQ的高可用,要保證消息的有效投遞,這些都需要考慮。

  • 4、監聽Binlog方案
    MySql有個Binlog日志,不管什么存儲引擎,只要發生了表數據的更新,都會產生Binlog日志,MySql數據庫的主備組成等這些都離不開Binlog日志,需要依靠Binlog來同步數據,保證數據的一致性,那么我們就可以通過監聽Binlog日志的方式來進行數據同步。

Canal(阿里云中間件):支持通過監聽Binlog日志,將數據同步到ES功能,,這樣大大簡化了數據一致性的難度。

要是擔心數據量過大的這種情況,頻繁的寫入影響ES的性能,那么可以考慮先通過Canal Server獲取Binglog發送到MQ,再通過Canal Adapter將數據同步到ES。

(1)、Canal Server 獲取binlog發送MQ
(2)、MQ
(3)、Canal Adapter(或者自定義同步服務) 將數據同步到ES

優點:
無代碼侵入:業務服務完全不用新增任何代碼
性能高:Canal處理能力完全不用擔心,畢竟有阿里的背書
業務隔離:服務間完全解耦,業務服務完全不用考慮業務以外的功能;ES的任何數據同步引發的問題,都不會影響到主業務。

缺點:
系統復雜度:系統業務復雜度顯著提升了,畢竟引入了Canal和MQ兩個中間件,這些中間件的高可用和異常處理都需要考慮的。

Flink:不僅可以對增量數據進行同步,還可以對存量數據進行同步。

2、什么是Redis的穿透、擊穿和雪崩?

Redis崩潰之后會怎么樣?系統該如何應對這種情況呢?
答:緩存穿透、擊穿和雪崩是緩存中最大的三個問題,要么不出現,一旦出現就是致命性的問題。
Redis是一個開源的,基于內存的數據結構存儲系統,使用最多的就是它的緩存功能了,用戶的請求到達應用服務后,先到Redis中查找是否有對應的數據,要是存在就直接返回給用戶了;若是不存在則從數據庫中獲取數據返回給用戶,同時在Redis中建立一份緩存,這樣在一定時間內要是再有獲取這份數據,就不用再去請求數據庫了。

我們就是利用Redis的高性能來支撐應用服務的高并發,大量的數據請求讓Redis擋在數據庫之前,大大降低了數據庫的讀壓力,特別是在分布式系統環境下,統一的緩存管理,降低了緩存維護的難度。

緩存穿透、擊穿和雪崩是Redis緩存系統中常見的三種問題,它們都可能導致數據庫負載突然增加,甚至導致系統崩潰,所以我們要理解并知道他們的解決方案。

  • 緩存穿透
    突然有大量的請求來到服務器,在這些請求中,大部分是Redis中沒有的數據,這就導致這些請求直接到了數據庫上,其實這些數據在數據庫中也沒有,那自然也無法在Redis中建立緩存,這種惡意攻擊請求,每次都視緩存于無物,直接查詢數據庫,嚴重的時候甚至會造成數據庫直接宕機,這種大量的請求的Redis中沒有,數據庫中也沒有的場景就是緩存穿透。

應對方案:
1、緩存空值:如果這些無效的請求的值變化不大,那么可以緩存這些無效的Key到Redis中,注意設置好過期時間,避免大量的無效的key占用內存(設置較短的過期時間);

2、布隆過濾器:還可以使用布隆過濾器提前預熱,在請求一進來就進行篩選,雖然有一定的誤判,但是可以擋住大部分的無效請求。

3、驗證、限流、黑名單:還有了,自己的接口也要做好驗證(IP、用戶限流),對于明顯不合理的請求直接返回。如果有預警機制還可以根據用戶或者IP對接口進行限流。對于異常頻繁的訪問行為,甚至還可以采取黑名單的機制。

  • 緩存擊穿(導致原因:某個熱點數據不存在于緩存中)
    大量用戶同時發起了對某個熱點數據的請求,訪問非常頻繁,Redis緩存了這個熱Key,幫助應用服務輕松抗住高并發,這個Key正處于集中式高并發訪問的情況下突然失效,在這個瞬間,大量的請求就擊穿了緩存直接請求在數據庫,就像在一道屏障上鑿開了一個洞,就數據來說,熱點key失效數據在數據庫中還是存在的。

應對方案:
1、設置永不更新:若緩存的數據基本不會發生更新,則可以嘗試將該熱點數據設置為永不更新,或者處于可預料的集中式高并發的這個時間段內不過期;

2、加鎖:不管是用分布式互斥鎖還是本地互斥鎖,保證僅少量的請求能夠到達數據庫,并重新構建緩存,其余線程則在鎖釋放后能訪問到新的緩存。

  • 緩存雪崩(導致原因:緩存中的大量或者所有數據失效)
    大量用戶發起了對各類數據的請求,這各類數據在Redi

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/92919.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/92919.shtml
英文地址,請注明出處:http://en.pswp.cn/web/92919.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《 慢 SQL 分析與 SQL 優化實戰指南》

🔍 慢 SQL 分析與 SQL 優化實戰指南、 🧠前言 在數據庫性能調優中,慢 SQL 是性能瓶頸的常見元兇。 一次慢查詢可能會拖垮整個業務線程池,甚至引發鎖等待、雪崩效應。 對后端開發與 DBA 而言,快速定位并優化慢 SQL&am…

C#中如何運用JWT用戶認證

一、JWT概述JSON Web Token(JWT)是一種輕量級的身份認證機制,廣泛應用于分布式系統中的用戶認證。它通過緊湊的JSON格式存儲用戶身份信息,并使用數字簽名確保信息的完整性和真實性。與傳統的基于Session的認證相比,JWT…

Hibernate 使用詳解

在現代的Java開發中,數據持久化是一個至關重要的環節。而在眾多持久化框架中,Hibernate以其強大的功能和靈活性,成為了開發者們的首選工具。本文將詳細介紹Hibernate的原理、實現過程以及其使用方法,希望能為廣大開發者提供一些有…

【圖像算法 - 13】基于 YOLO12 與 OpenCV 的實時目標點擊跟蹤系統(系統介紹 + 源碼詳細)

基于 YOLO12 與 OpenCV 的實時點擊目標跟蹤系統 在計算機視覺領域,目標檢測與跟蹤是兩個核心任務。本文將介紹一個結合 YOLO 目標檢測模型與 OpenCV 跟蹤算法的實時目標跟蹤系統,該系統允許用戶通過鼠標交互選擇特定目標進行持續跟蹤,支持多…

【數據庫】 MySQL 表的操作詳解

在 MySQL 數據庫的日常開發與維護中,表的操作是最基礎且最常用的部分。本文將從 創建表、查看表結構、修改表 以及 刪除表 等方面進行詳細講解,并附上對應的 SQL 語句示例,方便在實際項目中直接應用。一、創建表 1.1 創建表語法 CREATE TABLE…

DiT: Transformer上的擴散模型

論文(ICCV 2023):Scalable Diffusion Models with Transformers 代碼和工程網頁:https://www.wpeebles.com/DiT.html DiTs(Diffusion Transformers)是首個基于Transformer架構的擴散模型!它在…

MySQL 索引:索引為什么使用 B+樹?(詳解B樹、B+樹)

文章目錄一、二叉查找樹(BST):不平衡二、平衡二叉樹(AVL):旋轉耗時三、紅黑樹:樹太高由一個例子總結索引的特點基于哈希表實現的哈希索引高效的查找方式:二分查找基于二分查找思想的二叉查找樹升級版的BST樹:AVL 樹四、…

ESP32入門開發·VScode空白項目搭建·點亮一顆LED燈

目錄 1. 環境搭建 2. 創建項目 3. 調試相關介紹 4. 代碼編寫 4.1 包含頭文件 4.2 引腳配置 4.3 設置輸出電平 4.4 延時函數 4.5 調試 1. 環境搭建 默認已經搭建好環境,如果未搭建好可參考: ESP32入門開發Windows平臺下開發環境的搭建…

ONLYOFFICE AI 智能體上線!與編輯器、新的 AI 提供商等進行智能交互

ONLYOFFICE AI 插件?迎來重要更新,帶來了新功能和更智能的交互體驗。隨著 AI 智能體(現為測試版)的上線、帶來更多 AI 提供商支持以及其他新功能,AI 插件已經成為功能強大的文檔智能助理。 關于 ONLYOFFICE ONLYOFFICE 文檔是多…

【C++進階學習】第十一彈——C++11(上)——右值引用和移動語義

前言: 前面我們已經將C的重點語法講的大差不差了,但是在C11版本之后,又出來了很多新的語法,其中有一些作用還是非常大的,今天我們就先來學習其中一個很重要的點——右值引用以及它所擴展的移動定義 目錄 一、左值引用和…

【IoTDB】363萬點/秒寫入!IoTDB憑何領跑工業時序數據庫賽道?

【作者主頁】Francek Chen 【專欄介紹】???大數據與數據庫應用??? 大數據是規模龐大、類型多樣且增長迅速的數據集合,需特殊技術處理分析以挖掘價值。數據庫作為數據管理的關鍵工具,具備高效存儲、精準查詢與安全維護能力。二者緊密結合&#xff0…

IEEE 2025 | 重磅開源!SLAM框架用“法向量+LRU緩存”,將三維重建效率飆升72%!

一、前言 當前研究領域在基于擴散模型的文本到圖像生成技術方面取得了顯著進展,尤其在視覺條件控制方面。然而,現有方法(如ControlNet)在組合多個視覺條件時存在明顯不足,主要表現為獨立控制分支在去噪過程中容易引入…

無人機遙控器教練模式技術要點

一、技術要點1.控制權仲裁機制:核心功能:清晰定義主控權歸屬邏輯(默認為學員,但教練隨時可接管)。切換方式:通常通過教練遙控器上的物理開關(瞬時或鎖定型)或軟件按鈕觸發。切換邏輯…

【跨服務器的數據自動化下載--安裝公鑰,免密下載】

跨服務器的數據自動化下載功能介紹:上代碼:發現好久沒寫csdn了,說多了都是淚~~ 以后會更新一些自動化工作的腳本or 小tricks,歡迎交流。分享一個最近在業務上寫的較為實用的自動化腳本,可以批量從遠端服務器下載指定數…

C++-->stl: list的使用

前言list的認識list是可以在固定時間(O(1))內在任意位置進行插入和刪除的序列式容器,并且該容器可以前后雙向迭代。 2. list的底層是雙向鏈表結構,雙向鏈表中每個元素存儲在互不相關的獨立節點中&#xff0…

本地WSL部署接入 whisper + ollama qwen3:14b 總結字幕

1. 實現功能 M4-1 接入 whisper ollama qwen3:14b 總結字幕 自動下載視頻元數據如果有字幕,只下載字幕使用 ollama 的 qwen3:14b 對字幕內容進行總結 2.運行效果 source /root/anaconda3/bin/activate ytdlp 🔍 正在提取視頻元數據… 📝 正在…

《Linux運維總結:Shell腳本高級特性之變量間接調用》

總結:整理不易,如果對你有幫助,可否點贊關注一下? 更多詳細內容請參考:Linux運維實戰總結 一、變量間接調用 在Shell腳本中,變量間接調用是一種高級特性,它允許你通過另一個變量的值來動態地訪問…

ABP VNext + Akka.NET:高并發處理與分布式計算

ABP VNext Akka.NET:高并發處理與分布式計算 🚀 用 Actor 模型把高并發寫入“分片→串行化”,把鎖與競態壓力轉回到代碼層面的可控順序處理;依托 Cluster.Sharding 橫向擴容,Persistence 宕機可恢復,Strea…

[激光原理與應用-250]:理論 - 幾何光學 - 透鏡成像的優缺點,以及如克服缺點

透鏡成像是光學系統中應用最廣泛的技術,其通過折射原理將物體信息轉換為圖像,但存在像差、環境敏感等固有缺陷。以下是透鏡成像的優缺點及針對性改進方案:一、透鏡成像的核心優點高效集光能力透鏡通過曲面設計將分散光線聚焦到一點&#xff0…

測試匠談 | AI語音合成之大模型性能優化實踐

「測試匠談」是優測云服務平臺傾心打造的內容專欄,匯集騰訊各大產品的頂尖技術大咖,為大家傾囊相授開發測試領域的知識技能與實踐,讓測試工作變得更加輕松高效。 本期嘉賓介紹 Soren,騰訊TEG技術事業群質量工程師,負責…