<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    最全面微服務教程:SpringBoot + DDD + Apache Kafka實現最終一致性 - itnext

    VSole2022-08-08 10:07:35

    這是關于如何使用Spring for Apache Kafka在跨多個微服務的MongoDB中管理分布式數據模型。

    由多個微服務組成的現代分布式系統,每個微服務都擁有一個領域的聚合數據的子集,那么該系統幾乎肯定會具有某些數據重復,在這種情況下,我們如何保持數據的一致性?

    Apache Kafka 

    Apache Kafka是一個開放源代碼的分布式事件流平臺,能夠處理數萬億條消息。根據Confluent(最初被認為是消息隊列)的說法,Kafka基于分布式提交日志的抽象。自2011年由LinkedIn創建并開源以來,Kafka已從消息傳遞隊列迅速發展為成熟的事件流平臺。

    根據Wikipedia的說法,最終一致性是一種用于分布式計算以實現高可用性的一致性模型,該模型非正式地保證了如果不對給定數據項進行任何新的更新,則最終對該項的所有訪問都將返回最后的更新值。

    領域驅動設計

    為了進行討論,讓我們研究一個常見的示例:在線店面。

    使用域驅動設計(DDD)方法,我們希望問題域(在線店面)由多個有界上下文組成。綁定的上下文可能包括購物Order、客戶服務、市場營銷、安全性、送貨Fullfillment、會計等。

    給定這個問題域,我們可以假設我們擁有客戶的概念。此外,我們可以假設定義客戶的唯一屬性可能分布在多個有界上下文中。完整的客戶視圖將要求您匯總來自多個上下文的數據,例如:

    • 會計方面可能是記錄系統的主要客戶信息,如客戶的姓名,聯系方式,聯系方式偏好,以及計費和送貨地址。
    • 市場營銷可能會擁有有關客戶使用商店的忠誠度計劃和在線購物活動的其他信息。
    • 送貨上下文可能會保留所有運送給客戶的訂單的記錄。
    • 安全性可能會保留客戶的訪問憑據,帳戶訪問歷史記錄和隱私設置。

    分布式數據一致性

    我們域數據模型需要跨有界上下文甚至是同一上下文中的服務之間的某些數據重復,我們必須確保數據的一致性。以客戶更改其家庭住址或電子郵件的情況為例。讓我們假設“會計”上下文是這些數據字段的記錄系統。但是,要實現訂單送貨,“送貨”上下文可能還需要維護客戶的當前家庭住址。同樣,負責選擇電子郵件廣告的Marketing上下文也需要了解電子郵件的更改并更新其客戶記錄。

    如果更改了一條共享數據,則進行更改的一方應負責傳達更改,而不會期望得到響應。因為它們說的是事實,而不是問問題,問問題才需要響應回答,因此,感興趣的各方可以選擇是否以及如何對變更通知采取行動。

    這種分離的通信模型通常被描述為事件攜帶狀態轉移,由ThoughtWorks的馬丁·福勒(Martin Fowler)在他有見地的帖子中定義,“事件驅動”是什么意思?。

    可以將對數據的更改視為狀態更改事件,即包含更改數據的詳細信息的事件。巧合的是,Fowler在帖子中使用客戶的地址更改作為“事件進行狀態轉移”的示例。格雷厄姆·布魯克斯(Graham Brooks)也在他的帖子中詳細介紹了這一概念,事件攜帶狀態轉移模式。

    一致性策略

    可以采用多種體系結構方法來解決分布式系統中的數據一致性。例如:

    • 您可以使用具有共享模式的單個關系數據庫來持久化數據,而完全避免使用分布式數據模型。但是,可能會爭辯說,使用單個數據庫只會使您的分布式系統變回整體monlith
    • 您可以使用變更數據捕獲(CDC)來跟蹤每個數據庫的變更,并將這些變更的記錄發送到Kafka主題,以供感興趣的各方使用。
    • Kafka Connect是一個很好的選擇,正如Confluent的Robin Moffatt所著的文章“不再孤島:
    • 如何將數據庫與Apache Kafka和CDC集成”中所述
    • 我們可以使用獨立于域的其他業務服務的單獨的數據服務,其唯一作用是確保跨域的數據一致性。如果消息仍然存在于Kafka中,則該服務具有通過消息重播提供數據可審核性的附加功能。當然,另一組服務會增加系統的操作復雜性。
    • 在此帖子的某種程度的簡化架構中,業務微服務將通過生產和使用來自其所訂閱的多個Kafka主題的消息來維護其各自域之間的一致性。Kafka生產者也可能是我們領域內的消費使用者。

    店面示例

    在這篇文章中,我們的網上商店API將使用Java構建Spring Boot和OpenJDK的16。我們將通過使用保證分布式數據的一致性發布/訂閱模式與Spring的Apache kafka項目。當一塊數據由一個Spring Boot微服務改變,如果合適的話,該狀態改變將觸發一個狀態改變事件,這將使用卡夫卡主題與其他微服務共享。

    店面訂購過程的視圖顯示在下面的圖所示。箭頭表示數據的交換。卡夫卡將作為從一個去耦服務的其他同時仍能確保數據分布的一種手段。鑒于訂購的使用情況下,我們將研究的三種服務是構成我們的店面API的交互:會計界范圍內的賬戶服務,履行范圍內的配送服務,訂單管理范圍內的訂單服務。我們將研究三個服務如何使用卡夫卡通信狀態的變化完全完全的方式(改變他們的數據)給對方。

    下面示出了圖中的事件在后討論的子系統之間流動。下面對應的編號,以上述訂購過程的編號。我們將著眼于三個事件流2,5和6。我們將模擬事件流3,由購物車服務中創建的訂單。店面微服務

    我們將探索這三種微服務中每一種的功能,以及它們如何使用Kafka 2.8共享狀態改變事件。每個店面API服務都是使用Spring Boot 2.0和Gradle構建的。每個Spring Boot服務包括Spring Data REST,Spring Data MongoDB,用于Apache Kafka的spring-cloud-sleuth,SpringFox和Spring Boot Actuator。為了簡單起見,Kafka Streams和Spring Cloud Stream的使用不屬于本文的一部分。

    源代碼

    店面的微服務源代碼可在GitHub上公開獲得。可以使用以下命令克隆四個GitHub項目:

    git clone --branch 2021-istio \ 
        --single-branch --depth 1 \ 
        https://github.com/garystafford/storefront-demo-accounts.git
    git clone --branch 2021-istio \ 
        --single-branch --depth 1 \ 
        https://github.com/garystafford/storefront-demo-orders.git
    git clone --branch 2021-istio \ 
        --single-branch --depth 1 \ 
        https://github.com/garystafford/storefront-demo-fulfillment.git
    git clone --branch 2021-istio \ 
        --single-branch --depth 1 \ 
        https://github.com/garystafford/storefront-demo.git
    

    上下文kafka
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    近日,綠盟科技聯合廣州大學網絡空間先進技術研究院發布2021年《APT組織情報研究年鑒》(下文簡稱“年鑒”)。 年鑒借助網絡空間威脅建模知識圖譜和大數據復合語義追蹤技術,對全球372個APT組織知識進行了知識圖譜歸因建檔,形成APT組織檔案館,并對APT組織活動進行大數據追蹤,從而對本年度新增和活躍的攻擊組織的攻擊活動態勢進行分析。目前年鑒所涉及的相關情報和技術已經應用在綠盟科技的威脅情報平臺(
    這是關于如何使用Spring for Apache Kafka在跨多個微服務的MongoDB中管理分布式數據模型。
    Spring框架是一個開放源代碼的J2EE應用程序框架,是針對bean的生命周期進行管理的輕量級容器。Spring可以單獨應用于構筑應用程序,也可以和Struts、Webwork、Tapestry等眾多Web框架組合使用,并且可以與 Swing等桌面應用程序AP組合。 Spring框架主要由七部分組成,分別是 Spring Core、 Spring AOP、 Spring ORM、 Spring
    當您公司的整體Web應用變得太大而脆弱時,部署變得緩慢而令人恐懼。畢竟,這就是貴公司采用它們的原因。這不僅意味著提前規劃,還意味著在此過程中進行路線修正。此外,這意味著做出一些根本性的改變——技術和組織方面的改變。微服務的許多最大好處不在于微服務本身,而在于它們釋放的非技術優勢。在決定采用微服務之前,您需要檢查權衡。只有這樣,你才能認為這是值得的。
    看陜西省聯社在數字化轉型中,如何做好網絡安全主動防御
    零信任策略下K8s安全監控最佳實踐
    由于擔心缺乏透明度,用戶和隱私監管機構向科技公司施加了壓力。然而,并不是每個服務都提供這種警告。統計數據來源該文使用了DNT在2021年8月至2022年8月期間收集的匿名統計數據,DNT通過阻止的web追蹤程序加載數量進行統計。其在獨聯體的占比最小,僅為9.06%。
    添加消息的任務我們稱為producer,而取出并使用消息的任務,我們稱之為consumer。kafka應運而生,它是專門設計用來做消息中間件的系統。這兩點也是kafka要解決的核心問題。為此,kafka提出了partition的概念。由于消息不會被刪除,因此可以等消費者明確告知kafka這條消息消費成功以后,再去更新游標。對于同一個topic,不同的消費組有各自的游標。
    Serverless應用安全淺談
    2022-06-02 14:08:43
    我是火線安全的曾垚,今天分享的議題是Serverless應用安全淺談,我們發現近年來主流的云廠商,或者是像K8S、CNCF生態出現了非常多的Serverless Faas的相關技術,像backend也是非常流行的。 整個Serverless產生或者是容器的產生,都是為了大幅度提高軟件的開發效率和降低后續的維護成本。 希望可以通過這次分享,可以讓相關Serverless開發者了解在Serverl
    只有知道敏感數據在哪里才能將重要的精力資源投入到需要重點保護的數據資產上。安全團隊做到了實時的線上線下敏感數據采集發現,那么下一步就很清晰了,對數據進行分類分級重點關注L3,L4級個人敏感信息、公司級別敏感信息、對敏感數據進行落地脫敏存儲、權限審計、數據庫加解密等。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类