|
作者:小傅哥 博客:https://
?沉淀、分享、成長(zhǎng),讓自己和他人都能有所收獲!?? ? 一、先看效果 二、再說(shuō)流程 三、之后上線 四、系統(tǒng)介紹
于5.1啟動(dòng),耗時(shí)3個(gè)多月開(kāi)發(fā)的 OpenAI 項(xiàng)目,終于到了上線對(duì)外的時(shí)候。可能很多伙伴會(huì)想到,Github 不是有不少的開(kāi)源項(xiàng)目嗎,為啥還自己做?
為啥??。嗯,好問(wèn)題!因?yàn)槲沂且粋€(gè)程序員???????,我需要對(duì)各項(xiàng)技術(shù)的實(shí)現(xiàn)方案有深度的理解,我不能在工作或者面試中被提問(wèn)的時(shí)候,說(shuō)你去看開(kāi)源項(xiàng)目吧。 此外大部分 Github 的開(kāi)源項(xiàng)目主要以前端為主,并沒(méi)有一個(gè)前后端結(jié)合的開(kāi)發(fā)。而實(shí)際上,當(dāng)我們真的需要在業(yè)務(wù)場(chǎng)景來(lái)使用時(shí),就不只是前端頁(yè)面,還需要在后端做各項(xiàng)的控制和管理。而這樣的架構(gòu)設(shè)計(jì),就勢(shì)必會(huì)涉及到;前后端分離、前端工程架構(gòu)、后端工程架構(gòu)(DDD)、登錄授權(quán)鑒權(quán)、大模型SDK實(shí)現(xiàn)(okhttp)、流式異步響應(yīng)開(kāi)發(fā)對(duì)接、庫(kù)表字段索引精細(xì)設(shè)計(jì)、API多渠道路由、內(nèi)網(wǎng)穿透服務(wù)測(cè)試、前后端鏡像打包、docker-compose 服務(wù)部署和回滾策略、公眾號(hào)驗(yàn)簽配置,等等技術(shù)知識(shí)的運(yùn)用。 所以,你跟開(kāi)源項(xiàng)目學(xué)的是簡(jiǎn)單的應(yīng)用,跟小傅哥學(xué)習(xí);學(xué)的是架構(gòu)設(shè)計(jì)的魅力、學(xué)的是技術(shù)實(shí)現(xiàn)的巧妙。學(xué)的是,讓你在晉升、述職、面試,時(shí)交流的底氣。那么現(xiàn)在小傅哥把這樣一個(gè)上線項(xiàng)目,拆分成一個(gè)個(gè)章節(jié)學(xué)習(xí),讓你也能具備這樣的能力。 一、先看效果體驗(yàn)地址:openai.itedus.cn
關(guān)注小傅哥的公眾號(hào)【bugstack蟲(chóng)洞?!炕貜?fù)【星球】也可以領(lǐng)取專(zhuān)屬優(yōu)惠券 | 加入即可學(xué)習(xí)星球的全套實(shí)戰(zhàn)項(xiàng)目(Lottery、API網(wǎng)關(guān)、ChatGPT、IM、組件開(kāi)發(fā)、插件開(kāi)發(fā)等) 二、再說(shuō)流程當(dāng)一個(gè)項(xiàng)目引入后端能力以后,就可以擴(kuò)展非常多的能力。而所有的控制都是在做用戶的行為處理,而這些行為就是業(yè)務(wù)需求。當(dāng)不同的碼農(nóng)面對(duì)相同的業(yè)務(wù),寫(xiě)出的代碼可就不一樣了。所以小傅哥也是希望讓你能學(xué)習(xí)到怎么架構(gòu)和編碼出高質(zhì)量的代碼。 ?? 我告訴你,當(dāng)前的需求就是;公眾號(hào)掃碼獲取驗(yàn)證碼登錄,登錄后訪問(wèn) OpenAI 服務(wù),訪問(wèn)后需要根據(jù)是用戶綁定的APIKey還是系統(tǒng)APIKey分別調(diào)用,如果是系統(tǒng)APIKey則需要限制調(diào)用次數(shù),而用戶自己綁定的則不需要。此外調(diào)用的 OpenAI 模型和渠道不同,需要進(jìn)行判斷和處理。那么這樣的代碼你想怎么寫(xiě)??? 會(huì)不會(huì)寫(xiě)出 if···else 的面條代碼? 如果你不想寫(xiě)出面條代碼,那么就看看小傅哥給你設(shè)計(jì)的流程圖結(jié)構(gòu)。如下; 
- 首先,在這套流程中,小傅哥將核心業(yè)務(wù)和支撐核心業(yè)務(wù)的分支流程進(jìn)行拆解。一切的分支都是為了支撐主干流程運(yùn)行,而分支的存在和去除,都應(yīng)以模塊插件的方式進(jìn)行使用。這樣會(huì)更好的維護(hù)和使用。
- 之后,我想說(shuō)。寫(xiě)代碼就像擦屁屁的紙,80%的面積都是保護(hù)手的。所以這除了那20%的核心點(diǎn)以外,要讓那支撐系統(tǒng)運(yùn)行的 80% 分支邏輯,采用設(shè)計(jì)模式進(jìn)行進(jìn)行分治和抽象的設(shè)計(jì)實(shí)現(xiàn)。
- 所以,這里有了路由模塊和規(guī)則引擎的使用。因?yàn)樗麄兛梢愿玫谋惶砑雍鸵瞥6看巫儎?dòng)的時(shí)候,也都是固定范圍的變動(dòng),不會(huì)讓整體流程都陷入測(cè)試風(fēng)險(xiǎn)中。
所以,你還覺(jué)得寫(xiě)代碼就只是if···else嗎,這哪是寫(xiě)代碼,這TM是老子在用代碼構(gòu)建一個(gè)世界! 三、之后上線一個(gè)系統(tǒng)的上線對(duì)外,會(huì)有太多太多的細(xì)節(jié)要考慮。而這樣的內(nèi)容,只有實(shí)踐了才能真的吸收這些知識(shí)。尤其是出一些事故時(shí),都是留下一個(gè)個(gè)技術(shù)成長(zhǎng)的故事。 
那么我們現(xiàn)在以 OpenAI 個(gè)人上線對(duì)外一個(gè)項(xiàng)目的背景進(jìn)行思考 ??,看看會(huì)有哪些點(diǎn)需要處理; - 技術(shù)棧的使用,不宜過(guò)多。要盡量減少運(yùn)維成本。比如你可以使用 Guava 替代 Redis 使用。
- 數(shù)據(jù)庫(kù)可以考慮單獨(dú)購(gòu)買(mǎi),避免數(shù)據(jù)丟失。但同時(shí)也需要考慮,如果數(shù)據(jù)丟失,用戶可以根據(jù)自己的加密卡Key進(jìn)行重新綁卡。
- 因?yàn)楸旧矸?wù)器的成本就比較高,所以盡量控制被白piao。比如任何一個(gè)Key都可以在你部署的服務(wù)上使用,其實(shí)意義不大??梢酝ㄟ^(guò)只授權(quán)加密 Key 的方式進(jìn)行使用。
- 此外要考慮,多種的調(diào)用渠道,如果某個(gè)掛了。要能替換對(duì)應(yīng)渠道的訪問(wèn)地址,所以還需要把渠道對(duì)應(yīng)的地址做成可配置的,之后用戶寫(xiě)入庫(kù)里,寫(xiě)入的只是渠道碼這樣就可以方便替換。
- 打包部署上線,一定要先在本地測(cè)試驗(yàn)證,驗(yàn)證完全沒(méi)問(wèn)題在上線。否則你就單臺(tái)服務(wù)器沒(méi)有負(fù)載能力的情況下,基本就要掛了。
- 如果你在本地測(cè)試仍不放心,可以修改一個(gè)端口和一個(gè) docker-compose-pre-v1.0.yml 進(jìn)行部署測(cè)試??汕f(wàn)別修改原來(lái)正式對(duì)外的 compose 直接部署,這會(huì)出問(wèn)題的。
- 要有一個(gè)可以回滾的處理,可以配置 docker-compose-prod-v1.0.yml 版本的添加。如果1.1版本出問(wèn)題,可以快速使用 1.0 版本重新部署。
- 數(shù)據(jù)庫(kù)表的使用,要注意字段的設(shè)計(jì),索引的設(shè)計(jì),否則就你那一卡拉米資源的數(shù)據(jù)庫(kù)配置,真的可能因?yàn)槟銢](méi)有索引被打掛。此外可得把用戶名和密碼設(shè)計(jì)的強(qiáng)悍一些,別被比特幣勒索。
- 定期導(dǎo)出 MySQL 數(shù)據(jù)庫(kù)表數(shù)據(jù),或者有自動(dòng)備份功能的數(shù)據(jù)庫(kù)服務(wù)器也是可以的。
- 因?yàn)槟愕拇a,確實(shí)是你的代碼。這可不是公司的,也不是有別人參與的。所以為了能在迭代或者處理問(wèn)題的時(shí)候,快速解決。一定是要非常好的架構(gòu),非常清晰的編碼。
四、系統(tǒng)介紹加入小傅哥的星球【碼農(nóng)會(huì)鎖】,就可以完整的學(xué)習(xí)此套項(xiàng)目。另外星球還有,Lottery、API網(wǎng)關(guān)、IM、組件開(kāi)發(fā)、插件開(kāi)發(fā)等項(xiàng)目一起學(xué)習(xí)。 小傅哥帶著大家寫(xiě)的項(xiàng)目,從來(lái)不是湊數(shù)項(xiàng)目,也從不寫(xiě)一堆的 CRUD 代碼。而是按照互聯(lián)網(wǎng)企業(yè)級(jí)中所開(kāi)發(fā)項(xiàng)目的模式進(jìn)行架構(gòu)、設(shè)計(jì)和實(shí)現(xiàn)。所以你跟著小傅哥學(xué)習(xí),學(xué)的是編程的思維和編碼的能力。如下是系統(tǒng)的架構(gòu)分層; 
- 以上內(nèi)容,分別包括;API、WEB、SDK,以及 Dev-Ops 部署相關(guān)的內(nèi)容。
- 所以這套項(xiàng)目的學(xué)習(xí),學(xué)的是前端、后端、架構(gòu)、部署、運(yùn)維等一整套東西,非常具有含金量。
以下是整套課程的目錄結(jié)構(gòu),如果你想學(xué)習(xí)一定仔細(xì)看看,千萬(wàn)別錯(cuò)過(guò)!
|