- 大家好婿斥,我是 UPUPMO.com 的作者 Meek劝篷,歡迎觀看《從開公司到開發(fā)全平臺(tái)產(chǎn)品》系列。
- 希望通過該系列可以幫助新手民宿,快速了解全棧軟件產(chǎn)品的一些思路娇妓、應(yīng)用。
- 本期我們講解第四章:《后端開發(fā)的思考活鹰、實(shí)踐》
- 我們將會(huì)從以下4個(gè)小節(jié)進(jìn)行探討:
1. 后端行業(yè)中常見爭(zhēng)議
2. 后端企業(yè)級(jí)架構(gòu)標(biāo)準(zhǔn)
3. 各類數(shù)據(jù)庫(kù)應(yīng)用場(chǎng)景
4. 如何挑選技術(shù)哈恰、框架
1. 后端行業(yè)中常見爭(zhēng)議
1.1 行業(yè)中的普遍爭(zhēng)議
[圖片上傳失敗...(image-8071b3-1654935531085)]
- Windows、macOS志群、Linux 哪個(gè)更適合程序員日常?(暫停 3 秒着绷,大家想一下自己心中的答案)
其實(shí)這個(gè)問題是不夠嚴(yán)謹(jǐn)?shù)模碚撋蠎?yīng)該說哪種程序員? 是嵌入式? 后端? 安全? 驅(qū)動(dòng)? 等等锌云,但是如果這樣的問荠医,該爭(zhēng)議就沒意思了。
這里我們先假設(shè)是可以用 TNT 軟件桑涎,不討論道德潔癖彬向,并且假設(shè)的是國(guó)內(nèi)環(huán)境,因?yàn)閲?guó)內(nèi) Windows 流氓軟件確實(shí)很多攻冷。
我說下我個(gè)人答案:我喜歡 macOS娃胆。綜合看 macOS 和 Windows + WSL 可以干的事情都差不多,但是 macOS 是一個(gè)生態(tài)等曼,沒有割裂性缕棵,整體沉浸感更強(qiáng),系統(tǒng)也更加穩(wěn)定涉兽,真的是穩(wěn)如狗的穩(wěn)。
我還喜歡 macOS 大量的收費(fèi)軟件篙程,它們都是有人維護(hù)枷畏、更新,我們可以經(jīng)常跟進(jìn)
缺點(diǎn)就是性價(jià)比不高虱饿,白蘋果很貴拥诡。
至于 Linux,該是會(huì)用服務(wù)器的人終歸把它當(dāng)服務(wù)器氮发,做桌面的話只能妥協(xié)國(guó)內(nèi)那些必備軟件體驗(yàn)渴肉,或者使用網(wǎng)頁(yè)版、手機(jī)爽冕,割裂感太強(qiáng)仇祭。
同時(shí) Linux 下的生活軟件也是被更新最慢,所以只適合做服務(wù)器或者單純只開發(fā)颈畸。
- 程序員應(yīng)該用哪個(gè) IDE 或編輯器?
[圖片上傳失敗...(image-95aad6-1654935531085)]
我的答案是:
這個(gè)問題也是不嚴(yán)謹(jǐn)?shù)奈谄妫瑧?yīng)該是具體到哪種程序員
我主要是前后端開發(fā)没讲,所以我是 JetBrains 的堅(jiān)定支持者,它缺點(diǎn)是收費(fèi)礁苗,并且需要大內(nèi)存的電腦爬凑。
- IDE 應(yīng)該用淺色主題還是深色主題?
我的答案是:
這個(gè)我倒是有自己的一套健康理論
首先大多數(shù)程序員都是整天對(duì)著電腦的,需要一個(gè)防藍(lán)光眼鏡试伙,一個(gè)屏幕掛燈嘁信,并且把系統(tǒng)改為夜覽模式,此時(shí)看到系統(tǒng)會(huì)是偏黃色
在這種條件下對(duì)你的眼鏡保護(hù)是最好的疏叨,此時(shí)屏幕亮度不會(huì)很高潘靖,用深色主題看起來(lái)不清晰,所以我覺得應(yīng)該是淺色主題
- 縮進(jìn)是用 Tab 還是空格?
我的答案是:
一開始用 Java 習(xí)慣用 Tab考廉,但是從開始寫前端后秘豹,我偏向于應(yīng)該讓所有語(yǔ)言都是用空格。
- 最好的注釋就是代碼本身?
我的答案是:
理想狀態(tài)下應(yīng)該是昌粤,但是實(shí)際情況下既绕,需求各種各樣,有的細(xì)節(jié)沒有流程圖涮坐、時(shí)序圖根本說不清楚凄贩,所以我傾向于有注釋,只是簡(jiǎn)單方法袱讹、簡(jiǎn)單單詞的注釋可以少寫
1.2 開發(fā)語(yǔ)言相關(guān)爭(zhēng)議
- 誰(shuí)是世界上最好的開發(fā)語(yǔ)言?
我的答案是:
不存在的疲扎,沒有哪種語(yǔ)言可以干任何場(chǎng)景的需求。
但是我喜歡靜態(tài)語(yǔ)言捷雕,最好是類似 Rust 這種椒丧,可以在編譯期就暴露出大多數(shù)錯(cuò)誤的這種語(yǔ)言
- Go 要取代 Java 嗎?
在回答這個(gè)問題之前得先介紹 Pivotal:
2003 年,Rod Johnson 和同伴創(chuàng)建了 Interface 21
2008 年救巷,改名為大家熟知的 SpringSource 并收購(gòu) Covalent 得到 Tomcat壶熏、Geronimo、Apache Axis
2008 年浦译,SpringSource 收購(gòu) G2One 得到 Groovy棒假、Grails
2009 年,SpringSource 收購(gòu) Hyperic
但是 2009 年 8 月精盅,VMware 收購(gòu)了 SpringSource
2009 年帽哑,SpringSource 收購(gòu) Cloud Foundry 平臺(tái)
2010 年,SpringSource 收購(gòu) RabbitMQ叹俏、Redis妻枕、GemStone Data
2012 年,Rod Johnson 離開
2012 年,EMC 又收購(gòu)了 Pivotal Labs 公司佳头;
2013 年鹰贵,EMC、VMware康嘉、通用電氣和收購(gòu)來(lái)的 Pivotal Labs 公司重新組建了新的公司 Pivotal碉输,此時(shí) EMC 是控股股東
2015 年,戴爾又并購(gòu)了 EMC亭珍,所以嚴(yán)格算此時(shí)是戴爾當(dāng)家
2018 年敷钾,Pivotal 上市,但是后續(xù)股票不理想
2019 年肄梨,VMware 收購(gòu) Pivotal 變成的控股股東阻荒,然后把它從紐交所摘牌,開始主推 VMware Tanzu 生態(tài)(是 K8S 生態(tài))
更多信息可以看:https://wikipedia.org/wiki/SpringSource
從 2003 年到 2019 年來(lái)众羡,Spring 所代表的企業(yè)經(jīng)歷了好幾次收購(gòu)侨赡、被收購(gòu),所以我們可以看出來(lái) Spring 所代表開源是需要大量錢粱侣、優(yōu)秀的人才能堆出來(lái)羊壹。
還是我上一章節(jié)那句話:寫代碼就是寫 Bug 過程,一定要有金主支撐不然很難維持齐婴。
Java 單體油猫、大數(shù)據(jù)、以及過去十幾年的舊體系柠偶,目前還是會(huì)繼續(xù)存活情妖,但是 Go 帶來(lái)的云原生趨勢(shì)越來(lái)越明顯,而且也有大金主支撐诱担。至于 Rust 還要再熬一下生態(tài)毡证。
目前的世界因?yàn)?K8S 變了,所以我的結(jié)論就是:Go 會(huì)在未來(lái)代替 Java 成為最大主流蔫仙,但是需要繼續(xù)熬一下料睛。
- MySQL、PostgreSQL 之爭(zhēng)
從性能和插件擴(kuò)展性上看 PostgreSQL 更優(yōu)秀匀哄。
但是,PostgreSQL 國(guó)內(nèi)流行度不高雏蛮,所以學(xué)習(xí)成本涎嚼、維護(hù)成本就無(wú)法把控。
并且國(guó)內(nèi)云廠商自研的分布式云數(shù)據(jù)庫(kù)引擎協(xié)議挑秉,都是優(yōu)先 MySQL法梯,所以從長(zhǎng)遠(yuǎn)看,用 MySQL 更有助于后續(xù)上云。
- Java ORM 框架之爭(zhēng)
Java ORM 框架主流是 JPA 和 MyBatis
我個(gè)人不反感 API 方式立哑,但是對(duì)于復(fù)雜業(yè)務(wù)夜惭,我喜歡先在 Navicat 中進(jìn)行書寫、測(cè)試铛绰,
確定沒問題之后诈茧,直接把 SQL 復(fù)制到 XML 中,所以我偏向 MyBatis
- JDK 版本爭(zhēng)論
從類型上可以分為:
OraceJDK
OpenJDK
Amazon Corretto
Alibaba Dragonwell
Tencent Kona
HUAWEI 畢昇
等等其他
從版本號(hào)上分主流有:
JDK 6
JDK 8
JDK 11
JDK 17
我個(gè)人試過:OraceJDK捂掰、OpenJDK敢会、Amazon Corretto 的 JDK 8、JDK 11
都是對(duì)同一個(gè)后臺(tái)多模塊項(xiàng)目進(jìn)行編譯这嚣、接口壓測(cè) QPS鸥昏,得到結(jié)果還是以 OraceJDK 8 為最佳或者說差異不大。
大家可以根據(jù)自己的需求做下壓測(cè)姐帚,選擇自己最適合的吏垮。
2. 后端企業(yè)級(jí)架構(gòu)標(biāo)準(zhǔn)
[圖片上傳失敗...(image-284b5e-1654935531085)]
- 立這個(gè)標(biāo)準(zhǔn)主要目的是:每當(dāng)我學(xué)習(xí)一個(gè)新的后端語(yǔ)言、后端框架罐旗,我都會(huì)按照此功能需求進(jìn)行調(diào)研
- 我主要是以業(yè)務(wù)驅(qū)動(dòng)去思考使用的語(yǔ)言膳汪、框架
- 其中微服務(wù)需要的組件較多,放在第二部分
2.1 基礎(chǔ)標(biāo)準(zhǔn)
IDE 代碼補(bǔ)全尤莺、糾錯(cuò)支持
IDE 調(diào)試旅敷、重構(gòu)支持
公網(wǎng)包管理、私服包管理
單元測(cè)試
文件上傳颤霎、下載
多環(huán)境配置
性能分析工具
調(diào)試工具
事務(wù)管理
日志工具
Web 安全:SQL 注入媳谁、XSS、CSRF友酱、SSRF晴音、上傳漏洞
緩存庫(kù):Redis、KeyDB
傳統(tǒng)數(shù)據(jù)庫(kù):MySQL缔杉、PostgreSQL 等
調(diào)度工具
參數(shù)校驗(yàn)框架
持續(xù)集成锤躁、容器化
度量指標(biāo)實(shí)時(shí)上報(bào)
靜態(tài)資源配置
Excel、PDF 等文檔工具
WebSocket或详、gRPC系羞、MQ、MQTT
事件監(jiān)聽
攔截器霸琴、過濾器椒振、監(jiān)聽器思維
參數(shù)解析器
返回值處理器
統(tǒng)一異常管理
國(guó)際化多語(yǔ)言
AOP 切面思維
單點(diǎn)登錄
遠(yuǎn)程調(diào)試
流程引擎
規(guī)則引擎
異常分析:SQL異常、框架異常
搜索引擎:Elasticsearch梧乘、Solr澎迎、OpenSearch 等
列數(shù)據(jù)庫(kù):ClickHouse庐杨、HBase 等
時(shí)序庫(kù):Prometheus、M3DB夹供、InfluxDB 等
圖數(shù)據(jù)庫(kù):Neo4j灵份、Dgraph 等
2.2 微服務(wù)標(biāo)準(zhǔn)
分布式 ID
分布式緩存
分布式鎖
分布式事務(wù)
分布式調(diào)度
分布式日志
分布式消息
熔斷、限流
注冊(cè)中心
API 網(wǎng)關(guān)
配置管理(路由哮洽、限流動(dòng)態(tài)配置)
鏈路追蹤
gRPC
系統(tǒng)監(jiān)控
度量指標(biāo)監(jiān)控
單點(diǎn)登錄填渠、認(rèn)證、鑒權(quán)
A/B測(cè)試袁铐、灰度發(fā)布
3. 各類數(shù)據(jù)庫(kù)應(yīng)用場(chǎng)景
[圖片上傳失敗...(image-381649-1654935531085)]
傳統(tǒng)數(shù)據(jù)庫(kù)的范式要求既是缺點(diǎn)也是優(yōu)點(diǎn)揭蜒。
缺點(diǎn)就是大家都怪它不靈活,但是這同樣是它優(yōu)點(diǎn)剔桨,畢竟死板的東西跟容易被維護(hù)屉更、控制。
我個(gè)人喜歡做事死板洒缀,但是也排斥不靈活的瑰谜,主要還是看應(yīng)用場(chǎng)景的合適原則
- MySQL:傳統(tǒng)數(shù)據(jù)庫(kù)思維場(chǎng)景
- Redis:內(nèi)存存儲(chǔ)場(chǎng)景
- RabbitMQ:消息隊(duì)列場(chǎng)景
- Elasticsearch:全文檢索、復(fù)雜搜索树绩、可視化分析
- ClickHouse:數(shù)據(jù)量大萨脑、批量寫入,查詢條件簡(jiǎn)單饺饭、列與列之間聯(lián)系不大的場(chǎng)景
- MongoDB:結(jié)構(gòu)不確定渤早,聚合查詢,查詢多
- Neo4j:圖類結(jié)構(gòu)的場(chǎng)景瘫俊,比如:社交關(guān)系鹊杖、企業(yè)關(guān)系、多維關(guān)聯(lián)分析扛芽、交通物流骂蓖、推薦系統(tǒng)
- Prometheus:物聯(lián)網(wǎng)設(shè)備采集、各類監(jiān)控?cái)?shù)據(jù)采集等基于時(shí)間線的連續(xù)數(shù)據(jù)
4. 如何挑選技術(shù)川尖、框架(重點(diǎn))
可以從下面看出來(lái)登下,我基本都是圍著 GitHub 轉(zhuǎn),可以說我最大老師就是 GitHub 本身叮喳,也推薦大家養(yǎng)成這個(gè)習(xí)慣
- 查看官網(wǎng)文檔編寫情況
- 查看 GitHub 的 star 數(shù)量被芳,越高表示越流行
- 查看 GitHub 的 Contributors 數(shù)量,以及主要參與者活躍
- 查看 GitHub 的發(fā)布記錄
- 查看 GitHub 是否有資金贊助者否屬于某些大企業(yè)
- 針對(duì)某些你認(rèn)為常用 API 在 GitHub 進(jìn)行全文檢索馍悟,查看使用它搜索到的項(xiàng)目數(shù)量
- 在掘金畔濒、博客園、InfoQ赋朦、CSDN篓冲、51CTO 等社區(qū)搜索,查看活躍度
- 對(duì)基礎(chǔ)項(xiàng)目進(jìn)行性能測(cè)試
- 查看其框架搭建起來(lái)是否能盡可能多地滿足我們前面的標(biāo)準(zhǔn)
- 其他資料宠哄,比如:各大云廠商支持的架構(gòu)壹将、ThoughtWorks 的技術(shù)雷達(dá)、GitHub Octoverse毛嫉、已出版書籍等等
下期預(yù)告
- 下期我們將介紹《前端開發(fā)的思考诽俯、實(shí)踐》,分別從以下 4 個(gè)方面進(jìn)行講解:
1. 前端企業(yè)級(jí)架構(gòu)標(biāo)準(zhǔn)
2. 主流前端框架對(duì)比
3. 正在發(fā)展的云開發(fā)介紹
4. 我常用的前端框架介紹