架構(gòu)師之路:微服務(wù)技術(shù)選型
作為一名架構(gòu)師,需要規(guī)劃產(chǎn)品技術(shù)路線,負(fù)責(zé)技術(shù)選型。而技術(shù)棧選型主要參考以下幾個(gè)標(biāo)準(zhǔn):
-
安全穩(wěn)定,不能經(jīng)常被爆出安全漏洞
-
開(kāi)源社區(qū)活躍度,加入Apache的組件優(yōu)先考慮
-
一線互聯(lián)網(wǎng)公司落地產(chǎn)品,有大公司為其背書(shū)
-
文檔閱讀性好
本篇為大家?guī)?lái)微服務(wù)架構(gòu)的后端技術(shù)選型,當(dāng)你需要進(jìn)行技術(shù)選型時(shí),可以參照他來(lái)設(shè)計(jì)自己的決策樹(shù)。
開(kāi)發(fā)語(yǔ)言
JAVA
主流編程語(yǔ)言,適合構(gòu)建大型后臺(tái)服務(wù)
Golang
Go語(yǔ)言是谷歌2009發(fā)布的第二款開(kāi)源編程語(yǔ)言。專門(mén)針對(duì)多處理器系統(tǒng)應(yīng)用程序的編程進(jìn)行了優(yōu)化,使用Go編譯的程序可以媲美C或C++代碼的速度,而且更加安全、支持并行進(jìn)程。Google對(duì)Go寄予厚望。其設(shè)計(jì)是讓軟件充分發(fā)揮多核心處理器同步多工的優(yōu)點(diǎn),并可解決面向?qū)ο蟪绦蛟O(shè)計(jì)的麻煩。目前作為云計(jì)算領(lǐng)域的不二之選!
開(kāi)發(fā)IDE
IntelliJ IDEA
jetbrains公司旗下產(chǎn)品,智能代碼助手、J2EE支持、各類版本工具(git、svn、github等)、JUnit、CVS整合等。多語(yǔ)言支持,免費(fèi)版只支持JAVA等少數(shù)語(yǔ)言。旗艦版為收費(fèi)版本,同時(shí)提供免費(fèi)版(功能上較旗艦版有減少)。
VS Code
VS Code是一款免費(fèi)的、開(kāi)源的、高性能的、跨平臺(tái)的、輕量級(jí)的代碼編輯器,同時(shí),在性能,語(yǔ)言支持、開(kāi)源社區(qū)方面也做的很不錯(cuò)!
開(kāi)發(fā)技術(shù)
微服務(wù)框架
Spring Cloud / Spring Cloud alibaba
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開(kāi)發(fā)便利性巧妙地簡(jiǎn)化了分布式系統(tǒng)基礎(chǔ)設(shè)施的開(kāi)發(fā),提供了全套微服務(wù)解決方案。
RPC框架
RestTemplate&WebClient
Spring RestTemplate 是 Spring 提供的用于訪問(wèn) Rest 服務(wù)的客戶端gRPC
GRPC是google開(kāi)源的一個(gè)高性能、跨語(yǔ)言的RPC框架,基于HTTP2協(xié)議,基于protobuf 3.x的一款rpc框架。多種語(yǔ)言支持;支持鏈接復(fù)用,集群內(nèi)可采用長(zhǎng)鏈接;性能簡(jiǎn)單調(diào)優(yōu)后,可滿足多數(shù)業(yè)務(wù)場(chǎng)景需求。
分布式事務(wù)
Seata
阿里巴巴重點(diǎn)開(kāi)源項(xiàng)目、Java開(kāi)發(fā)、性能高、無(wú)鎖、代碼無(wú)侵入AT模式0代碼、支持MT模式非事務(wù)型存儲(chǔ)、社區(qū)活躍,版本更新快,使用簡(jiǎn)單!
流量控制、熔斷降級(jí)
Sentinel
阿里巴巴重點(diǎn)開(kāi)源項(xiàng)目、Java開(kāi)發(fā)、二次開(kāi)發(fā)方便、社區(qū)活躍
API網(wǎng)關(guān)
Spring Cloud Gateway
Spring首選、方便二次開(kāi)發(fā)、支持異步非阻塞
Kong
Kong是一款基于Nginx_Lua模塊寫(xiě)的高可用,易擴(kuò)展由Mashape公司開(kāi)源的API Gateway項(xiàng)目。性能優(yōu)異,插件豐富基本開(kāi)箱即用,二開(kāi)有一定的使用門(mén)檻。
配置中心
Nacos:
阿里巴巴重點(diǎn)開(kāi)源項(xiàng)目、可同時(shí)作為注冊(cè)/中心配置中心,簡(jiǎn)化技術(shù)棧、有完善管理界面、Java開(kāi)發(fā)、二次開(kāi)發(fā)方便、社區(qū)活躍、還在不斷更新迭代。
Apollo:
是攜程框架部門(mén)研發(fā)的分布式配置中心,能夠集中化管理應(yīng)用不同環(huán)境、不同集群的配置,配置修改后能夠?qū)崟r(shí)推送到應(yīng)用端,并且具備規(guī)范的權(quán)限、流程治理等特性,適用于微服務(wù)配置管理場(chǎng)景。
服務(wù)發(fā)現(xiàn)
Nacos:
阿里巴巴重點(diǎn)開(kāi)源項(xiàng)目、可同時(shí)作為注冊(cè)/中心配置中心,簡(jiǎn)化技術(shù)棧、有完善管理界面、Java開(kāi)發(fā)、二次開(kāi)發(fā)方便、社區(qū)活躍、AP/CP模式,還在不斷更新迭代。
Zookeeper:
ZooKeeper 是一個(gè)分布式的,開(kāi)放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的Chubby一個(gè)開(kāi)源的實(shí)現(xiàn),是Hadoop和Hbase的重要組件;性能可以滿足較大規(guī)模的服務(wù)發(fā)現(xiàn)和配置中心,生效實(shí)時(shí)性高,不適合大規(guī)模實(shí)時(shí)數(shù)據(jù)同步場(chǎng)景;CP模式。
監(jiān)控
Prometheus
功能較為全面的開(kāi)源監(jiān)控系統(tǒng),CNCF技術(shù)棧、社區(qū)活躍
Grafana
Grafana是一個(gè)開(kāi)源的度量分析與可視化套件。純 Javascript 開(kāi)發(fā)的前端工具,通過(guò)訪問(wèn)庫(kù)(如InfluxDB),展示自定義報(bào)表、顯示圖表等。大多使用在時(shí)序數(shù)據(jù)的監(jiān)控方面,如同Kibana類似。Grafana的UI更加靈活,有豐富的插件,功能強(qiáng)大。界面簡(jiǎn)潔美觀,支持自由定制,社區(qū)有豐富的Dashboard支持。
SkyWalking
分布式追蹤系統(tǒng),國(guó)產(chǎn)鏈路跟蹤、社區(qū)文檔豐富,Apache頂級(jí)項(xiàng)目。
日志
ELK
分布式服務(wù)日志處理,圍繞elasticsearch構(gòu)建的日志生態(tài)系統(tǒng)。使用廣泛,擴(kuò)展方便。配合kibana可以很方便對(duì)日志進(jìn)行檢索,定位線上問(wèn)題。
數(shù)據(jù)庫(kù)中間
ShardingSphere
Apache ShardingSphere 定位為關(guān)系型數(shù)據(jù)庫(kù)中間件,支持?jǐn)?shù)據(jù)分片、讀寫(xiě)分離、多數(shù)據(jù)副本、數(shù)據(jù)加密、影子庫(kù)壓測(cè)等功能;社區(qū)文檔豐富,目前已經(jīng)成為Apache頂級(jí)項(xiàng)目。
序列化
Jackson
Spring首選、穩(wěn)定 安全 。
protobuf
Protocol Buffer( 簡(jiǎn)稱Protobuf) 是google開(kāi)源的一種輕便高效的結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)格式,可以用于結(jié)構(gòu)化數(shù)據(jù)串行化,很適合做數(shù)據(jù)存儲(chǔ)或RPC 數(shù)據(jù)交換格式。
不建議使用fastjson
開(kāi)發(fā)工具
構(gòu)建工具
Maven:
主流的項(xiàng)目構(gòu)建和管理工具,Maven是 Apache 下的一個(gè)純 Java 開(kāi)發(fā)的開(kāi)源項(xiàng)目,是一個(gè)項(xiàng)目構(gòu)建和管理的工具;它提供了幫助管理 構(gòu)建、文檔、報(bào)告、依賴、scms、發(fā)布、分發(fā)的方法??梢苑奖愕木幾g代碼、進(jìn)行依賴管理、管理二進(jìn)制庫(kù)等等。
Gradle
Gradle是一個(gè)基于Apache Ant和Apache Maven概念的項(xiàng)目自動(dòng)化建構(gòu)工具。Gradle 構(gòu)建腳本使用的是 Groovy 或 Kotlin 的特定領(lǐng)域語(yǔ)言來(lái)編寫(xiě),它可以自動(dòng)處理包相依關(guān)系,自動(dòng)處理布署問(wèn)題,條件判斷寫(xiě)法直覺(jué)。接口請(qǐng)求工具
postman
postman是一款功能強(qiáng)大的網(wǎng)頁(yè)調(diào)試和模擬發(fā)送HTTP請(qǐng)求的Chrome插件,支持幾乎所有類型的HTTP請(qǐng)求,操作簡(jiǎn)單且方便。
容器
Docker
是一個(gè)開(kāi)源的應(yīng)用容器引擎,基于 Go 語(yǔ)言 并遵從Apache2.0協(xié)議開(kāi)源。Docker 可以讓開(kāi)發(fā)者打包他們的應(yīng)用以及依賴包到一個(gè)輕量級(jí)、可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,也可以實(shí)現(xiàn)虛擬化。使用Docker可以帶來(lái)以下幾個(gè)優(yōu)勢(shì):1. 更快速的交付和部署;2. 高效的部署和擴(kuò)容;3. 更高的資源利用率;4. 簡(jiǎn)單的管理
集群管理
Kubernetes
Kubernetes一個(gè)用于容器集群的自動(dòng)化部署、擴(kuò)容以及運(yùn)維的開(kāi)源平臺(tái)。通過(guò)Kubernetes,你可以快速有效地響應(yīng)用戶需求;快速而有預(yù)期地部署你的應(yīng)用;極速地?cái)U(kuò)展你的應(yīng)用;無(wú)縫對(duì)接新應(yīng)用功能;節(jié)省資源,優(yōu)化硬件資源的使用。為容器編排管理提供了完整的開(kāi)源方案。生態(tài)豐富,易擴(kuò)展;功能豐富穩(wěn)定,大公司背書(shū);易上手。
鏡像管理工具
Harbor
Harbor是個(gè)開(kāi)源制品(artifact)倉(cāng)庫(kù),是首個(gè)原創(chuàng)于中國(guó)、并且成為 CNCF 畢業(yè)級(jí)的開(kāi)源項(xiàng)目。用戶可通過(guò)策略和基于角色的訪問(wèn)控制來(lái)保護(hù)制品(如容器鏡像、Helm Chart等),掃描鏡像并避免受安全漏洞的危害。Harbor擴(kuò)展了開(kāi)源項(xiàng)目 Docker Distribution,添加了用戶所需的功能(例如安全性,身份,漏洞掃描和管理)。
運(yùn)行環(huán)境
操作系統(tǒng):
Linux<CentOS 7+>
Linux是一套免費(fèi)使用和自由傳播的類Unix操作系統(tǒng),是一個(gè)基于POSIX和UNIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng)。它能運(yùn)行主要的UNIX工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。它支持32位和64位硬件。Linux繼承了Unix以網(wǎng)絡(luò)為核心的設(shè)計(jì)思想,是一個(gè)性能穩(wěn)定的多用戶網(wǎng)絡(luò)操作系統(tǒng)。
Web服務(wù)器
Tomcat<8+>
Tomcat 服務(wù)器是一個(gè)免費(fèi)的開(kāi)放源代碼的Web 應(yīng)用服務(wù)器,屬于輕量級(jí)應(yīng)用服務(wù)器,在中小型系統(tǒng)和并發(fā)訪問(wèn)用戶不是很多的場(chǎng)合下被普遍使用,是開(kāi)發(fā)和調(diào)試JSP 程序的首選。
Nginx
輕量級(jí)的Web 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器
NodeJs
服務(wù)端JavaScript環(huán)境