Redis高頻面試筆記:mysql8.0新特性

一、服務發布簡介

分布式系統架構下,服務發布是一件很麻煩的事情,特別是在構建自動發布流程和灰度測試的策略兩個核心方面。通常情況下如果不涉及數據層面的灰度流程,服務可以灰度上線,或者滾動上線,這兩種方式很常用;如果涉及到數據灰度,則可能需要中間服務做不同版本數據之間追平,或者停機維護一次性處理好數據和上線問題,不過后面這種方式風險較大。

二、藍綠部署

新版本上線的時候,并不停掉老版本,新舊兩個版本同時運行,通常還會在負載均衡的策略上傾向于舊版本服務處理請求,這樣新版本就有一個執行的觀察期過渡期,等到新版本平穩運行一段時間后,再把請求都發到新版服務上,舊版本服務完成下線。這種方式在分布式架構下很少使用,對服務器要求過高。

三、滾動發布

滾動發布可以避免藍綠部署的服務器資源占用問,首先發布一臺新版本服務,然后停掉一臺老版本服務,新版服務經過觀察之后,再逐步替換掉所有老版本的服務,這樣服務的環境變動比較頻繁,相對不穩定。

四、灰度發布

上述兩種方式在普通業務場景下都還算好操作,分布式系統下的灰度發布復雜程序相對高很多,基礎流程如下:

新版本上線,可能涉及分布式下多個灰度服務,因此在服務在整個鏈路上分發時,都要判斷下個請求是路由到正常服務還是灰度服務,還要對灰度服務做請求的權重控制,不能讓灰度服務處理大量的請求。

實際策略:在實際的分布式系統灰度發布流程,通常會采用如下一個策略:

  • 配置一個灰度是否開啟的標識;
  • 配置一批灰度賬戶,通常內部人員;
  • 配置灰度服務版本標識;
  • 請求在鏈路執行時,判斷灰度是否開啟;
  • 判斷當前用戶身份是否是灰度測試賬號;
  • 獲取當前可以請求的服務列表;
  • 根據灰度服務版本選擇請求的具體服務;

這個流程非常的復雜,需要很多自定義的策略,還要熟悉分布式框架的底層API原理,要二次重寫來適配灰度策略,設計重寫原生API還容易觸發一些驚喜問題。

五、數據庫灰度

如果說最難處理的灰度模式是什么,就是數據庫的版本灰度問題,通常業務對數據庫改造升級,實際都是通過停機維護來處理的,可能很多開發都經歷過,發布停服公告,然后在指定時間內把數據全部追平或者二次搬運,再重新提供服務。但是總有些業務場景是不能停機維護的,處理灰度數據的基本策略如下:

該模式中,除了正常的灰度流程之外,需要在灰度數據庫和正常數據中間提供一個數據調配服務,用來解決如下問題:灰度數據庫缺失數據,需要臨時從正常庫拉取,灰度版本失敗,新數據需要重新整合寫入原本正常庫;灰度版本成功,舊版數據遷移等;最終保證數據的平穩升級。

Java面試核心知識點筆記

其中囊括了JVM、鎖、并發、Java反射、Spring原理、微服務、Zookeeper、數據庫、數據結構等大量知識點。

螞蟻金服(Java研發崗),26歲小伙斬獲三面,收獲Offer定級P6

Java中高級面試高頻考點整理

螞蟻金服(Java研發崗),26歲小伙斬獲三面,收獲Offer定級P6

更多Java進階知識筆記文檔分享,這些對于面試還是學習來說都是一份不錯的學習資料

有需要的朋友可以戳這里即可免費領取

螞蟻金服(Java研發崗),26歲小伙斬獲三面,收獲Offer定級P6

最后還分享Java進階學習及面試必備的視頻教學

螞蟻金服(Java研發崗),26歲小伙斬獲三面,收獲Offer定級P6

享Java進階學習及面試必備的視頻教學**

[外鏈圖片轉存中…(img-5uHZK3qF-1627101835611)]

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

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

相關文章

Makefile (二)

一、line1的源碼 line1.h #ifndef _LINE_1_H #define _LINE_1_H void line1_print(const char *strMsg); #endifline1.cpp #include "line1.h" #include <stdio.h> void line1_print(const char *strMsg) {printf("This is line1 print %s.\r\n",st…

RocketMQ避坑指南:springcloud教程權威指南

1. Java 堆空間 **發生頻率&#xff1a;**5顆星 造成原因 無法在 Java 堆中分配對象 吞吐量增加 應用程序無意中保存了對象引用&#xff0c;對象無法被 GC 回收 應用程序過度使用 finalizer。finalizer 對象不能被 GC 立刻回收。finalizer 由結束隊列服務的守護線程調用&a…

IO多路復用之epoll

一、epoll函數族 1. 函數epoll_creat&#xff1a; 該函數生成一個epoll專用的文件描述符 #include <sys/epoll.h> int epoll_creae(int size); //epoll上能關注的最大描述符數 2. epoll_ctl&#xff1a;用于控制某個epoll文件描述符事件&#xff0c;可以注冊、修改、刪…

26. 刪除排序數組中的重復項

給定一個排序數組&#xff0c;你需要在原地刪除重復出現的元素&#xff0c;使得每個元素只出現一次&#xff0c;返回移除后數組的新長度。 不要使用額外的數組空間&#xff0c;你必須在原地修改輸入數組并在使用 O(1) 額外空間的條件下完成。 示例 1: 給定數組 nums [1,1,2], …

Leetcode 31. Pow(x, n) 解題報告

class Solution {public:double myPow(double x, int n) {double res 1.0;for(int i n; i ! 0; i / 2){if(i % 2 ! 0)res * x;x * x;}return n < 0 ? 1 / res : res;} };

572. 另一個樹的子樹

給定兩個非空二叉樹 s 和 t&#xff0c;檢驗 s 中是否包含和 t 具有相同結構和節點值的子樹。s 的一個子樹包括 s 的一個節點和這個節點的所有子孫。s 也可以看做它自身的一棵子樹。 示例 1: 給定的樹 s: 3/ \4 5/ \1 2給定的樹 t&#xff1a; 4 / \1 2返回 true&#x…

二叉樹中序遍歷的三種方法

二叉樹是一種重要的數據結構&#xff0c;對二叉樹的遍歷也很重要。這里簡單介紹三種二叉樹中序遍歷的方法。二叉樹的中序遍歷就是首先遍歷左子樹&#xff0c;然后訪問當前節點&#xff0c;最后遍歷右子樹。對于下面的二叉樹&#xff0c;中序遍歷結果如下&#xff1a; 結果&…

reverse函數:反轉容器內容

reverse函數可以反轉一個容器中的內容&#xff0c;包含在<algorithm>庫中。 1、函數原型 reverse函數等同于下面的代碼&#xff1a; template <class BidirectionalIterator> void reverse (BidirectionalIterator first, BidirectionalIterator last) {while ((…

服務器框架

一、Reactor模式 Reactor模式&#xff0c;它要求主線程&#xff08;I/O處理單元&#xff09;只負責監聽文件描述符上是否有事件發生&#xff0c;有的話就立即將該事件通知工作線程&#xff08;邏輯單元&#xff09;。除此之外&#xff0c;主線程&#xff08;I/O處理單元&#…

使用CreateFile讀寫文件

微軟提供了強大的文件讀寫操作的編程接口&#xff0c;所以可以通過調用API函數實現文件的讀寫操作。這里通過CreateFile函數來實現。 要對文件進行讀寫操作&#xff0c;首先要調用CreateFile函數打開或者創建文件&#xff0c;函數具體格式如下&#xff1a; HANDLE CreateFile(…

Leetcode 9. 回文數(Palindrome Number)

判斷一個整數是否是回文數。回文數是指正序&#xff08;從左向右&#xff09;和倒序&#xff08;從右向左&#xff09;讀都是一樣的整數。 示例 1: 輸入: 121 輸出: true示例 2: 輸入: -121 輸出: false 解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是一個…

使用CreateThread函數創建線程

線程是進程中的一個實體&#xff0c;是被系統獨立調度和分派的基本單位。一個進程可以擁有多個線程&#xff0c;但是一個線程必須有一個進程。線程自己不擁有系統資源&#xff0c;只有運行所必須的一些數據結構&#xff0c;但它可以與同屬于一個進程的其它線程共享進程所擁有的…

Leetcode 16. 最接近的三數之和(3Sum Closest)

解法一&#xff1a; class Solution { public:int threeSumClosest(vector<int>& nums, int target) {int closest nums[0] nums[1] nums[2];int diff abs(closest - target);sort(nums.begin(), nums.end());for (int i 0; i < nums.size() - 2; i) {int…

BMP格式詳解

BMP&#xff08;全稱Bitmap&#xff09;是Windows操作系統中的標準圖像文件格式&#xff0c;可以分成兩類&#xff1a;設備相關位圖&#xff08;DDB&#xff09;和設備無關位圖&#xff08;DIB&#xff09;&#xff0c;使用非常廣。它采用位映射存儲格式&#xff0c;除了圖像深…

Leetcode 5. 最長回文子串(Longest Palindromic Substring)

推薦理由&#xff1a;暴力解法太 naive&#xff0c;中心擴散不普適&#xff0c;Manacher 就更不普適了&#xff0c;是專門解這個問題的方法。而用動態規劃我認為是最有用的&#xff0c;可以幫助你舉一反三的方法。 補充說明&#xff1a;Manacher 算法有興趣的朋友們可以了解一…

請求轉發與請求重定向的區別

請求轉發&#xff1a; 請求轉發&#xff0c;即request.getRequestDispatcher().forward()&#xff0c;是一種服務器的行為&#xff0c;客戶端只有一次請求&#xff0c;服務器端轉發后會將請求對象保存&#xff0c;地址欄中的URL地址不會改變&#xff0c;得到響應后服務器端再將…

StringBuilder詳解

1、簡介 StringBuilder和StringBuffer一樣&#xff0c;都是繼承自抽象類AbstractStringBuilder類&#xff0c;也是一個可變的字符序列。StringBuilder和StringBuffer非常相似&#xff0c;甚至有互相兼容的API&#xff0c;不過&#xff0c;StringBuilder不是線程安全的&#xf…

【線程】互斥鎖

一、互斥鎖 1. 函數原型 pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr); pthread_mutex_destroy(pthread_mutex_t *mutex); 分析&#xff1a; pthread_mutex_t 類型&#xff0c;其本質是一個結構體&#xff0c;為簡化…

ArrayList詳解

1、簡介 ArrayList是Java集合框架中的一個重要的類&#xff0c;它繼承于AbstractList&#xff0c;實現了List接口&#xff0c;是一個長度可變的集合&#xff0c;提供了增刪改查的功能。集合中允許null的存在。ArrayList類還是實現了RandomAccess接口&#xff0c;可以對元素進行…

【進程】進程組

一、進程組 1. 進程組 &#xff08;1&#xff09;進程組&#xff0c;也稱之為作業&#xff0c;BSD與1980年前后向UNIX中增加的一個新特性&#xff0c;代表一個或多個進程的集合。每個進程都屬于一個進程組&#xff0c;在waitpid函數和kill函數的參數中都曾經使用到&#xff0c…