部署簡單。Go編譯生成的是一個靜態(tài)可執(zhí)行文件,除了glibc外沒有其他外部依賴。這讓部署變得異常方便:目標機器上只需要一個基礎的系統(tǒng)和必要的管理、監(jiān)控工具,完全不需要操心應用所需的各種包、庫的依賴關系,大大減輕了維護的負擔。這和Python有著巨大的區(qū)別。由于歷史的原因,Python的部署工具生態(tài)相當混亂【比如setuptools,distutils,pip,
創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站建設、成都網(wǎng)站制作與策劃設計,伊通網(wǎng)站建設哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設十載,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:伊通等地區(qū)。伊通做網(wǎng)站價格咨詢:13518219792
buildout的不同適用場合以及兼容性問題】。官方PyPI源又經(jīng)常出問題,需要搭建私有鏡像,而維護這個鏡像又要花費不少時間和精力。
并發(fā)性好。Goroutine和channel使得編寫高并發(fā)的服務端軟件變得相當容易,很多情況下完全不需要考慮鎖機制以及由此帶來的各種問題。單個Go應用也能有效的利用多個CPU核,并行執(zhí)行的性能好。這和Python也是天壤之比。多線程和多進程的服務端程序編寫起來并不簡單,而且由于全局鎖GIL的原因,多線程的Python程序并不能有效利用多核,只能用多進程的方式部署;如果用標準庫里的multiprocessing包又會對監(jiān)控和管理造成不少的挑戰(zhàn)【我們用的supervisor管理進程,對fork支持不好】。部署Python應用的時候通常是每個CPU核部署一個應用,這會造成不少資源的浪費,比如假設某個Python應用啟動后需要占用100MB內(nèi)存,而服務器有32個CPU核,那么留一個核給系統(tǒng)、運行31個應用副本就要浪費3GB的內(nèi)存資源。
良好的語言設計。從學術的角度講Go語言其實非常平庸,不支持許多高級的語言特性;但從工程的角度講,Go的設計是非常優(yōu)秀的:規(guī)范足夠簡單靈活,有其他語言基礎的程序員都能迅速上手。更重要的是Go自帶完善的工具鏈,大大提高了團隊協(xié)作的一致性。比如gofmt自動排版Go代碼,很大程度上杜絕了不同人寫的代碼排版風格不一致的問題。把編輯器配置成在編輯存檔的時候自動運行gofmt,這樣在編寫代碼的時候可以隨意擺放位置,存檔的時候自動變成正確排版的代碼。此外還有gofix,
govet等非常有用的工具。
執(zhí)行性能好。雖然不如C和Java,但通常比原生Python應用還是高一個數(shù)量級的,適合編寫一些瓶頸業(yè)務。內(nèi)存占用也非常省。
GO語言雖然不如Java、Python等語言火熱,但在云計算、云存儲時代卻是最重要的基礎編程語言。作為服務器編程語言,很適合處理日志、數(shù)據(jù)打包、虛擬機處理、文件系統(tǒng)、分布式系統(tǒng)、數(shù)據(jù)庫代理等。在國外,Google、Facebook等公司在使用,國內(nèi)除了BAT外,京東、小米、360公司也在涉獵。所以GO語言的發(fā)展前景還是很值得期待。
1、頭條號通過認證每天可以發(fā)一篇文章了,作為新手的我要規(guī)劃一下未來,先對自己的作品有個原則,不至于以后迷失了方向。具體的方法是需要不斷的學習,但是原則必須堅持。
2、首先是要原創(chuàng),是做人的基本誠信,也是今日頭條的原則,很多條友都強調要想順利通過新手期必須原創(chuàng),我會堅持手碼,不做搬運工,不抄襲,所有的文章都用自己語言文字圖片,不論新手期還是以后,希望頭條的朋友們都堅持原創(chuàng)發(fā)表自己的東西。大家互勉。共同監(jiān)督共同學習,堅持原創(chuàng)精神
3、第二就是內(nèi)容上,前幾天學習了杜子建老師說自媒體內(nèi)容要喜聞樂見,我個人理解就是說要寫大家感興趣的都容易接受的內(nèi)容,多傳播正能量,讓人看了能賞心悅目的,不能太低俗,當然今日頭條也是抵制低俗文章視頻圖片的。
4、再說今日頭條的文章垂直度,就是要求每個作者專注一個領域,用通俗的話說就是發(fā)表自己專業(yè)自已擅長領域,不能什么都發(fā)。我看了歡子TV現(xiàn)在很火,專門介紹貴州農(nóng)村的生活。光頭桂哥他的哥唱的好,他是專注唱農(nóng)村光棍的歌,現(xiàn)在也做的非常好。鄉(xiāng)野丫頭的秋子姑娘就是帶大家認識湖南的農(nóng)村生活,湖南的山歌。他們都是今日頭條上的佼佼者,他們的內(nèi)容都是很專業(yè)的,是值得我們學習的典范。要想做好就必須做專做精,第一次做自媒體應該專注哪個領域呢,來自農(nóng)村,熟悉農(nóng)村的生活,在制造業(yè)工作多年,對生產(chǎn)一線新城市人很了解,寫新城市人在城里的生活,給大家?guī)砜鞓罚瑢W習分享成功者的經(jīng)驗,為有理想的人提供借鑒的機會。
5、原創(chuàng),喜聞樂見,分享。作為頭條號新手一定把這些作為今后創(chuàng)作的原則
1. 保留但大幅度簡化指針
Go語言保留著C中值和指針的區(qū)別,但是對于指針繁瑣用法進行了大量的簡化,引入引用的概念。所以在Go語言中,你幾乎不用擔心會因為直接操作內(nèi)寸而引起各式各樣的錯誤。
2. 多參數(shù)返回
還記得在C里面為了回饋多個參數(shù),不得不開辟幾段指針傳到目標函數(shù)中讓其操作么?在Go里面這是完全不必要的。而且多參數(shù)的支持讓Go無需使用繁瑣的exceptions體系,一個函數(shù)可以返回期待的返回值加上error,調用函數(shù)后立刻處理錯誤信息,清晰明了。
3. Array,slice,map等內(nèi)置基本數(shù)據(jù)結構
如果你習慣了Python中簡潔的list和dict操作,在Go語言中,你不會感到孤單。一切都是那么熟悉,而且更加高效。如果你是C++程序員,你會發(fā)現(xiàn)你又找到了STL的vector 和 map這對朋友。
4. Interface
Go語言最讓人贊嘆不易的特性,就是interface的設計。任何數(shù)據(jù)結構,只要實現(xiàn)了interface所定義的函數(shù),自動就implement了這個interface,沒有像Java那樣冗長的class申明,提供了靈活太多的設計度和OO抽象度,讓你的代碼也非常干凈。千萬不要以為你習慣了Java那種一條一條加implements的方式,感覺還行,等接口的設計越來越復雜的時候,無數(shù)Bug正在后面等著你。
同時,正因為如此,Go語言的interface可以用來表示任何generic的東西,比如一個空的interface,可以是string可以是int,可以是任何數(shù)據(jù)類型,因為這些數(shù)據(jù)類型都不需要實現(xiàn)任何函數(shù),自然就滿足空interface的定義了。加上Go語言的type assertion,可以提供一般動態(tài)語言才有的duck typing特性, 而仍然能在compile中捕捉明顯的錯誤。
5. OO
Go語言本質上不是面向對象語言,它還是過程化的。但是,在Go語言中, 你可以很輕易的做大部分你在別的OO語言中能做的事,用更簡單清晰的邏輯。是的,在這里,不需要class,仍然可以繼承,仍然可以多態(tài),但是速度卻快得多。因為本質上,OO在Go語言中,就是普通的struct操作。
6. Goroutine
這個幾乎算是Go語言的招牌特性之一了,我也不想多提。如果你完全不了解Goroutine,那么你只需要知道,這玩意是超級輕量級的類似線程的東西,但通過它,你不需要復雜的線程操作鎖操作,不需要care調度,就能玩轉基本的并行程序。在Go語言里,觸發(fā)一個routine和erlang spawn一樣簡單?;旧弦莆誈o語言,以Goroutine和channel為核心的內(nèi)存模型是必須要懂的。不過請放心,真的非常簡單。
7. 更多現(xiàn)代的特性
和C比較,Go語言完全就是一門現(xiàn)代化語言,原生支持的Unicode, garbage collection, Closures(是的,和functional programming language類似), function是first class object,等等等等。
看到這里,你可能會發(fā)現(xiàn),我用了很多輕易,簡單,快速之類的形容詞來形容Go語言的特點。我想說的是,一點都不夸張,連Go語言的入門學習到提高,都比別的語言門檻低太多太多。在大部分人都有C的背景的時代,對于Go語言,從入門到能夠上手做項目,最多不過半個月。Go語言給人的感覺就是太直接了,什么都直接,讀源代碼直接,寫自己的代碼也直接。
TiDB 是 PingCAP 自主研發(fā)的開源分布式關系型數(shù)據(jù)庫,具備商業(yè)級數(shù)據(jù)庫的數(shù)據(jù)可靠性,可用性,安全性等特性,支持在線彈性水平擴展,兼容 MySQL 協(xié)議及生態(tài),創(chuàng)新性實現(xiàn) OLTP 及 OLAP 融合。
TiDB 3.0 版本顯著提升了大規(guī)模集群的穩(wěn)定性,集群支持 150+ 存儲節(jié)點,300+TB 存儲容量長期穩(wěn)定運行。易用性方面引入大量降低用戶運維成本的優(yōu)化,包括引入 Information_Schema 中的多個實用系統(tǒng)視圖、EXPLAIN ANALYZE、SQL Trace 等。在性能方面,特別是 OLTP 性能方面,3.0 比 2.1 也有大幅提升,其中 TPC-C 性能提升約 4.5 倍,Sysbench 性能提升約 1.5 倍,OLAP 方面,TPC-H 50G Q15 因實現(xiàn) View 可以執(zhí)行,至此 TPC-H 22 個 Query 均可正常運行。新功能方面增加了窗口函數(shù)、視圖(實驗特性)、分區(qū)表、插件系統(tǒng)、悲觀鎖(實驗特性)。
截止本文發(fā)稿時 TiDB 已在 500+ 用戶的生產(chǎn)環(huán)境中長期穩(wěn)定運行,涵蓋金融、保險、制造,互聯(lián)網(wǎng), 游戲 等領域,涉及交易、數(shù)據(jù)中臺、 歷史 庫等多個業(yè)務場景。不同業(yè)務場景對關系型數(shù)據(jù)庫的訴求可用 “百花齊放”來形容,但對關系數(shù)據(jù)庫最根本的訴求未發(fā)生任何變化,如數(shù)據(jù)可靠性,系統(tǒng)穩(wěn)定性,可擴展性,安全性,易用性等。請跟隨我們的腳步梳理 TiDB 3.0 有什么樣的驚喜。
3.0 與 2.1 版本相比,顯著提升了大規(guī)模集群的穩(wěn)定性,支持單集群 150+ 存儲節(jié)點,300+TB 存儲容量長期穩(wěn)定運行,主要的優(yōu)化點如下:
1. 優(yōu)化 Raft 副本之間的心跳機制,按照 Region 的活躍程度調整心跳頻率,減小冷數(shù)據(jù)對集群的負擔。
2. 熱點調度策略支持更多參數(shù)配置,采用更高優(yōu)先級,并提升熱點調度的準確性。
3. 優(yōu)化 PD 調度流程,提供調度限流機制,提升系統(tǒng)穩(wěn)定性。
4. 新增分布式 GC 功能,提升 GC 的性能,降低大集群 GC 時間,提升系統(tǒng)穩(wěn)定性。
眾所周知,數(shù)據(jù)庫查詢計劃的穩(wěn)定性對業(yè)務至關重要,TiDB 3.0 版本采用多種優(yōu)化手段提升查詢計劃的穩(wěn)定性,如下:
1. 新增 Fast Analyze 功能,提升收集統(tǒng)計信息的速度,降低集群資源的消耗及對業(yè)務的影響。
2. 新增 Incremental Analyze 功能,提升收集單調遞增的索引統(tǒng)計信息的速度,降低集群資源的消耗及對業(yè)務的影響。
3. 在 CM-Sketch 中新增 TopN 的統(tǒng)計信息,緩解 CM-Sketch 哈希沖突導致估算偏大,提升代價估算的準確性,提升查詢計劃的穩(wěn)定性。
4. 引入 Skyline Pruning 框架,利用規(guī)則防止查詢計劃過度依賴統(tǒng)計信息,緩解因統(tǒng)計信息滯后導致選擇的查詢計劃不是最優(yōu)的情況,提升查詢計劃的穩(wěn)定性。
5. 新增 SQL Plan Management 功能,支持在查詢計劃不準確時手動綁定查詢計劃,提升查詢計劃的穩(wěn)定性。
1. OLTP
3.0 與 2.1 版本相比 Sysbench 的 Point Select,Update Index,Update Non-Index 均提升約 1.5 倍,TPC-C 性能提升約 4.5 倍。主要的優(yōu)化點如下:
1. TiDB 持續(xù)優(yōu)化 SQL 執(zhí)行器,包括:優(yōu)化 NOT EXISTS 子查詢轉化為 Anti Semi Join,優(yōu)化多表 Join 時 Join 順序選擇等。
2. 優(yōu)化 Index Join 邏輯,擴大 Index Join 算子的適用場景并提升代價估算的準確性。
3. TiKV 批量接收和發(fā)送消息功能,提升寫入密集的場景的 TPS 約 7%,讀密集的場景提升約 30%。
4. TiKV 優(yōu)化內(nèi)存管理,減少 Iterator Key Bound Option 的內(nèi)存分配和拷貝,多個 Column Families 共享 block cache 提升 cache 命中率等手段大幅提升性能。
5. 引入 Titan 存儲引擎插件,提升 Value 值超過 1KB 時性能,緩解 RocksDB 寫放大問題,減少磁盤 IO 的占用。
6. TiKV 新增多線程 Raftstore 和 Apply 功能,提升單節(jié)點內(nèi)可擴展性,進而提升單節(jié)點內(nèi)并發(fā)處理能力和資源利用率,降低延時,大幅提升集群寫入能力。
TiDB Lightning 性能與 2019 年年初相比提升 3 倍,從 100GB/h 提升到 300GB/h,即 28MB/s 提升到 85MB/s,優(yōu)化點,如下:
1. 提升 SQL 轉化成 KV Pairs 的性能,減少不必要的開銷。
2. 提升單表導入性能,單表支持批量導入。
3. 提升 TiKV-Importer 導入數(shù)據(jù)性能,支持將數(shù)據(jù)和索引分別導入。
4. TiKV-Importer 支持上傳 SST 文件限速功能。
RBAC(Role-Based Access Control,基于角色的權限訪問控制) 是商業(yè)系統(tǒng)中最常見的權限管理技術之一,通過 RBAC 思想可以構建最簡單“用戶-角色-權限”的訪問權限控制模型。RBAC 中用戶與角色關聯(lián),權限與角色關聯(lián),角色與權限之間一般是多對多的關系,用戶通過成為什么樣的角色獲取該角色所擁有的權限,達到簡化權限管理的目的,通過此版本的迭代 RBAC 功能開發(fā)完成。
IP 白名單功能(企業(yè)版特性) :TiDB 提供基于 IP 白名單實現(xiàn)網(wǎng)絡安全訪問控制,用戶可根據(jù)實際情況配置相關的訪問策略。
Audit log 功能(企業(yè)版特性) :Audit log 記錄用戶對數(shù)據(jù)庫所執(zhí)行的操作,通過記錄 Audit log 用戶可以對數(shù)據(jù)庫進行故障分析,行為分析,安全審計等,幫助用戶獲取數(shù)據(jù)執(zhí)行情況。
加密存儲(企業(yè)版特性) :TiDB 利用 RocksDB 自身加密功能,實現(xiàn)加密存儲的功能,保證所有寫入到磁盤的數(shù)據(jù)都經(jīng)過加密,降低數(shù)據(jù)泄露的風險。
完善權限語句的權限檢查 ,新增 ANALYZE,USE,SET GLOBAL,SHOW PROCESSLIST 語句權限檢查。
1. 新增 SQL 方式查詢慢查詢,豐富 TiDB 慢查詢?nèi)罩緝?nèi)容,如:Coprocessor 任務數(shù),平均/最長/90% 執(zhí)行/等待時間,執(zhí)行/等待時間最長的 TiKV 地址,簡化慢查詢定位工作,提高排查慢查詢問題效率,提升產(chǎn)品易用性。
2. 新增系統(tǒng)配置項合法性檢查,優(yōu)化系統(tǒng)監(jiān)控項等,提升產(chǎn)品易用性。
3. 新增對 TableReader、IndexReader 和 IndexLookupReader 算子內(nèi)存使用情況統(tǒng)計信息,提高 Query 內(nèi)存使用統(tǒng)計的準確性,提升處理內(nèi)存消耗較大語句的效率。
4. 制定日志規(guī)范,重構日志系統(tǒng),統(tǒng)一日志格式,方便用戶理解日志內(nèi)容,有助于通過工具對日志進行定量分析。
5. 新增 EXPLAIN ANALYZE 功能,提升SQL 調優(yōu)的易用性。
6. 新增 SQL 語句 Trace 功能,方便排查問題。
7. 新增通過 unix_socket 方式連接數(shù)據(jù)庫。
8. 新增快速恢復被刪除表功能,當誤刪除數(shù)據(jù)時可通過此功能快速恢復數(shù)據(jù)。
TiDB 3.0 新增 TiFlash 組件,解決復雜分析及 HTAP 場景。TiFlash 是列式存儲系統(tǒng),與行存儲系統(tǒng)實時同步,具備低延時,高性能,事務一致性讀等特性。 通過 Raft 協(xié)議從 TiKV 中實時同步行存數(shù)據(jù)并轉化成列存儲格式持久化到一組獨立的節(jié)點,解決行列混合存儲以及資源隔離性問題。TiFlash 可用作行存儲系統(tǒng)(TiKV)實時鏡像,實時鏡像可獨立于行存儲系統(tǒng),將行存儲及列存儲從物理隔離開,提供完善的資源隔離方案,HTAP 場景最優(yōu)推薦方案;亦可用作行存儲表的索引,配合行存儲對外提供智能的 OLAP 服務,提升約 10 倍復雜的混合查詢的性能。
TiFlash 目前處于 Beta 階段,計劃 2019 年 12 月 31 日之前 GA,歡迎大家申請試用。
未來我們會繼續(xù)投入到系統(tǒng)穩(wěn)定性,易用性,性能,彈性擴展方面,向用戶提供極致的彈性伸縮能力,極致的性能體驗,極致的用戶體驗。
穩(wěn)定性方面 V4.0 版本將繼續(xù)完善 V3.0 未 GA 的重大特性,例如:悲觀事務模型,View,Table Partition,Titan 行存儲引擎,TiFlash 列存儲引擎;引入近似物理備份恢復解決分布數(shù)據(jù)庫備份恢復難題;優(yōu)化 PD 調度功能等。
性能方面 V4.0 版本將繼續(xù)優(yōu)化事務處理流程,減少事務資源消耗,提升性能,例如:1PC,省去獲取 commit ts 操作等。
彈性擴展方面,PD 將提供彈性擴展所需的元信息供外部系統(tǒng)調用,外部系統(tǒng)可根據(jù)元信息及負載情況動態(tài)伸縮集群規(guī)模,達成節(jié)省成本的目標。
我們相信戰(zhàn)勝“未知”最好的武器就是社區(qū)的力量,基礎軟件需要堅定地走開源路線。截止發(fā)稿我們已經(jīng)完成 41 篇源碼閱讀文章。TiDB 開源社區(qū)總計 265 位 Contributor,6 位 Committer,在這里我們對社區(qū)貢獻者表示由衷的感謝,希望更多志同道合的人能加入進來,也希望大家在 TiDB 這個開源社區(qū)能夠有所收獲。
TiDB 3.0 GA Release Notes:
1、簡單易學。
Go語言的作者本身就很懂C語言,所以同樣Go語言也會有C語言的基因,所以對于程序員來說,Go語言天生就會讓人很熟悉,容易上手。
2、并發(fā)性好。
Go語言天生支持并發(fā),可以充分利用多核,輕松地使用并發(fā)。 這是Go語言最大的特點。
描述
Go的語法接近C語言,但對于變量的聲明有所不同。Go支持垃圾回收功能。Go的并行模型是以東尼·霍爾的通信順序進程(CSP)為基礎,采取類似模型的其他語言包括Occam和Limbo,但它也具有Pi運算的特征,比如通道傳輸。
在1.8版本中開放插件(Plugin)的支持,這意味著現(xiàn)在能從Go中動態(tài)加載部分函數(shù)。
與C++相比,Go并不包括如枚舉、異常處理、繼承、泛型、斷言、虛函數(shù)等功能,但增加了 切片(Slice) 型、并發(fā)、管道、垃圾回收、接口(Interface)等特性的語言級支持。