如何利用某個軟件做一個網(wǎng)站長沙百度搜索排名優(yōu)化
博主介紹:?全網(wǎng)粉絲4W+,全棧開發(fā)工程師,從事多年軟件開發(fā),在大廠呆過。持有軟件中級、六級等證書??商峁┪⒎?wù)項目搭建與畢業(yè)項目實戰(zhàn)、定制、遠(yuǎn)程,博主也曾寫過優(yōu)秀論文,查重率極低,在這方面有豐富的經(jīng)驗?
博主作品:《Java項目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+MySQL+Vue等前后端分離項目,可以在左邊的分類專欄找到更多項目?!禪niapp項目案例》有幾個有uniapp教程,企業(yè)實戰(zhàn)開發(fā)。《微服務(wù)實戰(zhàn)》專欄是本人的實戰(zhàn)經(jīng)驗總結(jié),《Spring家族及微服務(wù)系列》專注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源碼解讀、熱門面試題、架構(gòu)設(shè)計等。除此之外還有不少文章等你來細(xì)細(xì)品味,更多驚喜等著你哦
🍅開源項目免費(fèi)哦:點(diǎn)擊這里克隆或者下載?,已經(jīng)發(fā)布Vue3版 ? 🍅
🍅文末獲取聯(lián)系🍅精彩專欄推薦訂閱👇🏻👇🏻 不然下次找不到喲
Java項目案例《100套》
uniapp小程序《100套》
目錄
一、為什么選擇Nacos
二、DNS-F的技術(shù)價值
三、DNS-F的應(yīng)用場景
四、DNS-F在數(shù)據(jù)庫場景的落地
💖微服務(wù)實戰(zhàn)
一、為什么選擇Nacos
虎牙關(guān)注 Nacos 是從 v0.2 開始的,也參與了社區(qū)的建設(shè),可以說是最早期的企業(yè)用戶。
在虎牙的微服務(wù)場景中,原先存在多個注冊中心,每個注冊中心服務(wù)于不同的微服務(wù)部分,導(dǎo)致缺少一個能夠整合這些注冊中心,并將它們逐一打通的大型注冊中心來管理整個微服務(wù)生態(tài)系統(tǒng)。因此,考慮使用Nacos作為服務(wù)注冊中心,以下是考慮使用Nacos的原因:
1. 相比其他方案,Nacos可以與多個開源產(chǎn)品集成,例如k8s,spring cloud和dubbo, 并使用dns-f作為agent,因此不需要額外的配置或本地安裝agents或SDK。
2. Tseer Agent, Consul等方案需要本地安裝agents或SDK,且他們僅僅提供限定的接口,因此,它們不太適合支持不同的開源產(chǎn)品。
3. K8s使用coreDNS來查詢IP地址,但為集群配置單個DNS,因此無法管理整個微服務(wù)生態(tài)系統(tǒng),而Nacos則可以用來管理整個微服務(wù)生態(tài)系統(tǒng)。
4. Spring Cloud的大部分功能需要深度集成SDK中才能實現(xiàn),這使得它難以支持其他語言。
5. L5是騰訊內(nèi)部的服務(wù)發(fā)現(xiàn)方案,同樣需要本地安裝L5 agent,向L5 DNS獲取到服務(wù)數(shù)據(jù),因此也不能適應(yīng)不同的開源產(chǎn)品。 綜上,我們認(rèn)為使用Nacos作為服務(wù)注冊中心是一個非常好的選擇,因為它可以通過dns-f作為agent,并且支持多種開源產(chǎn)品的集成,同時也為提供了一個管理整個微服務(wù)生態(tài)系統(tǒng)的中心。心。
Nacos支持DNS-F功能,可以集成多個開源產(chǎn)品(如K8S、Spring Cloud和Dubbo)以實現(xiàn)服務(wù)的注冊。在選擇服務(wù)配置中心方案時,希望能夠打通配置中心和注冊中心,以省去在微服務(wù)治理方面的投入。因此,還比較了幾個服務(wù)配置中心的開源方案
在當(dāng)前技術(shù)發(fā)展的背景下,許多開發(fā)者都在關(guān)注和探索不同的配置中心(Configuration Center),如Nacos、Spring Cloud Config Server、ZooKeeper和Etcd等。這些工具通過提供一個中心化存儲器和API接口,使得配置修改、版本管理和配置推送等功能變得更加高效。 雖然這些配置中心都有著其獨(dú)特的優(yōu)勢,但是它們同時也存在一些不同的缺點(diǎn)。
下面將這些配置中心進(jìn)行優(yōu)缺點(diǎn)對比:
- Nacos: Nacos提供一個直接在控制臺上進(jìn)行配置修改的功能,并且修改的配置能夠自動推送到監(jiān)聽的客戶端。同時,它還支持多種API接口(RESTful API,Java Native接口,Spring Cloud接口等),并且能夠自動記錄各個修改的版本信息,便于追蹤和管理??偟膩碚f,Nacos具有易用性高、擴(kuò)展性強(qiáng)、功能豐富等特點(diǎn)。
- Spring Cloud Config Server: Spring Cloud Config Server需要使用Git倉庫進(jìn)行配置修改,并且客戶端只能在啟動的時候加載。雖然它也支持多種API接口和其他語言客戶端,但是在版本管理方面相對比較弱??偟膩碚f,Spring Cloud Config Server適用于Web應(yīng)用程序,特別是基于Spring的應(yīng)用程序。
- ZooKeeper: ZooKeeper是一個支持Java原生接口的配置中心,同時提供配置自動推送的功能。但是,它沒有自動記錄版本信息和配置推送歷史等功能,需要通過調(diào)用ZK API進(jìn)行相應(yīng)的修改。總的來說,ZooKeeper適用于分布式系統(tǒng)的管理和控制。
- Etcd: Etcd通過提供RESTful API進(jìn)行配置修改,并且修改的配置能夠自動推送到監(jiān)聽的客戶端。但是,它也沒有自動記錄版本信息和配置推送歷史等功能,且也需要通過調(diào)用來Etcd API進(jìn)行相應(yīng)的修改??偟膩碚f,Etcd適用于基于容器的云原生應(yīng)用程序和大規(guī)模分布式系統(tǒng)。 基于以上對比和綜合分析,建議選擇Nacos作為配置中心。因為它不僅易于使用和擴(kuò)展,而且具有較強(qiáng)的版本管理和配置推送追蹤能力,適合各種類型的應(yīng)用程序
針對微服務(wù)體系現(xiàn)狀以及業(yè)務(wù)場景,在諸多可選服務(wù)注冊和服務(wù)發(fā)現(xiàn)的方案中,綜合對比了Spring Cloud Config Server、Zookeeper 和 ETCD,最終選擇了Nacos。在使用過程中,發(fā)現(xiàn)Nacos的優(yōu)勢遠(yuǎn)比調(diào)研過程中發(fā)現(xiàn)的更多。下面,將以DNS-F、Nacos-Sync、CMDB 和負(fù)載均衡為例,分享虎牙的實踐
二、DNS-F的技術(shù)價值
Nacos提供的DNS-F功能帶來的技術(shù)價值有以下四個方面。
首先,DNS-F功能填補(bǔ)了內(nèi)部微服務(wù)缺乏全局動態(tài)調(diào)度能力的空白。相比之下,多個微服務(wù)體系之間缺乏獨(dú)立和協(xié)同操作能力,需要借助Nacos來融合注冊中心以使微服務(wù)體系之間實現(xiàn)全局動態(tài)調(diào)度。
其次,DNS-F解決了服務(wù)端內(nèi)部面臨的挑戰(zhàn),包括延時、解析不準(zhǔn)和故障牽引慢的問題。在具體應(yīng)用時,一些微服務(wù)框架并不支持同機(jī)房或者CMDB路由。在一個服務(wù)被注冊到多個IDC中心后,即使在同一機(jī)房內(nèi),也可能調(diào)用不同機(jī)房的節(jié)點(diǎn),導(dǎo)致無端延遲和解析不準(zhǔn)。即使在DNS解析優(yōu)化之后,也不可能解決全部 延時和解析不準(zhǔn)問題,因為DNS只是IP策略的近地解析,并不能根據(jù)服務(wù)的物理狀態(tài)和物理信息進(jìn)行路由,同時缺乏統(tǒng)一的注冊中心,當(dāng)核心服務(wù)出現(xiàn)異常問題時,難以準(zhǔn)確判斷如何進(jìn)行故障牽引,從而導(dǎo)致故障牽引慢。連接Nacos的全局注冊中心和配置中心可以解決這些問題。(目前,虎牙還在微服務(wù)體系的改造過程中,未完全實現(xiàn)統(tǒng)一的注冊中心)
第三,DNS-F功能提供了專線流量牽引能力,解決了核心機(jī)房流量互通的問題。專線特有的物理建設(shè)特性和專線容量的冗余只有50%的情況下,某個服務(wù)可能出現(xiàn)突發(fā)流量大于平時兩百倍的情況,超出專線的建設(shè)能力,從而可能導(dǎo)致全網(wǎng)故障。但是,通過Nacos的全局注冊中心和調(diào)度能力,可以將流量牽引到其他地方,例如遷移到公網(wǎng)或者牽引到一個不存在的地址來平衡流量。某個服務(wù)出現(xiàn)問題,也不會影響全局服務(wù)。
第四,DNS-F功能支持服務(wù)端的多種調(diào)度需求,包括同機(jī)房路由、同機(jī)器路由,以及同機(jī)架路由。同時,基于Nacos的DNS-F功能,還實現(xiàn)了外部域名解析的加速和服務(wù)故障牽引的秒級生效。
三、DNS-F的應(yīng)用場景
該圖描繪了 Nacos DNS-F 的實際運(yùn)作。它通過攔截 OS 層的 DNS 請求來處理域名。當(dāng) DNS 請求的域名屬于內(nèi)部服務(wù)時,Nacos DNS-F會從 Nacos Server 獲取結(jié)果。如果域名并非內(nèi)部服務(wù),Nacos DNS-F 將會將其轉(zhuǎn)發(fā)給其他 LocalDNS 完成解析。
四、DNS-F在數(shù)據(jù)庫場景的落地
以數(shù)據(jù)庫高可用的應(yīng)用場景為例,數(shù)據(jù)庫切換效率較低,依賴業(yè)務(wù)方手動修改配置,時效不確定,通常需要10分鐘以上。盡管數(shù)據(jù)庫已經(jīng)實現(xiàn)了主備功能,但當(dāng)主服務(wù)出現(xiàn)問題而需切換IP時,仍需要時間與運(yùn)維和開發(fā)協(xié)作。 為了解決這個問題,我們引入DNS技術(shù)。DNS可快速使用備用主機(jī)的IP地址進(jìn)行切換,屏蔽故障,同時自動實現(xiàn)故障檢測和故障切換,無需運(yùn)維和開發(fā)協(xié)作,節(jié)省寶貴時間。此外,也可使用MySQL-Proxy等其他場景適用的解法,但MySQL-Proxy還在建設(shè)中,使用DNS技術(shù)是目前最為合適的解決方案。 最后,分享基于DNS-F對LocalDNS的優(yōu)化。目前還沒有建設(shè)自己的LocalDNS,而是使用公共的DNS,大致有以下組成部分。
在應(yīng)用程序中,使用公共 DNS 能夠帶來某些好處。然而,這種組成方式存在一個問題:如果服務(wù)突然崩潰然后又馬上恢復(fù),我們將無法重現(xiàn)崩潰原因。這是因為在許多情況下,請求超時或解析失敗是由公共 DNS 引起的。由于無法保留現(xiàn)場信息,導(dǎo)致難以發(fā)現(xiàn)問題。 根據(jù)我們的監(jiān)測數(shù)據(jù),使用公共 DNS時,DNS 解析錯誤率約為1‰,而超時比例則更高。這意味著如果服務(wù)沒有做好容錯處理,服務(wù)會出現(xiàn)異常。值得注意的是,許多公共 DNS 解析節(jié)點(diǎn)的延遲是不穩(wěn)定的,導(dǎo)致解析延遲相差較大。比如在亞馬遜上部分不良節(jié)點(diǎn),解析延遲平均超過三四十毫秒。
為了優(yōu)化使用公共 DNS 所帶來的問題,我們針對本地DNS基于DNS-F進(jìn)行了一系列優(yōu)化。
優(yōu)化效果如下:
● 平均解析時間從之前超過兩百毫秒降低至兩毫秒以下;
● 緩存命中率從92%提升至99%以上;
● 解析失敗率之前為1‰,現(xiàn)在基本上沒有了。
這些優(yōu)化效果還體現(xiàn)在我們的風(fēng)控服務(wù)上。平均延遲與異常比例分別降低了10毫秒和25%,有效降低了因延遲或服務(wù)超時導(dǎo)致用戶上傳的圖片或文字違規(guī)事件。
💖微服務(wù)實戰(zhàn)
?【微服務(wù)】SpringCloud的OpenFeign與Ribbon配置
?集Oauth2+Jwt實現(xiàn)單點(diǎn)登錄
?Spring Cloud Alibaba微服務(wù)第29章之Rancher
?Spring Cloud Alibaba微服務(wù)第27章之Jenkins
?Spring Cloud Alibaba微服務(wù)第24章之Docker部署
?Spring Cloud Alibaba微服務(wù)第23章之Oauth2授權(quán)碼模式
?Spring Cloud Alibaba微服務(wù)第22章之Oauth2
?Spring Cloud Alibaba微服務(wù)第21章之分布式事務(wù)
?Spring Cloud Alibaba微服務(wù)第18章之消息服務(wù)
?Spring Cloud Alibaba微服務(wù)第16章之服務(wù)容錯
?Spring Cloud Alibaba微服務(wù)第14章之分庫分表
?Spring Cloud Alibaba微服務(wù)第11章之MyBatis-plus
?Spring Cloud Alibaba微服務(wù)第8章之OpenFeign
?Spring Cloud Alibaba微服務(wù)第7章之負(fù)載均衡Ribbon
?SpringCloud Alibaba微服務(wù)第6章之Gateway
?SpringCloud Alibaba微服務(wù)第4章之Nacos
?SpringCloud Alibaba微服務(wù)開篇