日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

從0手寫一個多線程日志包

來源: 責編: 時間:2023-10-17 09:38:57 345觀看
導讀Part 01 引言可能大家會想,現在各種編程語言里面都有著各種各樣的日志處理函數,比如Java里面不僅僅可以通過System.out.print()方法打印日志,還有log4j等更為成熟的專業日志包可以進行調用;不僅僅Java,PHP、Golang、Pytho

GS828資訊網——每日最新資訊28at.com

Part 01 引言

可能大家會想,現在各種編程語言里面都有著各種各樣的日志處理函數,比如Java里面不僅僅可以通過System.out.print()方法打印日志,還有log4j等更為成熟的專業日志包可以進行調用;不僅僅Java,PHP、Golang、Python等當前互聯網行業用的比較多的編程語言都提供了成熟的日志方法類或者日志包,甚至上古編程語言C++也提供了簡易的日志方法。那么讀者朋友們有興趣知道類似log4j這樣的日志包其底層到底是如何構建高效率的日志處理方法嗎?亦或是未來遇到了這些日志包已經無法滿足需求了,必須要自己寫高度定制化日志服務才能較好地處理等場景的時候。俗話說,技多不壓身,接下來,本文將從0開始探討和分析如何寫一個高可用的日志包。GS828資訊網——每日最新資訊28at.com

Part 02 模型概述

通常來說,軟件應用的日志分為兩個部分:前端部分以及后端部分,其中針對前端部分主要是開發者的應用程序通過程序邏輯構造需要打印的日志內容,再通過調用日志打印方法進行日志的打印。而后端則是像背后看不見的英雄一樣,主要負責把這些內容實實在在地寫到既定的地方。GS828資訊網——每日最新資訊28at.com

這樣的分工讓我們不自覺地便能套用上“生產者-消費者”數據模型。這種模型想必只要是計算機圈子的同學都不會陌生:各種經典的數據隊列應用如kafka、RocketMQ等,其中的用戶手冊中第一章必然會說說“生產者”和“消費者”兩者的關系。那么套用到本文日志模型里面,前端部分作為構建日志內容并調用日志方法的模塊,則能套用上“生產者”這一概念,而后端真正的日志處理部分則套用上“消費者”這一概念。GS828資訊網——每日最新資訊28at.com


GS828資訊網——每日最新資訊28at.com

圖片圖片GS828資訊網——每日最新資訊28at.com

圖1 生產者和消費者關系圖GS828資訊網——每日最新資訊28at.com

Part 03 問題分析

通常來講,計算機世界絕大多數應用都采用了多線程處理的方式,以此來高效率地服務計算機使用者們,多線程就類似于買賣東西的窗口,多一個窗口就能在同一時間多服務一個客戶。我們先假設這些服務窗口都屬于上個世紀的形態,未進行信息化升級,所有的服務流水、服務內容等都記錄在紙上,那么窗口管理人員怎么來匯總這些信息呢?這個倒不是什么難題,聰明的讀者們也一定能想到:在下班后統一收集放在一起就可以了。如果要保證時間順序呢?也不難,按所有窗口紙張上記錄的服務時間排序再謄抄一份就可以了。那么終極問題來了,如果還要保證實時性呢?那要不再加派一人,只要某個窗口完成了客人的服務,則馬上去該窗口收集實時的信息,然后交給后面的人立即謄抄匯總。GS828資訊網——每日最新資訊28at.com

而本質上多線程的日志問題和窗口信息傳遞問題基本一致,日志最終是落入計算機磁盤存儲,而日志所對應的文件則屬于進程獨占模式——同一個文件只能在一個時間里被一個進程使用,如果不設成進程獨占的方式,可以對應想象上一段落所說的窗口匯總表,如果多個謄抄人同時在那張紙上寫來寫去會怎樣?GS828資訊網——每日最新資訊28at.com


GS828資訊網——每日最新資訊28at.com

圖片圖片GS828資訊網——每日最新資訊28at.com

圖2 多線程日志整體關系圖GS828資訊網——每日最新資訊28at.com

Part 04 日志包設計

多線程并發的目標是提升整體性能,但是應用程序采用了多線程的方式則會相應地引入線程間上下文切換、內存同步、賢臣阻塞等問題。而簡單處理這種問題的方式則是對線程進行加鎖。其實在很多時候,并發編程提升性能優化應用能力方面主要就是圍繞如何優化線程的鎖,一些方法論主要講述如何縮小鎖的范圍、減少鎖的粒度、鎖分段、避免熱點區域加串行鎖等進行展開,圍繞這些方法論也誕生了讀寫鎖、分段鎖等方法。單獨針對日志文件采用讀寫鎖是比較合理的手段,即只在寫入的時候對文件進行加鎖,讀取的時候所有應用都可以任意讀取文件獲取內容,這樣既保證了寫入文件內容的原子性也保證了其他業務能獲取日志的實時性。GS828資訊網——每日最新資訊28at.com

解決了文件讀取的問題,那么在寫入日志文件的時候直接粗暴地加鎖會不會對整個應用的性能造成重大影響呢?答案是肯定的,這樣做的結果就是整個應用性能瓶頸都集中到了計算機磁盤性能上,很顯然,計算機的磁盤性能可不咋地。針對此,在日志包的設計上又想到了“生產者-消費者”模型中的數據通道,簡單來說,這塊主要通過緩沖區來實現,在常用的日志包設計上,多數都采用“雙緩沖區”的方式作為日志包的核心。GS828資訊網——每日最新資訊28at.com

經過以上梳理,整個日志包在設計思路上變得清晰了起來,即:GS828資訊網——每日最新資訊28at.com

1) 在內存中創建兩個緩沖區,緩沖區大小視日志量和頻率大小而定,通常取4k左右。GS828資訊網——每日最新資訊28at.com

2) 當前端模塊往第一塊緩沖區寫入內容時,后端模塊則將第二塊緩沖區的內容寫入到文件。GS828資訊網——每日最新資訊28at.com

3) 當第一塊緩沖區寫滿時,則交換順序,前端往第二塊緩沖區寫入內容,而后端則將第一塊緩沖區內容寫入到文件。GS828資訊網——每日最新資訊28at.com


GS828資訊網——每日最新資訊28at.com

圖片圖片GS828資訊網——每日最新資訊28at.com

圖3 前臺模塊寫入第一塊緩沖區,后臺模塊將第二塊緩沖區內容寫入到文件GS828資訊網——每日最新資訊28at.com


GS828資訊網——每日最新資訊28at.com

圖片圖片GS828資訊網——每日最新資訊28at.com

圖4 前臺模塊寫入第二塊緩沖區,后臺模塊將第一塊緩沖區內容寫入到文件GS828資訊網——每日最新資訊28at.com

當然,僅僅這樣還不足以作為成熟而高效的日志包,在緩沖區的設計上還需考慮寫入文件的實時性,即當緩沖區一直寫不滿時需在固定的時間進行緩沖區的強制切換,以保證日志文件中能讀取到較為實時的日志內容。GS828資訊網——每日最新資訊28at.com

在一些日志文件處理細節問題上,如程序突然退出時截獲系統信號,盡可能將剩余日志內容寫入到文件以便后續跟蹤問題等;在不借助第三方工具狀態下,使用兩級文件指針的方式,保證按固定時間分割的日志不會出現日志消失等情況。GS828資訊網——每日最新資訊28at.com

在日志包對外暴露的方法上,同大多數日志包一樣,提供分級的日志打印方式,并設計模板變量以支持任意格式的日志內容,同時還提供輸出格式方法以及日志文件分割方法以便進行便利的日志包配置。GS828資訊網——每日最新資訊28at.com

在綜合考慮這些問題后,整個流程如下:GS828資訊網——每日最新資訊28at.com


GS828資訊網——每日最新資訊28at.com

圖片圖片GS828資訊網——每日最新資訊28at.com

圖5 整體流程圖GS828資訊網——每日最新資訊28at.com

Part 05 總結

以上便是日志包的主要設計思路,從這樣的設計思路中我們可以看到,整個設計上主要就是如何對抗以下兩個核心問題:GS828資訊網——每日最新資訊28at.com

第一個是應程序中多線程的資源搶占問題,第二個便是計算機磁盤的低效率問題。GS828資訊網——每日最新資訊28at.com

該日志包已經在移動OneNET公有云平臺、城市物聯網平臺等平臺里面發光發熱,體量最大的公有云平臺日均處理日志量已超過4億條。當然,在日志包這一模塊過后,如果還需補充完整整個日志系統,后續的日志采集、日志落庫、日志分析等又是一個有一個新的技術探索領域。GS828資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-13641-0.html從0手寫一個多線程日志包

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 8000字+22張圖探秘SpringCloud配置中心的核心原理

下一篇: 客服發送一條消息背后的技術和思考

標簽:
  • 熱門焦點
  • 5月安卓手機好評榜:魅族20 Pro奪冠

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年5月1日至5月31日,僅限國內市場。第一名:魅族20 Pro好評率:97.50%不得不感慨魅族老品牌還
  • 企業采用CRM系統的11個好處

    客戶關系管理(CRM)軟件可以為企業提供很多的好處,從客戶保留到提高生產力。  CRM軟件用于企業收集客戶互動,以改善客戶體驗和滿意度。  CRM軟件市場規模如今超過580
  • 微信語音大揭秘:為什么禁止轉發?

    大家好,我是你們的小米。今天,我要和大家聊一個有趣的話題:為什么微信語音不可以轉發?這是一個我們經常在日常使用中遇到的問題,也是一個讓很多人好奇的問題。讓我們一起來揭開這
  • JavaScript學習 -AES加密算法

    引言在當今數字化時代,前端應用程序扮演著重要角色,用戶的敏感數據經常在前端進行加密和解密操作。然而,這樣的操作在網絡傳輸和存儲中可能會受到惡意攻擊的威脅。為了確保數據
  • 消費結構調整丨巨頭低價博弈,拼多多還卷得動嗎?

    來源:征探財經作者:陳香羽隨著流量紅利的退潮,電商的存量博弈越來越明顯。曾經主攻中高端與品質的淘寶天貓、京東重拾“低價”口號。而過去與他們錯位競爭的拼多多,靠
  • iQOO 11S屏幕細節公布:首發三星2K E6全感屏 安卓最好的直屏手機

    日前iQOO手機官方宣布,新一代電競旗艦iQOO 11S將會在7月4日19:00正式與大家見面。隨著發布時間的日益臨近,官方關于該機的預熱也更加密集,截至目前已
  • OPPO Reno10 Pro英雄聯盟定制禮盒公布:薩勒芬妮同款配色夢幻十足

    5月24日,OPPO推出了全新的OPPO Reno 10系列,包含OPPO Reno10、OPPO Reno10 Pro和OPPO Reno10 Pro+三款新機,全系標配了超光影長焦鏡頭,是迄今為止拍照
  • 蘋果140W USB-C充電器:采用氮化鎵技術

    據10 月 30 日 9to5 Mac 消息報道,當蘋果推出新的 MacBook Pro 2021 時,該公司還推出了新的 140W USB-C 充電器,附贈在 MacBook Pro 16 英寸機型的盒子里,也支
  • “買真退假” 這種“羊毛”不能薅

    □ 法治日報 記者 王春   □ 本報通訊員 胡佳麗  2020年初,還在上大學的小東加入了一個大學生兼職QQ群。群主“七王”在群里介紹一些刷單賺
Top 主站蜘蛛池模板: 麻江县| 开化县| 金溪县| 万荣县| 宿州市| 阜南县| 简阳市| 荣昌县| 年辖:市辖区| 锦州市| 阿勒泰市| 宣化县| 璧山县| 海原县| 和平县| 邢台县| 漳平市| 嘉峪关市| 石台县| 张家界市| 云南省| 柯坪县| 塔城市| 政和县| 晋城| 化隆| 榆社县| 贡嘎县| 临沧市| 秭归县| 缙云县| 绥芬河市| 库伦旗| 花垣县| 安化县| 盐城市| 永昌县| 双牌县| 永登县| 饶阳县| 隆化县|