微服務食譜小冊

微服務食譜小冊

微服務是一種小型自治服務,能夠協同工做。

目錄列表


定義

微服務架構,或簡稱微服務,是開發軟件系統的獨特方法,試圖專一於構建具備良好定義的接口和操做的單功能模塊。近年來,隨着企業變得更加敏捷並朝着DevOps和持續測試邁進,這一趨勢愈來愈受歡迎。微服務能夠幫助建立可擴展,可測試的軟件,能夠每週而不是每一年交付。html

Alt Text

微服務架構(也稱雲應用程序架構指南)java

  • Sam Newman:「微服務是一種小型,自主的服務,能夠協同工做。」node

  • Frye:微服務的想法是專一於構建可以作到一件事情的我的服務。python

  • Retriever Communications首席技術官Nic Grange說:「微服務是一種設計軟件系統的方法,這些軟件系統由小型獨立服務組成,每一個服務都有特定用途。」react

  • Flux7首席技術官Ali Hussain說:「微服務是解決大型或大型服務的一種方法 使用一組更小,更簡單的服務協同工做的複雜業務問題; 微服務運行本身獨特的流程,有助於實現整體業務目標。「ios

  • ShieldX Networks創始人兼首席執行官Ratinder Ahuja博士說:」微服務是一種應用程序開發方法,其中大型應用程序是做爲一套模塊化服務構建的。每一個模塊都支持一個特定的業務目標,並使用一個簡單明確的界面與其餘服務集進行通訊。「nginx

  • Dest Horning,Zesty.io的解決方案工程師:」微服務用於軟件工廠的製造。而不是讓一我的[或]機器建造一輛整車,每一個區域都專門完成它的任務:這個錘子鉚釘,這個塗漆。「和」微服務將一個大的物鏡分解成它的部件,而且這些部件是 獨立完成。「git

  • Justin Bingham,Janeiro Digital的首席技術官:」微服務是一個應用程序或更普遍的生態系統的組件,能夠獨立運行 - 每一個都負責一個特定的業務github

  • Chef營銷總監Michael Ducy表示:「它正在將應用程序的開發和發佈分解爲更小的工做。」web

  • SolarWinds的負責人Kong Yang說:「微服務是開發軟件應用程序的一種方法。由可獨立部署的模塊化服務組成。每一個微服務都運行一個獨特的流程,並經過一個明肯定義的輕量級機制(如容器)進行通訊,以實現業務目標。

  • 「微服務容許組織減小依賴性,更快地開發和擴展.- Aviran Mordo

微服務定義:Lewis / Fowler:

  • 做爲一套小型服務,每一個服務都在本身的進程中運行,並與輕量級機制進行通訊,一般是HTTP資源API
  • 服務圍繞業務功能構建
  • 服務可獨立部署和擴展
  • 對這些服務進行集中管理的最低限度
  • 服務能夠用不一樣的編程語言編寫(多語言開發)。
  • 服務應使用獨立的數據存儲。

「微服務之因此重要,僅僅是由於它們以簡化系統複雜性的方式增長了獨特的價值。經過將系統或應用程序拆分爲許多較小的部分,您能夠展現減小重複,增長內聚力和下降​​部件之間耦合的方法,從而使整個系統部件更易於理解,更具可擴展性,更易於更改。分佈式系統的缺點是從系統角度來看老是更復雜。要管理的許多小型服務的開銷是另外一個須要考慮的因素。「 - 盧卡斯克勞斯,

微服務方法是將您的系統(「一堆代碼」)分解爲許多小型服務,每一個服務一般都有本身的:

  • 明確與業務相關的責任
  • 運行過程
  • 數據庫
  • 代碼版本控制(例如git)存儲庫
  • API(其餘服務/客戶將如何聯繫微服務的協議)
  • UI

爲何是微服務

  • 微服務使咱們的系統鬆散耦合,即若是咱們須要更新,修復或更換微服務,咱們不須要重建咱們的整個應用程序,只需更換須要它的部分。
  • 構建每一個微服務可使用不一樣的語言和工具。微服務與定義良好的接口進行通訊
  • 對於可伸縮性(微服務的副本)和可靠性(一個副本沒法經過其餘副本能夠服務),通訊應該是無狀態的,微服務之間最經常使用的通訊方法是HTTP和消息傳遞。每一個微服務都應該擁有本身的數據存儲區。
  • 小團隊可以從事設計,Web開發,編碼,數據庫管理和操做。

何時使用微服務架構

考慮這種架構風格:

  • 須要高發布速度的大型應用。

  • 須要高度可擴展的複雜應用程序。

  • 具備豐富域或多個子域的應用程序。

  • 由小型開發團隊組成的組織。

優勢和缺點

好處

微服務設計的Sam Newman列舉了微服務的主要優勢以下:

技術異質性

經過由多個協做服務組成的系統,咱們能夠決定在每一個服務中使用不一樣的技術。這使咱們可以爲每項工做選擇合適的工具,而沒必要選擇更標準化,一刀切的方法,這種方法一般最終成爲最低標準。

彈性

彈性工程的一個關鍵概念是隔板。若是系統的一個組件發生故障,但該故障沒有級聯,則能夠隔離問題,系統的其他部分能夠繼續工做。服務邊界成爲您明顯的艙壁。在單一服務中,若是服務失敗,一切都會中止工做。使用單片系統,咱們能夠在多臺機器上運行以減小故障機率,可是經過微服務,咱們能夠構建處理服務徹底故障並相應下降功能的系統。

縮放

經過大型的單片服務,咱們必須將全部內容擴展到一塊兒。咱們整個系統的一小部分在性能方面受到限制,但若是這種行爲被鎖定在一個巨大的單片應用程序中,咱們必須處理全部內容。經過較小的服務,咱們能夠擴展那些須要擴展的服務,容許咱們在更小,功能更少的硬件上運行系統的其餘部分。

易於部署

對百萬行單片應用程序進行單行更改須要部署整個應用程序才能發佈更改。這多是一次影響很大,風險很高的部署。在實踐中,因爲這種影響,高風險部署會被限制發生。

經過微服務,咱們能夠對單個服務進行更改,並獨立於系統的其他部分進行部署。這使咱們可以更快地部署代碼。若是確實出現問題,能夠將其快速隔離到單個服務,從而輕鬆實現快速回滾。

組織協調

微服務使咱們可以更好地將咱們的架構與咱們的組織保持一致,從而幫助咱們最大限度地減小在任何一個代碼庫上工做的人數,從而達到團隊規模和生產力的最佳點。咱們還能夠在團隊之間轉移服務的全部權,以試圖讓人們在一個服務上進行並置。

組合性

分佈式系統和麪向服務的體系結構的關鍵承諾之一是咱們爲重用功能開闢了機會。經過微服務,咱們容許以不一樣方式爲不一樣目的使用咱們的功能。當咱們考慮消費者如何使用咱們的軟件時,這一點尤其重要。

優化可替換性

若是你在一箇中等規模或更大的組織工做,你極可能會意識到坐在角落裏的一些大而討厭的遺留系統。沒有人想觸摸的那個。對您的公司如何運行相當重要的那個,但剛好用一些奇怪的Fortran變體編寫,而且僅在25年前達到使用壽命的硬件上運行。爲何沒有被替換?你知道爲何:工做太大並且冒險。

因爲咱們的個性化服務規模較小,所以使用更好的實施方案替換它們,甚至徹底刪除它們的成本更容易管理。
 

缺點

團隊溝通開銷 -

微服務架構下降了團隊管理的複雜性,但沒法減小團隊溝通的須要。他們須要確保一個服務中的更新不會破壞其餘功能。咱們也能夠在總體架構應用程序中找到這個問題。

非統一技術棧 -

咱們能夠爲不一樣的組件(多語言)選擇不一樣的技術堆棧。它致使應用程序設計和架構不一致的問題。從長遠來看,它可能會增長維護成本。

Dev Ops複雜性 -

咱們須要一個成熟的Dev Ops團隊來處理維護基於微服務的應用程序所涉及的複雜性。因爲應用程序的幾個移動部分,它變得複雜而且須要高水平的專業知識。增長資源使用 - 運行這些應用程序的初始投資很高,由於全部獨立運行的組件都須要擁有更多內存和CPU的本身的運行時容器。

增長網絡通訊 -

獨立運行的組件經過網絡相互交互。這種系統須要可靠和快速的網絡鏈接。編組和解編組 - 當一個組件須要來自另外一個組件的數據時,發送方從其內部表示中對一些標準中的數據進行編組,而接收方在使用以前將數據解組爲其本身的表示。與傳統應用程序架構相比,這確定須要更多處理。

網絡安全 -

須要保護內部服務通訊以免任何內部通訊安全漏洞。因爲有幾個移動部件,這些應用程序更容易出現安全漏洞。

測試 -

與總體應用相比,此類應用的測試確定更難。

生產監控 -

沒法使用正確的工具也是一個須要考慮的問題。

日誌分析 -

須要日誌分析工具進行日誌分析,Splunk或ELK堆棧

Alt Text
                                                                                                                           (圖片提供:pivotal)

微服務設計

架構原理

核心模式

部署模式

服務發現

Service Mesh(服務網格)

實現應用於微服務的七個設計指南的策略和模式(sei.cmu.edu)

標準化服務合同。策略包括:

服務鬆耦合。策略包括:

服務可重用性。策略包括:

服務自治。策略包括:

服務無狀態。策略包括:

服務可發現性。策略包括:

服務可部署性。策略包括:

asciicast

微服務設計模式

白宮Web API的指南和示例,鼓勵跨應用程序的一致性,可維護性和最佳實踐。白宮API旨在平衡真正的RESTful API接口和積極的開發者體驗(DX)。

該文件大量借鑑:

驗證你的微服務 :

在肯定應用程序中的微服務後,請根據如下條件驗證您的設計:

  • 每項服務都有單一責任。
  • 服務之間沒有迴路通訊(相似java裏面的loop service,層A的服務調用層B,層B的服務反過來調用層A的服務)。若是將功能拆分爲兩個服務致使它們過於繁瑣,則多是這些功能屬於同一服務的症狀。
  • 每項服務都很小,能夠由一個獨立工做的小團隊創建。
  • 沒有相互依賴性須要在鎖定步驟中部署兩個或更多服務。始終能夠在不從新部署任何其餘服務的狀況下部署服務。
  • 服務沒有緊密耦合,能夠獨立發展。
  • 您的服務邊界不會產生數據一致性或完整性問題。有時,經過將功能集成到單個微服務中來保持數據一致性很是重要。也就是說,考慮一下你是否真的須要強一致性。有解決分佈式系統中最終一致性的策略,分解服務的好處每每超過管理最終一致性的挑戰。

咱們能夠重用微服務嗎?

重用仍然是微服務設計的原則。可是,重用範圍已縮減爲業務中的特定域。設計這種重用的努力在SOA的早期階段包括在設計企業範圍的規範模型方面的浪費,由於它過於雄心勃勃而沒有結果。可是,必須注意的是,在其限制範圍內的規範模型多是有益的。與其促進的重用一致,其範圍已經減小。經過「基於優勢的重用」方法,新興模型優於預約模型。團隊能夠就通訊模型達成一致,以決定微服務如何在其設計環境以外進行調整以供使用。若是現有的微服務API不適合您的域或「業務組」,那麼構建另外一個微服務可能會更好。

-Alison Jarris

瞭解您將來的架構或將來架構

Alt Text

  • 單一目的 - 每項服務應專一於一個目的並作得好。
  • 鬆耦合 - 服務彼此知之甚少。對一項服務的更改不該要求更改其餘服務。服務之間的通訊應僅經過公共服務接口進行。
  • 高內聚性 - 每項服務將全部相關行爲和數據封裝在一塊兒。若是咱們須要構建新功能,則全部更改應僅本地化爲一個服務。

擴展立方體

Scale Cube,由Martin L. Abbott和Michael T. Fisher定義。該模型解釋瞭如何經過實施三維方法實現無限擴展。

「可伸縮性藝術」一書描述了三維可伸縮性模型:比例立方體。微服務架構是在比例立方體上應用Y軸縮放。

•	水平復制和克隆(X軸)
•	功能分解和分割 - 微服務(Y軸)
•	水平數據分區 - 碎片(Z軸)

Alt Text

Scale Cube(圖片提供:microservices.io)

微服務-VS-SOA

Alt Text

微服務-VS-API

API是標準化的包裝器,它建立了一個接口,微服務能夠經過該接口進行打包和浮出水面。這使得API成爲微服務架構(如安全性,治理和重用)關鍵問題的邏輯執行點。由於API可以容納這些問題,因此它們被認爲是微服務架構(mulesoft)的基礎組件。微服務設計爲在內部使用,而API則用於向外界公開功能。

微服務-VS-Miniservice

Miniservices被稱爲實用的微服務。您能夠更快地開始使用它們,並選擇對您的團隊有意義的部分。

「[miniservice]就像一組微服務在一個小模式中彙集在一塊兒。」 — Ross Garrett

每一個微服務必須處理本身的數據,miniservices能夠共享數據。「 — Arnaud Lauret

不要將架構優雅性與商業價值混爲一談。「 — Ross Garrett

利用對我有意義並得到大部分功能優點的實踐,「 says Ross Garrett.

微服務-VS-Nanoservices

Nanoservice是一種反模式,其服務太細粒度。nanoservice是一種服務,其開銷(通訊,維護等)超過其效用。

什麼是界限上下文

DDD經過將大型模型劃分爲不一樣的有界上下文並明確其相互關係來處理大型模型。 Martin fowler

微服務應該有多大:它應該有一個明肯定義的有界上下文,使咱們可以在沒必要考慮或交換上下文的狀況下工做。

如何識別界限上下文?

微服務成功案例

Alt Text


編排 vs 編舞

Service orchestration

全部參與服務之間的關係由單個端點描述

Service Choreography

服務編排是參與服務的全局描述,其經過消息交換,交互規則和兩個或多個端點之間的協議來定義。編舞採用分散的方法進行服務組合。

來自stack的andrei

「咱們經過使用控制業務邏輯的上帝服務(具備全局視角)或微服務基本上傳遞消息的編排方法來解決咱們的微服務問題。在微服務架構中,編排比編舞更受歡迎。」

協調,微服務

  • Conductor是一個編排引擎(Netflix編排框架)
  • Zeebe是用於分佈式微服務的新型開源編排引擎。它容許用戶使用BPMN直觀地定義編排流程。Zeebe具備水平可擴展性和容錯能力,所以您能夠在事件發生時可靠地處理全部事務。

若是您建立本身的業務流程,請記住:


理論

Alt Text

文章和論文


講座

教程

圖書

  • Building Microservices 🔸PDF - Building Microservices: Designing Fine-grained Systems. Sam Newman. Preview Edition.
  • Microservice Architecture: Aligning Principles, Practices, and Culture - Practical advice for the strategy and design of Microservices.
  • Microservices in Action - A practical book about building and deploying microservice-based applications.
  • Microservice Patterns - Teaches how to build applications with the microservice architecture and how to refactor a monolithic application to a microservices.
  • Microservices from Theory to Practice - Microservices from Theory to Practice: Creating Applications in IBM Bluemix Using the Microservices Approach. IBM Redbooks publication.
  • Migrating to Cloud Native Application Architectures - This O’Reilly report defines the unique characteristics of cloud native application architectures such as microservices and twelve-factor applications.
  • Testing Microservices with Mountebank - Provides a testing strategy using mountebank for service virtualization, promoting independent releases of Microservices
  • The Art of Scalability - The Art of Scalability: Scalable Web Architecture, Processes, and Organizations for the Modern Enterprise. Martin L. Abbott, Michael T. Fisher.
  • The New Stack eBook Series - A Comprehensive Overview of the Docker and Container Ecosystem.
    • Book 1: The Docker Container Ecosystem.
    • Book 2: Applications & Microservices with Docker & Containers.
    • Book 3: Automation & Orchestration with Docker & Containers.
    • Book 4: Network, Security & Storage with Docker & Containers.
    • Book 5: Monitoring & Management with Docker & Containers.
  • The Tao of Microservices - Teaches the path to understanding how to apply microservices architecture with your own real-world projects.

網站

微服務學習筆記

資源列表


微服務視頻

Alt Text

No about url
1 What are the Advantages of Microservices? - Sam Newman - https://www.youtube.com/watch?v=KV3j3MZTXgk
2 Design Microservice Architectures the Right Way - https://www.youtube.com/watch?v=j6ow-UemzBc
3 Mastering Chaos - A Netflix Guide to Microservices - https://www.youtube.com/watch?v=CZ3wIuvmHeM
4 API Academy Microservices Boot Camp @ CA World: Designing a Microservices Architecture -https://www.youtube.com/watch?v=iZNSPKxAd5w
5 Data Strategies for Microservice Architectures - https://www.youtube.com/watch?v=n_V8hBRoshY
6 Refactor your Java EE application using Microservices and Containers by Arun Gupta -https://www.youtube.com/watch?v=iJVW7v8O9BU
7 Principles Of Microservices by Sam Newman s -https://www.youtube.com/watch?v=PFQnNFe27kU
8 PGOTO 2016 • Appsec and Microservices • Sam Newman - https://www.youtube.com/watch?v=wlt7nCRWx_w
9 Avoiding Microservice Megadisasters - Jimmy Bogard - https://www.youtube.com/watch?v=gfh-VCTwMw8
10 10 Tips for failing badly at Microservices by David Schmitz - https://www.youtube.com/watch?v=X0tjziAQfNQ
11 Lessons from the Birth of Microservices at Google - https://www.youtube.com/watch?v=Fz1PoXqxAZc
12 Event Sourcing You are doing it wrong by David Schmitz - https://www.youtube.com/watch?v=GzrZworHpIk
13 The hardest part of microservices is your data - https://www.youtube.com/watch?v=MrV0DqTqpFU
14 Data Design and Modeling for Microservices - https://www.youtube.com/watch?v=KPtLbSEFe6c
15 The Art of Discovering Bounded Contexts by Nick Tune - https://www.youtube.com/watch?v=ez9GWESKG4I
16 The challenges of migrating 150+ microservices to Kubernetes -Sarah Wells (Financial Times) - https://www.youtube.com/watch?v=fgI3cOdv87I&feature=youtu.be
17 Revitalizing Aging Architectures with Microservices - https://www.youtube.com/watch?v=SPGCdziXlHU

微服務模式

No about url
1 Developing Microservices with Aggregates Chris Richardson - https://www.infoq.com/presentations/aggregates-modular-microservices
2 Top 5+ Microservices Architecture and Design Best Practices Ajitesh Kumar - https://dzone.com/articles/top-5-microservices-architecture-and-design-best-p
3 Microservices: Patterns and Practices Panel C. Richardson, R. Shoup, L. Ryan, R. Tangirala, and R. Schloming participate in a discussion on microservices and the challenges faced at scale, the strategies to use and more. -https://www.infoq.com/presentations/microservices-patterns-practices-panel
4 Microservices Patterns Red Hat Videos - https://www.youtube.com/watch?v=_YzzxrSIQGw
5 7 Microservice Patterns Explained (Ivar Grimstad) - https://www.youtube.com/watch?v=4IFVBfLBl1Y
6 Three Microservice Patterns to Tear Down Your Monoliths - https://www.youtube.com/watch?v=84W9iY3CwdQ
7 14 Architectural patterns for microservice development - https://www.youtube.com/watch?v=yVZS1HZrlEw
8 Reducing Microservices Architecture Complexity with Istio and Kubernetes - https://www.youtube.com/watch?v=k42jqkjtYKY
9 Developing Microservices with Aggregates - https://www.infoq.com/presentations/aggregates-modular-microservices
10 The Seven Deadly Sins of Microservices by Daniel Bryant - https://www.youtube.com/watch?v=Jw6TYEb1Opw
11 Microservices Anti-Patterns - https://www.youtube.com/watch?v=I56HzTKvZKc

代碼示例

Alt Text

No url
1 - https://github.com/vaquarkhan/microservice-poc
2 - https://github.com/vaquarkhan/robot-shop
3 - https://github.com/vaquarkhan/awesome-microservices
4 - https://github.com/vaquarkhan/microservice-docker-project
5 - https://github.com/vaquarkhan/flowing-retail-microservice-kafka
6 - https://github.com/vaquarkhan/spring-boot-microservices-series
7 - https://github.com/vaquarkhan/A-curated-list-of-Microservice
8 - https://github.com/vaquarkhan/sample-spring-microservices
9 - https://github.com/vaquarkhan/microservice-kafka
10 - https://github.com/vaquarkhan/oreilly-building-microservices-training
11 - https://github.com/vaquarkhan/micromono
12 - https://github.com/vaquarkhan/spring-cloud-microservice-example
13 - https://github.com/vaquarkhan/jwt-microservices-JavaRoadStorm2016
14 - https://github.com/vaquarkhan/micro
15 - https://github.com/vaquarkhan/microservices-centralized-configuration
16 - https://github.com/vaquarkhan/micro-company
17 - https://github.com/vaquarkhan/PiggyMetrics-microservice-poc
18 - https://github.com/vaquarkhan/spring-cloud-microservice
19 - https://github.com/vaquarkhan/CQRS-microservice-sampler
20 - https://github.com/vaquarkhan/Microservices-Deployment-Cookbook
21 - https://github.com/vaquarkhan/storyteller-microservices
22 - https://github.com/vaquarkhan/microservice-security
23 - https://github.com/vaquarkhan/microservices-demo
24 - https://github.com/vaquarkhan/spring-cloud-microservices-ELKStack
25 - https://github.com/vaquarkhan/event-stream-processing-microservices
26 - https://github.com/vaquarkhan/FraudDetection-Microservices-gemfire
27 - https://github.com/vaquarkhan/microservice-sampler
28 - https://github.com/vaquarkhan/microserviceApplication
29 - https://github.com/vaquarkhan/Microservices-With-Spring-Student-Files
30 - https://github.com/vaquarkhan/spring-boot-netflix-microservice-demo
31 - https://github.com/vaquarkhan/spring-netflix-oss-microservices
32 - https://github.com/vaquarkhan/rest-microservices
33 - https://github.com/vaquarkhan/cloud-native-microservice-strangler-example
34 - https://github.com/vaquarkhan/microservices-SpringCloud-netflix
35 - https://github.com/vaquarkhan/knowledge-driven-microservice
36 - https://github.com/vaquarkhan/event-driven-microservices-platform
37 - https://github.com/vaquarkhan/devnexus-microservice-sample
38 - https://github.com/vaquarkhan/microservices
39 - https://github.com/vaquarkhan/Spring-Microservices
40 - https://github.com/vaquarkhan/bootiful-microservices
41 - https://github.com/vaquarkhan/vk-microservices-with-spring-cloud
42 - https://github.com/vaquarkhan/cf-SpringBootTrader-microservice
43 - https://github.com/vaquarkhan/Refactor-monolith-to-microservices
44 - https://github.com/vaquarkhan/microservices-dashboard
45 - https://github.com/vaquarkhan/microservice-camel-in-action
46 - https://github.com/vaquarkhan/cloud-native-app-microservice-labs
47 - https://github.com/vaquarkhan/spring-boot-8-microservices
48 - https://github.com/vaquarkhan/building-microservices
49 - https://github.com/vaquarkhan/spring-doge-microservice
50 - https://github.com/vaquarkhan/microservice-service-registration-and-discovery
51 - https://github.com/ewolff/microservice
52 - https://github.com/semplify/Reactive-Microservice-Training
53 - https://gitlab.com/training-microservices-2018-06
54 - https://github.com/vaquarkhan/train-ticket
55 - https://github.com/cer/event-sourcing-examples
56 - https://github.com/finn-no/Docker-and-Microservices
57 - https://github.com/nielskrijger/auth-server
58 - https://developer.github.com/v3/repos/
59 - https://github.com/vaquarkhan/ftgo-application
60 - https://github.com/IBM/GameOn-Java-Microservices-on-Kubernetes

微服務反模式

Alt Text

No about url
1 Don’t Build a Distributed Monolith - https://www.microservices.com/talks/dont-build-a-distributed-monolith/
2 In this talk from the API360 Microservices Summit in New York, June 2016, Vijay Alagarasan of Asurion explores lessons learned and anti-patterns to avoid when implementing microservices. - https://www.apiacademy.co/resources/videos/api360-microservices-summit-microservices-anti-patterns
3 Microservices Anti-Patterns - https://vimeo.com/198927025
4 Microservices Anti-Patterns - https://vimeo.com/118020043
5 API360 Microservices Summit – Microservices Antipatterns – Vijay Alagarasan, Asurion - https://www.youtube.com/watch?v=uTGIrzzmcv8
6 Stefan Tilkov - Microservices Patterns and Anti-patterns - https://www.youtube.com/watch?v=VaYmRe104HU
7 10 Tips for failing badly at Microservices by David Schmitz - https://www.youtube.com/watch?v=X0tjziAQfNQ
8 10 Tips for failing badly at Microservices by David Schmitz -https://www.oreilly.com/library/view/microservices-antipatterns-and/9781491963937/video255789.html

文章 連接

No about url
1 Twitter - https://developer.twitter.com/en/docs
2 Facebook - https://developer.twitter.com/en/docs
3 LinkedIn - https://www.linkedin.com/developers#
4 Google - https://developers.google.com/+/web/api/rest/latest/activities/list
8 Microservices in Practice - Key Architectural Concepts of an MSA - https://wso2.com/whitepapers/microservices-in-practice-key-architectural-concepts-of-an-msa/
9 Guidelines for Designing Microservices - https://medium.com/@WSO2/guidelines-for-designing-microservices-71ee1997776c
10 Microservices Resource Guide - https://www.martinfowler.com/microservices/
10 5 guiding principles you should know before you design a microservice - https://opensource.com/article/18/4/guide-design-microservices
11 Pattern: Microservice Architecture - https://microservices.io/patterns/microservices.html
12 Scaling Uber from 1 to 100s of Services - https://www.microservices.com/talks/scaling-uber-from-1-to-100s-of-services/
13 tagged by: domain driven design - https://martinfowler.com/tags/domain%20driven%20design.html
14 DDD - The Bounded Context Explained - http://blog.sapiensworks.com/post/2012/04/17/DDD-The-Bounded-Context-Explained.aspx
15 MicroservicePrerequisites - https://martinfowler.com/bliki/MicroservicePrerequisites.html
16 DevOpsCulture - https://martinfowler.com/bliki/DevOpsCulture.html
17 What are Cloud-Native Applications? - https://pivotal.io/cloud-native
18 JSONP - https://stackoverflow.com/questions/2067472/what-is-jsonp-all-about
19 Microservices architecture style - https://docs.microsoft.com/en-us/azure/architecture/guide/architecture-styles/microservices
20 Microservices architecture - https://samnewman.io/talks/principles-of-microservices/
21 Designing microservices: Identifying microservice boundaries - https://docs.microsoft.com/en-us/azure/architecture/microservices/microservice-boundaries
22 DDD Strategic Patterns: How to Define Bounded Contexts - https://dzone.com/articles/ddd-strategic-patterns-how-to-define-bounded-conte
23 Microservices - https://martinfowler.com/articles/microservices.html
24 Daniel Jacobson on Ephemeral APIs and Continuous Innovation at Netflix - https://www.infoq.com/news/2015/11/daniel-jacobson-ephemeral-apis
25 Versioning - https://cloud.google.com/apis/design/versioning
26 Semantic Versioning 2.0.0 -https://semver.org/
27 RESTful API Design. Best Practices in a Nutshell. - https://blog.philipphauer.de/restful-api-design-best-practices/
28 Rest API Tutorial - https://restfulapi.net/resource-naming/
29 REST API Design - Resource Modeling -https://www.thoughtworks.com/insights/blog/rest-api-design-resource-modeling
30 Improve time to market with microservices -https://www.ibm.com/cloud/garage/architectures/microservices?cm_sp=Blog-_-blogcta-_-ArchCenter
31 Digital Applications using a Microservice Architecture -https://github.com/ibm-cloud-architecture/refarch-cloudnative

微服務之罪

No about url
1 Seven Microservices Anti-patterns - https://www.infoq.com/articles/seven-uservices-antipatterns
2 Microservices Anti-patterns: It’s All About the People - https://opencredo.com/blogs/microservices-anti-patterns-its-all-about-the-people/
3 The 7 Deadly Sins of Microservices - https://opencredo.com/blogs/7-deadly-sins-of-microservices/
4 Microservices? Please, Don't - https://dzone.com/articles/microservices-please-dont
5 How Anti-Patterns Can Stifle Microservices Adoption in the Enterprise - https://blog.appdynamics.com/engineering/how-to-avoid-antipatterns-with-microservices/

微服務失敗的案例

針對與微服務基礎設施相關的公共失敗的故事彙編列表。

TBD


API-的設計指南

  1. 在考慮消費者的狀況下構建API  - 做爲產品自己。

    • 不適用於特定的UI。
    • 擁抱每一個端點的靈活性/可調性(參見#5,6和7)。
    • 吃你本身的狗食,即便你必須模擬一個示例UI。
  2. 使用Collection Metaphor。

    • 每一個資源有兩個URL(端點):
      • 資源集合(例如/訂單)
      • 集合中的單個資源(例如/ orders / {orderId})。
    • 使用複數形式('order'而不是'order')。
    • 具備ID做爲URL節點的備用資源名稱(例如/ orders / {orderId} / items / {itemId})
    • 保持網址儘量短。優選地,每一個URL不超過三個節點。
  3. 使用名詞做爲資源名稱(例如,不要在URL中使用動詞)。

  4. 使資源表示有意義。

    • 「沒有無心義的ID!「響應中沒有嵌入無心義的ID。使用連接和引用對象。
    • 設計資源表示。不要簡單地展現數據庫表內容。
    • 合併表示。不要將關係表公開爲兩個ID。
  5. 支持對集合進行過濾,排序和分頁。

  6. 支持連接擴展關係。容許客戶端經過包含其餘表示而不是連接或擴展連接來擴展響應中包含的數據。

  7. 支持對資源的實地剪裁。容許客戶端減小響應中返回的字段數。

  8. 使用HTTP方法名稱來表示某些內容:

    • POST  - 建立和其餘非冪等操做。
    • PUT  - 更新。
    • GET  - 獲取資源或集合。
    • DELETE - 刪除資源或集合。
  9. 使用有意義的HTTP狀態代碼。

    • 200 - 成功。
    • 201 -建立。成功建立新資源後返回。包含「位置」標題,其中包含指向新建立資源的連接。
    • 400 - 誤的請求。數據問題,例如無效的JSON等。
    • 404 -未找到。在GET上找不到資源。
    • 409 - 衝突。將發生重複數據或無效數據狀態。
  10. 將ISO 8601時間點格式用於表示中的日期。

  11. 經過利用連接策略來考慮連通性。一些流行的例子是:

  12. 使用 OAuth2 保護您的API。

    • 使用承載令牌進行身份驗證。
    • TTPS / TLS / SSL才能訪問您的API。OAuth2持有者令牌須要它。經過HTTP進行的非加密通訊容許簡單的竊聽和模擬。
  13. 使用Content-Type協商來描述傳入的請求有效負載。

    例如,假設您正在評級,包括豎起大拇指縮小和五星評級。您有一條路線能夠建立評級: POST /ratings

    區分傳入數據和服務,以便肯定它是哪一種評級類型:豎起大拇指仍是五星級?

    爲每種評級類型建立一條路線: POST /ratings/five_star and POST /ratings/thumbs_up

    可是,經過使用Content-Type協商,咱們能夠對兩種類型使用相同的POST /評級路由。經過將請求上的Content-Type標頭設置爲Content-Type:application / vnd.company.rating.thumbsup或Content-Type:application / vnd.company.rating.fivestar,服務器能夠肯定如何處理傳入的評級數據。

  14. 版本化的演變。可是,若是是版本控制,請使用Accept標頭而不是URL中的版本控制。

    • 經過URL進行版本控制表示「平臺」版本,而且必須同時對整個平臺進行版本控制以啓用連接策略。
    • 經過Accept標頭進行版本控制是對資源進行版本控制。
    • 添加JSON響應不須要版本控制。可是,添加到「必需」的JSON請求主體很麻煩 - 可能須要進行版本控制。
    • 超媒體連接和版本控制不管如何都很麻煩 - 最小化它。
    • 請注意,URL中的版本雖然不鼓勵,但能夠用做「平臺」版本。它應該顯示爲路徑中的第一個節點,而不是不一樣版本的單個端點(例如api.example.com/v1 / ...)。
  15. 考慮緩存能力。至少應使用如下響應標頭:

    • ETag  - 表示版本的任意字符串。確保在哈希值中包含媒體類型,由於這會產生不一樣的表示形式。(例如:ETag:「686897696a7c876b7e」)
    • 日期 - 返回響應的日期和時間(RFC1123格式)。(例如:日期:太陽報,1994年11月6日08:49:37 GMT)
    • Cache-Control  - 能夠緩存響應的最大秒數(最大年齡)。可是,若是響應不支持緩存,則no-cache是​​值。(例如:Cache-Control:360或Cache-Control:no-cache)
    • Expires  - 若是給出max age,則包含響應到期時的時間戳(RFC1123格式),即Date(例如now)加上max age的值。若是響應不支持緩存,則此標頭不存在。(例如:Expires:Sun,1994年11月6日08:49:37 GMT)
    • Pragma  - 當Cache-Control爲'no-cache'時,此標頭也設置爲'no-cache'。不然,它不存在。(例如:Pragma:no-cache)
    • Last-Modified  - 最後修改資源自己的時間戳(採用RFC1123格式)。(例如:Last-Modified:Sun,1994年11月6日08:49:37 GMT)
  16. 確保您的GET,PUT和DELETE操做都是 冪等. 操做不該產生不良反作用。


REST的API-的設計指南

這些指南旨在支持真正的RESTful API。如下是一些例外狀況:

RESTful URLs

RESTful URL的通常準則

  • URL標識資源。
  • 網址應包含名詞,而不是動詞。
  • 使用複數名詞只是爲了一致性(沒有單數名詞)。
  • Use HTTP verbs (GET, POST, PUT, DELETE) to operate on the collections and elements.
  • 您不該該比資源/標識符/資源更深刻。
  • 將版本號放在URL的基礎,例如 http://example.com/v1/path/to/resource.
  • URL v. header:
    • 若是它更改了您編寫的邏輯以處理響應,請將其放入URL中。
    • 若是它沒有更改每一個響應的邏輯,例如OAuth信息,請將其放在header中。
  • 在逗號分隔列表中指定可選字段。
  • 格式應採用api / v2 / resource / {id} .json的形式

好的URL示例

錯誤的URL示例

HTTP動詞

應使用HTTP謂詞或方法,以符合HTTP / 1.1標準下的定義。對錶示採起的行動將與正在處理的媒體類型及其當前狀態有關。如下是HTTP謂詞如何映射到特定上下文中的建立,讀取,更新,刪除操做的示例:

HTTP METHOD POST GET PUT DELETE
CRUD OP CREATE READ UPDATE DELETE
/dogs Create new dogs List dogs Bulk update Delete all dogs
/dogs/1234 Error Show Bo If exists, update Bo; If not, error Delete Bo

(Web應用程序設計示例,做者:Brian Mulloy,Apigee。)

響應

  • 鍵中沒有值
  • 沒有內部特定的名稱(例如「節點」和「分類術語」)
  • 元數據應僅包含響應集的直接屬性,而不包含響應集成員的屬性

好的例子

鍵中沒有值:

"tags": [
  {"id": "125", "name": "Environment"},
  {"id": "834", "name": "Water Quality"}
],

壞的例子

鍵中的值:

"tags": [
  {"125": "Environment"},
  {"834": "Water Quality"}
],

錯誤處理

錯誤響應應包括常見的HTTP狀態代碼,開發人員的消息,最終用戶的消息(適當時),內部錯誤代碼(對應於某些特定的內部肯定的ID),開發人員能夠找到更多信息的連接。例如:

{
  "status" : 400,
  "developerMessage" : "Verbose, plain language description of the problem. Provide developers
   suggestions about how to solve their problems here",
  "userMessage" : "This is a message that can be passed along to end-users, if needed.",
  "errorCode" : "444444",
  "moreInfo" : "http://www.example.gov/developer/path/to/help/for/444444,
   http://drupal.org/node/444444",
}

使用三個簡單的常見響應代碼,表示(1)成功,(2)因爲客戶端問題致使的故障,(3)因爲服務器端問題致使的故障:

  • 200 - OK
  • 400 - 壞的請求
  • 500 - 服務器內部錯誤

版本化

  • 永遠不要在沒有版本號的狀況下發布API。
  • 版本應爲整數,而不是十進制數,前綴爲「v」。例如:
    • Good: v1, v2, v3
    • Bad: v-1.1, v1.2, 1.3
  • 維護至少一個歷史版本的API。

記錄限制

  • 若是未指定限制,則返回具備默認限制的結果。
  • 要獲取記錄51到75,請執行如下操做:

有關記錄限制和總可用計數的信息也應包含在響應中。例:

{
    "metadata": {
        "resultset": {
            "count": 227,
            "offset": 25,
            "limit": 25
        }
    },
    "results": []
}

請求和響應示例

API資源

GET /magazines

例子: http://example.gov/api/v1/magazines.json

響應體:

{
    "metadata": {
        "resultset": {
            "count": 123,
            "offset": 0,
            "limit": 10
        }
    },
    "results": [
        {
            "id": "1234",
            "type": "magazine",
            "title": "Public Water Systems",
            "tags": [
                {"id": "125", "name": "Environment"},
                {"id": "834", "name": "Water Quality"}
            ],
            "created": "1231621302"
        },
        {
            "id": 2351,
            "type": "magazine",
            "title": "Public Schools",
            "tags": [
                {"id": "125", "name": "Elementary"},
                {"id": "834", "name": "Charter Schools"}
            ],
            "created": "126251302"
        }
        {
            "id": 2351,
            "type": "magazine",
            "title": "Public Schools",
            "tags": [
                {"id": "125", "name": "Pre-school"},
            ],
            "created": "126251302"
        }
    ]
}

GET /magazines/[id]

例子: http://example.gov/api/v1/magazines/[id].json

響應體:

{
    "id": "1234",
    "type": "magazine",
    "title": "Public Water Systems",
    "tags": [
        {"id": "125", "name": "Environment"},
        {"id": "834", "name": "Water Quality"}
    ],
    "created": "1231621302"
}

POST /magazines/[id]/articles

例子: Create – POST http://example.gov/api/v1/magazines/[id]/articles

響應體:

[
    {
        "title": "Raising Revenue",
        "author_first_name": "Jane",
        "author_last_name": "Smith",
        "author_email": "jane.smith@example.gov",
        "year": "2012",
        "month": "August",
        "day": "18",
        "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam eget ante ut augue scelerisque ornare. Aliquam tempus rhoncus quam vel luctus. Sed scelerisque fermentum fringilla. Suspendisse tincidunt nisl a metus feugiat vitae vestibulum enim vulputate. Quisque vehicula dictum elit, vitae cursus libero auctor sed. Vestibulum fermentum elementum nunc. Proin aliquam erat in turpis vehicula sit amet tristique lorem blandit. Nam augue est, bibendum et ultrices non, interdum in est. Quisque gravida orci lobortis... "
    }
]

Spring-Cloud-for-Microservices

Alt Text

Kubernetes-for-Microservices

TBD

Spring-Cloud-vs-Kubernetes

Alt Text

Spring Cloud

Spring Cloud爲開發人員提供了工具,能夠快速構建分佈式系統中的一些常見模式,例如配置管理,服務發現,斷路器,路由等。它構建於用Java開發人員編寫的基於Java的Netflix OSS庫之上(如今還有ali oss)。

優勢

  • Spring Platform自身提供的統一編程模型和Spring Boot的快速應用程序建立功能爲開發人員提供了良好的微服務開發體驗。例如,只需不多註釋,您就能夠建立一個配置服務器,只須要幾個註釋,就能夠得到客戶端庫來配置您的服務。

  • 有大量的庫能夠解決大多數運行時問題。因爲全部庫都是用Java編寫的,所以它提供了多種功能,更好的控制和微調選項。

  • 不一樣的Spring Cloud庫彼此很好地集成在一塊兒。例如,Feign客戶端還將使用Hystrix進行電路中斷,使用Ribbon進行負載均衡請求。一切都是註釋驅動,使Java開發人員易於開發。

缺點

  • Spring Cloud的一個主要優勢也是它的缺點 - 它僅限於Java。MSA的一個強大動機是可以在須要時交換技術堆棧,庫甚至語言。Spring Cloud沒法作到這一點。若是您想要使用Spring Cloud / Netflix OSS基礎結構服務,例如配置管理,服務發現或負載平衡,那麼解決方案並不優雅。Netflix Prana項目實現了邊車模式,以經過HTTP公開基於Java的客戶端庫,使得以非JVM語言編寫的應用程序能夠存在於NetflixOSS生態系統中,但它並非很是優雅。

  • Java開發人員須要關心和處理Java應用程序的責任。每一個微服務都須要運行各類客戶端以進行配置檢索,服務發現和負載平衡。設置它們很容易,但這並不會隱藏構建時和運行時對環境的依賴性。例如,開發人員可使用@EnableConfigServer建立一個配置服務器,但這只是一個快速的路徑。每次開發人員想要運行單個微服務時,他們都須要啓動並運行Config Server。對於受控環境,開發人員必須考慮使Config Server具備高可用性,而且因爲它能夠由Git或Svn支持,所以它們須要一個共享文件系統。一樣,對於服務發現,開發人員須要首先啓動Eureka服務器。對於受控環境,他們須要在每一個AZ等上集中多個實例。感受就像Java開發人員除了實現全部功能服務以外還必須構建和管理非平凡的微服務平臺。

  • 單獨的Spring Cloud在微服務之旅中的範圍較短,開發人員還須要考慮自動部署,調度,資源管理,進程隔離,自我修復,構建管道等,以得到完整的微服務體驗。對於這一點,我認爲將Spring Cloud單獨與Kubernetes進行比較是不公平的,Spring Cloud + Cloud Foundry(或Docker Swarm)和Kubernetes之間的比較更公平。但這也意味着,對於完整的端到端微服務體驗,Spring Cloud必須補充一個像Kubernetes自己這樣的應用平臺。

Kubernetes

Kubernetes是一個開源系統,用於自動化容器化應用程序的部署,擴展和管理。它是多語言,提供配置,運行,擴展和管理分佈式系統的原語。

強處

  • Kubernetes是一個多語言和語言無關的容器管理平臺,可以運行雲原生和傳統的容器化應用程序。它提供的服務(例如配置管理,服務發現,負載平衡,度量收集和日誌聚合)能夠經過各類語言使用。這容許組織中的一個平臺可供多個團隊(包括使用Spring的Java開發人員)使用並用於多種目的:應用程序開發,測試環境,構建環境(運行源代碼控制系統,構建服務器,工件存儲庫)等。

  • 與Spring Cloud相比,Kubernetes解決了更普遍的MSA問題。除了提供運行時服務以外,Kubernetes還容許您配置環境,設置資源約束,RBAC,管理應用程序生命週期,啓用自動擴展和自我修復(Kubernetes行爲幾乎就像一個能夠抵禦混亂的自愈平臺)。

  • Kubernetes技術基於Google 15年的研發和管理容器的經驗。此外,有近1000個提交者,它是Github上最活躍的開源社區之一。

弱點

  • Kubernetes是多語言,所以,它的服務和原語是通用的,並無針對不一樣的平臺進行優化,例如Spring Cloud for JVM。例如,配置做爲環境變量或已安裝的文件系統傳遞給應用程序。它沒有Spring Cloud Config提供的精美配置更新功能。

  • Kubernetes不是一個專一於開發人員的平臺。它旨在供具備DevOps意識的IT人員使用。所以,Java開發人員須要學習一些新概念,並樂於學習解決問題的新方法。儘管使用MiniKube啓動Kubernetes的開發人員實例很是容易,可是手動安裝高可用性Kubernetes集羣會產生大量的操做開銷。

  • Kubernetes仍然是一個相對較新的平臺(2年),它仍在積極開發和發展。所以,每一個版本都添加了許多可能難以跟上的新功能。好消息是已經設想了這個,而且API是可擴展和向後兼容的。

From Bilgin Ibryam Article



Mock服務

建議每一個資源在測試服務器上接受'mock'參數。傳遞此參數應返回模擬數據響應(繞事後端)。
在開發早期實現此功能可確保API表現出一致的行爲,支持測試驅動的開發方法。
注意:若是mock參數包含在對生產環境的請求中,則應引起錯誤。
 


API接口文檔

  • Aglio - API Blueprint renderer with theme support that outputs static HTML.
  • API Blueprint - Tools for your whole API lifecycle. Use it to discuss your API with others. Generate documentation automatically. Or a test suite. Or even some code.
  • Apidoc - Beautiful documentation for REST services.
  • RAML - RESTful API Modeling Language, a simple and succinct way of describing practically-RESTful APIs.
  • Slate - Beautiful static documentation for your API.
  • Spring REST Docs - Document RESTful services by combining hand-written documentation with auto-generated snippets produced with Spring MVC Test.
  • Swagger - A simple yet powerful representation of your RESTful API.

安全

  • Crtauth - A public key backed client/server authentication system.
  • Dex - Opinionated auth/directory service with pluggable connectors. OpenID Connect provider and third-party OAuth 2.0 delegation.
  • JWT - JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.
  • Keycloak - Full-featured and extensible auth service. OpenID Connect provider and third-party OAuth 2.0 delegation.
  • Light OAuth2 - A fast, lightweight and cloud native OAuth 2.0 authorization microservices based on light-java.
  • Login With - Stateless login-with microservice for Google, FB, Github, and more.
  • OAuth - Provides specific authorization flows for web applications, desktop applications, mobile phones, and living room devices. Many implementations.
  • OpenID Connect - Libraries, products, and tools implementing current OpenID specifications and related specs.
  • OSIAM - Open source identity and access management implementing OAuth 2.0 and SCIMv2.
  • SCIM - System for Cross-domain Identity Management.
  • Vault - Secures, stores, and tightly controls access to tokens, passwords, certificates, API keys, and other secrets in modern computing.
  • RFC5246 - The Transport Layer Security (TLS) Protocol Version 1.2.
  • RFC6066 - TLS Extensions.
  • RFC6347 - Datagram Transport Layer Security Version 1.2.
  • RFC6749 - The OAuth 2.0 authorization framework.
  • RFC7515 - JSON Web Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures.
  • RFC7519 - JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties.
  • RFC7642 - SCIM: Definitions, overview, concepts, and requirements.
  • RFC7643 - SCIM: Core Schema, provides a platform-neutral schema and extension model for representing users and groups.
  • RFC7644 - SCIM: Protocol, an application-level, REST protocol for provisioning and managing identity data on the web.
  • OIDCONN - OpenID Connect 1.0 is a simple identity layer on top of the OAuth 2.0 protocol. It allows clients to verify the identity of the end-user based on the authentication performed by an Authorization Server, as well as to obtain basic profile information about the end-user in an interoperable and REST-like manner.

序列化

  • Avro - Apache data serialization system providing rich data structures in a compact, fast, binary data format.
  • BooPickle - Binary serialization library for efficient network communication. For Scala and Scala.js
  • Cap’n Proto - Insanely fast data interchange format and capability-based RPC system.
  • CBOR - Implementations of the CBOR standard (RFC 7049) in many languages.
  • Cereal - C++11 library for serialization.
  • Cheshire - Clojure JSON and JSON SMILE encoding/decoding.
  • Etch - Cross-platform, language and transport-independent framework for building and consuming network services.
  • Fastjson - Fast JSON Processor.
  • Ffjson - Faster JSON serialization for Go.
  • FST - Fast java serialization drop in-replacemen.
  • Jackson - A multi-purpose Java library for processing JSON data format.
  • Jackson Afterburner - Jackson module that uses bytecode generation to further speed up data binding (+30-40% throughput for serialization, deserialization).
  • Kryo - Java serialization and cloning: fast, efficient, automatic.
  • MessagePack - Efficient binary serialization format.
  • Protostuff - A serialization library with built-in support for forward-backward compatibility (schema evolution) and validation.
  • SBinary - Library for describing binary formats for Scala types.
  • Thrift - The Apache Thrift software framework, for scalable cross-language services development.

存儲

  • Apache Hive - Data warehouse infrastructure built on top of Hadoop.
  • Apache Cassandra - Column-oriented and providing high availability with no single point of failure.
  • Apache HBase - Hadoop database for big data.
  • Aerospike ![c] - High performance NoSQL database delivering speed at scale.
  • ArangoDB - A distributed free and open source database with a flexible data model for documents, graphs, and key-values.
  • AtlasDB - Transactional layer on top of a key value store.
  • ClickHouse - Column-oriented database management system that allows generating analytical data reports in real time.
  • CockroachDB ![c] - A cloud-native SQL database modelled after Google Spanner.
  • Couchbase - A distributed database engineered for performance, scalability, and simplified administration.
  • Crate ![c] - Scalable SQL database with the NoSQL goodies.
  • Datomic - Fully transactional, cloud-ready, distributed database.
  • Druid - Fast column-oriented distributed data store.
  • Elasticsearch - Open source distributed, scalable, and highly available search server.
  • Elliptics - Fault tolerant distributed key/value storage.
  • Geode - Open source, distributed, in-memory database for scale-out applications.
  • Infinispan - Highly concurrent key/value datastore used for caching.
  • InfluxDB - Scalable datastore for metrics, events, and real-time analytics.
  • Manta - Highly scalable, distributed object storage service with integrated compute.
  • MemSQL ![c] - High-performance, in-memory database that combines the horizontal scalability of distributed systems with the familiarity of SQL.
  • OpenTSDB - Scalable and distributed time series database written on top of Apache HBase.
  • Parquet - Columnar storage format available to any project in the Hadoop ecosystem, regardless of the choice of data processing framework, data model or programming language.
  • Reborn - Distributed database fully compatible with redis protocol.
  • RethinkDB - Open source, scalable database that makes building realtime apps easier.
  • Secure Scuttlebutt - P2P database of message-feeds.
  • Tachyon - Memory-centric distributed storage system, enabling reliable data sharing at memory-speed across cluster frameworks.
  • Voldemort - Open source clone of Amazon DynamoDB
  • VoltDB ![c] - In-Memory ACID compliant distributed database.

測試

  • Goreplay - A tool for capturing and replaying live HTTP traffic into a test environment.
  • Mitmproxy - An interactive console program that allows traffic flows to be intercepted, inspected, modified and replayed.
  • Mountebank - Cross-platform, multi-protocol test doubles over the wire.
  • Spring Cloud Contract - TDD to the level of software architecture.
  • VCR - Record your test suite's HTTP interactions and replay them during future test runs for fast, deterministic, accurate tests. See the list of ports for implementations in other languages.
  • Wilma - Combined HTTP/HTTPS service stub and transparent proxy solution.
  • WireMock - Flexible library for stubbing and mocking web services. Unlike general purpose mocking tools it works by creating an actual HTTP server that your code under test can connect to as it would a real web service.

持續集成和端到端的持續交付


康威定律

「任何設計系統的組織,必然會產生如下設計結果:即其結構就是該組織溝通結構的寫照。」 -  Melvin Conway(1967)。

康威定律斷言,組織不得不製做應用程序設計,這些應用程序設計是其通訊結構的副本。這一般會致使意外的摩擦點。
 

「逆向康威機動」建議改進您的團隊和組織結構,以促進您所需的架構。理想狀況下,您的技術架構將與您的業務架構顯示同構。

「微服務」: - 「微服務咱們主要遵循域驅動的方法,咱們的想法是創建一個跨職能的團隊。」


Alt Text

靈感來自於 coming soon....


此瀏覽器不支持PDF。請下載微服務IBM紅皮書PDF以查看它:Download PDF.


Alt Text

相關文章
相關標籤/搜索