腾飞答不忘初心的三个问题
去年的時(shí)候有同學(xué)在微信上問(wèn)了我3個(gè)問(wèn)題,我覺(jué)得非常有代表性,當(dāng)時(shí)沒(méi)有回答。主要是通過(guò)簡(jiǎn)短的語(yǔ)言無(wú)法全面表述可能會(huì)產(chǎn)生歧義,所以決定專(zhuān)門(mén)寫(xiě)一篇文章來(lái)表達(dá)一下我的想法,需要說(shuō)明的是以下內(nèi)容只是以我個(gè)人的經(jīng)驗(yàn)給大家一些參考。
初心同學(xué)的第一個(gè)問(wèn)題:
我現(xiàn)在有兩三個(gè)問(wèn)題,第一個(gè),您覺(jué)著NetCore會(huì)火起來(lái)嗎,或者說(shuō)會(huì)比現(xiàn)在好嗎,現(xiàn)在政府部門(mén)各種國(guó)產(chǎn)化是事實(shí)。好像確實(shí)比較認(rèn)java,畢竟政府部門(mén),有一定的風(fēng)向標(biāo)作用
這是第一個(gè)問(wèn)題,但它并不是一個(gè)問(wèn)題,實(shí)際上它包括了如下問(wèn)題:
.NetCore會(huì)火起來(lái)嗎?或者說(shuō)會(huì)比現(xiàn)在更好嗎?
政府部門(mén)認(rèn)Java嗎, 在國(guó)內(nèi)算是計(jì)算機(jī)語(yǔ)言的風(fēng)向標(biāo)嗎?
初心同學(xué)的第二個(gè)問(wèn)題:
嗯嗯,第二個(gè),您是怎么看今年各大互聯(lián)網(wǎng)裁員的事情,程序員年紀(jì)大了,注定被裁員嗎,您覺(jué)著裁員潮會(huì)波及范圍很大嗎,二線目前沒(méi)看出影響,之前我在北京來(lái)著,回石家莊一年了
互聯(lián)網(wǎng)公司裁員是怎么回事??
二線城市的程序員發(fā)展與生存問(wèn)題?
初心同學(xué)的第三個(gè)問(wèn)題:
最后這個(gè),我描述不清楚。您覺(jué)著怎么才算一個(gè)優(yōu)秀的coder。因?yàn)楹芏喑绦?#xff0c;3年左右的程序員,慢慢寫(xiě),只要用心,也能寫(xiě)的差不多。5年左右的可能代碼寫(xiě)的更好些,效率更高點(diǎn),也可能兩者都寫(xiě)出要求的最優(yōu)代碼。
怎樣才算一個(gè)優(yōu)秀的coder??
職業(yè)規(guī)劃的問(wèn)題?
列出來(lái)之后一看,這位同學(xué)是想框我,這明明是6個(gè)問(wèn)題呀。好吧,我們第一個(gè)開(kāi)始說(shuō)起。
.Net Core會(huì)火起來(lái)嗎?
當(dāng)然,肯定。一定會(huì)越來(lái)越好。
為什么如此肯定?第一主要是因?yàn)橐呀?jīng)不能再壞到哪里去了,過(guò)去十年是互聯(lián)網(wǎng)和移動(dòng)互聯(lián)網(wǎng)的黃金十年,C#沒(méi)有被當(dāng)作主要語(yǔ)言被廣泛使用。在諸多原因的影響下原來(lái)那些使用C#語(yǔ)言作為主要開(kāi)發(fā)語(yǔ)言的一線互聯(lián)網(wǎng)公司也逐漸開(kāi)始將新的項(xiàng)目切換成使用Java來(lái)開(kāi)發(fā)。而移動(dòng)互聯(lián)網(wǎng)的浪潮也已經(jīng)見(jiàn)頂,到了這個(gè)時(shí)候,可以說(shuō)該轉(zhuǎn)的和該換的也都換了。?
如果說(shuō)不能更壞了,那它為什么會(huì)變好呢? 因?yàn)樗?。我想我在這里就不用數(shù)據(jù)和實(shí)例來(lái)舉證了,網(wǎng)絡(luò)上有很多再者這本來(lái)就是一篇主觀的文章。ASP.NET Core彌補(bǔ)了之前不能跨平臺(tái)的不足,同時(shí)又完全開(kāi)源,再加上性能高和語(yǔ)法簡(jiǎn)潔優(yōu)雅、模塊化設(shè)設(shè)計(jì)等諸多特性。從.net core3.1版本來(lái)看將grpc提到一等公民的位置上可見(jiàn).net core布局高遠(yuǎn),并且腳踏實(shí)地地走在了前面。我們完全可以相信asp.net core會(huì)是最好的web框架之一。?
更何況還有服務(wù)網(wǎng)格的加持。服務(wù)網(wǎng)格是什么?如果你開(kāi)發(fā)一個(gè)單體的應(yīng)用,ASP.NET Core做為Web框架來(lái)做API的實(shí)現(xiàn),如果你開(kāi)發(fā)的是一個(gè)大型分布式應(yīng)用,那么后端除了服務(wù)的開(kāi)發(fā)你必然會(huì)考慮這些事情:
服務(wù)之前如何通信(HTTP?,同步還是異步)
服務(wù)注冊(cè)與發(fā)現(xiàn)?
服務(wù)追蹤?
服務(wù)通信容錯(cuò)(重試/超時(shí)/熔斷/限流)
...
當(dāng)然一個(gè)大型分布式應(yīng)用肯定不止僅僅考慮上面的問(wèn)題,但是這些是最基礎(chǔ)的問(wèn)題。對(duì)應(yīng)SpringCloud全家桶他們有拿來(lái)就用的方案 。
我們真的需要這樣的微服務(wù)框架嗎?那些主流的微服務(wù)框架,不管是類(lèi)庫(kù)性質(zhì)的Finagle、Hystrix,還是框架性質(zhì)的Spring Cloud、Dubbo,本質(zhì)上都?xì)w于應(yīng)用內(nèi)解決方案,都存在以下三個(gè)問(wèn)題:
技術(shù)門(mén)檻高:
隨著微服務(wù)實(shí)施水平的不斷深化,除了基礎(chǔ)的服務(wù)發(fā)現(xiàn)、配置中心和授權(quán)管理之外,團(tuán)隊(duì)將不可避免的在服務(wù)治理層面面臨各類(lèi)新的挑戰(zhàn),包括但不限于分布式跟蹤、熔斷降級(jí)、灰度發(fā)布、故障切換等,這對(duì)團(tuán)隊(duì)提出了非常高的技術(shù)要求。
多語(yǔ)言支持不足:
對(duì)于稍具規(guī)模的團(tuán)隊(duì),尤其在高速成長(zhǎng)的互聯(lián)網(wǎng)創(chuàng)業(yè)公司,多語(yǔ)言的技術(shù)棧是常態(tài),跨語(yǔ)言的服務(wù)調(diào)用也是常態(tài),但目前開(kāi)源社區(qū)上并沒(méi)有一套統(tǒng)一的、跨語(yǔ)言的微服務(wù)技術(shù)棧。
代碼侵入性強(qiáng):
主流的微服務(wù)框架(比如Spring Cloud、Dubbo)或多或少都對(duì)業(yè)務(wù)代碼有一定的侵入性,框架替換成本高,導(dǎo)致業(yè)務(wù)團(tuán)隊(duì)配合意愿低,微服務(wù)落地困難。
這些問(wèn)題加起來(lái)導(dǎo)致的結(jié)果就是,在實(shí)施微服務(wù)的過(guò)程中,小團(tuán)隊(duì)Hold不住,大公司推不動(dòng)。針對(duì)微服務(wù)有3個(gè)版本的說(shuō)法:
微服務(wù) 1.0,僅使用注冊(cè)發(fā)現(xiàn),基于 SpringCloud 或者 Dubbo 進(jìn)行開(kāi)發(fā),目前意圖實(shí)施微服務(wù)的傳統(tǒng)企業(yè)大部分處于這個(gè)階段,或者正從單體應(yīng)用,向這個(gè)階段過(guò)渡,處于 0.5 的階段;
微服務(wù) 2.0,使用了熔斷,限流,降級(jí)等服務(wù)治理策略,并配備完整微服務(wù)工具和平臺(tái),目前大部分互聯(lián)網(wǎng)企業(yè)處于這個(gè)階段。傳統(tǒng)企業(yè)中的領(lǐng)頭羊,在做互聯(lián)網(wǎng)轉(zhuǎn)型的過(guò)程中,正在向這個(gè)階段過(guò)渡,處于 1.5 的階段;
微服務(wù) 3.0,Service Mesh 將服務(wù)治理作為通用組件,下沉到平臺(tái)層實(shí)現(xiàn),使得應(yīng)用層僅僅關(guān)注業(yè)務(wù)邏輯,平臺(tái)層可以根據(jù)業(yè)務(wù)監(jiān)控自動(dòng)調(diào)度和參數(shù)調(diào)整,實(shí)現(xiàn) AIOps 和智能調(diào)度。目前一線互聯(lián)網(wǎng)公司在進(jìn)行這方面的嘗試。
從0.5到2.0是一個(gè)痛苦的過(guò)程,現(xiàn)在所有的大型互聯(lián)網(wǎng)公司包括BAT和TMD基本都走過(guò),也只有他們的體量才可以支撐這樣的人力、財(cái)力在期望的時(shí)間內(nèi)完成。對(duì)于其它的中小企業(yè)來(lái)說(shuō),可能會(huì)因?yàn)榧夹g(shù)調(diào)整而錯(cuò)失最佳的發(fā)展時(shí)機(jī)。
而好消息是,由于服務(wù)網(wǎng)格中基礎(chǔ)設(shè)施層抽象的特性, 從0.5到3.0可以跳過(guò) 1.0和2.0。享受BAT級(jí)別的基礎(chǔ)設(shè)施以及提供7*24小時(shí)的高可用服務(wù)不再像以前那樣難。?
服務(wù)網(wǎng)格作為 sidecar 運(yùn)行,對(duì)應(yīng)用程序來(lái)說(shuō)是透明,所有應(yīng)用程序間的流量都會(huì)通過(guò)它,所以對(duì)應(yīng)用程序流量的控制都可以在 service mesh 中實(shí)現(xiàn)。
eShopOnContainers是ASP.NET Core官方團(tuán)隊(duì)做了一個(gè)基于微服務(wù)架構(gòu)的示例項(xiàng)目,現(xiàn)在最新版本已經(jīng)加入了grpc和服務(wù)網(wǎng)格(Service Mesh)的支持。
也許ASP.NET Core目前沒(méi)有這樣可以拿來(lái)就用的全家桶,但是隨著服務(wù)網(wǎng)格趨于成熟,ASP.NET Core在大型分布式服務(wù)的技術(shù)選型上“生態(tài)不足”這一短板可以被劃掉了。
雖然ASP.NET Core會(huì)是更好的web框架,但是它沒(méi)有可能去挑戰(zhàn)Java的地位。存量只會(huì)穩(wěn)定地延續(xù),而增量來(lái)自于5G、AR以及AI這些新興市場(chǎng),也可以說(shuō)是下一個(gè)大的浪潮。它們會(huì)以怎樣的形式到來(lái),我們會(huì)不會(huì)參與其中,沒(méi)有人知道。也取決于.NETer開(kāi)發(fā)者本身這個(gè)群體有多少優(yōu)秀的領(lǐng)導(dǎo)者能夠在未來(lái)的市場(chǎng)中做出一些成績(jī)。我們也許可以把眼界放的更開(kāi)闊一些,多了解一些,借著過(guò)去吃過(guò)的虧在將來(lái)贏一些勝算。
另外我還有一個(gè)小小的建議:
不要局限于語(yǔ)言?
不要覺(jué)得c#寫(xiě)起來(lái)順手就以為用C#開(kāi)發(fā)效率高(可能真的只是因?yàn)槟銓?xiě)順手了)python、go也都是非常好的開(kāi)發(fā)語(yǔ)言,要是你也寫(xiě)順了,也會(huì)發(fā)現(xiàn)他們?cè)诮鉀Q某類(lèi)問(wèn)題的時(shí)候會(huì)更容易。
多了解一些工作行業(yè)之內(nèi),程序之外的事情?
除了寫(xiě)代碼再多了解一下你們的產(chǎn)品,至少知道它的盈利模式是什么?用戶(hù)是不是在增長(zhǎng)。如果公司是項(xiàng)目制的,就看看項(xiàng)目的利潤(rùn)率大概是多少。即使是純技術(shù)路線的專(zhuān)業(yè)或者架構(gòu)師路線,也很難在脫離業(yè)務(wù)、產(chǎn)品和的基礎(chǔ)之上走上高階的水平。更何況,這有助于我們更好地理解真實(shí)的世界,那個(gè)世界和代碼里構(gòu)建的世界不同。
等等,你不是說(shuō)一個(gè)建議嗎?
難道你可以一個(gè)問(wèn)題里面多問(wèn),我就不可以一個(gè)建議里面多提嗎 :)?
總結(jié)
以上是生活随笔為你收集整理的腾飞答不忘初心的三个问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《ASP.NET Core 微服务实战》
- 下一篇: 用 C# 写一个 Redis 数据同步小