乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      細(xì)數(shù)后臺(tái)開(kāi)發(fā)的技術(shù)棧

       溫暖醇厚 2019-03-25

      很多同學(xué)對(duì)于數(shù)據(jù)結(jié)構(gòu)、算法、網(wǎng)絡(luò)編程這些基礎(chǔ)課程掌握得都很好,但有不少人到了實(shí)際的項(xiàng)目開(kāi)發(fā)時(shí)就蒙蔽,不知道整個(gè)軟件系統(tǒng)的體系和流程,個(gè)人認(rèn)為首先對(duì)整個(gè)過(guò)程有個(gè)大致的理解,再逐一對(duì)這些技術(shù)去進(jìn)行深入的學(xué)習(xí)是很有利的。首先自我介紹下,筆者從事JAVA開(kāi)發(fā),也只是個(gè)小白,有很多技術(shù)同樣也沒(méi)有很深入地去學(xué)習(xí),有些理解不當(dāng)?shù)牡胤綒g迎指正,一起學(xué)習(xí)。另外,最近會(huì)一直更博分享自己各項(xiàng)技術(shù)的學(xué)習(xí)心得,歡迎大家一起交流。

      一、前端技術(shù)

      筆者認(rèn)為后臺(tái)開(kāi)發(fā)人員掌握一定的前端技術(shù)是必要的,作為JAVA開(kāi)發(fā)最起碼的JSP、JQuery、BootStrap這些你得有起碼的了解。除此之外,前后端的交互技術(shù),AJAX、JSON、JSONP也是必須了解和掌握的。

      二、通信協(xié)議
      通信協(xié)議就跟上面說(shuō)的網(wǎng)絡(luò)編程這門(mén)課程有很大的關(guān)系,通信協(xié)議通俗一點(diǎn)說(shuō)就是:客戶端和服務(wù)器通信的格式,大家都知道報(bào)文是二進(jìn)制的,而協(xié)議的作用就是規(guī)定了某一位或某幾位二進(jìn)制串的作用,規(guī)定了報(bào)文應(yīng)該按照怎么樣的格式來(lái)編碼。如果違反了這個(gè)協(xié)議,那么報(bào)文是不可能被客戶端或服務(wù)器正確解碼的。

      大家最熟悉的協(xié)議大概就是HTTP,HTTP協(xié)議具體的報(bào)文格式也不需要再過(guò)多的介紹了。在這里,大家可以思考一個(gè)問(wèn)題,如果一個(gè)公司或者實(shí)驗(yàn)室內(nèi)部調(diào)用的接口,是不是也需要HTTP協(xié)議來(lái)通信呢?筆者認(rèn)為這是一個(gè)最差的方案,因?yàn)镠TTP的報(bào)文頭部比較長(zhǎng),內(nèi)部的接口調(diào)用是不需要那么復(fù)雜的頭部的,所以一般采用的是RPC協(xié)議。

      RPC全稱遠(yuǎn)程過(guò)程調(diào)用,通過(guò)它可是實(shí)現(xiàn)一臺(tái)服務(wù)器去調(diào)用另外一臺(tái)服務(wù)器上的方法,是基于TCP/IP協(xié)議上的一個(gè)協(xié)議。舉個(gè)栗子,B服務(wù)器上有b1()和b2()兩個(gè)方法,首先需要向服務(wù)注冊(cè)與發(fā)現(xiàn)設(shè)備進(jìn)行注冊(cè),A服務(wù)器想要調(diào)用b1()時(shí),向服務(wù)注冊(cè)與發(fā)現(xiàn)設(shè)備查詢b1()方法所屬服務(wù)器的IP和端口,得到后,將A服務(wù)器的請(qǐng)求路由到該IP的制定端口上。那么通信協(xié)議在這個(gè)流程中的作用是什么呢?A服務(wù)器想要請(qǐng)求b1()方法,他的請(qǐng)求發(fā)送到服務(wù)注冊(cè)與發(fā)現(xiàn)設(shè)備之后,該設(shè)備需要通過(guò)規(guī)定的通信協(xié)議來(lái)識(shí)別該請(qǐng)求報(bào)文具體請(qǐng)求的服務(wù)名,由此來(lái)查詢?cè)摲?wù)的IP及端口,這個(gè)過(guò)程叫做路由。HTTP協(xié)議中,是通過(guò)URL來(lái)進(jìn)行路由的。在RPC過(guò)程中,我們一般使用自己定義的協(xié)議來(lái)減少報(bào)文的長(zhǎng)度,最簡(jiǎn)單的方法是通過(guò)一個(gè)唯一的整形來(lái)進(jìn)行路由,具體的路由方案有很多,這里不再過(guò)多贅述。所以我們來(lái)總結(jié)一下,通信協(xié)議規(guī)定了通信的格式,他可以規(guī)定某幾位為路由數(shù),某幾位為請(qǐng)求報(bào)文的body,一個(gè)很簡(jiǎn)單的通信協(xié)議頭部有路由字段就可以滿足了,相比于HTTP的頭部而已,輕量了很多。body里面存的就是請(qǐng)求的具體參數(shù)和響應(yīng)結(jié)果了,該區(qū)域一般也是有數(shù)據(jù)傳輸協(xié)議來(lái)進(jìn)行數(shù)據(jù)的編碼的,json是一種選擇,而另一種更好的選擇就是谷歌的protocol buffer,相比于json而言,它是二進(jìn)制的,更輕量,具體的特性和使用方法會(huì)在后面的文章中進(jìn)行介紹。筆者最經(jīng)常用的一個(gè)RPC框架是Thrift,也會(huì)在后面的文章中將會(huì)給大家介紹。

      三、負(fù)載均衡
      負(fù)載均衡這個(gè)詞,相信大家接觸得都很多。負(fù)載均衡就是用多臺(tái)應(yīng)用服務(wù)器來(lái)完成一個(gè)業(yè)務(wù),通過(guò)負(fù)載均衡中間件對(duì)這些服務(wù)器的負(fù)載情況進(jìn)行一個(gè)管理及動(dòng)態(tài)的調(diào)整,以盡量消除或減少各服務(wù)器負(fù)載不均衡的現(xiàn)象。還是上一節(jié)當(dāng)中的那個(gè)栗子,當(dāng)B服務(wù)器的請(qǐng)求量很大時(shí),一臺(tái)服務(wù)器是無(wú)法支撐起整個(gè)業(yè)務(wù)的,于是我們對(duì)該服務(wù)器做一個(gè)擴(kuò)展,變成三臺(tái)服務(wù)器B1、B2、B3共同來(lái)提供服務(wù),他們?nèi)_(tái)服務(wù)器的IP和端口首先都需要向服務(wù)注冊(cè)與發(fā)現(xiàn)設(shè)備來(lái)進(jìn)行注冊(cè),同時(shí)這三臺(tái)服務(wù)器的負(fù)載量由負(fù)載均衡服務(wù)器進(jìn)行管理,這是A服務(wù)器對(duì)于b1()方法的一個(gè)請(qǐng)求到達(dá)負(fù)載均衡服務(wù)器,負(fù)載均衡服務(wù)器需要去請(qǐng)求服務(wù)注冊(cè)于發(fā)現(xiàn)設(shè)備該方法的路由地址列表,拿到該列表后從中選擇負(fù)載量最優(yōu)的那一臺(tái)服務(wù)器,將A服務(wù)器的請(qǐng)求路由至那臺(tái)服務(wù)器上。
      在公司里面,負(fù)載均衡層一般都由運(yùn)維負(fù)責(zé),筆者還接觸不到這些,只能大略地介紹一些,如果大家想要深入地學(xué)習(xí),可以先學(xué)習(xí)下使用nginx來(lái)搭建負(fù)載均衡服務(wù)器。
      四、反向代理

      反向代理是指以代理服務(wù)器來(lái)接受internet上的連接請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請(qǐng)求連接的客戶端。通俗點(diǎn)講,ABC三個(gè)人,A想向C問(wèn)個(gè)問(wèn)題,但是得通過(guò)B來(lái)進(jìn)行。A先告訴B,B再去問(wèn)C,最后B將C的回答轉(zhuǎn)述給A。可能大家會(huì)覺(jué)得為什么需要這么麻煩的過(guò)程呢,A直接問(wèn)C不就好了。大家這個(gè)時(shí)候可以打開(kāi)一個(gè)網(wǎng)頁(yè),按一下F12,選擇network選項(xiàng)卡,然后F5刷新一下網(wǎng)頁(yè),在這個(gè)選項(xiàng)卡里,會(huì)刷出一個(gè)列表,這個(gè)列表就是你刷新一次網(wǎng)頁(yè)瀏覽器需要向服務(wù)器發(fā)送的請(qǐng)求列表。我們知道,一個(gè)HTTP請(qǐng)求是只能請(qǐng)求一個(gè)對(duì)象的,一個(gè)網(wǎng)頁(yè)里有10個(gè)圖片就需要請(qǐng)求10次,實(shí)際上你刷新一個(gè)網(wǎng)頁(yè)時(shí),大部分的請(qǐng)求都是靜態(tài)元素,即圖片、js或css等文件,如果這些大部分的請(qǐng)求都需要通過(guò)應(yīng)用服務(wù)器來(lái)完成的話,會(huì)給應(yīng)用服務(wù)器帶來(lái)很大的負(fù)擔(dān),所以反向代理的作用,就是緩存這些靜態(tài)文件,當(dāng)瀏覽器發(fā)送一個(gè)請(qǐng)求時(shí),反向代理服務(wù)器判斷請(qǐng)求內(nèi)容是否是它緩存內(nèi)容,如果是,就可以直接將結(jié)果返回;如果不是,反向代理再將該請(qǐng)求轉(zhuǎn)發(fā)至應(yīng)用服務(wù)器上處理。這樣,就減少了應(yīng)用服務(wù)器的負(fù)擔(dān)。常用的反向代理——nginx。

      有人可能會(huì)說(shuō),nginx好厲害啊,項(xiàng)目部署用一臺(tái)nginx就可以完成負(fù)載均衡和反向代理了。實(shí)際上是需要兩臺(tái)nginx來(lái)架構(gòu)的,一臺(tái)放再lvs中負(fù)責(zé)負(fù)載,另一臺(tái)部署在tomcat前,負(fù)責(zé)反向代理。

      五、業(yè)務(wù)編程

      通過(guò)上面四點(diǎn)的介紹,一個(gè)請(qǐng)求已經(jīng)能從客戶端發(fā)送至應(yīng)用服務(wù)器tomcat上了。接下來(lái)就是根據(jù)服務(wù)器編程完成相應(yīng)的業(yè)務(wù)流程。后臺(tái)常用的開(kāi)發(fā)框架筆者都有接觸并且用過(guò)不短時(shí)間,Stuts2、Spring MVC、Spring、Hibernate、MyBatis這些。一般兩套常用的體系是Struts2+Spring+Hibernate和Spring MVC+Spring+MyBatis,很明顯Spring的作用不言而喻。這兩套體系都是MVC設(shè)計(jì)思想的體現(xiàn)。對(duì)比下這兩套體系,Struts2和Spring MVC都是Controller層的框架,后者對(duì)初學(xué)者更友好一些,而且前者經(jīng)常出現(xiàn)一些神奇的BUG,公司里面也是很不喜歡使用的,所以強(qiáng)烈推薦的是Spring MVC。Hibernate和MyBatis都是兩個(gè)比較重用的持久層框架,Hibernate會(huì)比Mybatis好入門(mén)一些,但是MyBatis會(huì)比Hibernate輕量,使用廣泛程度也差不多。

      六、數(shù)據(jù)庫(kù)

      數(shù)據(jù)庫(kù)需要掌握的:sql語(yǔ)句、索引、explain性能分析等

      七、緩存

      緩存分本地緩存和緩存服務(wù)器。本地緩存指的是將數(shù)據(jù)緩存下本地的內(nèi)存中,一般對(duì)一些讀業(yè)務(wù)的數(shù)據(jù)采用本地緩存,推薦大家學(xué)習(xí)下google的guava cache。緩存服務(wù)器的話推薦redis,一個(gè)鍵值對(duì)的緩存,比較適合入門(mén)

      除了上面的這些,還有maven svn git這些工具也是需要掌握的

      由于時(shí)間和篇幅原因,這篇博文知識(shí)大致地進(jìn)行了名詞介紹,后面會(huì)為大家詳細(xì)介紹



        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多