動(dòng)作支持,POST / PUT / DELELE / GET ,這里有一個(gè)坑,PUT和PATCH都是更新,但是PUT是全量更新而PATCH是部分更新,前者如果傳入的字段是空(未傳也視為空)那么也會(huì)被更新到數(shù)據(jù)庫中。目前我們雖然是使用PUT但是忽略空字段和未傳字段,本質(zhì)上是一種部分更新,這也帶來了一些問題,比如確有置空的業(yè)務(wù)需要特殊處理。
CI的改造主要是多了一部編譯docker image并打包到Harbor的過程,部署時(shí)會(huì)直接從Harbor拉取鏡像。另一個(gè)就是數(shù)據(jù)庫的升級(jí)工具。之前我們使用flyway作為數(shù)據(jù)庫升級(jí)工具,當(dāng)應(yīng)用啟動(dòng)時(shí)自動(dòng)執(zhí)行SQL腳本。隨著服務(wù)實(shí)例越來越多,一個(gè)服務(wù)的多個(gè)實(shí)例同時(shí)升級(jí)的情況也時(shí)有發(fā)生,雖然flyway是通過數(shù)據(jù)庫鎖實(shí)現(xiàn)了升級(jí)過程不會(huì)有并發(fā),但會(huì)導(dǎo)致被鎖服務(wù)啟動(dòng)時(shí)間變長(zhǎng)的問題。從實(shí)際升級(jí)過程來看,將可能發(fā)生的并發(fā)升級(jí)變?yōu)閱我贿M(jìn)程可能更靠譜。此外后期分庫分表的架構(gòu)也會(huì)使隨應(yīng)用啟動(dòng)自動(dòng)升級(jí)數(shù)據(jù)庫變的困難。綜合考量,我們將升級(jí)任務(wù)做了拆分,每個(gè)服務(wù)都有自己的升級(jí)項(xiàng)目并會(huì)做容器化。在使用時(shí),作為run once的工具來使用,即docker run -rm的方式。并且后續(xù)也支持了設(shè)定目標(biāo)版本的功能,在私有化項(xiàng)目的跨版本升級(jí)中起到了非常好的效果。至于自動(dòng)部署,由于服務(wù)之間存在上下游關(guān)系,例如config,eruka等屬于基本服務(wù)被其他服務(wù)依賴,部署也產(chǎn)生了先后順序。基于Jenkins做pipeline可以很好的解決這個(gè)問題。