通常互聯網公司造成規模後,在技術上或多或少都有一些本身的基礎組件。這些基礎組件大致能夠分爲兩類:算法
1.徹底自研數據庫
2.二次開發後端
徹底自研的通常前提是安全
1.這個能夠有網絡
須要使用的時候確實還不存在這個組件。好比這個領域不是一個通用領域,所需的技術也比較專業。可能存在說這個技術確實沒有。架構
2.我須要的時候你不在框架
每一種技術產生都有它的歷史背景。就像諸子百家,由於沒有一個統一的學術體系,而時代又要求這麼一個東西的時候,可能就會催生出不少技術,會同雨後春筍樣的一會兒同時冒出來。前後端分離
舉個例子:socket
11年初的時候,靜兒在人人網,當時的Zookeeper尚未流行。當時配置管理和數據庫健康檢查等都是本身作的。靜兒就寫了一個socket程序來作這件事情。當時遇到過不少坑,靜兒的服務有問題,大夥兒就都從工位上站起來了:「服務跑不起來啦~」分佈式
3.就是不同
百家爭鳴,後來絕大部分被淘汰了。可是保留下來的不只有儒家學說,還有道家,後來還有佛家等等。他們各有特色,誰也不能代替誰。在技術上,也會存在功能大致同樣,可是各有側重或者實現方式不同,甚至我自主研發的可能會成爲下一個時代。
舉個例子:
剛纔說到zookeeper,zookeeper一個比較重要的應用是作服務發現,同類產品還有etcd、consul等。
zookeeper基於paxos的化簡版zab,etcd基於raft算法、consul也是基於raft算法。etcd和consul做爲後起之秀,並無由於已經有了zookeeper而放棄本身,而是採用更爲直接的raft算法。
二次開發是公司造成規模後使用基礎組件比較經常使用的方式,經常使用的二次開發方式也有兩種:
1.深度定製
優勢是能夠更貼合需求的作深度改造。缺點是版本升級困難。
2.外圍封裝
優勢是版本升級容易。缺點是個性化需求實現困難。
通常二次開發的需求場景有:
1.安全的需求
好比須要接入本身的SSO(單點登錄)系統
2.數字化運營的需求
好比公司須要對組件的穩定性、可用性作監控。對它的TPS、QPS等指標作監控和統一可視化管理。
3.個性擴展的需求
好比靜兒目前在作的基於k8s的容器化,須要一些比k8s自己支持更好的隔離性、服務自動彈性收縮和打散等等。
4.兼容性的需求
須要作一些適配。
服務治理是一個很是大的範疇。涉及的領域能夠用下面界面來感知一下。
上圖來自美團點評的服務治理平臺OCTO。
服務治理有人把它的英文名字定義爲SOA governance。它的產生得益於互聯網架構的演變。
一體架構
在傳統的一體架構中基本沒有人談服務治理。靜兒剛參加工做的時候,作過一個300人月的項目,都是放在一個工程裏的。
MVC架構
後來先後端分離,MVC架構逐漸流行,如今不少工程內部還在使用。
多應用架構
多應用架構是在領域上進行水平切分,造成相互獨立的應用。好比靜兒在人人網的時候,曾經一我的有段時間負責開放平臺系統、SNS(Social Networking Services 社交網絡服務)系統、UGC(User Generated Content 用戶原創內容)系統的開發和維護。由於其餘人都被投入新項目中了。
分佈式架構
這個談的人就比較多了,包括如今的SOA、服務化、微服務,而且在此基礎上衍生出來的平臺化、中臺化都包含着量級上的質變。
而隨着服務增多,就須要一個統一的管理,服務治理也應運而生。每一個公司都有本身的業務特色,所關心的指標各有側重,目前開源的服務治理框架也每每只是其中某些點。就好像談高可用同樣,每一個公司高可用側重點不一樣,目前基本沒有人能出來一個比較系統的高可用方案。因此這是個服務治理諸子百家的階段。
關注靜兒公衆號,不按期漫畫技術推送~