成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

我所理解的服務(wù)化

YFan / 2282人閱讀

摘要:當(dāng)不用服務(wù)時(shí),非常容易寫事務(wù)或者其他邏輯保持?jǐn)?shù)據(jù)一致性,服務(wù)化后難以做到這一點(diǎn)回滾可能都是調(diào)用服務(wù),依然可能失敗不必要的服務(wù)間請(qǐng)求增多。

講故事環(huán)節(jié)

我先講個(gè)故事

很久很久以前(其實(shí)現(xiàn)在大部分網(wǎng)站都是這樣),我們做一個(gè)網(wǎng)站,所有的功能代碼都會(huì)在一個(gè)代碼庫(kù)中,部署的時(shí)候 db 幾臺(tái)機(jī)器、nginx 幾臺(tái)機(jī)器、業(yè)務(wù) server 幾臺(tái)機(jī)器。其中業(yè)務(wù) server 的所有邏輯都是在一個(gè)進(jìn)程中的,例如網(wǎng)站的登錄、用戶的評(píng)論、新建問(wèn)題、某個(gè)活動(dòng)等等。

一起看起來(lái)很美好。

突然有一天,老板說(shuō)我們搞個(gè)紅包活動(dòng)吧,微信紅包,上線后由于中國(guó)人的薅羊毛心態(tài),活動(dòng)頁(yè)面 qps 瞬間暴增,導(dǎo)致網(wǎng)站的登錄邏輯 qps 也暴增,活動(dòng)頁(yè)面壓垮的同時(shí),所有其他業(yè)務(wù)全部504,擴(kuò)容時(shí)也是整個(gè) server 一臺(tái)一臺(tái)的加。擴(kuò)容后發(fā)現(xiàn),其實(shí) qps 大的頁(yè)面就只有這個(gè)活動(dòng)也,容器上其他頁(yè)面全部都是資源浪費(fèi)。

所以造成上面現(xiàn)象的問(wèn)題有這么幾個(gè)

降級(jí)邏輯,一個(gè)邊緣東西跪了不應(yīng)該影響全站(除非是極為核心邏輯、例如登錄)

不能定點(diǎn)擴(kuò)容

這時(shí)候就在想,如果登錄是一個(gè)服務(wù),自己的業(yè)務(wù)也寫成一個(gè)服務(wù),主站的其他業(yè)務(wù)不動(dòng),登錄、活動(dòng)、主站業(yè)務(wù)分機(jī)器部署,活動(dòng) qps 來(lái)的時(shí)候我只要擴(kuò)展登錄和活動(dòng)的容器就好了。而且這樣在活動(dòng)的這個(gè)服務(wù)中可以方便的接入登錄的降級(jí)。

什么是降級(jí)

簡(jiǎn)單的理解,降級(jí)就是指需要被降級(jí)的東西跪了的時(shí)候,業(yè)務(wù)不會(huì)5xx。

土辦法的做法就是加 try except,這樣就會(huì)有這么一個(gè)問(wèn)題,例如下面的代碼中,do_something 可能是 mysql 的一次寫,其他耗時(shí)操作的一次查,當(dāng) do_something 徹底跪了的時(shí)候,如果用 try except,每個(gè) qps 來(lái)的時(shí)候,do_something 會(huì)依然執(zhí)行,例如 mysql 跪了起不來(lái),do_something 每次都會(huì)去連接 mysql,然后500。

    try:
        do_something()
    except Exception as ex:
        logging.error(ex, exc_info=1)

那么我們明知道這個(gè)地方跪了,為什么還要一直打他呢?降級(jí)時(shí)可不可以在一定時(shí)間內(nèi)返回一個(gè)默認(rèn)值,不去真實(shí)的做 do_something,或者在接下來(lái)的一定次數(shù)的 qps 返回一個(gè)默認(rèn)值?

Hystrix的降級(jí)策略

所以什么是服務(wù)化

看看下面知乎的這個(gè)專欄好了

知乎服務(wù)化
知乎的一個(gè)回答
實(shí)施微服務(wù),我們需要哪些基礎(chǔ)框架? 這個(gè)撿著看

服務(wù)化的優(yōu)點(diǎn)和缺點(diǎn)

優(yōu)點(diǎn)

根據(jù)服務(wù)擴(kuò)容簡(jiǎn)單

降級(jí)容易做(就可以評(píng)論跪了整個(gè)網(wǎng)站其他功能還活著)

上線時(shí)只上自己對(duì)應(yīng)的服務(wù)即可,不影響其他業(yè)務(wù)(數(shù)據(jù)相關(guān)還會(huì)影響)

缺點(diǎn)

業(yè)務(wù)拆分定級(jí),否則會(huì)服務(wù)爆炸(是個(gè)功能就寫個(gè)服務(wù),后期服務(wù)巨多無(wú)比)

數(shù)據(jù)一致性難以保持。當(dāng)不用服務(wù)時(shí),非常容易寫事務(wù)或者其他邏輯保持?jǐn)?shù)據(jù)一致性,服務(wù)化后難以做到這一點(diǎn)(回滾可能都是調(diào)用服務(wù),依然可能失?。?/p>

不必要的服務(wù)間請(qǐng)求增多。不用服務(wù)時(shí),很多東西查一次可以用上下文的形式傳遞,服務(wù)化后服務(wù)內(nèi)部可能需要自己重新查一遍。

批量接口難以實(shí)現(xiàn)

服務(wù)間解耦,一般采用消息系統(tǒng)(kafka),需要消息系統(tǒng)穩(wěn)定

非 rpc 層的單測(cè)是騙自己的,畢竟 rpc 調(diào)用的地方都會(huì) mock

怎么服務(wù)化

業(yè)務(wù)拆分是逃不掉的,服務(wù)化后還需要慢慢替換原有實(shí)現(xiàn)。

我們重點(diǎn)說(shuō)下技術(shù)手段

你可以選擇 rest 或者 rpc,協(xié)議的話 HTTP 開銷比較大,業(yè)界現(xiàn)在似乎比較主流的選擇是 thrift 協(xié)議,然后做一個(gè) rpc。給出餓了么實(shí)現(xiàn)的一套 python 版本 thriftpy。

所以坑爹的點(diǎn)就在于,你拿到一套 thrift 的協(xié)議的時(shí)候,例如 thriftpy,他不像 django、ruby on rails之類的會(huì)有非常明確的代碼分層要求,如果內(nèi)部不在強(qiáng)行定義規(guī)范,每個(gè)開發(fā)寫出的服務(wù)都不一樣。

那么當(dāng)你服務(wù)有多個(gè)容器后,怎么方便分組部署呢?首先你需要服務(wù)發(fā)現(xiàn) consul, 例如我們定義一個(gè)服務(wù)叫做用戶服務(wù) member,他可能在物理機(jī) A 3001端口,3002端口,物理機(jī) B 3001端口起了3個(gè) rpc server,consul 可以注冊(cè)一個(gè) member,物理機(jī)端口的事兒同樣注冊(cè)在里面,業(yè)務(wù)方只要用 member 這個(gè)名字就好了,不必知道具體打的是哪一臺(tái)物理機(jī)的那個(gè) server。

配套食用的可能還有 haproxy 做負(fù)載均衡的,我沒用過(guò)表示只知道這玩意兒。

你真的需要服務(wù)化么

這個(gè)是非常需要思考的問(wèn)題。如果你的網(wǎng)站 qps 非常低,搞毛幺蛾子。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/40752.html

相關(guān)文章

  • 我所理解接口設(shè)計(jì)

    摘要:前言自己做接口開發(fā)的時(shí)間也算不短了三年,想寫這篇文章其實(shí)差不多已經(jīng)有一年多的時(shí)間了。 前言 自己做接口開發(fā)的時(shí)間也算不短了(三年),想寫這篇文章其實(shí)差不多已經(jīng)有一年多的時(shí)間了。我將從下面的方向來(lái)對(duì)我所理解的接口設(shè)計(jì)做個(gè)總結(jié): 接口參數(shù)定義 -> 接口版本化的問(wèn)題 -> 接口的安全性 -> 接口的代碼設(shè)計(jì) -> 接口的可讀性 -> 接口文檔 -> 我遇到的坑 接口參數(shù)定義 接口設(shè)計(jì)中往可...

    taoszu 評(píng)論0 收藏0
  • 簡(jiǎn)述我所理解 PHP Trait

    摘要:和組合的語(yǔ)義定義了一種減少?gòu)?fù)雜性的方式,避免傳統(tǒng)多繼承和類相關(guān)典型問(wèn)題。隊(duì)列的目的是將耗時(shí)的任務(wù)延時(shí)處理,比如發(fā)送郵件,從而大幅度縮短請(qǐng)求和相應(yīng)的時(shí)間。同樣的道理,根據(jù)引入不同的來(lái)完成對(duì)應(yīng)的功能。 showImg(https://segmentfault.com/img/remote/1460000010868178); Trait 概念 在常規(guī)的 PHP 開發(fā)中,我們都習(xí)慣于先編寫一...

    gecko23 評(píng)論0 收藏0
  • Why Kubernetes ,我所理解docker與k8s

    摘要:去年換工作后,開始真正在生產(chǎn)環(huán)境中接觸容器與。今天想先談?wù)劊依斫獾娜萜魇鞘裁?,以及為什么它們能火起?lái)。一個(gè)容器鏡像的實(shí)質(zhì)就是程序進(jìn)程加所有運(yùn)行時(shí)環(huán)境及配置依賴的集合。這里再談?wù)勎依斫獾?。而,就是目前的容器編排的平臺(tái)的事實(shí)標(biāo)準(zhǔn)了。 去年換工作后,開始真正在生產(chǎn)環(huán)境中接觸容器與Kubernetes。邊惡補(bǔ)相關(guān)知識(shí)的同時(shí),也想把學(xué)到的內(nèi)容和自己的理解整理出來(lái)。學(xué)習(xí)的途徑包括k8s官方文檔...

    Taste 評(píng)論0 收藏0
  • Why Kubernetes ,我所理解docker與k8s

    摘要:去年換工作后,開始真正在生產(chǎn)環(huán)境中接觸容器與。今天想先談?wù)?,我理解的容器是什么,以及為什么它們能火起?lái)。一個(gè)容器鏡像的實(shí)質(zhì)就是程序進(jìn)程加所有運(yùn)行時(shí)環(huán)境及配置依賴的集合。這里再談?wù)勎依斫獾?。而,就是目前的容器編排的平臺(tái)的事實(shí)標(biāo)準(zhǔn)了。 去年換工作后,開始真正在生產(chǎn)環(huán)境中接觸容器與Kubernetes。邊惡補(bǔ)相關(guān)知識(shí)的同時(shí),也想把學(xué)到的內(nèi)容和自己的理解整理出來(lái)。學(xué)習(xí)的途徑包括k8s官方文檔...

    maochunguang 評(píng)論0 收藏0
  • 我所理解原型&原型鏈

    摘要:有以下幾點(diǎn)三圖片解析是原型鏈的鏈接通過(guò)查找到,是原型的關(guān)鍵字是實(shí)例對(duì)象是構(gòu)造函數(shù)通過(guò)找到所以構(gòu)造器的原型屬于對(duì)象,也就是說(shuō)是出來(lái)的。同理找到,發(fā)現(xiàn)屬性,輸出五參考資料原型與原型鏈如果有理解不對(duì)的地方,歡迎大佬指正 一、題目 我們先看一道題目 var F = function() {}; Object.prototype.a = function() { ...

    Allen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<