背景 我們的springboot項(xiàng)目是通過(guò)k8s部署的,我們使用了G1垃圾回收器作為jvm的垃圾回收器,同時(shí)也配置了如下的各種應(yīng)對(duì)jvm oom崩潰時(shí)的參數(shù);在服務(wù)上線的一周...
背景 我們的springboot項(xiàng)目是通過(guò)k8s部署的,我們使用了G1垃圾回收器作為jvm的垃圾回收器,同時(shí)也配置了如下的各種應(yīng)對(duì)jvm oom崩潰時(shí)的參數(shù);在服務(wù)上線的一周...
為什么ConnectionFinalizerPhantomReference 對(duì)象不會(huì)隨著時(shí)間變少,一天4800個(gè),那什么時(shí)候會(huì)減少呢?
數(shù)據(jù)庫(kù)連接池配置不當(dāng)導(dǎo)致的full gc問(wèn)題記錄背景 線上有個(gè)流量比較大的服務(wù),qps日常在2000-3000之間,請(qǐng)求方對(duì)耗時(shí)要求比較高,響應(yīng)時(shí)間要求在300ms以內(nèi),服務(wù)上線以后,運(yùn)行也比較平穩(wěn)。某天夜里,突然有幾千個(gè)...
前言 之前關(guān)于實(shí)體和值對(duì)象的文章中有提過(guò)迪米特發(fā)則以及告訴而非詢問(wèn)原則。偏向于值對(duì)象的設(shè)計(jì)方法,今天參考馬丁福勒的文章https://martinfowler.com/bli...
前言 參考官方文檔:https://pinpoint-apm.gitbook.io/pinpoint/getting-started/installation#3-pinpo...
前言 redis自帶的StringSerializer性能相對(duì)較差,redis官方推薦kryo來(lái)提高序列化和反序列化速度,推薦snappy來(lái)節(jié)約redis內(nèi)存和網(wǎng)絡(luò)帶寬,在s...
https://www.info.ucl.ac.be/~pvr/PrincipleOfLeastExpressiveness.pdf[https://www.info.ucl...
確實(shí),整潔架構(gòu)和ddd雖然是兩碼事,但是這個(gè)架構(gòu)比較符合ddd設(shè)計(jì)思想。ddd的戰(zhàn)術(shù)設(shè)計(jì)就是指導(dǎo)代碼實(shí)現(xiàn)的。您說(shuō)的優(yōu)勢(shì)1是戰(zhàn)略設(shè)計(jì)過(guò)程中拆分問(wèn)題域,得出上下文。2類似于事件風(fēng)暴規(guī)劃出聚合。至于兩個(gè)關(guān)聯(lián)一個(gè)循環(huán)不了解是什么。每個(gè)人落地的ddd都會(huì)有區(qū)別,對(duì)ddd的領(lǐng)悟也不盡相同。但歸根到底是要服務(wù)于業(yè)務(wù)的
為什么要DDD一、傳統(tǒng)架構(gòu)的劣勢(shì) 0、面向數(shù)據(jù)庫(kù)建模,更加關(guān)注數(shù)據(jù)、關(guān)注有哪些表哪些列,只要數(shù)據(jù)最終落庫(kù),中間邏輯可以采取任何形式。忽略了業(yè)務(wù)中非常重要的“行為\動(dòng)作\業(yè)務(wù)邏輯” 的建模,...
已經(jīng)在項(xiàng)目里實(shí)施過(guò)了。由于項(xiàng)目不是特別復(fù)雜,迭代版本還不多,ddd優(yōu)勢(shì)還沒(méi)有完全發(fā)揮出來(lái)。相反代碼量要比傳統(tǒng)方式多了一些,數(shù)據(jù)庫(kù)設(shè)計(jì)由于項(xiàng)目限定要求mysql,也多做了一些工作。目前來(lái)看收益有幾部分。第一,組內(nèi)所有人對(duì)業(yè)務(wù)理解都很透徹,因?yàn)橐黄鹱鲞^(guò)事件風(fēng)暴,可以反向的判斷pm的需求提的是否合理,同時(shí)可以判斷新需求代碼寫在哪里合適,是不是屬于本上下文。第二,項(xiàng)目實(shí)施過(guò)程中為了適配前端改了很多版本代碼,但都沒(méi)有影響到業(yè)務(wù)邏輯,對(duì)一些數(shù)據(jù)庫(kù)的表字段變更也沒(méi)有影響到核心業(yè)務(wù)邏輯。第三,服務(wù)拆分時(shí)戰(zhàn)略設(shè)計(jì)和上下文映射提供了很大幫助,不是拍腦袋決定拆,而是有法可依。第四,是分層帶來(lái)的收益了,從編譯器級(jí)別對(duì)類的隨意注入做了限制,長(zhǎng)期來(lái)看應(yīng)該可以避免一些網(wǎng)狀引用。第五,整潔架構(gòu)帶來(lái)的收益,tob項(xiàng)目插件式架構(gòu)可以適配多個(gè)公司的多種數(shù)據(jù)庫(kù)緩存消息隊(duì)列等,而不會(huì)影響核心邏輯。
為什么要DDD一、傳統(tǒng)架構(gòu)的劣勢(shì) 0、面向數(shù)據(jù)庫(kù)建模,更加關(guān)注數(shù)據(jù)、關(guān)注有哪些表哪些列,只要數(shù)據(jù)最終落庫(kù),中間邏輯可以采取任何形式。忽略了業(yè)務(wù)中非常重要的“行為\動(dòng)作\業(yè)務(wù)邏輯” 的建模,...
前言 領(lǐng)域事件是領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中的重中之重,事件風(fēng)暴的時(shí)候確認(rèn)的領(lǐng)域事件可以直接應(yīng)用在我們的代碼設(shè)計(jì)中,但是領(lǐng)域事件在哪里發(fā)布、領(lǐng)域事件的應(yīng)該是自己寫還是直接利用spring的...
前言 首先看下領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中對(duì)應(yīng)用層和領(lǐng)域?qū)拥慕忉專?從解釋中我們可以看出,應(yīng)用層的任務(wù)是與其他系統(tǒng)應(yīng)用層合作、為領(lǐng)域?qū)舆M(jìn)行協(xié)調(diào),實(shí)際上還包括了翻譯等工作,具體工作可以參考一...
前言 應(yīng)用服務(wù)層是Domain層的直接消費(fèi)者,同時(shí)也是外部想要調(diào)用領(lǐng)域?qū)拥拈T面。應(yīng)用服務(wù)內(nèi)部包含了翻譯外部數(shù)據(jù)到領(lǐng)域?qū)ο蟮倪壿?、為領(lǐng)域服務(wù)準(zhǔn)備領(lǐng)域?qū)ο蟮倪壿?、調(diào)用領(lǐng)域服務(wù)或者...
一、整潔架構(gòu)分層 整潔架構(gòu)分層如圖所示,從內(nèi)到外分別為實(shí)體->用例->接口適配器->框架與驅(qū)動(dòng)程序。其中實(shí)體層和用例層包含業(yè)務(wù)邏輯、接口適配器層是翻譯層,負(fù)責(zé)把外部數(shù)據(jù)翻譯成...
前言 聚合是由實(shí)體和值對(duì)象組成的一個(gè)整體概念,聚合根就是組成這個(gè)聚合的一個(gè)實(shí)體。 聚合設(shè)計(jì)原則 參照沃恩弗農(nóng): 1、在聚合邊界內(nèi)保護(hù)業(yè)務(wù)規(guī)則不變性 比如業(yè)務(wù)規(guī)則是 a=b+c...
前言 值對(duì)象是狀態(tài)不可變的、可整體替換的、用于度量和描述領(lǐng)域中某件東西的對(duì)象。在落地DDD過(guò)程中我們常常遇到一個(gè)概念到底是建模成實(shí)體好還是建模成值對(duì)象好這種問(wèn)題,其實(shí)各DDD...
前言 實(shí)體和值對(duì)象的區(qū)分是領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中的老大難問(wèn)題,建模過(guò)程中是必然會(huì)遇到的問(wèn)題,我們?cè)诼涞仡I(lǐng)域驅(qū)動(dòng)設(shè)計(jì)過(guò)程中就遭遇了這類問(wèn)題,下面介紹下我們落地過(guò)程中的經(jīng)驗(yàn)。 實(shí)體 實(shí)體...
前言 DDD架構(gòu)分層由內(nèi)到外主要分為domain層->application層->infrastructure層->interface層其中領(lǐng)域服務(wù)屬于domain層、應(yīng)用服...
前言 DDD分為戰(zhàn)略設(shè)計(jì)和戰(zhàn)術(shù)設(shè)計(jì),戰(zhàn)略設(shè)計(jì)就是劃分子域和限界上下文的過(guò)程。領(lǐng)域劃分為子域的通用劃分形式是把領(lǐng)域劃分為 核心子域、支撐子域、通用子域。我們?cè)诼涞剡^(guò)程中常常會(huì)很...
前言 CQRS在領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中非常常見(jiàn),也非常好用,簡(jiǎn)單來(lái)說(shuō)就是對(duì)領(lǐng)域模型的修改和對(duì)領(lǐng)域生成數(shù)據(jù)的讀取職責(zé)是相互分離的。 CQRS分類 CQRS在落地過(guò)程中分為幾種 第一種是...