自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一篇文章帶你讀懂“熱壞了”的微服務(wù)

云計(jì)算
微服務(wù)之所以被炒的如此之熱,主要是因?yàn)槿萜鞯某霈F(xiàn),PaaS服務(wù)提供商,不斷的鼓吹微服務(wù)帶來(lái)的好處,以此來(lái)吸引眾多中小開(kāi)發(fā)者使用其服務(wù)。像go語(yǔ)言一樣,中國(guó)似乎又領(lǐng)先世界了。年度總結(jié),看完這個(gè)你應(yīng)該知道如何回答別人的問(wèn)題了。

年度總結(jié),看完這個(gè)你應(yīng)該知道如何回答別人的問(wèn)題了。

 

一、微服務(wù)的定義

實(shí)際上沒(méi)有太明確的定義,我覺(jué)得很多互聯(lián)網(wǎng)公司已經(jīng)是微服務(wù)了,Martin Fowler的定義也比較模糊,簡(jiǎn)單的幾個(gè)特征,可以總結(jié)為:

  • 專(zhuān)注做一件事;
  • 獨(dú)立的進(jìn)程;
  • 獨(dú)立的部署;
  • 小;
  • 輕量級(jí)的通信機(jī)制。

如果聯(lián)想一下相關(guān)詞匯,又會(huì)想到服務(wù)化、SOA,在我看來(lái),根本不需要糾結(jié)這些概念性的東西,就好比SOA的時(shí)代,也不是所有的應(yīng)用都采用ws,而微服務(wù),代碼行數(shù),通信機(jī)制這些也未必能滿(mǎn)足定義。最重要的是適合業(yè)務(wù)場(chǎng)景,不必完全按照微服務(wù)的定義來(lái)做。每個(gè)公司都有自己的業(yè)務(wù)特色,適合的一定是個(gè)性的。因?yàn)榧軜?gòu)不只是技術(shù)因素決定的,跟業(yè)務(wù)、公司文化、組織結(jié)構(gòu)、人員水平都息息相關(guān)。例如facebook一直奉行的單體應(yīng)用,據(jù)說(shuō)一個(gè)應(yīng)用有千萬(wàn)行代碼級(jí)別,同時(shí)發(fā)布,做的也非常棒,也能很好的持續(xù)交付,那是因?yàn)樯厦嫖艺f(shuō)的那些因素都能滿(mǎn)足,如果換一個(gè)公司,未必能做的很好。當(dāng)然,對(duì)于我們來(lái)說(shuō),我們要選的是那條最好走的路。

二、微服務(wù)帶來(lái)的好處

實(shí)際上所說(shuō)的所有微服務(wù)的好處都是來(lái)自于和單體應(yīng)用的對(duì)比。

組織結(jié)構(gòu)。組織結(jié)構(gòu)和架構(gòu)是映射關(guān)系,如果你想知道某個(gè)公司的架構(gòu)是怎么做的,完全可以根據(jù)組織結(jié)構(gòu)推導(dǎo)出來(lái)。當(dāng)一個(gè)團(tuán)隊(duì)的人數(shù)太多的時(shí)候,溝通效率急劇下降,團(tuán)隊(duì)成員的主人翁精神也降低一個(gè)層次。這和敏捷開(kāi)發(fā)是一致的。

功能復(fù)用。抽象通用的部分,減少重復(fù)代碼,本身就是效率的提升。另一點(diǎn),因?yàn)榉?wù)被切分為足夠小的粒度,容易變更。假設(shè)是一個(gè)大的應(yīng)用,要進(jìn)行重構(gòu),相對(duì)于微服務(wù)來(lái)說(shuō),要復(fù)雜的多,因?yàn)槟悴豢赡苤蛔鲋貥?gòu),而不去接新的需求。如果切分的粒度夠小,完全可以在接口不變的情況下,神不知鬼不覺(jué)的重構(gòu)。

容錯(cuò)。服務(wù)運(yùn)行在不同的進(jìn)程中,無(wú)疑隔離性更好,某一個(gè)點(diǎn)導(dǎo)致的故障影響面更小。

、微服務(wù)帶來(lái)的災(zāi)難

最重要的是適合業(yè)務(wù)場(chǎng)景,不必非得采用微服務(wù),微服務(wù)并不是一種炫酷的技術(shù)或者架構(gòu)思想,同時(shí)采用微服務(wù)會(huì)帶來(lái)很多問(wèn)題:

依賴(lài)關(guān)系。原來(lái)一個(gè)應(yīng)用可能會(huì)被拆分成幾個(gè)或者幾十個(gè)應(yīng)用,服務(wù)數(shù)量爆炸式增長(zhǎng),導(dǎo)致依賴(lài)關(guān)系復(fù)雜,除非有一套非常好的服務(wù)注冊(cè)發(fā)現(xiàn)機(jī)制,漂亮的依賴(lài)關(guān)系統(tǒng)計(jì)圖,否則在服務(wù)數(shù)量超過(guò)100的時(shí)候,無(wú)論哪個(gè)架構(gòu)師都搞不明白他們之間到底是什么關(guān)系。同時(shí)對(duì)開(kāi)發(fā)人員遵守標(biāo)準(zhǔn)、規(guī)范的要求也空前提升。

性能。原本進(jìn)程內(nèi)的調(diào)用關(guān)系變成了網(wǎng)絡(luò)調(diào)用,一次rpc變成了幾次或者幾十次rpc,同等條件下性能損失嚴(yán)重。(如果采用http+json,比netty+kryo、protobuf、thrift又會(huì)下降幾乎一半性能,包括響應(yīng)時(shí)間和吞吐量)

一致性。原本本地事務(wù)有可能變成了分布式事務(wù),這個(gè)非??简?yàn)服務(wù)切分的規(guī)則,考驗(yàn)架構(gòu)師對(duì)業(yè)務(wù)的理解程度。就算采用最終一致性,也要在各個(gè)服務(wù)中做好容錯(cuò)機(jī)制,假設(shè)調(diào)用失敗如何處理,如果重試,重試幾次失敗怎么辦?調(diào)用成功,返回ack失敗時(shí),怎么保證生產(chǎn)者的冪等性。

復(fù)雜度。服務(wù)數(shù)量多,依賴(lài)關(guān)系多,給開(kāi)發(fā)、測(cè)試都帶來(lái)了更大的挑戰(zhàn)。架構(gòu)師也需要定義一些規(guī)則,服務(wù)分層。例如服務(wù)分為原子服務(wù)、組合服務(wù)、流程服務(wù),下層是不能調(diào)用上層的,如果允許調(diào)用,會(huì)導(dǎo)致循環(huán)依賴(lài)的問(wèn)題。同一份數(shù)據(jù)可能上上下下調(diào)用了好多次。有可能只需要調(diào)用一次原子服務(wù),因?yàn)樯蠈拥幕靵y,下來(lái)可能變成了幾次。

四、如何做好微服務(wù)

要做好,就要先做好準(zhǔn)備。

提升架構(gòu)能力非常重要的一個(gè)手段就是平臺(tái)化驅(qū)動(dòng)。通過(guò)抽離通用部分,用最核心的人去研發(fā),做到最穩(wěn)定。如果非要說(shuō)google的架構(gòu)能力遠(yuǎn)遠(yuǎn)領(lǐng)先于百度,那并不是百度的業(yè)務(wù)開(kāi)發(fā)人員比google的差很多,而是google平臺(tái)化的架構(gòu)遠(yuǎn)遠(yuǎn)強(qiáng)于百度。例如容器、分布式數(shù)據(jù)庫(kù)。

So,要做好微服務(wù),先要解決的是相關(guān)的框架、中間件、組件、通用服務(wù)。在這些都準(zhǔn)備好的了情況下,業(yè)務(wù)開(kāi)發(fā)人員根本不需要關(guān)心太多。

舉幾個(gè)例子,

  • 要解決依賴(lài)關(guān)系問(wèn)題,就要有一個(gè)服務(wù)發(fā)現(xiàn)注冊(cè)中心。
  • 要解決性能問(wèn)題,讀的問(wèn)題可以通過(guò)緩存來(lái)補(bǔ)償。可以采用并行、異步、非阻塞等方式補(bǔ)償性能,當(dāng)然這些都可以封裝到通用的rpc框架里面。
  • 要解決一致性問(wèn)題,就要有一個(gè)通用的事務(wù)處理平臺(tái)。如果采用最終一致性,就把重試策略封裝到框架。
  • 要解決復(fù)雜度問(wèn)題,就要定義一系列標(biāo)準(zhǔn)、規(guī)范,通過(guò)工具來(lái)檢測(cè)問(wèn)題。建立一整套devops平臺(tái),自動(dòng)化測(cè)試平臺(tái)。通過(guò)調(diào)用鏈分析,迅速定位問(wèn)題。

五、大師寄語(yǔ)

ThoughtWorks首席科學(xué)家MartinFowler 在Monolith First中寫(xiě)道:

i. Almost all the successful microservicestories have started with a monolith that got too big and was broken up

ii.Almost all the cases where I've heard ofa system that was built as a microservice system from scratch, it has ended upin serious trouble.

所有的成功的微服務(wù)的故事都是以單體應(yīng)用太大開(kāi)始的,逐步的拆分。我聽(tīng)到的所有的一個(gè)從無(wú)到有被創(chuàng)建為微服務(wù)的系統(tǒng),他們都以遇到很大麻煩而告終。

六、總結(jié)

總結(jié)一下,做微服務(wù)之前,需要審視一下,目前的業(yè)務(wù)場(chǎng)景、技術(shù)實(shí)力,是不是需要把應(yīng)用拆分到“微”的粒度。優(yōu)雅的架構(gòu)總是和實(shí)用的架構(gòu)有距離的。在沒(méi)有足夠的能力之前,應(yīng)該盡量選擇更實(shí)用的架構(gòu)。

微服務(wù)之所以被炒的如此之熱,主要是因?yàn)槿萜鞯某霈F(xiàn),PaaS服務(wù)提供商,不斷的鼓吹微服務(wù)帶來(lái)的好處,以此來(lái)吸引眾多中小開(kāi)發(fā)者使用其服務(wù)。像go語(yǔ)言一樣,中國(guó)似乎又領(lǐng)先世界了。

如果你的體量還不大,首先應(yīng)該解決的是搭建好一套絕對(duì)穩(wěn)定的平臺(tái)化服務(wù),待體量逐漸長(zhǎng)大,再去根據(jù)實(shí)際需要進(jìn)行不斷發(fā)分裂。團(tuán)隊(duì)也隨之變化。

如果體量足夠大,飽受單體應(yīng)用之苦,也應(yīng)該先建設(shè)平臺(tái)化服務(wù),建設(shè)好之后,先按照大的粒度進(jìn)行拆分,逐步“微”化,否則,可能在你還沒(méi)成功之前,已經(jīng)被解雇了。

【本文來(lái)源:奔跑中的蝸牛公眾號(hào)】

責(zé)任編輯:Ophira 來(lái)源: 奔跑中的蝸牛公眾號(hào)
相關(guān)推薦

2018-04-09 16:35:10

數(shù)據(jù)庫(kù)MySQLInnoDB

2021-05-09 09:06:24

Python批處理命令

2022-02-21 09:44:45

Git開(kāi)源分布式

2023-05-12 08:19:12

Netty程序框架

2021-06-30 00:20:12

Hangfire.NET平臺(tái)

2019-09-24 14:19:12

PythonC語(yǔ)言文章

2023-07-30 15:18:54

JavaScript屬性

2023-05-08 08:21:15

JavaNIO編程

2021-01-26 23:46:32

JavaScript數(shù)據(jù)結(jié)構(gòu)前端

2021-03-09 14:04:01

JavaScriptCookie數(shù)據(jù)

2021-06-24 09:05:08

JavaScript日期前端

2021-09-27 09:18:30

ListIterato接口方法

2023-09-06 14:57:46

JavaScript編程語(yǔ)言

2024-01-30 13:47:45

2024-04-19 14:23:52

SwitchJavaScript開(kāi)發(fā)

2020-12-08 08:09:49

SVG圖標(biāo)Web

2021-03-05 18:04:15

JavaScript循環(huán)代碼

2021-05-18 08:30:42

JavaScript 前端JavaScript時(shí)

2021-02-26 20:01:57

SVG濾鏡元素

2021-05-15 09:18:04

Python進(jìn)程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)