微服務(wù)之間的最佳調(diào)用方式
茉莉花,別名:茉莉,拉丁文名:Jasminum sambac (L.) Ait,木 犀科、素馨屬直立或攀援灌木,高達3米。 小枝圓柱形或稍壓扁狀,有時中空,疏被柔毛。葉對生,單葉,葉片紙質(zhì),圓形、橢圓形、卵狀橢圓形或倒卵形,兩端圓或鈍,基部有時微心形,在上面稍凹入或凹起,下面凸起,細脈在兩面常明顯,微凸起,除下面脈腋間常具簇毛外,其余無毛;裂片長圓形至近圓形,先端圓或鈍。果球形,呈紫黑色。花期5-8月,果期7-9月。 茉莉的花極香,為著名的花茶原料及重要的香精原料;花、葉藥用治目赤腫痛,并有止咳化痰之效。 吳王子子駒亡走閩越,怨東甌殺其父,常勸閩越擊東甌。至建元三年,閩越發(fā)兵圍東甌。東甌食盡,困, 太史公曰:余每讀虞書,至於君臣相敕,維是幾安,而股肱不良,萬事墮壞,未嘗不流涕也。成王作頌,推己懲艾,悲彼家難,可不謂戰(zhàn)戰(zhàn)恐懼,善守善終哉?君子不為約則修德,滿則棄禮,佚能思初,安能惟始,沐浴膏澤而歌詠勤苦,非大德誰能如斯!傳曰“治定功成,禮樂乃興”。海內(nèi)人道益深,其德益至,所樂者益異。滿而不損則溢,盈而不持則傾。凡作樂者,所以節(jié)樂。君子以謙退為禮,以損減為樂,樂其如此也。以為州異國殊,情習(xí)不同,故博采風(fēng)俗,協(xié)比聲律,以補短移化,助流政教。天子躬於明堂臨觀,而萬民咸蕩滌邪穢,斟酌飽滿,以飾厥性。故云雅頌之音理而民正,嘄噭之聲興而士奮,鄭衛(wèi)之曲動而心淫。及其調(diào)和諧合,鳥獸盡感,而況懷五常,含好惡,自然之勢也? 治道虧缺而鄭音興起,封君世辟,名顯鄰州,爭以相高。自仲尼不能與齊優(yōu)遂容於魯,雖退正樂以誘世,作五章以剌時,猶莫之化。陵遲以至六國,流沔沈佚,遂往不返,卒於喪身滅宗,并國於秦。 秦二世尤以為娛。丞相李斯進諫曰:“放棄詩書,極意聲色,祖伊所以懼也;輕積細過,恣心長夜,紂所以亡也。”趙高曰:“五帝、三王樂各殊名,示不相襲。上自朝廷,下至人民,得以接歡喜,合殷勤,非此和說不通,解澤不流,亦各一世之化,度時之樂,何必華山之騄耳而后行遠乎?”二世然之。 高祖過沛詩三侯之章,令小兒歌之。高祖崩,令沛得以四時歌鳷宗廟。孝惠、孝文、孝景無所增更,於樂府習(xí)常肄舊而已。 至今上即位,作十九章,令侍中李延年次序其聲,拜為協(xié)律都尉。通一經(jīng)之士不能獨知其辭,皆集會五經(jīng)家,相與共講習(xí)讀之,乃能通知其意,多爾雅之文。 漢家常以正月上辛祠太一甘泉,以昏時夜祠,到明而終。常有流星經(jīng)於祠壇上。使僮男僮女七十人俱歌。春歌青陽,夏歌硃明,秋歌西昚,冬歌玄冥。世多有,故不論。 又嘗得神馬渥洼水中,復(fù)次以為太一之歌。曲曰:“太一貢兮天馬下,霑赤汗兮沫流赭。騁容與兮跇萬里,今安匹兮龍為友。”後伐大宛得千里馬,馬名蒲梢,次作以為歌。歌詩曰:“天馬來兮從西極,經(jīng)萬里兮歸有德。承靈威兮降外國,涉流沙兮四夷服。”中尉汲黯進曰:“凡王者作樂,上以承祖宗,下以化兆民。今陛下得馬,詩以為歌,協(xié)於宗廟,先帝百姓豈能知其音邪?”上默然不說。丞相公孫弘曰:“黯誹謗圣制,當(dāng)族。” 凡音之起,由人心生也。人心之動,物使之然也。感於物而動,故形於聲;聲相應(yīng),故生變;變成方,謂之音;比音而樂之,及干戚羽旄,謂之樂也。樂者,音之所由生也,其本在人心感於物也。是故其哀心感者,其聲噍以殺;其樂心感者,其聲啴以緩;其喜心感者,其聲發(fā)以散;其怒心感者,其聲粗以厲;其敬心感者,其聲直以廉;其愛心感者,其聲和以柔。六者非性也,感於物而后動,是故先王慎所以感之。故禮以導(dǎo)其志,樂以和其聲,政以壹其行,刑以防其奸。禮樂刑政,其極一也,所以同民心而出治道也。 凡音者,生人心者也。情動於中,故形於聲,聲成文謂之音。是故治世之音安以樂,其正和;亂世之音怨以怒,其正乖;亡國之音哀以思,其民困。聲音之道,與正通矣。宮為君,商為臣,角為民,徵為事,羽為物。五者不亂,則無怗懘之音矣。宮亂則荒,其君驕;商亂則搥,其臣壞;角亂則憂,其民怨;徵亂則哀,其事勤;羽亂則危,其財匱。五者皆亂,迭相陵,謂之慢。如此則國之滅亡無日矣。鄭衛(wèi)之音,亂世之音也,比於慢矣。桑間濮上之音,亡國之音也,其政散,其民流,誣上行私而不可止。 凡音者,生於人心者也;樂者,通於倫理者也。是故知聲而不知音者,禽獸是也;知音而不知樂者,眾庶是也。唯君子為能知樂。是故審聲以知音,審音以知樂,審樂以知政,而治道備矣。是故不知聲者不可與言音,不知音者不可與言樂知樂則幾於禮矣。禮樂皆得,謂之有德。德者得也。是故樂之隆,非極音也;食饗之禮,非極味也。清廟之瑟,硃弦而疏越,一倡而三嘆,有遺音者矣。大饗之禮,尚玄酒而俎腥魚,大羹不和,有遺味者矣。是故先王之制禮樂也,非以極口腹耳目之欲也,將以教民平好惡而反人道之正也。 人生而靜,天之性也;感於物而動,性之頌也。物至知知,然后好惡形焉。好惡無節(jié)於內(nèi),知誘於外,不能反己,天理滅矣。夫物之感人無窮,而人之好惡無節(jié),則是物至而人化物也。人化物也者,滅天理而窮人欲者也。於是有悖逆詐偽之心,有淫佚作亂之事。是故彊者脅弱,眾者暴寡,知者詐愚,勇者苦怯,疾病不養(yǎng),老幼孤寡不得其所,此大亂之道也。是故先王制禮樂,人為之節(jié):衰麻哭泣,所以節(jié)喪紀(jì)也;鐘鼓干戚,所以和安樂也;婚姻冠笄,所以別男女也;射鄉(xiāng)食饗,所以正交接也。禮節(jié)民心,樂和民聲,政以行之,刑以防之。禮樂刑政四達而不悖,則王道備矣。 樂者為同,禮者為異。同則相親,異則相敬。樂勝則流,禮勝則離。合情飾貌者,禮樂之事也。禮義立,則貴賤等矣;樂文同,則上下和矣;好惡著,則賢不肖別矣;刑禁暴,爵舉賢,則政均矣。仁以愛之,義以正之,如此則民治行矣。 樂由中出,禮自外作。樂由中出,故靜;禮自外作,故文。大樂必易,大禮必簡。樂至則無怨,禮至則不爭。揖讓而治天下者,禮樂之謂也。暴民不作,諸侯賓服,兵革不試,五刑不用,百姓無患,天子不怒,如此則樂達矣。合父子之親,明長幼之序,以敬四海之內(nèi)。天子如此,則禮行矣。 大樂與天地同和,大禮與天地同節(jié)。和,故百物不失;節(jié),故祀天祭地。明則有禮樂,幽則有鬼神,如此則四海之內(nèi)合敬同愛矣。禮者,殊事合敬者也;樂者,異文合愛者也。禮樂之情同,故明王以相沿 萬石君名奮,其父趙人也,姓石氏。趙亡,徙居溫。高祖東擊項籍,過河內(nèi),時奮年十五,為小吏,侍高祖。高祖與語,愛其恭敬,問曰:“若何有?”對曰:“奮獨有母,不幸失明。家貧。有姊,能鼓琴。”高祖曰:“若能從我乎?”曰:“原盡力。”於是高祖召其姊為美人,以奮為中涓,受書謁,徙其家長安中戚里,以姊為美人故也。其官至孝文時,積功勞至大中大夫。無文學(xué),恭謹(jǐn)無與比。 文帝時,東陽侯張相如為太子太傅,免。選可為傅者,皆推奮,奮為太子太傅。及孝景即位,以為九卿;迫近,憚之,徙奮為諸侯相。奮長子建,次子甲,次子乙,次子慶,皆以馴行孝謹(jǐn),官皆至二千石。於是景帝曰:“石君及四子皆二千石,人臣尊寵乃集其門。”號奮為萬石君。 孝景帝季年,萬石君以上大夫祿歸老于家,以歲時為朝臣。過宮門闕,萬石君必下車趨,見路馬必式焉。子孫為小吏,來歸謁,萬石君必朝服見之,不名。子孫有過失,不譙讓,為便坐,對案不食。然后諸子相責(zé),因長老肉袒固謝罪,改之,乃許。子孫勝冠者在側(cè),雖燕居必冠,申申如也。僮仆如也,唯謹(jǐn)。上時賜食於家,必稽首俯伏而食之,如在上前。其執(zhí)喪,哀戚甚悼。子孫遵教,亦如之。萬石君家以孝謹(jǐn)聞乎郡國,雖齊魯諸儒質(zhì)行,皆自以為不及也。 建元二年,郎中令王臧以文學(xué)獲罪。皇太后以為儒者文多質(zhì)少,今萬石君家不言而躬行,乃以長子建為郎中令,少子慶為內(nèi)史。 建老白首,萬石君尚無恙。建為郎中令,每五日洗沐歸謁親,入子舍,竊問侍者,取親中稖廁窬,身自浣滌,復(fù)與侍者,不敢令萬石君知,以為常。建為郎中令,事有可言,屏人恣言,極切;至廷見,如不能言者。是以上乃親尊禮之。 萬石君徙居陵里。內(nèi)史慶醉歸,入外門不下車。萬石君聞之,不食。慶恐,肉袒請罪,不許。舉宗及兄建肉袒,萬石君讓曰:“內(nèi)史貴人,入閭里,里中長老皆走匿,而內(nèi)史坐車中自如,固當(dāng)!”乃謝罷慶。慶及諸子弟入里門,趨至家。 萬石君以元朔五年中卒。長子郎中令建哭泣哀思,扶杖乃能行。歲馀,建亦死。諸子孫咸孝,然建最甚,甚於萬石君。 建為郎中令,書奏事,事下,建讀之,曰:“誤書!‘馬’者與尾當(dāng)五,今乃四,不足一。上譴死矣!”甚惶恐。其為謹(jǐn)慎,雖他皆如是。 萬石君少子慶為太仆,御出,上問車中幾馬,慶以策數(shù)馬畢,舉手曰:“六馬。”慶於諸子中最為簡易矣,然猶如此。為齊相,舉齊國皆慕其家行,不言而齊國大治,為立石相祠。 元狩元年,上立太子,選群臣可為傅者,慶自沛守為太子太傅,七歲遷為御史大夫。 元鼎五年秋,丞相有罪,罷。制詔御史:“萬石君先帝尊之,子孫孝,其以御史大夫慶為丞相,封為牧丘侯。”是時漢方南誅兩越,東擊朝鮮,北逐匈奴,西伐大宛,中國多事。天子巡狩海內(nèi),修上古神祠,封禪,興禮樂。公家用少,桑弘羊等致利,王溫舒之屬峻法,兒寬等推文學(xué)至九卿,更進用事,事不關(guān)決於丞相,丞相醇謹(jǐn)而已。在位九歲,無能有所匡言。嘗欲請治上近臣所忠、九卿咸宣罪,不能服,反受其過,贖罪。 元封四年中,關(guān)東流民二百萬口,無名數(shù)者四十萬,公卿議欲請徙流民於邊以適之。上以為丞相老謹(jǐn),不能與其議,乃賜丞相告歸,而案御史大夫以下議為請者。丞相慚不任職,乃上書曰:“慶幸得待罪丞相,罷駑無以輔治,城郭倉庫空虛,民多流亡,罪當(dāng)伏斧質(zhì),上不忍致法。原歸丞相侯印,乞骸骨歸,避賢者路。”天子曰:“倉廩既空,民貧流亡,而君欲請徙之,搖蕩不安,動危之,而辭位,君欲安歸難乎?”以書讓慶,慶甚慚,遂復(fù)視事。 慶文深審謹(jǐn),然無他大略,為百姓言。後三歲馀,太初二年中,丞相慶卒,謚為恬侯。慶中子德,慶愛用之,上以德為嗣,代侯。後為太常,坐法當(dāng)死,贖免為庶人。慶方為丞相,諸子孫為吏更至二千石者十三人。及慶死後,稍以罪去,孝謹(jǐn)益衰矣。 建陵侯衛(wèi)綰者,代大陵人也。綰以戲車為郎,事文帝,功次遷為中郎將,醇謹(jǐn)無他。孝景為太子時,召上左右飲,而綰稱病不行。文帝且崩時,屬孝景曰:“綰長者,善遇之。”及文帝崩,景帝立,歲馀不噍呵綰,綰日以謹(jǐn)力。 景帝幸上林,詔中郎將參乘,還而問曰:“君知所以得參乘乎?”綰曰:“臣從車士幸得以功次遷為中郎將,不自知也。”上問曰:“吾為太子時召君,君不肯來,何也?”對曰:“死罪,實病!”上賜之劍。綰曰:“先帝賜臣劍凡六,劍不敢奉詔。”上曰:“劍,人之所施易,獨至今乎?”綰曰:“具在。”上使取六劍,劍尚盛,未嘗服也。郎官有譴,常蒙其罪,不與他將爭;有功,常讓他將。上以為廉,忠實無他腸,乃拜綰為河間王太傅。吳楚反,詔綰為將,將河間兵擊吳楚有功,拜為中尉。三歲,以軍功,孝景前六年中封綰為建陵侯。 其明年,上廢太子,誅栗卿之屬。上以為綰長者,不忍,乃賜綰告歸,而使郅都治捕栗氏。既已,上立膠東王為太子,召綰,拜為太子太傅。久之,遷為御史大夫。五歲,代桃侯舍為丞相,朝奏事如職所奏。然自初官以至丞相,終無可言。天子以為敦厚,可相少主,尊寵之,賞賜甚多。 為丞相三歲,景帝崩,武帝立。建元年中,丞相以景帝疾時諸官囚多坐不辜者,而君不任職,免之。其後綰卒,子信代。坐酎金失侯。 塞侯直不疑者,南陽人也。為郎,事文帝。其同舍有告歸,誤持同舍郎金去,已而金主覺,妄意不疑,不疑謝有之,買金償。而告歸者來而歸金,而前郎亡金者大慚,以此稱為長者。文帝稱舉,稍遷至太中大夫。朝廷見,人或毀曰:“不疑狀貌甚美,然獨無柰其善盜嫂何也!”不疑聞,曰:“我乃無兄。”然終不自明也。 吳楚反時,不疑以二千石將兵擊之。景帝後元年,拜為御史大夫。天子修吳楚時功,乃封不疑為塞侯。武帝建元年中, 諺曰“力田不如逢年,善仕不如遇合”,固無虛言。非獨女以色媚,而士宦亦有之。 昔以色幸者多矣。至漢興,高祖至暴抗也,然籍孺以佞幸;孝惠時有閎孺。此兩人非有材能,徒以婉佞貴幸,與上臥起,公卿皆因關(guān)說。故孝惠時郎侍中皆冠鵕璘,貝帶,傅脂粉,化閎、籍之屬也。兩人徙家安陵。 孝文時中寵臣,士人則鄧通,宦者則趙同、北宮伯子。北宮伯子以愛人長者;而趙同以星氣幸,常為文帝參乘;鄧通無伎能。鄧通,蜀郡南安人也,以濯船為黃頭郎。孝文帝夢欲上天,不能,有一黃頭郎從後推之上天,顧見其衣裻帶後穿。覺而之漸臺,以夢中陰目求推者郎,即見鄧通,其衣後穿,夢中所見也。召問其名姓,姓鄧氏,名通,文帝說焉,尊幸之日異。通亦愿謹(jǐn),不好外交,雖賜洗沐,不欲出。於是文帝賞賜通巨萬以十?dāng)?shù),官至上大夫。文帝時時如鄧通家游戲。然鄧通無他能,不能有所薦士,獨自謹(jǐn)其身以媚上而已。上使善相者相通,曰“當(dāng)貧餓死”。文帝曰:“能富通者在我也。何謂貧乎?”於是賜鄧通蜀嚴(yán)道銅山,得自鑄錢,“鄧氏錢”布天下。其富如此。 文帝嘗病癰,鄧通常為帝唶吮之。文帝不樂,從容問通曰:“天下誰最愛我者乎?”通曰:“宜莫如太子。”太子入問病,文帝使唶癰,唶癰而色難之。已而聞鄧通常為帝唶吮之,心慚,由此怨通矣。及文帝崩,景帝立,鄧通免,家居。居無何,人有告鄧通盜出徼外鑄錢。下吏驗問,頗有之,遂竟案,盡沒入鄧通家,尚負責(zé)數(shù)巨萬。長公主賜鄧通,吏輒隨沒入之,一簪不得著身。於是長公主乃令假衣食。竟不得名一錢,寄死人家。 孝景帝時,中無寵臣,然獨郎中令周文仁,仁寵最過庸,乃不甚篤。 今天子中寵臣,士人則韓王孫嫣,宦者則李延年。嫣者,弓高侯孽孫也。今上為膠東王時,嫣與上學(xué)書相愛。及上為太子,愈益親嫣。嫣善騎射,善佞。上即位,欲事伐匈奴,而嫣先習(xí)胡兵,以故益尊貴,官至上大夫,賞賜擬於鄧通。時嫣常與上臥起。江都王入朝,有詔得從入獵上林中。天子車駕蹕道未行,而先使嫣乘副車,從數(shù)十百騎,騖馳視獸。江都王望見,以為天子,辟從者,伏謁道傍。嫣驅(qū)不見。既過,江都王怒,為皇太后泣曰:“請得歸國入宿衛(wèi),比韓嫣。”太后由此嗛嫣。嫣侍上,出入永巷不禁,以奸聞皇太后。皇太后怒,使使賜嫣死。上為謝,終不能得,嫣遂死。而案道侯韓說,其弟也,亦佞幸。 李延年,中山人也。父母及身兄弟及女,皆故倡也。延年坐法腐,給事狗中。而平陽公主言延年女弟善舞,上見,心說之,及入永巷,而召貴延年。延年善歌,為變新聲,而上方興天地祠,欲造樂詩歌弦之。延年善承意,弦次初詩。其女弟亦幸,有子男。延年佩二千石印,號協(xié)聲律。與上臥起,甚貴幸,埒如韓嫣也。久之,浸與中人亂,出入驕恣。及其女弟李夫人卒後,愛弛,則禽誅延年昆弟也。 自是之後,內(nèi)寵嬖臣大底外戚之家,然不足數(shù)也。衛(wèi)青、霍去病亦以外戚貴幸,然頗用材能自進。 太史公曰:甚哉愛憎之時!彌子瑕之行,足以觀後人佞幸矣。雖百世可知也。 傳稱令色,詩刺巧言。冠璘入侍,傅粉承恩。黃頭賜蜀,宦者同軒。新聲都尉,挾彈王孫。泣魚竊駕,著自前論。 與丞相綰俱以過免。 不疑學(xué)老子言。其所臨,為官如故,唯恐人知其為吏跡也。不好立名稱,稱為長者。不疑卒,子相如代。孫望,坐酎金失侯。 郎中令周文者,名仁,其先故任城人也。以醫(yī)見。景帝為太子時,拜為舍人,積功稍遷,孝文帝時至太中大夫。景帝初即位,拜仁為郎中令。 仁為人陰重不泄,常衣敝補衣溺袴,期為不絜清,以是得幸。景帝入臥內(nèi),於後宮祕戲,仁常在旁。至景帝崩,仁尚為郎中令,終無所言。上時問人,仁曰:“上自察之。”然亦無所毀。以此景帝再自幸其家。家徙陽陵。上所賜甚多,然常讓,不敢受也。諸侯群臣賂遺,終無所受。 武帝立,以為先帝臣,重之。仁乃病免,以二千石祿歸老,子孫咸至大官矣。 御史大夫張叔者,名歐,安丘侯說之庶子也。孝文時以治刑名言事太子。然歐雖治刑名家,其人長者。景帝時尊重,常為九卿。至武帝元朔四年,韓安國免,詔拜歐為御史大夫。自歐為吏,未嘗言案人,專以誠長者處官。官屬以為長者,亦不敢大欺。上具獄事,有可卻,卻之;不可者,不得已,為涕泣面對而封之。其愛人如此。 老病篤,請免。於是天子亦策罷,以上大夫祿歸老于家。家於陽陵。子孫咸至大官矣。 太史公曰:仲尼有言曰“君子欲訥於言而敏於行”,其萬石、建陵、張叔之謂邪?是以其教不肅而成,不嚴(yán)而治。塞侯微巧,而周文處讇,君子譏之,為其近於佞也。然斯可謂篤行君子矣! 萬石孝謹(jǐn),自家形國。郎中數(shù)馬,內(nèi)史匍匐。綰無他腸,塞有陰德。刑名張歐,垂涕恤獄。敏行訥言,俱嗣芳躅。 也。故事與時并,名與功偕。故鐘鼓管磬羽籥干戚,樂之器也;詘信俯仰級兆舒疾,樂之文也。簠簋俎豆制度文章,禮之器也;升降上下周旋裼襲,禮之文也。故知禮樂之情者能作,識禮樂之文者能術(shù)。作者之謂圣,術(shù)者之謂明。明圣者,術(shù)作之謂也。 樂者,天地之和也;禮者,天地之序也。和,故百物皆化;序,故群物皆別。樂由天作,禮以地制。過制則亂,過作則暴。明於天地,然後能興禮樂也。論倫無患,樂之情也;欣喜驩愛,樂之也。中正無邪,禮之質(zhì)也;莊敬恭順,禮之制也。若夫禮樂之施於金石,越於聲音,用於宗廟社稷,事于山川鬼神,則此所以與民同也。 王者功成作樂,治定制禮。其功大者其樂備,其治辨者其禮具。干戚之舞,非備樂也;亨孰而祀,非達禮也。五帝殊時,不相沿樂;三王異世,不相襲禮。樂極則憂,禮粗則偏矣。及夫敦樂而無憂,禮備而不偏者,其唯大圣乎?天高地下,萬物散殊,而禮制行也;流而不息,合同而化,而樂興也。春作夏長,仁也;秋斂冬藏,義也。仁近於樂,義近於禮。樂者敦和,率神而從天;禮者辨宜,居鬼而從地。故圣人作樂以應(yīng)天,作禮以配地。禮樂明備,天地官矣。 天尊地卑,君臣定矣。高卑已陳,貴賤位矣。動靜有常,小大殊矣。方以類聚,物以群分,則性命不同矣。在天成象,在地成形,如此則禮者天地之別也。地氣上隮,天氣下降,陰陽相摩,天地相蕩,鼓之以雷霆,奮之以風(fēng)雨,動之以四時,暖之以日月,而百化興焉,如此則樂者天地之和也。 化不時則不生,男女無別則亂登,此天地之情也。及夫禮樂之極乎天而蟠乎地,行乎陰陽而通乎鬼神,窮高極遠而測深厚,樂著太始而禮居成物。著不息者天也,著不動者地也。一動一靜者,天地之間也。故圣人曰“禮云樂云”。 且降,乃使人告急天子。天子問太尉田蚡,蚡對曰:“越人相攻擊,固其常,又?jǐn)?shù)反覆,不足以煩中國往救也。自秦時棄弗屬。”於是中大夫莊助詰蚡曰:“特患力弗能救,德弗能覆;誠能,何故棄之?且秦舉咸陽而棄之,何乃越也!今小國以窮困來告急天子,天子弗振,彼當(dāng)安所告愬?又何以子萬國乎?”上曰:“太尉未足與計。吾初即位,不欲出虎符發(fā)兵郡國。”乃遣莊助以節(jié)發(fā)兵會稽。會稽太守欲距不為發(fā)兵,助乃斬一司馬,諭意指,遂發(fā)兵浮海救東甌。未至,閩越引兵而去。東甌請舉國徙中國,乃悉舉眾來,處江淮之間。 至建元六年,閩越擊南越。南越守天子約,不敢擅發(fā)兵擊而以聞。上遣大行王恢出豫章,大農(nóng)韓安國出會稽,皆為將軍。兵未逾嶺,閩越王郢發(fā)兵距險。其弟馀善乃與相、宗族謀曰:“王以擅發(fā)兵擊南越,不請,故天子兵來誅。今漢兵眾彊,今即幸勝之,後來益多,終滅國而止。今殺王以謝天子。天子聽,罷兵,固一國完;不聽,乃力戰(zhàn);不勝,即亡入海。”皆曰“善”。即鏦殺王,使使奉其頭致大行。大行曰:“所為來者誅王。今王頭至,謝罪,不戰(zhàn)而耘,利莫大焉。”乃以便宜案兵告大農(nóng)軍,而使使奉王頭馳報天子。詔罷兩將兵,曰:“郢等首惡,獨無諸孫繇君丑不與謀焉。”乃使郎中將立丑為越繇王,奉閩越先祭祀。 馀善已殺郢,威行於國,國民多屬,竊自立為王。繇王不能矯其眾持正。天子聞之,為馀善不足復(fù)興師,曰:“馀善數(shù)與郢謀亂,而後首誅郢,師得不勞。”因立馀善為東越王,與繇王并處。 至元鼎五年,南越反,東越王馀善上書,請以卒八千人從樓船將軍擊呂嘉等。兵至揭揚,以海風(fēng)波為解,不行,持兩端,陰使南越。及漢破番禺,不至。是時樓船將軍楊仆使使上書,原便引兵擊東越。上曰士卒勞倦,不許,罷兵,1、伯庸。《離騷》:“朕皇考曰伯庸”。譬如作家馬伯庸……
2、正則、靈均。《離騷》:“名余曰正則兮,字余曰靈均”。正則:公正而有法則。靈均:靈善而均調(diào)。屈原名平,字原,正則是對“平”字進行的解釋,靈均是對“原”字進行的解釋。
3、修能。《離騷》:“又重之以修能”。修能:即美好的外表儀形。一釋為很強的才干和能力。
4、騏、驥。《離騷》:“乘騏驥以馳騁兮”。騏驥:駿馬。
5、峻茂。《離騷》:“冀枝葉之峻茂兮”。風(fēng)信子(學(xué)名:Hyacinthus orientalis L.):是多年草本球根類植物,鱗莖卵形,有膜質(zhì)外皮,皮膜顏色與花色成正相關(guān),未開花時形如大蒜,原產(chǎn)地中海沿岸及小亞細亞一帶,是研究發(fā)現(xiàn)的會開花的植物中最香的一個品種。喜陽光充足和比較濕潤的生長環(huán)境,要求排水良好和肥沃的沙壤土等。全世界風(fēng)信子的園藝品種約有單閼之歲兮,四月孟夏,庚子日施兮,服集予舍,止于坐隅,貌甚間暇。異物來集兮,私怪其故,發(fā)書占之兮,筴言其度。曰“野鳥入處兮,主人將去”。請問于服兮:“予去何之?吉乎告我,兇言其菑。淹數(shù)之度兮,語予其期。”服乃嘆息,舉首奮翼,口不能言,請對以意。 萬物變化兮,固無休息。斡流而遷兮,或推而還。形氣轉(zhuǎn)續(xù)兮,變化而嬗。沕穆無窮兮,胡可勝言!禍兮福所倚,福兮禍所伏;憂喜聚門兮,吉兇同域。彼吳彊大兮,夫差以敗;越棲會稽兮,句踐霸世。斯游遂成兮,卒被五刑;傅說胥靡兮,乃相武丁。夫禍之與福兮,何異糾纆。命不可說兮,孰知其極?水激則旱兮,矢激則遠。萬物回薄兮,振蕩相轉(zhuǎn)。云蒸雨降兮,錯繆相紛。大專槃物兮,坱軋無垠。天不可與慮兮,道不可與謀。遲數(shù)有命兮,惡識其時? 且夫天地為爐兮,造化為工;陰陽為炭兮,萬物為銅。合散消息兮,安有常則;千變?nèi)f化兮,未始有極。忽然為人兮,何足控摶;化為異物兮,又何足患!小知自私兮,賤彼貴我;通人大觀兮,物無不可。貪夫徇財兮,烈士徇名;夸者死權(quán)兮,品庶馮生。述迫之徒兮,或趨西東;大人不曲兮,億變齊同。拘士系俗兮,羖如囚拘;至人遺物兮,獨與道俱。眾人或或兮,好惡積意;真人淡漠兮,獨與道息。釋知遺形兮,超然自喪;寥廓忽荒兮,與道翱翔。乘流則逝兮,得坻則止;縱軀委命兮,不私與己。其生若浮兮,其死若休;澹乎若深淵之靜,氾乎若不系之舟。不以生故自寶兮,養(yǎng)空而浮;德人無累兮,知命不憂。細故粦兮,何足以疑! 後歲馀,賈生徵見。孝文帝方受釐,坐宣室。上因感鬼神事,而問鬼神之本。賈生因具道所以然之狀。至夜半,文帝前席。既罷,曰:“吾久不見賈生,自以為過之,今不及也。”居頃之,拜賈生為梁懷王太傅。梁懷王,文帝之少子,愛,而好書,故令賈生傅之。 文帝復(fù)封淮南厲王子四人皆為列侯。賈生諫,以為患之興自此起矣。賈生數(shù)上疏,言諸侯或連數(shù)郡,非古之制,可稍削之。文帝不聽。 居數(shù)年,懷王騎,墮馬而死,無後。賈生自傷為傅無狀,哭泣歲馀,亦死。賈生之死時年三十三矣。及孝文崩,孝武皇帝立,舉賈生之孫二人至郡守,而賈嘉最好學(xué),世其家,與余通書。至孝昭時,列為九卿。 太史公曰:余讀離騷、天問、招魂、哀郢,悲其志。適長沙,觀屈原所自沈淵,未嘗不垂涕,想見其為人。及見賈生吊之,又怪屈原以彼其材,游諸侯,何國不容,而自令若是。讀服烏賦,同死生,輕去就,又爽然自失矣。 屈平行正,以事懷王。瑾瑜比潔,日月爭光。忠而見放,讒者益章。賦騷見志,懷沙自傷。百年之後,空悲吊湘。 2000種以上,主要分為“荷蘭種”和“羅馬種”兩類。前者屬正宗品種,絕大多數(shù)每株只長1支花葶,體勢粗壯,花朵較大。而后者則多是變異的雜種,每株能著生二三支花葶,體勢幼弱,花朵較細,多數(shù)消費者喜購荷蘭風(fēng)信子。峻茂:猶繁茂。
6、信芳。《離騷》:“茍余情其信芳”。如京劇表演藝術(shù)家周信芳。
7、圣哲、茂行。《離騷》:“夫維圣哲以茂行兮”。圣哲:具有超人的道德才智的人。茂行:德行充盛。
8、曼路。《離騷》:“路曼曼其修遠兮,吾將上下而求索”。
9、望舒。《離騷》:“前望舒使先驅(qū)兮”。望舒:神話中為月駕車的神。如寫《雨巷》的詩人戴望舒。
10、陸離。《離騷》:“斑陸離其上下”。陸離:光輝燦爛的樣子。我們對于該詞的認知多來自于成語“光怪陸離”,意指色彩繁雜、變化多端。
11、珵美。《離騷》:“覽察草木其猶未得兮,豈珵美之能當(dāng)”。珵:美玉。
12、云旗。《離騷》:“駕八龍之婉婉兮,載云旗之委蛇”。云旗:繪有云霓的旗幟。
===================九===歌===的===分===界===線===================
1、辰良。《九歌·東皇太一》:“吉日兮辰良”。“辰良”系“良辰”之倒文,指好時光。易被讀作“乘涼”。
2、玉鏘、璆鳴。《九歌·東皇太一》:“撫長劍兮玉珥,璆鏘鳴兮琳瑯”。詩曰:佩玉鏘鏘。璆(音求):美玉。
3、安歌。《九歌·東皇太一》:“疏緩節(jié)兮安歌”。南越王尉佗者,真定人也,姓趙氏。秦時已并天下,略定楊越,置桂林、南海、象郡,以謫徙民,與越雜處十三歲。佗,秦時用為南海龍川令。至二世時,南海尉任囂病且死,召龍川令趙佗語曰:“聞陳勝等作亂,秦為無道,天下苦之,項羽、劉季、陳勝、吳廣等州郡各共興軍聚眾,虎爭天下,中國擾亂,未知所安,豪杰畔秦相立。南海僻遠,吾恐盜兵侵地至此,吾欲興兵絕新道,自備,待諸侯變,會病甚。且番禺負山險,阻南海,東西數(shù)千里,頗有中國人相輔,此亦一州之主也,可以立國。郡中長吏無足與言者,故召公告之。”即被佗書,行南海尉事。囂死,佗即移檄告橫浦、陽山、湟谿關(guān)曰:“盜兵且至,急絕道聚兵自守!”因稍以法誅秦所置長吏,以其黨為假守。秦已破滅,佗即擊并桂林、象郡,自立為南越武王。高帝已定天下,為中國勞苦,故釋佗弗誅。漢十一年,遣陸賈因立佗為南越王,與剖符通使,和集百越,毋為南邊患害,與長沙接境。 高后時,有司請禁南越關(guān)市鐵器。佗曰:“高帝立我,通使物,今高后聽讒臣,別異蠻夷,隔絕器物,此必長沙王計也,欲倚中國,擊滅南越而并王之,自為功也。”於是佗乃自尊號為南越武帝,發(fā)兵攻長沙邊邑,敗數(shù)縣而去焉。高后遣將軍隆慮侯灶往擊之。會暑濕,士卒大疫,兵不能逾嶺。歲馀,高后崩,即罷兵。佗因此以兵威邊,財物賂遺閩越、西甌、駱,役屬焉,東西萬馀里。乃乘黃屋左纛,稱制,與中國侔。 及孝文帝元年,初鎮(zhèn)撫天下,使告諸侯四夷從代來即位意,喻盛德焉。乃為佗親冢在真定,置守邑,歲時奉祀。召其從昆弟,尊官厚賜寵之。詔丞相陳平等舉可使南越者,平言好畤陸賈,先帝時習(xí)使南越。乃召賈以為太中大夫,往使。因讓佗自立為帝,曾無一介之使報者。陸賈至南越,王甚恐,為書謝,稱曰:“蠻夷大長老夫臣佗,前日高后隔異南越,竊疑長沙王讒臣,又遙聞高后盡誅佗宗族,掘燒先人冢,以故自棄,犯長沙邊境。且南方卑濕,蠻夷中間,其東閩越千人眾號稱王,其西甌駱裸國亦稱王。老臣妄竊帝號,聊以自娛,豈敢以聞天王哉!”乃頓首謝,原長為籓臣,奉貢職。於是乃下令國中曰:“吾聞兩雄不俱立,兩賢不并世。皇帝,賢天子也。自今以後,去帝制黃屋左纛。”陸賈還報,孝文帝大說。遂至孝景時,稱臣,使人朝請。然南越其居國竊如故號名,其使天子,稱王朝命如諸侯。至建元四年卒。 佗孫胡為南越王。此時閩越王郢興兵擊南越邊邑,胡使人上書曰:“兩越俱為籓臣,毋得擅興兵相攻擊。今閩越興兵侵臣,臣不敢興兵,唯天子詔之。”於是天子多南越義,守職約,為興師,遣兩將軍往討閩越。兵未逾嶺,閩越王弟馀善殺郢以降,於是罷兵。 天子使莊助往諭意南越王,胡頓首曰:“天子乃為臣興兵討閩越,死無以報德!”遣太子嬰齊入宿衛(wèi)。謂助曰:“國新被寇,使者行矣。胡方日夜裝入見天子。”助去後,其大臣諫胡曰:“漢興兵誅郢,亦行以驚動南越。且先王昔言,事天子期無失禮,要之不可以說好語入見。入見則不得復(fù)歸,亡國之勢也。”於是胡稱病,竟不入見。後十馀歲,胡實病甚,太子嬰齊請歸。胡薨,謚為文王。 嬰齊代立,即藏其先武帝璽。嬰齊其入宿衛(wèi)在長安時,取邯鄲樛氏女,生子興。及即位,上書請立樛氏女為后,興為嗣。漢數(shù)使使者風(fēng)諭嬰齊,嬰齊尚樂擅殺生自恣,懼入見要用漢法,比內(nèi)諸侯,固稱病,遂不入見。遣子次公入宿衛(wèi)。嬰齊薨,謚為明王。 太子興代立,其母為太后。太后自未為嬰齊姬時,嘗與霸陵人安國少季通。及嬰齊薨後,元鼎四年,漢使安國少季往諭王、王太后以入朝,比內(nèi)諸侯;令辯士諫大夫終軍等宣其辭,勇士魏臣等輔其缺,衛(wèi)尉路博德將兵屯桂陽,待使者。王年少,太后中國人也,嘗與安國少季通,其使復(fù)私焉。國人頗知之,多不附太后。太后恐亂起,亦欲倚漢威,數(shù)勸王及群臣求內(nèi)屬。即因使者上書,請比內(nèi)諸侯,三歲一朝,除邊關(guān)。於是天子許之,賜其丞相呂嘉銀印,及內(nèi)史、中尉、太傅印,馀得自置。除其故黥劓刑,用漢法,比內(nèi)諸侯。使者皆留填撫之。王、王太后飭治行裝重赍,為入朝具。 安歌:神態(tài)安詳?shù)爻琛S幸痪涮圃娬f:“安歌送好音”。
4、浩倡。《九歌·東皇太一》:“陳竽瑟兮浩倡”。“浩倡”又作“浩唱”,和上句“安歌”相對應(yīng)。取名時可改為“浩昌”。下文《九歌·少司命》中還有“浩歌”。令諸校屯豫章梅領(lǐng)待命。▼ 作者:倚天碼農(nóng)
來源:blog.csdn.net/weixin_38748858/article/details/101062272 在微服務(wù)架構(gòu)中,需要調(diào)用很多服務(wù)才能完成一項功能。服務(wù)之間如何互相調(diào)用就變成微服務(wù)架構(gòu)中的一個關(guān)鍵問題。
服務(wù)調(diào)用有兩種方式,一種是RPC方式,另一種是事件驅(qū)動(Event-driven)方式,也就是發(fā)消息方式。
消息方式是松耦合方式,比緊耦合的RPC方式要優(yōu)越,但RPC方式如果用在適合的場景也有它的一席之地。
我們總在談耦合,那么耦合到底意味著什么呢? 耦合的種類: 時間耦合:客戶端和服務(wù)端必須同時上線才能工作。發(fā)消息時,接受消息隊列必須運行,但后臺處理程序暫時不工作也不影響。
容量耦合:客戶端和服務(wù)端的處理容量必須匹配。發(fā)消息時,如果后臺處理能力不足也不要緊,消息隊列會起到緩沖的作用。
發(fā)送方式耦合:RPC是點對點方式,需要知道對方是誰,它的好處是能夠傳回返回值。消息既可以點對點,也可以用廣播的方式,這樣減少了耦合,但也使返回值比較困難。
下面我們來逐一分析這些耦合的影響。第一,時間耦合,對于多數(shù)應(yīng)用來講,你希望能馬上得到回答,因此即使使用消息隊列,后臺也需要一直工作。
第二,容量耦合,如果你對回復(fù)有時間要求,那么消息隊列的緩沖功能作用不大,因為你希望及時響應(yīng)。
真正需要的是自動伸縮(Auto-scaling),它能自動調(diào)整服務(wù)端處理能力去匹配請求數(shù)量。第三和第四,接口耦合和發(fā)送方式耦合,這兩個確實是RPC方式的軟肋。
事件驅(qū)動(Event-Driven)方式
Martin Fowler把事件驅(qū)動分成四種方式(What do you mean by “Event-Driven”),簡化之后本質(zhì)上只有兩種方式。一種就是我們熟悉的的事件通知(Event Notification),另一種是事件溯源(Event Sourcing)。
事件通知就是微服務(wù)之間不直接調(diào)用,而是通過發(fā)消息來進行合作。事件溯源有點像記賬,它把所有的事件都記錄下來,作為永久存儲層,再在它的基礎(chǔ)之上構(gòu)建應(yīng)用程序。
實際上從應(yīng)用的角度來講,它們并不應(yīng)該分屬一類,它們的用途完全不同。事件通知是微服務(wù)的調(diào)用(或集成)方式,應(yīng)該和RPC分在一起。事件溯源是一種存儲數(shù)據(jù)的方式,應(yīng)該和數(shù)據(jù)庫分在一起。
事件通知(Event Notification)方式
讓我們用具體的例子來看一下。在下面的例子中,有三個微服務(wù),“Order Service”, “Customer Service” 和“Product Service”。
先說讀數(shù)據(jù),假設(shè)要創(chuàng)建一個“Order”,在這個過程中需要讀取“Customer”的數(shù)據(jù)和“Product”數(shù)據(jù)。
如果用事件通知的方式就只能在“Order Service”本地也創(chuàng)建只讀“Customer”和“Product”表,并把數(shù)據(jù)用消息的方式同步過來。
再說寫數(shù)據(jù),如果在創(chuàng)建一個“Order”時需要創(chuàng)建一個新的“Customer”或要修改“Customer”的信息,那么可以在界面上跳轉(zhuǎn)到用戶創(chuàng)建頁面,然后在“Customer Service”創(chuàng)建用戶之后再發(fā)”用戶已創(chuàng)建“的消息,“Order Service”接到消息,更新本地“Customer”表。
這并不是一個很好的使用事件驅(qū)動的例子,因為事件驅(qū)動的優(yōu)點就是不同的程序之間可以獨立運行,沒有綁定關(guān)系。但現(xiàn)在“Order Service”需要等待“Customer Service”創(chuàng)建完了之后才能繼續(xù)運行,來完成整個創(chuàng)建“Order”的工作。主要是因為“Order”和“Customer”本身從邏輯上來講就是緊耦合關(guān)系,沒有“Customer”你是不能創(chuàng)建“Order”的。
在這種緊耦合的情況下,也可以使用RPC。你可以建立一個更高層級的管理程序來管理這些微服務(wù)之間的調(diào)用,這樣“Order Service”就不必直接調(diào)用“Customer Service”了。
當(dāng)然它從本質(zhì)上來講并沒有解除耦合,只是把耦合轉(zhuǎn)移到了上一層,但至少現(xiàn)在“order Service”和“Customer Service”可以互不影響了。之所以不能根除這種緊耦合關(guān)系是因為它們在業(yè)務(wù)上是緊耦合的。
“Inventory”服務(wù)收到消息,從倉庫里取貨,并發(fā)送“Goods fetched”消息。“Shipment”服務(wù)得到消息,發(fā)送貨物,并發(fā)送“Goods shipped”消息。
如果一個業(yè)務(wù)邏輯有它自己相對固定的流程和步驟,那么使用RPC或業(yè)務(wù)流程管理(BPM)能夠更方便地管理這些流程。在這種情況下選哪種方案呢?在我看來好處和壞處是大致相當(dāng)?shù)摹募夹g(shù)上來講要選事件驅(qū)動,從業(yè)務(wù)上來講要選RPC。不過現(xiàn)在越來越多的人采用事件通知作為微服務(wù)的集成方式,它似乎已經(jīng)成了微服務(wù)之間的標(biāo)椎調(diào)用方式。
事件溯源(Event Sourcing)
這是一種具有顛覆性質(zhì)的的設(shè)計,它把系統(tǒng)中所有的數(shù)據(jù)都以事件(Event)的方式記錄下來,它的持久存儲叫Event Store, 一般是建立在數(shù)據(jù)庫或消息隊列(例如Kafka)基礎(chǔ)之上,并提供了對事件進行操作的接口,例如事件的讀寫和查詢。事件溯源是由領(lǐng)域驅(qū)動設(shè)計(Domain-Driven Design)提出來的。
有界上下文的一個關(guān)鍵是如何處理共享成員, 在圖中是“Customer”和“Product”。在不同的有界上下文中,共享成員的含義、用法以及他們的對象屬性都會有些不同,DDD建議這些共享成員在各自的有界上下文中都分別建自己的類(包括數(shù)據(jù)庫表),而不是共享。可以通過數(shù)據(jù)同步的手段來保持?jǐn)?shù)據(jù)的一致性。下面還會詳細講解。
事件溯源是微服務(wù)的一種存儲方式,它是微服務(wù)的內(nèi)部實現(xiàn)細節(jié)。因此你可以決定哪些微服務(wù)采用事件溯源方式,哪些不采用,而不必所有的服務(wù)都變成事件溯源的。通常整個應(yīng)用程序只有一個Event Store, 不同的微服務(wù)都通過向Event Store發(fā)送和接受消息而互相通信。
在公眾號互聯(lián)網(wǎng)架構(gòu)師后臺回復(fù)“2T”,獲取一份驚喜禮包。
Event Store內(nèi)部可以分成不同的stream(相當(dāng)于消息隊列中的Topic), 供不同的微服務(wù)中的領(lǐng)域?qū)嶓w(Domain Entity)使用。
事件溯源的一個短板是數(shù)據(jù)查詢,它有兩種方式來解決。第一種是直接對stream進行查詢,這只適合stream比較小并且查詢比較簡單的情況。
查詢復(fù)雜的話,就要采用第二種方式,那就是建立一個只讀數(shù)據(jù)庫,把需要的數(shù)據(jù)放在庫中進行查詢。數(shù)據(jù)庫中的數(shù)據(jù)通過監(jiān)聽Event Store中相關(guān)的事件來更新。
數(shù)據(jù)庫存儲方式只能保存當(dāng)前狀態(tài),而事件溯源則存儲了所有的歷史狀態(tài),因而能根據(jù)需要回放到歷史上任何一點的狀態(tài),具有很大優(yōu)勢。但它也不是一點問題都沒有。
第一,它的程序比較復(fù)雜,因為事件是一等公民,你必須把業(yè)務(wù)邏輯按照事件的方式整理出來,然后用事件來驅(qū)動程序。第二,如果你要想修改事件或事件的格式就比較麻煩,因為舊的事件已經(jīng)存儲在Event Store里了(事件就像日志,是只讀的),沒有辦法再改。
由于事件溯源和事件通知表面上看起來很像,不少人都搞不清楚它們的區(qū)別。事件通知只是微服務(wù)的集成方式,程序內(nèi)部是不使用事件溯源的,內(nèi)部實現(xiàn)仍然是傳統(tǒng)的數(shù)據(jù)庫方式。
只有當(dāng)要與其他微服務(wù)集成時才會發(fā)消息。而在事件溯源中,事件是一等公民,可以不要數(shù)據(jù)庫,全部數(shù)據(jù)都是按照事件的方式存儲的。
雖然事件溯源的踐行者有不同的意見,但有不少人都認為事件溯源不是微服務(wù)的集成方式,而是微服務(wù)的一種內(nèi)部實現(xiàn)方式。因此,在一個系統(tǒng)中,可以某些微服務(wù)用事件溯源,另外一些微服務(wù)用數(shù)據(jù)庫。
當(dāng)你要集成這些微服務(wù)時,你可以用事件通知的方式。注意現(xiàn)在有兩種不同的事件需要區(qū)分開,一種是微服務(wù)的內(nèi)部事件,是顆粒度比較細的,這種事件只發(fā)送到這個微服務(wù)的stream中,只被事件溯源使用。
另一種是其他微服務(wù)也關(guān)心的,是顆粒度比較粗的,這種事件會放到另外一個或幾個stream中,被多個微服務(wù)使用,是用來做服務(wù)之間集成的。這樣做的好處是限制了事件的作用范圍,減少了不相關(guān)事件對程序的干擾。詳見"Domain Events vs. Event Sourcing"。
事件溯源出現(xiàn)已經(jīng)很長時間了,雖然熱度一直在上升(尤其是這兩年),但總的來說非常緩慢,談?wù)摰娜瞬簧伲a(chǎn)環(huán)境使用的不多。究其原因就是應(yīng)為它對現(xiàn)在的體系結(jié)構(gòu)顛覆太大,需要更改數(shù)據(jù)存儲結(jié)構(gòu)和程序的工作方式,還是有一定風(fēng)險的。
另外,微服務(wù)已經(jīng)形成了一整套體系,從程序部署,服務(wù)發(fā)現(xiàn)與注冊,到監(jiān)控,服務(wù)韌性(Service Resilience),它們基本上都是針對RPC的,雖然也支持消息,但成熟度就差多了,因此有不少工作還是要自己來做。
有意思的是Kafka一直在推動它作為事件驅(qū)動的工具,也取得了很大的成功。但它卻沒有得到事件溯源圈內(nèi)的認可。
多數(shù)事件溯源都使用一個叫evenstore的開源Event Store,或是基于某個數(shù)據(jù)庫的Event Store,只有比較少的人用Kafka做Event Store。
但如果用Kafka實現(xiàn)事件通知就一點問題都沒有。總的來說,對大多數(shù)公司來講事件溯源是有一定挑戰(zhàn)的,應(yīng)用時需要找到合適的場景。如果你要嘗試的話,可以先拿一個微服務(wù)試水。
雖然現(xiàn)在事件驅(qū)動還有些生澀,但從長遠來講,還是很看好它的。像其他全新的技術(shù)一樣,事件溯源需要大規(guī)模的適用場景來推動。例如容器技術(shù)就是因為微服務(wù)的流行和推動,才走向主流。
事件溯源以前的適用場景只限于記賬和源代碼庫,局限性較大。區(qū)塊鏈可能會成為它的下一個機遇,因為它用的也是事件溯源技術(shù)。
另外AI今后會滲入到具體程序中,使程序具有學(xué)習(xí)功能。而RPC模式注定沒有自適應(yīng)功能。事件驅(qū)動本身就具有對事件進行反應(yīng)的能力,這是自我學(xué)習(xí)的基礎(chǔ)。因此,這項技術(shù)長遠來講定會大放異彩,但短期內(nèi)(3-5年)大概不會成為主流。 RPC方式 RPC的方式就是遠程函數(shù)調(diào)用,像RESTFul,gRPC, DUBBO 都是這種方式。它一般是同步的,可以馬上得到結(jié)果。在實際中,大多數(shù)應(yīng)用都要求立刻得到結(jié)果,這時同步方式更有優(yōu)勢,代碼也更簡單。
服務(wù)網(wǎng)關(guān)(API Gateway) 熟悉微服務(wù)的人可能都知道服務(wù)網(wǎng)關(guān)(API Gateway)。當(dāng)UI需要調(diào)用很多微服務(wù)時,它需要了解每個服務(wù)的接口,這個工作量很大。
于是就用服務(wù)網(wǎng)關(guān)創(chuàng)建了一個Facade,把幾個微服務(wù)封裝起來,這樣UI就只調(diào)用服務(wù)網(wǎng)關(guān)就可以了,不需要去對付每一個微服務(wù)。下面是API Gateway示例圖:
有了API Gateway之后,一旦服務(wù)接口修改,你可能只需要修改API Gateway, 而不必修改每個調(diào)用這個函數(shù)的客戶端,這樣就減少了程序的耦合性。
服務(wù)調(diào)用 可以借鑒API Gateway的思路來減少RPC調(diào)用的耦合度,例如把多個微服務(wù)組織起來形成一個完整功能的服務(wù)組合,并對外提供統(tǒng)一的服務(wù)接口。這種想法跟上面的API Gateway有些相似,都是把服務(wù)集中起來提供粗顆粒(Coarse Granular)服務(wù),而不是細顆粒的服務(wù)(Fine Granular)。
但這樣建立的服務(wù)組合可能只適合一個程序使用,沒有多少共享價值。因此如果有合適的場景就采用,否側(cè)也不必強求。雖然我們不能降低RPC服務(wù)之間的耦合度,卻可以減少這種緊耦合帶來的影響。
降低緊耦合的影響 什么是緊耦合的主要問題呢?就是客戶端和服務(wù)端的升級不同步。服務(wù)端總是先升級,客戶端可能有很多,如果要求它們同時升級是不現(xiàn)實的。它們有各自的部署時間表,一般都會選擇在下一次部署時順帶升級。
一般有兩個辦法可以解決這個問題:
同時支持多個版本:這個工作量比較大,因此大多數(shù)公司都不會采用這種方式。
服務(wù)端向后兼容:這是更通用的方式。例如你要加一個新功能或有些客戶要求給原來的函數(shù)增加一個新的參數(shù),但別的客戶不需要這個參數(shù)。這時你只好新建一個函數(shù),跟原來的功能差不多,只是多了一個參數(shù)。這樣新舊客戶的需求都能滿足。它的好處是向后兼容(當(dāng)然這取決于你使用的協(xié)議)。
它的壞處是當(dāng)以后新的客戶來了,看到兩個差不多的函數(shù)就糊涂了,不知道該用那個。而且時間越長越嚴(yán)重,你的服務(wù)端可能功能增加的不多,但相似的函數(shù)卻越來越多,無法選擇。
它的解決辦法就是使用一個支持向后兼容的RPC協(xié)議,現(xiàn)在最好的就是Protobuf gRPC,尤其是在向后兼容上。
它給每個服務(wù)定義了一個接口,這個接口是與編程語言無關(guān)的中性接口,然后你可以用工具生成各個語言的實現(xiàn)代碼,供不同語言使用。函數(shù)定義的變量都有編號,變量可以是可選類型的,這樣就比較好地解決了函數(shù)兼容的問題。
就用上面的例子,當(dāng)你要增加一個可選參數(shù)時,你就定義一個新的可選變量。由于它是可選的,原來的客戶端不需要提供這個參數(shù),因此不需要修改程序。
而新的客戶端可以提供這個參數(shù)。你只要在服務(wù)端能同時處理這兩種情況就行了。這樣服務(wù)端并沒有增加新的函數(shù),但用戶的新需求滿足了,而且還是向后兼容的。
微服務(wù)的數(shù)量有沒有上限? 總的來說微服務(wù)的數(shù)量不要太多,不然會有比較重的運維負擔(dān)。有一點需要明確的是微服務(wù)的流行不是因為技術(shù)上的創(chuàng)新,而是為了滿足管理上的需要。單體程序大了之后,各個模塊的部署時間要求不同,對服務(wù)器的優(yōu)化要求也不同,而且團隊人數(shù)眾多,很難協(xié)調(diào)管理。
把程序拆分成微服務(wù)之后,每個團隊負責(zé)幾個服務(wù),就容易管理了,而且每個團隊也可以按照自己的節(jié)奏進行創(chuàng)新,但它給運維帶來了巨大的麻煩。所以在微服務(wù)剛出來時,我一直覺得它是一個退步,弊大于利。但由于管理上的問題沒有其他解決方案,只有硬著頭皮上了。
值得慶幸的是微服務(wù)帶來的麻煩都是可解的。直到后來,微服務(wù)建立了全套的自動化體系,從程序集成到部署,從全鏈路跟蹤到日志,以及服務(wù)檢測,服務(wù)發(fā)現(xiàn)和注冊,這樣才把微服務(wù)的工作量降了下來。
雖然微服務(wù)在技術(shù)上一無是處,但它的流行還是大大推動了容器技術(shù),服務(wù)網(wǎng)格(Service Mesh)和全鏈路跟蹤等新技術(shù)的發(fā)展。不過它本身在技術(shù)上還是沒有發(fā)現(xiàn)任何優(yōu)勢。
在公眾號互聯(lián)網(wǎng)架構(gòu)師后臺回復(fù)“2T”,獲取一份驚喜禮包。
直到有一天,我意識到單體程序其實性能調(diào)試是很困難的(很難分離出瓶頸點),而微服務(wù)配置了全鏈路跟蹤之后,能很快找到癥結(jié)所在。看來微服務(wù)從技術(shù)來講也不全是缺點,總算也有好的地方。但微服務(wù)的顆粒度不宜過細,否則工作量還是太大。
一般規(guī)模的公司十幾個或幾十個微服務(wù)都是可以承受的,但如果有幾百個甚至上千個,那么絕不是一般公司可以管理的。盡管現(xiàn)有的工具已經(jīng)很齊全了,而且與微服務(wù)有關(guān)的整個流程也已經(jīng)基本上全部自動化了,但它還是會增加很多工作。
Martin Fowler幾年以前建議先從單體程序開始(詳見 MonolithFirst),然后再逐步把功能拆分出去,變成一個個的微服務(wù)。但是后來有人反對這個建議,他也有些松口了。
如果單體程序不是太大,這是個好主意。可以用數(shù)據(jù)額庫表的數(shù)量來衡量程序的大小,我見過大的單體程序有幾百張表,這就太多了,很難管理。正常情況下,一個微服務(wù)可以有兩、三張表到五、六張表,一般不超過十張表。但如果要減少微服務(wù)數(shù)量的話,可以把這個標(biāo)準(zhǔn)放寬到不要超過二十張表。
用這個做為大致的指標(biāo)來創(chuàng)建微程序,如果使用一段時間之后還是覺得太大了,那么再逐漸拆分。當(dāng)然,按照這個標(biāo)準(zhǔn)建立的服務(wù)更像是服務(wù)組合,而不是單個的微服務(wù)。不過它會為你減少工作量。只要不影響業(yè)務(wù)部門的創(chuàng)新進度,這是一個不錯的方案。
到底應(yīng)不應(yīng)該選擇微服務(wù)呢?如果單體程序已經(jīng)沒法管理了,那么你別無選擇。如果沒有管理上的問題,那么微服務(wù)帶給你的只有問題和麻煩。其實,一般公司都沒有太多選擇,只能采用微服務(wù),不過你可以選擇建立比較少的微服務(wù)。如果還是沒法決定,有一個折中的方案,“內(nèi)部微服務(wù)設(shè)計”。
內(nèi)部微服務(wù)設(shè)計 這種設(shè)計表面上看起來是一個單體程序,它只有一個源代碼存儲倉庫,一個數(shù)據(jù)庫,一個部署,但在程序內(nèi)部可以按照微服務(wù)的思想來進行設(shè)計。它可以分成多個模塊,每個模塊是一個微服務(wù),可以由不同的團隊管理。
用這張圖做例子。這個圖里的每個圓角方塊大致是一個微服務(wù),但我們可以把它作為一個單體程序來設(shè)計,內(nèi)部有五個微服務(wù)。
每個模塊都有自己的數(shù)據(jù)庫表,它們都在一個數(shù)據(jù)庫中,但模塊之間不能跨數(shù)據(jù)庫訪問(不要建立模塊之間數(shù)據(jù)庫表的外鍵)。
“User”(在Conference Management模塊中)是一個共享的類,但在不同的模塊中的名字不同,含義和用法也不同,成員也不一樣(例如,在“Customer Service”里叫“Customer”)。
DDD(Domain-Driven Design)建議不要共享這個類,而是在每一個有界上下文(模塊)中都建一個新類,并擁有新的名字。
雖然它們的數(shù)據(jù)庫中的數(shù)據(jù)應(yīng)該大致相同,但DDD建議每一個有界上下文中都建一個新表,它們之間再進行數(shù)據(jù)同步。
這個所謂的“內(nèi)部微服務(wù)設(shè)計”其實就是DDD,但當(dāng)時還沒有微服務(wù),因此外表看起來是單體程序,但內(nèi)部已經(jīng)是微服務(wù)的設(shè)計了。
它的書在2003就出版了,當(dāng)時就很有名。但它更偏重于業(yè)務(wù)邏輯的設(shè)計,踐行起來也比較困難,因此大家談?wù)摰煤芏啵嬲玫妮^少。
直到十年之后,微服務(wù)出來之后,人們發(fā)現(xiàn)它其實內(nèi)部就是微服務(wù),而且微服務(wù)的設(shè)計需要用它的思想來指導(dǎo),于是就又重新煥發(fā)了青春,而且這次更猛,已經(jīng)到了每個談?wù)撐⒎?wù)的人都不得不談?wù)揇DD的地步。不過一本軟件書籍,在十年之后還能指導(dǎo)新技術(shù)的設(shè)計,非常令人欽佩。
這樣設(shè)計的好處是它是一個單體程序,省去了多個微服務(wù)帶來的部署、運維的麻煩。但它內(nèi)部是按微服務(wù)設(shè)計的,如果以后要拆分成微服務(wù)會比較容易。至于什么時候拆分不是一個技術(shù)問題。
如果負責(zé)這個單體程序的各個團隊之間不能在部署時間表,服務(wù)器優(yōu)化等方面達成一致,那么就需要拆分了。
當(dāng)然你也要應(yīng)對隨之而來的各種運維麻煩。內(nèi)部微服務(wù)設(shè)計是一個折中的方案,如果你想試水微服務(wù),但又不愿意冒太大風(fēng)險時,這是一個不錯的選擇。
結(jié)論 微服務(wù)之間的調(diào)用有兩種方式,RPC和事件驅(qū)動。事件驅(qū)動是更好的方式,因為它是松耦合的。但如果業(yè)務(wù)邏輯是緊耦合的,RPC方式也是可行的(它的好處是代碼更簡單),而且你還可以通過選取合適的協(xié)議(Protobuf gRPC)來降低這種緊耦合帶來的危害。
由于事件溯源和事件通知的相似性,很多人把兩者弄混了,但它們實際上是完全不同的東西。微服務(wù)的數(shù)量不宜太多,可以先創(chuàng)建比較大的微服務(wù)(更像是服務(wù)組合)。
如果你還是不能確定是否采用微服務(wù)架構(gòu),可以先從“內(nèi)部微服務(wù)設(shè)計”開始,再逐漸拆分。
看完這篇文章,你有什么收獲?歡迎在留言區(qū)與10w+Java開發(fā)者一起討論~
關(guān)注微信公眾號:互聯(lián)網(wǎng)架構(gòu)師,在后臺回復(fù):2T,可以獲取我整理的教程,都是干貨。
1、GitHub 標(biāo)星 3.2w!史上最全技術(shù)人員面試手冊!FackBoo發(fā)起和總結(jié)
3、從零開始搭建創(chuàng)業(yè)公司后臺技術(shù)棧
5、37歲程序員被裁,120天沒找到工作,無奈去小公司,結(jié)果懵了...
6、滴滴業(yè)務(wù)中臺構(gòu)建實踐,首次曝光





