目前的項目使用前后端完全分離模式,前端
Vue后端Java-Dubbo-ZooKeeper,中間層Node-Moleculer。閑暇之余也來整理一下分布式系統(tǒng)和微服務(wù)架構(gòu)中的一些知識點。
當(dāng)下主流微服務(wù)架構(gòu)分類
高性能
RPC技術(shù)和服務(wù)治理類,這個領(lǐng)域最強為ZeroC IceGrid,公司目前的Dubbo也屬于這個分類,在這個分類中屬于性能一般的RPC框架。以
HTTP REST為通訊機制的通用性微服務(wù)架構(gòu),比如Spring Cloud。基于容器技術(shù)的微服務(wù)架構(gòu)平臺,并不提供特定的
RPC通訊機制,比如Google的Kubernetes,這是一個微服務(wù)架構(gòu)平臺,理論上是讓任何分布式應(yīng)用都可以在平臺上運行的。
說一些個人看法
分布式,微服務(wù),集群和云計算這些高大上的名詞幾乎都有很密切的聯(lián)系,工作接觸了之后發(fā)現(xiàn),這東西確實能在未來十多年內(nèi)繼續(xù)綻放光彩。從二十年前更傳統(tǒng)的
IPC發(fā)展到十來年前的RPC誕生,同時SOAP-XML大放光彩后又在兩三年前年前RPC變種REST-JSON替代,到今天還有人和我爭執(zhí)REST弊大于利,還有人和我大談SOAP的優(yōu)勢。而如今2018年Spring Cloud開始興起,作為JAVA程序員的你,還在觀望什么呢?關(guān)于分布式系統(tǒng)中事務(wù)一致性的相關(guān)問題,這里我說說一些原理。事務(wù)最早是在銀行業(yè)數(shù)據(jù)庫中引入的,數(shù)據(jù)庫事務(wù)要滿足四個要求:
Atomic,Consistent,Isolation,Duration,其中原子性用于事務(wù)回滾,隔離性使用數(shù)據(jù)庫互斥鎖,加上持久性三者組成了數(shù)據(jù)庫相關(guān)的大量I/O操作,及其耗費資源。如果一個事務(wù)要操作幾個數(shù)據(jù)庫服務(wù)器上的數(shù)據(jù),這種事務(wù)就叫分布式事務(wù),分布式系統(tǒng)編程難度很大,于是有人研究了一套分布式事務(wù)標(biāo)準(zhǔn)規(guī)范:
X/Open DTP。這個規(guī)范模仿TCP三次握手提出了二階段提交模型2PC,這東西應(yīng)該算這個行業(yè)內(nèi)唯一全球工委的分布式事務(wù)規(guī)范了。上面提到的三種微服務(wù)架構(gòu)也只是在各自領(lǐng)域被開發(fā)者們奉若神明,并沒有采納到國際開發(fā)標(biāo)準(zhǔn)中。微服務(wù)架構(gòu)的三種體系:
Monolith Architecture,Microservices Architecture和Mix Architecture。巨石模式下請求通過API Gateway網(wǎng)關(guān)服務(wù) 后就能看到一堆Services,微服務(wù)模式下所有服務(wù)都通過Transporter進(jìn)行通訊,這也就是消息中間件?;旌夏J较戮褪菍⒃S多服務(wù)進(jìn)行的分類部署。關(guān)于微服務(wù)架構(gòu)中各服務(wù)之間的通訊問題。我們引入的
Transporter實際上就是一個中轉(zhuǎn)站,以前有人使用文件系統(tǒng),也有人使用內(nèi)存映射,都是為了處理分布式事務(wù)一致性而采取的措施。目前比較成熟的方案是使用消息中間件,可以是TCP,Redis,RabbitMQ,NATS,Kafka等等。