微服務(wù)架構(gòu)中10個(gè)常用的設(shè)計(jì)模式
從軟件開發(fā)早期(1960 年代)開始,應(yīng)對大型軟件系統(tǒng)中的復(fù)雜性一直是一項(xiàng)令人生畏的任務(wù)。多年來為了應(yīng)對軟件系統(tǒng)的復(fù)雜性,軟件工程師和架構(gòu)師們做了許多嘗試:David Parnas 的模塊化和封裝 (1972), Edsger W. Dijkstra (1974)的關(guān)注點(diǎn)分離以及 SOA(1988)。
他們都是使用分而治之這項(xiàng)成熟的傳統(tǒng)技術(shù)來應(yīng)對大型系統(tǒng)的復(fù)雜性。自 2010 年開始,這些技術(shù)被證實(shí)無法繼續(xù)應(yīng)對 Web 級應(yīng)用或者現(xiàn)代大型企業(yè)級應(yīng)用的復(fù)雜性。因此架構(gòu)師和工程師們發(fā)展出了一種全新的現(xiàn)代方式來解決這個(gè)問題,就是微服務(wù)架構(gòu)。它雖然延續(xù)了分而治之的思想,但卻是以全新的方式來實(shí)現(xiàn)的。
軟件設(shè)計(jì)模式是解決軟件設(shè)計(jì)中常見問題的通用、可復(fù)用的解決方案。設(shè)計(jì)模式讓我們可以分享通用詞匯并使用經(jīng)實(shí)戰(zhàn)檢驗(yàn)的方案,以免重復(fù)造輪子。我先簡單介紹下微服務(wù)架構(gòu)。
通過閱讀這篇文章,你會學(xué)到:
微服務(wù)架構(gòu)
微服務(wù)架構(gòu)的優(yōu)勢
微服務(wù)架構(gòu)的劣勢
何時(shí)使用微服務(wù)架構(gòu)
最重要的微服務(wù)架構(gòu)設(shè)計(jì)模式,包括其優(yōu)缺點(diǎn)、用例、上下文、技術(shù)棧示例及可用資源。
請注意,本清單中的大部分設(shè)計(jì)模式常出現(xiàn)在多種語境中,并且可以在非微服務(wù)架構(gòu)中使用。而我將在微服務(wù)這個(gè)特定語境中介紹它們。
我在之前的博客《微服務(wù)架構(gòu)概述及為什么要應(yīng)用在下個(gè)項(xiàng)目》和《單體軟件架構(gòu)真的終結(jié)了嗎?》中對微服務(wù)架構(gòu)有非常詳盡的介紹。如果你感興趣,可以閱讀這兩篇博客來深入了解。
https://towardsdatascience.com/microservice-architecture-a-brief-overview-and-why-you-should-use-it-in-your-next-project-a17b6e19adfd
https://towardsdatascience.com/looking-beyond-the-hype-is-modular-monolithic-software-architecture-really-dead-e386191610f8
那到底什么是微服務(wù)架構(gòu)?有很多種定義方法。我的定義是這這樣的:
微服務(wù)架構(gòu)指的是將大型復(fù)雜系統(tǒng)按功能或者業(yè)務(wù)需求垂直切分成更小的子系統(tǒng),這些子系統(tǒng)以獨(dú)立部署的子進(jìn)程存在,它們之間通過輕量級的、跨語言的同步(比如 REST,gRPC)或者異步(消息)網(wǎng)絡(luò)調(diào)用進(jìn)行通信。
下面是基于微服務(wù)架構(gòu)的商業(yè) Web 應(yīng)用的組件視圖:
來自 Md Kamaruzzaman 的微服務(wù)架構(gòu)
整個(gè)應(yīng)用程序被拆分成相互獨(dú)立但包含多個(gè)內(nèi)部模塊的子進(jìn)程
與模塊化的單體應(yīng)用(Modular Monoliths)或 SOA 相反,微服務(wù)應(yīng)用程序根據(jù)業(yè)務(wù)范圍或領(lǐng)域垂直拆分。
微服務(wù)邊界是外部的,微服務(wù)之間通過網(wǎng)絡(luò)調(diào)用(RPC 或消息)相互通信。
微服務(wù)是獨(dú)立的進(jìn)程,它們可以獨(dú)立部署。
它們以輕量級的方式進(jìn)行通信,不需要任何智能通信通道。
更好的開發(fā)規(guī)模
更快的開發(fā)速度
支持迭代開發(fā)或現(xiàn)代化增量開發(fā)
充分利用現(xiàn)代軟件開發(fā)生態(tài)系統(tǒng)的優(yōu)勢(云、容器、 DevOps、Serverless)
支持水平縮放和細(xì)粒度縮放
小體量,較低了開發(fā)人員的認(rèn)知復(fù)雜性
更高數(shù)量級的活動組件(服務(wù)、數(shù)據(jù)庫、進(jìn)程、容器、框架)
復(fù)雜性從代碼轉(zhuǎn)移到基礎(chǔ)設(shè)施
RPC 調(diào)用和網(wǎng)絡(luò)通信的大量增加
整個(gè)系統(tǒng)的安全性管理更具有挑戰(zhàn)性
整個(gè)系統(tǒng)的設(shè)計(jì)變得更加困難
引入了分布式系統(tǒng)的復(fù)雜性
大規(guī)模 Web 應(yīng)用開發(fā)
跨團(tuán)隊(duì)企業(yè)級應(yīng)用協(xié)作開發(fā)
長期收益優(yōu)先于短期收益
團(tuán)隊(duì)擁有能夠設(shè)計(jì)微服務(wù)架構(gòu)的軟件架構(gòu)師或高級工程師
當(dāng)一家公司將大型單體系統(tǒng)替換成一組微服務(wù),首先要面臨的最重要決策是關(guān)于數(shù)據(jù)庫。單體架構(gòu)會使用大型中央數(shù)據(jù)庫。即使轉(zhuǎn)移到微服務(wù)架構(gòu)許多架構(gòu)師仍傾向于保持?jǐn)?shù)據(jù)庫不變。雖然有一些短期收益,但它卻是反模式的,特別是在大規(guī)模系統(tǒng)中,微服務(wù)將在數(shù)據(jù)庫層嚴(yán)重耦合,整個(gè)遷移到微服務(wù)的目標(biāo)都將面臨失敗(例如,團(tuán)隊(duì)授權(quán)、獨(dú)立開發(fā)等問題)。
更好的方法是為每個(gè)微服務(wù)提供自己的數(shù)據(jù)存儲,這樣服務(wù)之間在數(shù)據(jù)庫層就不存在強(qiáng)耦合。這里我使用數(shù)據(jù)庫這一術(shù)語來表示邏輯上的數(shù)據(jù)隔離,也就是說微服務(wù)可以共享物理數(shù)據(jù)庫,但應(yīng)該使用分開的數(shù)據(jù)結(jié)構(gòu)、集合或者表,這還將有助于確保微服務(wù)是按照領(lǐng)域驅(qū)動設(shè)計(jì)的方法正確拆分的。

Md Kamaruzzaman 的微服務(wù)獨(dú)享數(shù)據(jù)庫
優(yōu)點(diǎn)
數(shù)據(jù)由服務(wù)完全所有
服務(wù)的開發(fā)團(tuán)隊(duì)之間耦合度降低
缺點(diǎn)
服務(wù)間的數(shù)據(jù)共享變得更有挑戰(zhàn)性
在應(yīng)用范圍的保證 ACID 事務(wù)變得困難許多
細(xì)心設(shè)計(jì)如何拆分單體數(shù)據(jù)庫是一項(xiàng)極具挑戰(zhàn)的任務(wù)
何時(shí)使用獨(dú)享數(shù)據(jù)庫
在大型企業(yè)應(yīng)用程序中
當(dāng)團(tuán)隊(duì)需要完全把控微服務(wù)以實(shí)現(xiàn)開發(fā)規(guī)模擴(kuò)展和速度提升
何時(shí)不宜使用獨(dú)享數(shù)據(jù)庫
在小規(guī)模應(yīng)用中
如果是單個(gè)團(tuán)隊(duì)開發(fā)所有微服務(wù)
可用技術(shù)示例
所有 SQL、 NoSQL 數(shù)據(jù)庫都提供數(shù)據(jù)的邏輯分離(例如,單獨(dú)的表、集合、結(jié)構(gòu)、數(shù)據(jù)庫)。
在微服務(wù)架構(gòu)中,特別使用獨(dú)享數(shù)據(jù)庫時(shí),微服務(wù)之間需要進(jìn)行數(shù)據(jù)交換。對于彈性高可伸縮的和可容錯(cuò)的系統(tǒng),它們應(yīng)該通過交換事件進(jìn)行異步通信。在這種情況,您可能希望進(jìn)行類似更新數(shù)據(jù)庫并發(fā)送消息這樣的原子操作,如果在大數(shù)據(jù)量的分布式場景使用關(guān)系數(shù)據(jù)庫,您將無法使用兩階段鎖協(xié)議(2PL),因?yàn)樗鼰o法伸縮。而 NoSQL 數(shù)據(jù)庫因?yàn)榇蠖嗖恢С謨呻A段鎖協(xié)議甚至無法實(shí)現(xiàn)分布式事務(wù)。
在這些場景,可以基于事件的架構(gòu)使用事件源模式。在傳統(tǒng)數(shù)據(jù)庫中,直接存儲的是業(yè)務(wù)實(shí)體的當(dāng)前“狀態(tài)”,而在事件源中任何“狀態(tài)”更新事件或其他重要事件都會被存儲起來,而不是直接存儲實(shí)體本身。這意味著業(yè)務(wù)實(shí)體的所有更改將被保存為一系列不可變的事件。因?yàn)閿?shù)據(jù)是作為一系列事件存儲的,而非直接更新存儲,所以各項(xiàng)服務(wù)可以通過重放事件存儲中的事件來計(jì)算出所需的數(shù)據(jù)狀態(tài)。

Md Kamaruzzaman 的事件源
優(yōu)點(diǎn)
為高可伸縮系統(tǒng)提供原子性操作
自動記錄實(shí)體變更歷史,包括時(shí)序回溯功能
松耦合和事件驅(qū)動的微服務(wù)
缺點(diǎn)
從事件存儲中讀取實(shí)體成為新的挑戰(zhàn),通常需要額外的數(shù)據(jù)存儲(CQRS 模式)。
系統(tǒng)整體復(fù)雜性增加了,通常需要領(lǐng)域驅(qū)動設(shè)計(jì)。
系統(tǒng)需要處理事件重復(fù)(冪等)或丟失
變更事件結(jié)構(gòu)成為新的挑戰(zhàn)。
何時(shí)使用事件源
使用關(guān)系數(shù)據(jù)庫的、高可伸縮的事務(wù)型系統(tǒng)
使用 NoSQL 數(shù)據(jù)庫的事務(wù)型系統(tǒng)
彈性高可伸縮微服務(wù)架構(gòu)
典型的消息驅(qū)動或事件驅(qū)動系統(tǒng)(電子商務(wù)、預(yù)訂和預(yù)約系統(tǒng))
何時(shí)不宜使用事件源
使用 SQL 數(shù)據(jù)庫的低可伸縮性事務(wù)型系統(tǒng)
在服務(wù)可以同步交換數(shù)據(jù)(例如,通過 API)的簡單微服務(wù)架構(gòu)中。
可用技術(shù)示例
事件存儲:EventStoreDB、Apache Kafka、Confluent Cloud、AWS Kinesis、Azure Event Hub、GCP Pub/Sub、Azure Cosmos DB、MongoDB、Cassandra、Amazon DynamoDB
框架:Lagom、Akka、Spring、akkatecture、Axon、Eventuate
如果我們使用事件源,那么從事件存儲中讀取數(shù)據(jù)就變得困難了。要從數(shù)據(jù)存儲中獲取實(shí)體,我們需要處理所有的實(shí)體事件。有時(shí)我們對讀寫操作還會有不同的一致性和吞吐量要求。
這種情況,我們可以使用 CQRS 模式。在該模式中,系統(tǒng)的數(shù)據(jù)修改部分(命令)與數(shù)據(jù)讀取部分(查詢)是分離的。而 CQRS 模式有兩種容易令人混淆的模式,分別是簡單的和高級的。
在其簡單形式中,不同實(shí)體或 ORM 模型被用于讀寫操作,如下所示:
Md Kamaruzzaman 的 CQRS (簡單)
它有助于強(qiáng)化單一職責(zé)原則和分離關(guān)注點(diǎn),從而實(shí)現(xiàn)更簡潔的設(shè)計(jì)。
搜索公眾號互聯(lián)網(wǎng)架構(gòu)師后臺回復(fù)“2T”,獲取一份驚喜禮包。
在其高級形式中,會有不同的數(shù)據(jù)存儲用于讀寫操作。高級的 CQRS 通常結(jié)合事件源模式。根據(jù)不同情況,會使用不同類型的寫數(shù)據(jù)存儲和讀數(shù)據(jù)存儲。寫數(shù)據(jù)存儲是“記錄的系統(tǒng)”,也就是整個(gè)系統(tǒng)的核心源頭。

Md Kamaruzzaman 的 CQRS(高級)
對于讀頻繁的應(yīng)用程序或微服務(wù)架構(gòu),OLTP 數(shù)據(jù)庫(任何提供 ACID 事務(wù)保證的關(guān)系或非關(guān)系數(shù)據(jù)庫)或分布式消息系統(tǒng)都可以被用作寫存儲。對于寫頻繁的應(yīng)用程序(寫操作高可伸縮性和大吞吐量),需要使用寫可水平伸縮的數(shù)據(jù)庫(如全球托管的公共云數(shù)據(jù)庫)。標(biāo)準(zhǔn)化的數(shù)據(jù)則保存在寫數(shù)據(jù)存儲中。
對搜索(例如 Apache Solr、Elasticsearch)或讀操作(KV 數(shù)據(jù)庫、文檔數(shù)據(jù)庫)進(jìn)行優(yōu)化的非關(guān)系數(shù)據(jù)庫常被用作讀存儲。許多情況會在需要 SQL 查詢的地方使用讀可伸縮的關(guān)系數(shù)據(jù)庫。非標(biāo)準(zhǔn)化和特殊優(yōu)化過的數(shù)據(jù)則保存在讀存儲中。
數(shù)據(jù)是從寫存儲異步復(fù)制到讀存儲中的,所以讀存儲和寫存儲之間會有延遲,但最終是一致的。
優(yōu)點(diǎn)
在事件驅(qū)動的微服務(wù)中數(shù)據(jù)讀取速度更快
數(shù)據(jù)的高可用性
讀寫系統(tǒng)可獨(dú)立擴(kuò)展
缺點(diǎn)
讀數(shù)據(jù)存儲是弱一致性的(最終一致性)
整個(gè)系統(tǒng)的復(fù)雜性增加了,混亂的 CQRS 會顯著危害整個(gè)項(xiàng)目。
何時(shí)使用 CQRS
在高可擴(kuò)展的微服務(wù)架構(gòu)中使用事件源
在復(fù)雜領(lǐng)域模型中,讀操作需要同時(shí)查詢多個(gè)數(shù)據(jù)存儲。
在讀寫操作負(fù)載差異明顯的系統(tǒng)中
何時(shí)不宜使用 CQRS
在沒有必要存儲大量事件的微服務(wù)架構(gòu)中,用事件存儲快照來計(jì)算實(shí)體狀態(tài)是一個(gè)更好的選擇。
在讀寫操作負(fù)載相近的系統(tǒng)中。
可用技術(shù)示例
寫存儲:EventStoreDB, Apache Kafka, Confluent Cloud, AWS Kinesis, Azure Event Hub, GCP Pub/Sub, Azure Cosmos DB, MongoDB, Cassandra. Amazon DynamoDB
讀存儲:Elastic Search, Solr, Cloud Spanner, Amazon Aurora, Azure Cosmos DB, Neo4j
框架:Lagom, Akka, Spring, akkatecture, Axon, Eventuate
如果微服務(wù)使用獨(dú)享數(shù)據(jù)庫,那么通過分布式事務(wù)管理一致性是一個(gè)巨大的挑戰(zhàn)。你無法使用傳統(tǒng)的兩階段提交協(xié)議,因?yàn)樗床豢缮炜s(關(guān)系數(shù)據(jù)庫),要么不被支持(多數(shù)非關(guān)系數(shù)據(jù)庫)。
但您還是可以在微服務(wù)架構(gòu)中使用 Saga 模式實(shí)現(xiàn)分布式事務(wù)。Saga 是 1987 年開發(fā)的一種古老模式,是關(guān)系數(shù)據(jù)庫中關(guān)于大事務(wù)的一個(gè)替代概念。但這種模式的一種現(xiàn)代變種對分布式事務(wù)也非常有效。Saga 模式是一個(gè)本地事務(wù)序列,其每個(gè)事務(wù)在一個(gè)單獨(dú)的微服務(wù)內(nèi)更新數(shù)據(jù)存儲并發(fā)布一個(gè)事件或消息。Saga 中的首個(gè)事務(wù)是由外部請求(事件或動作)初始化的,一旦本地事務(wù)完成(數(shù)據(jù)已保存在數(shù)據(jù)存儲且消息或事件已發(fā)布),那么發(fā)布的消息或事件則會觸發(fā) Saga 中的下一個(gè)本地事務(wù)。

Md Kamaruzzaman 的 Saga
如果本地事務(wù)失敗,Saga 將執(zhí)行一系列補(bǔ)償事務(wù)來回滾前面本地事務(wù)的更改。
Saga 事務(wù)協(xié)調(diào)管理主要有兩種形式:
事件編排 Choreography:分散協(xié)調(diào),每個(gè)微服務(wù)生產(chǎn)并監(jiān)聽其他微服務(wù)的事件或消息然后決定是否執(zhí)行某個(gè)動作。
命令編排 Orchestration:集中協(xié)調(diào),由一個(gè)協(xié)調(diào)器告訴參與的微服務(wù)哪個(gè)本地事務(wù)需要執(zhí)行。
優(yōu)點(diǎn)
為高可伸縮或松耦合的、事件驅(qū)動的微服務(wù)架構(gòu)提供一致性事務(wù)。
為使用了不支持 2PC 的非關(guān)系數(shù)據(jù)庫的微服務(wù)架構(gòu)提供一致性事務(wù)。
缺點(diǎn)
需要處理瞬時(shí)故障,并且提供等冪性。
難以調(diào)試,而且復(fù)雜性隨著微服務(wù)數(shù)量增加而增加。
何時(shí)使用 Saga
在使用了事件源的高可伸縮、松耦合的微服務(wù)中。
在使用了分布式非關(guān)系數(shù)據(jù)庫的系統(tǒng)中。
何時(shí)不宜使用 Saga
使用關(guān)系數(shù)據(jù)庫的低可伸縮性事務(wù)型系統(tǒng)。
在服務(wù)間存在循環(huán)依賴的系統(tǒng)中。
可用技術(shù)示例
Axon, Eventuate, Narayana
在現(xiàn)代商業(yè)應(yīng)用開發(fā),特別是微服務(wù)架構(gòu)中,前后端應(yīng)用是分離和獨(dú)立的服務(wù),它們通過 API 或 GraphQL 連接。如果應(yīng)用程序還有移動 App 客戶端,那么 Web 端和移動客戶端使用相同的后端微服務(wù)就會出現(xiàn)問題。因?yàn)橐苿涌蛻舳撕?Web 客戶端有不同的屏幕尺寸、顯示屏、性能、能耗和網(wǎng)絡(luò)帶寬,它們的 API 需求不同。
面向前端的后端模式適用于需要為特殊 UI 定制單獨(dú)后端的場景。它還提供了其他優(yōu)勢,比如作為下游微服務(wù)的封裝,從而減少 UI 和下游微服務(wù)之間的頻繁通信。此外,在高安全要求的場景中,BFF 為部署在 DMZ 網(wǎng)絡(luò)中的下游微服務(wù)提供了更高的安全性。

Md Kamaruzzaman 的面向前端的后端
優(yōu)點(diǎn)
分離 BFF 之間的關(guān)注點(diǎn),使得我們可以為具體的 UI 優(yōu)化他們。
提供更高的安全性
減少 UI 和下游微服務(wù)之間頻繁的通信
缺點(diǎn)
BFF 之間代碼重復(fù)
大量的 BFF 用于其他用戶界面(例如,智能電視,Web,移動端,PC 桌面版)
需要仔細(xì)的設(shè)計(jì)和實(shí)現(xiàn),BFF 不應(yīng)該包含任何業(yè)務(wù)邏輯,而應(yīng)只包含特定客戶端邏輯和行為。
何時(shí)使用 BFF
如果應(yīng)用程序有多個(gè)含不同 API 需求的 UI
出于安全需要,UI 和下游微服務(wù)之間需要額外的層。
如果在 UI 開發(fā)中使用微前端。
何時(shí)不宜使用 BFF
如果應(yīng)用程序雖有多個(gè) UI,但使用的 API 相同。
如果核心微服務(wù)不是部署在 DMZ 網(wǎng)絡(luò)中。
可用技術(shù)示例
任何后端框架(Node.js,Spring,Django,Laravel,F(xiàn)lask,Play,…)都能支持。
在微服務(wù)架構(gòu)中,UI 通常連接多個(gè)微服務(wù)。如果微服務(wù)是細(xì)粒度的(FaaS) ,那么客戶端可能需要連接非常多的微服務(wù),這將變得繁雜和具有挑戰(zhàn)性。此外,這些服務(wù)包括它們的 API 還將不斷進(jìn)化。大型企業(yè)還希望能有其他橫切關(guān)注點(diǎn)(SSL 終止、身份驗(yàn)證、授權(quán)、節(jié)流、日志記錄等)。
一個(gè)解決這些問題的可行方法是使用 API 網(wǎng)關(guān)。API 網(wǎng)關(guān)位于客戶端 APP 和后端微服務(wù)之間充當(dāng) facade,它可以是反向代理,將客戶端請求路由到適當(dāng)?shù)暮蠖宋⒎?wù)。它還支持將客戶端請求扇出到多個(gè)微服務(wù),然后將響應(yīng)聚合后返回給客戶端。它還支持必要的橫切關(guān)注點(diǎn)。

Md Kamaruzzaman 的 API 網(wǎng)關(guān)
優(yōu)點(diǎn)
在前端和后端服務(wù)之間提供松耦合
減少客戶端和微服務(wù)之間的調(diào)用次數(shù)
通過 SSL 終端、身份驗(yàn)證和授權(quán)實(shí)現(xiàn)高安全性
集中管理的橫切關(guān)注點(diǎn),例如,日志記錄和監(jiān)視、節(jié)流、負(fù)載平衡。
缺點(diǎn)
可能導(dǎo)致微服務(wù)架構(gòu)中的單點(diǎn)故障
額外的網(wǎng)絡(luò)調(diào)用帶來的延遲增加
如果不進(jìn)行擴(kuò)展,它們很容易成為整個(gè)企業(yè)應(yīng)用的瓶頸。
額外的維護(hù)和開發(fā)費(fèi)用
何時(shí)使用 API 網(wǎng)關(guān)
在復(fù)雜的微服務(wù)架構(gòu)中,它幾乎是必須的。
在大型企業(yè)中,API 網(wǎng)關(guān)是中心化安全性和橫切關(guān)注點(diǎn)的必要工具。
何時(shí)不宜使用 API 網(wǎng)關(guān)
在安全和集中管理不是最優(yōu)先要素的私人項(xiàng)目或小公司中。
如果微服務(wù)的數(shù)量相當(dāng)少。
可用技術(shù)示例
Amazon API 網(wǎng)關(guān), Azure API 管理, Apigee, Kong, WSO2 API 管理器
如果想在運(yùn)行中的項(xiàng)目中使用微服務(wù)架構(gòu),我們需要將遺留的或現(xiàn)有的單體應(yīng)用遷移到微服務(wù)。將現(xiàn)有的大型在線單體應(yīng)用程序遷移到微服務(wù)是相當(dāng)有挑戰(zhàn)性的,因?yàn)檫@可能破壞應(yīng)用程序的可用性。
一個(gè)解決方案是使用 Strangler 模式。Strangler 模式意味著通過使用新的微服務(wù)逐步替換特定功能,將單體應(yīng)用程序增量地遷移到微服務(wù)架構(gòu)。此外,新功能只在微服務(wù)中添加,而不再添加到遺留的單體應(yīng)用中。然后配置一個(gè) Facade (API 網(wǎng)關(guān))來路由遺留單體應(yīng)用和微服務(wù)間的請求。當(dāng)某個(gè)功能從單體應(yīng)用遷移到微服務(wù),F(xiàn)acade 就會攔截客戶端請求并路由到新的微服務(wù)。一旦遷移了所有的功能,遺留單體應(yīng)用程序就會被“扼殺(Strangler)”,即退役。
搜索公眾號互聯(lián)網(wǎng)架構(gòu)師后臺回復(fù)“2T”,獲取一份驚喜禮包。

Md Kamaruzzaman 的 Strangler
優(yōu)點(diǎn)
安全的遷移單體應(yīng)用程序到微服務(wù)
可以并行地遷移已有功能和開發(fā)新功能
遷移過程可以更好把控節(jié)奏
缺點(diǎn)
在現(xiàn)有的單體應(yīng)用服務(wù)和新的微服務(wù)之間共享數(shù)據(jù)存儲變得具有挑戰(zhàn)性
添加 Facade (API 網(wǎng)關(guān))將增加系統(tǒng)延遲
端到端測試變得困難
何時(shí)使用 Strangler
將大型后端單體應(yīng)用程序的增量遷移到微服務(wù)
何時(shí)不宜使用 Strangler
如果后端單體應(yīng)用很小,那么全量替換會更好。
如果無法攔截客戶端對遺留的單體應(yīng)用程序的請求。
可用技術(shù)示例
API 網(wǎng)關(guān)后端應(yīng)用框架。
在微服務(wù)架構(gòu)中,微服務(wù)通過同步調(diào)用其他服務(wù)來滿足業(yè)務(wù)需求。服務(wù)調(diào)用會由于瞬時(shí)故障(網(wǎng)絡(luò)連接緩慢、超時(shí)或暫時(shí)不可用) 導(dǎo)致失敗,這種情況重試可以解決問題。然而,如果出現(xiàn)了嚴(yán)重問題(微服務(wù)完全失敗),那么微服務(wù)將長時(shí)間不可用,這時(shí)重試沒有意義且浪費(fèi)寶貴的資源(線程被阻塞,CPU 周期被浪費(fèi))。此外,一個(gè)服務(wù)的故障還會引發(fā)整個(gè)應(yīng)用系統(tǒng)的級聯(lián)故障。這時(shí)快速失敗是一種更好的方法。
在這種情況,可以使用斷路器模式挽救。一個(gè)微服務(wù)通過代理請求另一個(gè)微服務(wù),其工作原理類似于電氣斷路器,代理通過統(tǒng)計(jì)最近發(fā)生的故障數(shù)量,并使用它來決定是繼續(xù)請求還是簡單的直接返回異常。

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


a
援灌木,高
達(dá)3米。