一铲球、分工
1挺庞、原始社會
當(dāng)大自然的第一批原始人在大自然中(真正的荒野求生),為了生存選擇群居抱團稼病,為了遮風(fēng)擋雨躲避猛獸住進山洞选侨。有些原始人跑得快膽子大就去追逐打獵,有些人跑得慢就去開荒種地然走,有些原始人喜歡發(fā)明創(chuàng)造就打造石器援制,有些原始人心靈手巧就編制樹葉衣服...
2、社會大分工
馬克思認(rèn)為產(chǎn)生分工的本質(zhì)是生產(chǎn)力不斷發(fā)展的結(jié)果芍瑞。
恩格斯在《家庭晨仑、私有制和國家的起源》一書中提出的發(fā)生在東大陸原始社會后期的三次社會大分工,
即游牧部落從其余的野蠻人群中分離出來拆檬;手工業(yè)和農(nóng)業(yè)的分離洪己;商人階級的出現(xiàn)。
3秩仆、技術(shù)大分工
隨著互聯(lián)網(wǎng)的發(fā)展码泛,以開發(fā)語言或平臺為劃分標(biāo)準(zhǔn)的技術(shù)分工也越來越細,演變出多種技術(shù)棧澄耍。
前端開發(fā):Html噪珊、Css、Js齐莲、React痢站、Vue等
移動端開發(fā):Android、iOS选酗、React Native阵难、Flutter等
后端開發(fā):Java、C++芒填、PHP呜叫、Go空繁、Python、數(shù)據(jù)采集朱庆、音視頻開發(fā)等盛泡。
二、后端
筆者做了多年的iOS娱颊,本以為可以一勞永逸傲诵,還是太Naive了啊。
計劃總趕不上變化箱硕,活到老學(xué)到老是不變的真理拴竹,拒絕給自己設(shè)限。
去年在項目中沒有iOS大的需求剧罩,也正好之前對后端開發(fā)比較好奇栓拜,就轉(zhuǎn)做后端Java開發(fā)一年。
從開始的接口Crud(增刪改查)斑响,一個接口開發(fā)菱属,一個模塊的開發(fā)到一個完整項目的整體開發(fā)钳榨、部署舰罚、發(fā)版、上線薛耻、跟蹤营罢、迭代的全流程參與。
一個移動開發(fā)眼中的Java服務(wù)端開發(fā)不就是給客戶端提供接口么饼齿?
說的沒錯饲漾!但不止如此!
除了提供接口外缕溉,還有其他工作
1考传、服務(wù)部署(把jar包部署到測試、線上不同的機器上证鸥,這不是運維做的事么)
申請機器僚楞、申請lvs、申請域名(自己按照公司流程申請配置)
nginx負載均衡部署(類似路由分發(fā)到不同的機器上枉层,配置web啟動頁)
服務(wù)遷移泉褐、數(shù)據(jù)庫遷移、數(shù)據(jù)庫合并(這不是db要做的事么)
2鸟蜡、數(shù)據(jù)清洗(一年內(nèi)整理合并過幾千個excel膜赃,這tm不是大數(shù)據(jù)工程師做的是事么)
數(shù)據(jù)庫的數(shù)據(jù)導(dǎo)入導(dǎo)出(導(dǎo)入清洗好的excel或?qū)С鰌m要的統(tǒng)計數(shù)據(jù))
3、應(yīng)急響應(yīng)(如果業(yè)務(wù)或機器掛了揉忘,半夜也會起來改跳座,這時候才體會到做客戶端的快樂)
4端铛、編寫技術(shù)架構(gòu)、數(shù)據(jù)庫設(shè)計等文檔(為了iso9001標(biāo)準(zhǔn)或政府/企業(yè)政府項目的驗收文檔)
5疲眷、架構(gòu)抽象(研究最適合的架構(gòu)沦补,分子化業(yè)務(wù),調(diào)研不同的框架或工具)
6咪橙、安全過審(同一ip限制夕膀、請求次數(shù)限制、https證書等)
7美侦、考慮高并發(fā)引發(fā)的系列問題(這是日活月活量大的產(chǎn)品需要考慮的)...
舉個栗子:
就像移動端開發(fā)一個登錄功能产舞,根據(jù)PM、UI菠剩、UE的設(shè)計做出界面易猫,只需要輸入用戶名和密碼,然后等待響應(yīng)結(jié)果具壮。
從不用考慮登錄頻率限制准颓,IP限制,驗證碼是否有效棺妓,密碼是否匹配攘已,登錄會話如何保持,安全防刷等怜跑。
移動端只需要關(guān)心你調(diào)用Api的Http status 是否為200样勃。
后端的邏輯還是比較復(fù)雜的,有一些成熟的框架可以滿足大部分場景性芬。
前端的追求:界面美觀驚艷峡眶、頁面交互流暢、業(yè)務(wù)邏輯清晰植锉、組件化合理辫樱、對外sdk穩(wěn)定等。
后端的追求:接口穩(wěn)定俊庇、架構(gòu)合理狮暑、業(yè)務(wù)邏輯清晰、模塊拆分合理暇赤、支持高并發(fā)等心例。
三、歷程
下列是Java企業(yè)級項目開發(fā)中的不同架構(gòu)模式鞋囊。一年不長止后,但以下幾種架構(gòu)模式都接觸參與過。
1、JSP(前后端混合開發(fā))
JSP全稱Java Server Pages译株,是一種動態(tài)網(wǎng)頁開發(fā)技術(shù)瓜喇。它使用JSP標(biāo)簽在HTML網(wǎng)頁中插入Java代碼。標(biāo)簽通常以<%開頭以%>結(jié)束歉糜。
JSP是一種Java servlet乘寒,主要用于實現(xiàn)Java web應(yīng)用程序的用戶界面部分。網(wǎng)頁開發(fā)者們通過結(jié)合HTML代碼匪补、XHTML代碼伞辛、XML元素以及嵌入JSP操作和命令來編寫JSP。
JSP通過網(wǎng)頁表單獲取用戶輸入數(shù)據(jù)夯缺、訪問數(shù)據(jù)庫及其他數(shù)據(jù)源蚤氏,然后動態(tài)地創(chuàng)建網(wǎng)頁。
JSP標(biāo)簽有多種功能踊兜,比如訪問數(shù)據(jù)庫竿滨、記錄用戶選擇信息、訪問JavaBeans組件等捏境,還可以在不同的網(wǎng)頁中傳遞控制信息和共享信息于游。
2、Spring Boot (后端獨立的單體服務(wù))
SpringBoot是由Pivotal團隊在2013年開始研發(fā)垫言、2014年4月發(fā)布第一個版本的全新開源的輕量級框架贰剥。它基于Spring4.0設(shè)計,不僅繼承了Spring框架原有的優(yōu)秀特性骏掀,而且還通過簡化配置來進一步簡化了Spring應(yīng)用的整個搭建和開發(fā)過程鸠澈。另外SpringBoot通過集成大量的框架使得依賴包的版本沖突柱告,以及引用的不穩(wěn)定性等問題得到了很好的解決截驮。
其設(shè)計目的是用來簡化新Spring應(yīng)用的初始以及開發(fā)過程。該框架使用了特定的方式來進行配置际度,從而使開發(fā)人員不再需要定義樣板化的配置葵袭。簡而言之,Spring Boot通過提供默認(rèn)配置的方式整合了所有的框架乖菱,讓我們可以更加簡單坡锡、快速、方便地構(gòu)建應(yīng)用程序窒所。
3鹉勒、Spring Cloud (微服務(wù))
微服務(wù)是一種架構(gòu)風(fēng)格,即將單體應(yīng)用劃分為小型的服務(wù)單元吵取,微服務(wù)之間使用 HTTP 的 API 進行資源訪問與操作禽额。這一點和SOA很類似。
微服務(wù)架構(gòu)強調(diào)業(yè)務(wù)系統(tǒng)需要徹底的組件化和服務(wù)化,一個組件就是一個產(chǎn)品脯倒,可以獨立對外提供服務(wù)实辑。微服務(wù)不再強調(diào)傳統(tǒng)SOA架構(gòu)里面比較重的ESB企業(yè)服務(wù)總線。微服務(wù)強調(diào)每個微服務(wù)都有自己獨立的運行空間藻丢,包括數(shù)據(jù)庫資源剪撬。微服務(wù)架構(gòu)本身來源于互聯(lián)網(wǎng)的思路,因此組件對外發(fā)布的服務(wù)強調(diào)了采用HTTP Rest API的方式來進行悠反。相比SOA而言残黑,微服務(wù)的切分粒度會更小。
所以斋否,微服務(wù)架構(gòu)是 SOA 架構(gòu)思想的一種擴展萍摊,更加強調(diào)服務(wù)個體的獨立性、拆分粒度更小如叼。
4冰木、Spring Cloud Alibaba(阿里微服務(wù))
Spring Cloud Alibaba 是阿里巴巴提供的微服務(wù)開發(fā)一站式解決方案,是阿里巴巴開源中間件與 Spring Cloud 體系的融合笼恰。
阿里開源組件
Sentinel:把流量作為切入點踊沸,從流量控制、熔斷降級社证、系統(tǒng)負載保護等多個維度保護服務(wù)的穩(wěn)定性逼龟。
Nacos:一個更易于構(gòu)建云原生應(yīng)用的動態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺追葡。
RocketMQ:一款開源的分布式消息系統(tǒng)腺律,基于高可用分布式集群技術(shù),提供低延時的宜肉、高可靠的消息發(fā)布與訂閱服務(wù)匀钧。
Dubbo:Apache Dubbo? 是一款高性能 Java RPC 框架。
Seata:阿里巴巴開源產(chǎn)品谬返,一個易于使用的高性能微服務(wù)分布式事務(wù)解決方案之斯。
Alibaba Cloud ACM:一款在分布式架構(gòu)環(huán)境中對應(yīng)用配置進行集中管理和推送的應(yīng)用配置中心產(chǎn)品。
Alibaba Cloud OSS: 阿里云對象存儲服務(wù)(Object Storage Service遣铝,簡稱 OSS)佑刷,是阿里云提供的海量、安全酿炸、低成本瘫絮、高可靠的云存儲服務(wù)。您可以在任何應(yīng)用填硕、任何時間麦萤、任何地點存儲和訪問任意類型的數(shù)據(jù)。
Alibaba Cloud SchedulerX: 阿里中間件團隊開發(fā)的一款分布式任務(wù)調(diào)度產(chǎn)品,提供秒級频鉴、精準(zhǔn)栓辜、高可靠、高可用的定時(基于 Cron 表達式)任務(wù)調(diào)度服務(wù)垛孔。
四藕甩、工程
查看相關(guān)歷程的項目工程代碼...
1、JSP工程查看
https://github.com/GeeTeam/gt-java-sdk
2周荐、SpringBoot工程
https://github.com/xkcoding/spring-boot-demo
3狭莱、Spring Cloud工程
https://github.com/mxdldev/spring-cloud-flycloud
4、Spring Cloud Alibaba
https://github.com/funtl/spring-cloud-alibaba-dubbo
五概作、矛盾
同為產(chǎn)品服務(wù)腋妙,后端和前端相互依存,也難免有一些相愛相殺的矛盾讯榕。
1骤素、沒有文檔
可以使用Swagger或mook,若有修改愚屁,及時更新并同步济竹。
2、文檔不全
建議這樣
{
code : 0/ 1/ 2/ 3, // 0代表正常霎槐,1是參數(shù)有誤送浊,2是用戶不存在,3是用戶沒權(quán)限等
msg : 'xxxx', //表示此操作的提示信息( message )丘跌,一般只用來顯示操作失敗時提示信息
data : [], //表示此操作的返回值( result data)
count : x //返回的數(shù)據(jù)條數(shù)
}
3袭景、版本問題
比如一個/user接口,可加上版本號例如/user/1.3闭树,為了適配不同階段客戶端的接口耸棒。
4、接口參數(shù)校驗
比如輸入一個身份證號蔼啦,客戶端可以校驗榆纽,服務(wù)器在接口側(cè)也可以做校驗。兩側(cè)建議都做校驗捏肢,這樣最穩(wěn)妥,就怕兩側(cè)都不做校驗饥侵,就扯犢子了鸵赫。
5、問題接口對接
客戶端定位問題躏升,可以通過代理或瀏覽器擴展功能準(zhǔn)確定位到那些細節(jié)辩棒,用事實截圖及時溝通。
6、需求推諉
比如有個需求一睁,客戶端可以實現(xiàn)钻弄,后端也可以實現(xiàn)。這種情況建議后端來做者吁,原因是后端可以統(tǒng)一來做窘俺,邏輯一致,降低風(fēng)險复凳,節(jié)省人力成本瘤泪。如果變動變更的風(fēng)險,客戶端尤其是iOS客戶端發(fā)版審核比較麻煩育八,后端的話直接一改發(fā)版后相當(dāng)于熱更新效果对途。
六、小結(jié)
總結(jié)一下髓棋,移動端本身有一套完整的知識體系实檀,當(dāng)接觸到后端的體系后,才看到后端跟前端有相近的地方按声,也有差異的地方劲妙。每種角色都有相應(yīng)的優(yōu)勢和劣勢,以全棧的角度看技術(shù)儒喊,還是有點意思的镣奋。
當(dāng)一門語言精通后,可以多種語言淺嘗輒止怀愧。語言底層的規(guī)則是類似的侨颈,畢竟架構(gòu)模式設(shè)計思想很多是類似的。
學(xué)而時習(xí)之芯义,不亦說乎?